アーキテクチャごとに異なるインターフェースを一つのリファレンスに
Syscall.shは、Linuxシステムコールのリファレンスを拡充し、27種類のプロセッサアーキテクチャの表を、検索可能な一つのウェブサイトにまとめて公開した。更新されたサービスは、各アーキテクチャが使用する数値識別子、引数、レジスタの規約を記載するとともに、カーネルのインターフェースを比較する必要がある開発者向けに、リリース履歴と機械可読形式でのアクセスを追加している。
システムコールは、プログラムがLinuxカーネルにサービスを要求する際の境界となるが、その番号や呼び出し規約はアーキテクチャ間で同一ではない。x86-64ではある番号で利用できるコールが、別の環境では異なる識別子を持つ場合があり、引数を渡すために使うレジスタも変わり得る。Syscall.shはこうした詳細を統一された形式の表に示し、コール番号、最大六つの引数、カーネルに制御を移す命令、戻り値の格納場所を掲載している。
サイトによると、対応範囲はメインラインLinuxのバージョン3.3から7.3までだが、記録されている最初のリリースはアーキテクチャによって異なる。各アーキテクチャのページにはカーネルの選択機能があり、特定バージョンの表を閲覧できる。各項目には、走査対象のリリースのうち、そのコールが最初に現れたものと、該当する場合には削除されたバージョンが記録されている。削除された項目を含めるオプションを使えば、なくなったコールも参照できるため、現在の開発だけでなく互換性の調査にも役立つリファレンスとなっている。
同じ情報は、アーキテクチャ別のパスでJSONとしても提供される。これにより、ツールの開発者はウェブ画面をスクレイピングせずに表のデータを利用できる。このサービスには、リリースの選択や変更点の比較を行うAPIもある。人が読むためのリファレンスであると同時に、デバッガー、セキュリティツール、互換性レイヤー、低レベル技術の教材に使えるデータソースとしての位置付けだ。
プロジェクトによれば、表は手作業で作成するのではなく、カーネルのソースコードから生成される。生成ツールは、走査対象のメインラインリリースにわたり、アーキテクチャ別のシステムコール表と、カーネルのシステムコール定義マクロを読み取る。短い説明文はLinux man-pagesプロジェクトから採用し、io_uringの説明はliburingから取得する。基となるシステムコールのデータが変わると、サイトが再ビルドされる。
この生成方法は転記作業を減らすが、利用者はバージョン欄の解釈に引き続き注意する必要がある。あるアーキテクチャで最初に走査されたリリースにコールが存在すると記されていても、そのリリースで初めて導入されたことを意味するわけではない。実際には、はるかに古い可能性がある。したがって、このプロジェクトの履歴はソースコードの走査範囲に限られ、すべてのLinuxインターフェースの起源を完全に記録するものではない。
今回の更新は、本来ならカーネルのソースファイルやアーキテクチャの資料を行き来して調べる必要がある疑問に、開発者が手早く答えを見つける手段を提供する。実用的な価値は、生成ツールを新しいメインラインリリースに対応させ続け、解析上の制約があれば明確に示すことに左右される。それでも、閲覧可能な表、バージョン間の差分、ダウンロードできるデータの組み合わせは、Linuxの複雑な領域への有用な新しい入口となる。



