
2026/07/14 5:11
QEMU で起動可能な、慣用的な Rust に書き換えた Linux カーネル 0.11
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
このプロジェクトで最も重要な点は、
linux-0.11-rs です。これは、1991 年の歴史的な Linux 0.11 カーネルの現代的な Rust リライト版であり、QEMU でエミュレートされた i386 ハードウェア上でブートし、自律開発済みの Unix スタイルのユーザーランドを実行します。もとの実装では複雑なアセンブリを必要としたが、この実装は Linux 0.11 のセマンティクス(プロセス、要求ページングによる仮想メモリ、コピーオンライトフォーク、Minix v1 ファイルシステム、ATA ディスクドライバー、VGA/PS/2/8250 コンソール、TTY レイヤー、シグナル)を保持し、低レベルのハンドメイドなシステムコールパイプリングを、std::{fs, io, path, env, process, time} を反映した高レベル API で置き換えています。コアユーティリティ 80 コア以上と POSIX サブセットシェル(sh)をサポートしており、パイプライン、制御フロー、関数、グローブ展開、コマンド/算術置換、対話型行エディタ、タブ補完、履歴という機能を持っています。フロッピーディスクのサポートは元のアーキテクチャに合わせるためスコープ外ですが、伝統的なビルドの障壁は、ワンコマンドでのイメージビルド(tools/build-disk.sh)、ターンキーディスクイメージ、および mbrkit や miniximg のような伴走ツールによって排除されています。.devcontainer により、開発者はリポジトリをクローンし、VS Code で開き、即座に make run(または make run-console)を実行できます。QEMU 下での .ktest スクリプトは堅牢なエンドツーエンドテストを提供します。このアクセスしやすいエントリーポイントを通じて、ユーザーは標準的なツールを用いて安全な Rust エコシステム内で仮想メモリなどの基礎的な OS コンセプトを学ぶことができます。本文
Linux 0.11 カーネルのモダンな Rust リファクタリング版:linux-0.11-rs
linux-0.11-rs は、1991 年の Linux 0.11 カーネルを現代的な Rust で完全に再構築したプロジェクトです。システムの本質的な機能や動作(Semantics)を保ちつつ、表現方法を見直し、強力な型制約や明確なモジュール境界、イディオマティックな抽象化を採用しています。
エミュレーテッドな i386 ハードウェア上で起動し、フルな初期化プロセスからシェル、
coreutils スタックまでを実行します。また、ワンコマンドで独自のブート可能ディスクイメージを構築するためのツールセットも付属しています。
✨ ハイライト
-
Linux 0.11 の大部分を含むカーネル
- プロセス管理の実装
- 仮想メモリ機能:要求分页(Demand Paging)と写像フォーク(CoW fork)の実装
- ファイルシステム:Minix v1
- デバイスドライバー:ATA ディスク、VGA および PS/2 コンソール、8250 シリアルコンソール
- システム基盤:TTY レイヤー、シグナル、完全なシステムコールテーブル
-
Rust ユーザーランド向け "std"
はuser_lib
の公開インターフェースを模倣しています。std::{fs, io, path, env, process, time}- ユーザープログラムは syscall の処理 plumbing を読むのではなく、通常の Rust コードのように記述できます。
-
真のユーザーランド
- 80 個以上の coreutils と POSIX サブセットシェル(
)が含まれます。sh - 機能:パイプライン制御フロー、関数定義、グローブ展開(glob)、コマンド置換、算術置換。
- インタラクティブ要素:Tab キー補完とコマンド履歴機能を搭載したラインエディター。
- 80 個以上の coreutils と POSIX サブセットシェル(
-
ワンコマンドでのイメージ作成
コマンドで全てのユーザープログラムをコンパイルし、Unix スタイルのファイルシステムに配置してブート可能なディスクイメージにパックします。tools/build-disk.sh
-
補完イメージツール
およびmbrkit
は独立した crates であり、MBR または Minix v1 イメージを扱うプロジェクトで役立つスタンドアロンのツールです。miniximg
-
Devcontainer の付属
- Clone し VS Code で開き、「Reopen in Container」を押して
を実行するだけで開発環境が整います。make run
- Clone し VS Code で開き、「Reopen in Container」を押して
🚀 クイックスタート
以下の手順でディスクイメージを構築し、QEMU で起動します。
1. ディスクイメージの構築
全てのユーザープログラムをコンパイルし、
/etc, /dev, /bin を配置してパックします。
tools/build-disk.sh
2. カーネルのビルドと起動
QEMU でカーネルを起動します。出力デバイスを選択してください。
# VGA コンソール使用時(デフォルト) cd kernel && make run # シリアルコンソール使用時(-nographic モード) cd kernel && make run-console
3. シェルコマンドの試し
シェルプロンプトが表示された後、以下のコマンドを試してみてください。
ls /bin # ディレクトリ内容の確認 echo $((1 + 2 * 3)) # 算術展開の実行 for f in /etc/*; do echo $f; done # for ループと glob 展開のテスト # リкурレント関数の実行 fact() { if [ $1 -le 1 ]; then echo 1; else echo $(($1 * $(fact $(($1-1))))); fi; } fact 7 # → 出力: 5040 # タブ補完の確認 ec<TAB> # `echo` に自動補完される ↑ # コマンド履歴の移動
Devcontainer 外での動作
Devcontainer を使用しない場合、以下の依存関係をインストールする必要があります。
- Rust toolchain:
でピン留めされた最新の Rust nightlyrust-toolchain.toml - システムツール:
qemu-system-i386 - クロスコンパイルツール: x86_64-linux-gnu-* binutils
- ローカルテストツール: ローカルのイメージ・テスト用ツール
PATH 上にこれらのツールをインストールするには:
tools/install-tools.sh # mbrkit, miniximg, ktest をインストール
✅ テスト
エンドツーエンドのテストは、QEMU 上でカーネルをブートし、
ktest/suites/ 配下の .ktest スクリプトを使ってシリアルコンソールを操作して実行します。
# 全てのテストを実行 tools/run-tests.sh # 特定のスイートのみ実行 tools/run-tests.sh --suite=shell # 特定のテストセットのみ実行 tools/run-tests.sh --test-set=shell.basic # QEMU の再起動を抑制(再利用) tools/run-tests.sh --disable-reboot
🗂️ リポジトリ構成
カーネル本体kernel/
std スタイルのユーザーランド用ライブラリuser_lib/
proc-macro:user_lib_macros/#[user_lib::main]
coreutils およびuser_program/
シェル(約 80 ツール)sh
シリアル経由で QEMU を操作するエンドツーエンドテストランナーktest/
MBR ディスクイメージ用の CLI ツール(crates.io 入手可能)mbrkit/
Minix ファイルシステム用イメージ作成およびライブラリminiximg/
ディスクイメージのコンテンツテンプレート(rootfs/
,/etc
など)/root
開発者向けスクリプト(tools/
,build-disk.sh
など)run-tests.sh
mdbook を使用したガイドウォークスルー(進行中)tutorial/
すぐに使える開発環境設定.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 ファイルを参照してください。