プログラミング
Linux 0.11、イディオマティックRustで書き直され、QEMUでブート
Linux 0.11 rewritten in idiomatic Rust, boots in QEMU (github.com)
要約
このプロジェクトは、1991年のLinux 0.11カーネルをモダンなRustでゼロから再構築したものです。元のシステムのセマンティクス(機能)は維持しつつ、型安全性、モジュールの境界、抽象化などをRustのイディオムに合わせて再設計しています。カーネルはエミュレートされたi386ハードウェアでブートし、完全なユーザーランド(init、シェル、coreutils)を実行します。
全文翻訳
linux-0.11-rs
モダンなRustによるLinux 0.11カーネルの再構築 — QEMU上のi386でブートし、セルフホストされたUnixスタイルのユーザーランドを実行します。
$ cd kernel && make run
…
Welcome to linux-0.11-rs.
https://github.com/Poseidon-fan/linux-0.11-rs
(login: 0 @ linux-rs :: Wed May 27 09:35:43 UTC 2026)
[root@linux-rs /root]# ls /bin | wc -l
69
linux-0.11-rsは、1991年のLinux 0.11カーネルをモダンなRustでゼロから再構築しています。元のシステムのセマンティクス(何をするか)は維持しつつ、それをどのように表現するかを再考しています。より強力な型、より明確なモジュールの境界、あらゆる場所でのイディオマティックな抽象化です。
カーネルはエミュレートされたi386ハードウェアでブートし、完全なinit → シェル → coreutilsスタックを実行し、ワンコマンドで独自のブート可能なイメージをビルドするためのツールキットが付属しています。
✨ ハイライト
Linux 0.11のほとんどの機能を持つカーネル — プロセス、デマンドページングとCoW forkを備えた仮想メモリ、Minix v1ファイルシステム、ATAディスクドライバー、VGA + PS/2コンソール、8250シリアルコンソール、TTYレイヤー、シグナル、および完全なシステムコールテーブル。
Rustユーザー空間「std」 — user_libはstd::{fs, io, path, env, process, time}の公開形状をミラーリングしているため、ユーザープログラムは通常のRustのように読み込まれ、システムコール配管のように読み込まれません。
実際のユーザーランド — 80以上のcoreutilsと、パイプライン、制御フロー、関数、グロブ、コマンドおよび算術置換を備えた手書きのPOSIXサブセットシェル(sh)、およびタブ補完と履歴を備えたインタラクティブなラインエディタ。
ワンコマンドイメージ — tools/build-disk.shはすべてのユーザープログラムをコンパイルし、それらをUnixスタイルのファイルシステムに配置し、結果をブート可能なディスクイメージにパックします。
コンパニオンイメージツール — mbrkitとminiximgはスタンドアロンのクレートであり、MBRまたはMinix v1イメージに触れるあらゆるプロジェクトで単独で役立ちます。
Devcontainer付属 — クローンし、VS Codeで開き、「コンテナで再オープン」をクリックし、make runを実行します。
🚀 クイックスタート
# すべてのユーザープログラムをビルドし、/etc /dev /bin を配置し、disk.img にパックします。
tools/build-disk.sh
# カーネルをビルドし、QEMUでブートします。
cd kernel && make run
# VGAコンソール
cd kernel && make run-console
# シリアルコンソール (-nographic)
シェルプロンプトが表示されます。試してみてください。
ls /bin
# インストールされているものをブラウズします。
echo $((1 + 2 * 3))
# 算術展開
for f in /etc/*; do echo $f; done
# forループ + グロブ
fact() { if [ $1 -le 1 ]; then echo 1; else echo $(($1 * $(fact $(($1-1))))); fi; }
fact 7
# → 5040
ec<TAB>
# `echo ` に補完されます。
↑
# コマンド履歴を歩きます。
devcontainerの外では、最近のRust nightly(rust-toolchain.tomlでピン留め)、qemu-system-i386、x86_64-linux-gnu-*クロスバイナリユーティリティ、およびローカルイメージ/テストツールも必要です。
tools/install-tools.sh
# mbrkit, miniximg, ktest を PATH にインストールします。
✅ テスト
エンドツーエンドテストは、QEMUでカーネルをブートし、ktest/suites/の下の短い.ktestスクリプトからシリアルコンソールを駆動します。
tools/run-tests.sh
# すべてを実行します。
tools/run-tests.sh --suite=shell
# 1つのスイートを実行します。
tools/run-tests.sh --test-set=shell.basic
# 1つのテストを実行します。
tools/run-tests.sh --disable-reboot
# テスト間で1つのQEMUを共有します。
🗂️ リポジトリレイアウト
kernel/
カーネル自体。
user_lib/
stdスタイルのユーザー空間ライブラリ。
user_lib_macros/
proc-マクロ: #[user_lib::main]。
user_program/
約80のcoreutils + `sh` シェル。
ktest/
シリアル経由でQEMUを駆動するエンドツーエンドテストランナー。
mbrkit/
MBRディスクイメージCLI(crates.ioでも利用可能)。
miniximg/
Minix-fsイメージCLIおよびライブラリ。
rootfs/
ディスクイメージの内容テンプレート(/etc、/root、…)。
tools/
開発者スクリプト(build-disk.sh、run-tests.sh、…)。
tutorial/
mdbookウォークスルー(作業中)。
.devcontainer/
すぐに使える開発環境。
🛣️ プロジェクトステータス
カーネル — Linux 0.11に対して実質的に機能完了しています。フロッピーサポートは意図的にスコープ外です。継続的な作業は、洗練とツールに焦点を当てています。
ユーザーライブラリ — 現在のシェルとcoreutilsが必要とするものをカバーしています。
ユーザーランド — 実際のインタラクティブな作業に使用できます。
チュートリアル — 初期ドラフトです。長期計画は、ゼロから構築する完全なウォークスルーです。
📚 チュートリアル
cargo install mdbook
cd tutorial && mdbook serve --open
🙏 謝辞
開発中に重要な参照として元のLinux 0.11カーネルソースを提供してくれたyuan-xy/Linux-0.11に感謝します。
このプロジェクトの多くの部分は、rcore-os/rCore-Tutorial-v3からインスピレーションを得たり、それを参照して実装したりしました。
📄 ライセンス
LICENSEを参照してください。