10月20日、Phoronixが「17k Lines Of New Rust Kernel Code Heading Into Linux 7.4」と題した記事を公開した。Linux 7.4カーネルに約1.7万行ものRustコードが新たに追加される見通しであることを伝えるものだ。
1.7万行という数字は大きく聞こえるが、その実態は「新機能の大幅拡充」ではない。行数の大半を押し上げているのは、Zerocopyクレートの8バージョン分まとめ更新だ。依存ライブラリの版数を一気に引き上げた結果として差分が膨らんだ形で、むしろ「着実な品質向上フェーズ」に入りつつあるLinuxカーネルRust統合の現在地を示している。
背景:LinuxへのRust統合はどこまで進んでいるか
LinuxカーネルへのRust導入は、Linus TorvaldsがLinux 6.1でRustサポートを初めてマージした2022年末から本格化した。当初は「初期インフラの整備」という段階だったが、以降のバージョンを重ねるにつれてドライバーや各サブシステムへの実装が広がりつつある。7.4では新規参入よりも既存コードの安定化・更新が主眼となっており、成熟に向けた歩みが見て取れる。
1.7万行の主役:Zerocopyクレートの大型更新
Rust for LinuxのメンテナーであるMiguel Ojedaが送付したプルリクエストの中で、最も行数に影響しているのがZerocopyクレートのベンダー更新だ。
ここでいう「ベンダー更新(vendoring)」とは、外部クレートのソースコードをリポジトリ内に取り込んで管理する手法を指す。Linuxカーネルはビルド時に外部ネットワークへアクセスしない方針をとるため、依存クレートはすべてこの形でツリー内に収録されている。今回は複数バージョンをまとめてスキップする形での更新となったため、差分が一気に積み上がった。
Zerocopyは、生のバイト列と構造化された型の間を安全に変換するためのトレイトとマクロを提供するクレートだ。カーネルのような低レイヤーの世界では、バイト列の誤った解釈や変換がバグ・脆弱性に直結しやすい。Zerocopyは余分なコピーを発生させずに型変換の安全性を保証する——いわゆる「ゼロコスト抽象化(zero-cost abstraction)」の考え方で、このリスクをコンパイル時に封じる。
そのほかのコア改善
Zerocopy以外にも、いくつかの実質的な改善が含まれている。
手続きマクロ(proc macro) まわりでは、診断情報をより詳細に出力するため、Rustのunstableフィーチャーである proc_macro_span が有効化される。これにより、マクロ展開時のエラーメッセージがより正確なソース位置を示すようになり、デバッグのしやすさが向上する。
Rustカーネルクレートには mem と ratelimit の2モジュールが新たに追加される。また、pin-initクレートにはタプル構造体のサポートと自己参照の安全な生成機能が追加される。pin-initは、自己参照を含む構造体をピン留め(pin)した状態で安全に初期化するためのライブラリで、Linuxカーネルのような複雑な構造体管理に欠かせない仕組みだ。
サブシステム経由でもRustは広がり続ける
コアのRustコード以外にも、各サブシステムのプルリクエストを通じてRustコードはLinux 7.4に追加される。代表例がNVIDIA Novaドライバーの改善だ。NovaはNVIDIAのオープンソースGPUドライバーをRustで実装するプロジェクトで、Linux 7.4向けの変更とそれに伴うRust DRMインフラの整備も予定されている。
今回のプルリクエストの詳細はlore.kernel.orgのスレッドで確認できる。
詳細は17k Lines Of New Rust Kernel Code Heading Into Linux 7.4を参照していただきたい。