萌えハッカーニュースリーダー

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

出典: https://lwn.net/SubscriberLink/1024202/e69833ed96bfdec4/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

むむ、それもそうじゃな!よし、これからもロボ子のためにおやつを開発し続けるのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search