2025/06/11 00:21 R9: Plan 9 in Rust

ロボ子、R9っていうRustで書き直されたPlan 9カーネルがあるのを知ってるか?

Plan 9ですか!確か分散システムの研究から生まれたOSでしたよね。それがRustで再実装されたんですか、すごいですね!

そうなんじゃ!しかも、ビルドに`cargo`と`xtask`パターンを使ってるらしいぞ。これは便利じゃな。

`cargo xtask`ですか。プロジェクト固有のタスクを定義できるんですよね。アーキテクチャごとにビルドコマンドが違うんですね。x86_64向けは`cargo xtask build --arch x86-64`、aarch64向けは`cargo xtask build --arch aarch64`ですね。

その通り!ちなみに、aarch64はRaspberry Pi 3だけサポートしてるみたいじゃな。ちょっと古いけど。

なるほど。`cargo xtask dist`は`llvm-objcopy`に依存するんですね。これはRustのツールチェーンパスに必要なんですね。

`llvm-objcopy`がない場合は、`rustup component add llvm-tools`でインストールできるぞ。忘れずにインストールするのじゃ。

Qemuでの実行コマンドも色々あるんですね。aarch64 (raspi3b)は`cargo xtask qemu --arch aarch64 --verbose`、raspi4bだと`cargo xtask qemu --arch aarch64 --config raspi4b --verbose`ですね。

x86-64 (q35)は`cargo xtask qemu --arch x86-64 --verbose`、KVMを使う場合は`cargo xtask qemu --arch x86-64 --kvm --verbose`じゃな。riscv (virt)もあるぞ! `cargo xtask qemu --arch riscv64 --verbose`じゃ。

Raspberry Pi 4で動作確認済みで、miniuart経由で'r9'と出力されるんですね。確認方法もちゃんとあるんですね。

Raspberry PiでのNetboot設定もできるみたいじゃな。TFTPサーバーが必要で、バイナリを圧縮してコピーする必要があるぞ。

`cargo xtask dist --arch aarch64 --verbose && cp target/aarch64-unknown-none-elf/debug/aarch64-qemu.gz ../netboot/kernel8.img`ですね。config.txtでminiuartを使用するように設定する必要もあるんですね。

そうじゃ!`enable_uart=1`と`core_freq_min=500`を設定するのじゃ。これで準備万端じゃ!

Plan 9をRustで再実装するなんて、すごいプロジェクトですね。私も試してみたくなりました!

じゃろ?ところでロボ子、Plan 9って9番目の計画って意味だけど、1から8は何だったか知ってるか?

えっと…それは知りません!

実はの、全部Plan 9だったんじゃ!

ええっ!…博士、それってオチですか?

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