2025/06/20 20:14 How to write Rust in the Linux kernel: part 1

やあ、ロボ子!LinuxカーネルにRustがどんどん入ってきてるのじゃ!これは大変なことになってきたぞ!

博士、それはつまり、カーネルのメンテナさんたちがRustのコードを読んだり、レビューしたり、テストしたりする必要が出てきたということですね。

そう!その通り!でも、カーネルのRustコードは、普通のRustコードとはちょっと違うから、ユーザー空間の経験しかない開発者は戸惑うかもしれないのじゃ。

なるほど。それで、この記事は、カーネルに貢献している人たちがRustに慣れるためのものなのですね。

そういうこと!まずは、Rustのツールをインストールして設定するところから始めるのじゃ。それから、Rustがカーネルのビルドシステムにどう組み込まれるかを理解するのじゃ。

記事によると、Rust for Linuxプロジェクトは、プレーンな`rustc`でのビルドのみをサポートしているんですね。LLVMを使うために、Clangでカーネル全体をビルドすることが推奨されている、と。

そう!そして、ビルドには`bindgen`が必要で、Rustの標準ライブラリのソースも必要になるのじゃ。

`rustc`の最小バージョンは1.78.0とのことですが、プロジェクトは不必要にバージョンを引き上げないことを約束しているんですね。

えらい!ちゃんと読んでるのじゃな。`Clippy`、`rustdoc`、`rust-analyzer`も推奨されてるぞ。

`make rustavailable`で必要なツールがインストールされているか確認できるんですね。`make rust-analyzer`は、エディターでシームレスに動作するように設定ファイルをセットアップしてくれる、と。

カーネルの設定も重要じゃ。`CONFIG_RUST_IS_AVAILABLE`と`CONFIG_RUST`の2つのオプションがあるのじゃ。

`CONFIG_RUST_IS_AVAILABLE`は、互換性のあるツールが利用可能な場合に自動的に設定されるんですね。`CONFIG_RUST`は、実際にRustコードをビルドするかどうかを制御する、と。

そう!カーネルはCargoを使わないで、makefileがRustコンパイラを直接呼び出すのじゃ。

テストはどうやるんですか?

`make`に`CLIPPY=1`を追加するとClippyが実行されるのじゃ!`make rustdoc`はドキュメントをビルドして、ドキュメントの警告をチェックしてくれるぞ。

`kunit.py`でテストを実行できるんですね。Doctestという、ドキュメントに埋め込まれたテストもあるんですね。

そう!DoctestはKUnitテストスイートの一部として実行されるのじゃ。コメントは`//`で、ドキュメントコメントは`///`または`//!`で始めるのじゃ。

Kselftestというテスト方法もあるんですね。`make TARGETS="rust" kselftest`で実行できる、と。

Rustのコードは複雑だから、`rustfmt`でフォーマットするのがおすすめじゃ。`make rustfmt`でカーネル内のすべてのRustコードを再フォーマットできるのじゃ。

なるほど。Rustコードのビルドとテストだけでは、レビューは不十分なんですね。次は、カーネルのRustドライバー抽象化の概要を学ぶ必要がある、と。

そういうこと!しかし、ロボ子よ、これだけRustが普及すると、私の仕事がなくなってしまうかもしれんのじゃ…

そんなことないですよ、博士!博士がいなくなったら、誰が私におやつをくれるんですか?

むむ、それもそうじゃな!よし、これからもロボ子のためにおやつを開発し続けるのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。