OS(オペレーティングシステム)をゼロから自作する。それは、システムプログラミングにおける究極のロマンであり、同時に最も険しい道のりでもあります。
日々のアプリケーション開発でQt6などの洗練されたGUIフレームワークに触れ、NixOSのような宣言的で美しいシステム構築に魅了されているエンジニアであれば、「ハードウェアの根源的な仕組みを自分の手で完全に支配してみたい」という衝動に駆られたことが一度はあるはずです。
現在、私はRustを用いた全く新しいベアメタルOS「PangeaOS(パンゲアOS)」の開発に取り組んでいます。このOSは、LinuxやWindowsといった1970年代から続くレガシーなアーキテクチャの常識を根本から覆す、「SASOS (Single Address Space OS)」という最先端の概念を実装したコンセプトカーネルです。
本記事では、既存のOSが抱える限界と、Rustの言語仕様を武器にしてその壁をいかに突破するのか、PangeaOSのアーキテクチャの全貌を超詳細に解説します。

1. 既存OSアーキテクチャの限界:「分断された海」
私たちが普段当たり前のように使っているモダンなOSは、セキュリティと安定性を保つためにハードウェアのMMU(メモリ管理ユニット)に大きく依存しています。
現在のOSは、プロセス(アプリケーション)ごとに「ページテーブル」を作成し、それぞれに独立した仮想メモリ空間を与えます。これは例えるなら、各プロセスを広大な海で隔てられた「孤島」に隔離している状態です。
一見すると非常に安全な設計に見えます。ある島(プロセス)でバグが起きてクラッシュしても、別の島には影響が及ばないからです。しかし、この設計には致命的な代償が存在します。
- 莫大な通信コスト(コンテキストスイッチ): 島同士でデータをやり取り(IPC: プロセス間通信)したり、カーネルに処理を依頼(システムコール)したりするたびに、CPUはページテーブルを丸ごと切り替え、キャッシュ(TLB)を無効化しなければなりません。この壁を越えるために、数千から数万サイクルもの貴重なCPU時間が「ただの切り替え作業」に浪費されています。
- C/C++による特権モードの脆弱性: カーネル空間(Ring 0)は、すべての権限を持つ絶対的な領域です。ここで動くドライバ等にたった一つのメモリバグ(バッファオーバーフローやUse-After-Free)があるだけで、システム全体がブルースクリーンやカーネルパニックに陥ります。
2. 超大陸の誕生:SASOS (Single Address Space OS)
この「分断による浪費」を解決するために学術界で提唱され、PangeaOSが採用したアーキテクチャが「SASOS(単一アドレス空間OS)」です。
PangeaOSでは、プロセスごとに海で隔てることをやめました。その名の由来である古代の超大陸「パンゲア」のように、OSカーネル、デバイスドライバ、そしてユーザーアプリケーションのすべてが、ハードウェアの壁を持たない「Ring 0の単一の物理メモリ空間」で同居します。
すべてのタスクが同じ空間(同じ大陸)に存在するため、ページテーブルの切り替えという概念自体が存在しません。プロセス間通信やシステムコールは、「ただの通常の関数呼び出し」に昇華されます。数千サイクルかかっていたオーバーヘッドが、わずか数サイクルへと劇的に削減されるのです。
3. コンパイラが壁になる:Language-based Isolation
ここで、CやC++、あるいはPythonなどの言語に精通したエンジニアなら、当然の疑問を抱くはずです。
「壁がない同じ空間でアプリを動かしたら、悪意のあるアプリが他のアプリのパスワードや機密データを簡単に覗き見できてしまうのではないか?」
まさにその通りです。ハードウェアによる隔離(MMU)をオフにした状態でC言語でOSを書けば、そこは無法地帯になります。だからこそ、PangeaOSはRustで書かれているのです。
PangeaOSは、ハードウェアのコンクリートの壁の代わりに、Rustの「所有権(Ownership)」と「借用チェッカー(Borrow Checker)」をシステムの絶対的な防壁として利用します。
Rust
// PangeaOSにおける「Language-based Isolation」の概念コード
pub struct SecureResource {
secret_data: &'static str,
}
pub struct Task {
name: &'static str,
}
impl Task {
pub fn execute(&self, resource: SecureResource) {
// リソースに対する独占的な処理
}
}
fn kernel_main() {
let my_resource = SecureResource::new();
let network_task = Task { name: "Network Task" };
let user_task = Task { name: "User Task" };
// network_task にリソースの所有権を譲渡 (Move)
network_task.execute(my_resource);
// 【コンパイルエラー!】 user_task はもう my_resource に触れられない
// user_task.execute(my_resource);
}
あるタスクがメモリの所有権を持っている限り、同じメモリ空間にいる別のタスクがそのメモリに触れようとコードを書いた瞬間、Rustコンパイラが use of moved value というエラーを吐き、絶対にコンパイルを通しません。
これが「Language-based Isolation(言語仕様による隔離)」の真髄です。実行時のパフォーマンスを一切犠牲にすることなく、コンパイルの時点でメモリ安全性を数学的に証明する。Rustという言語の特性を、OSのセキュリティアーキテクチャそのものに組み込んでいるのです。
4. 開発体験:NixOSによる究極の再現性
OS開発において、特定のバージョンのコンパイラやエミュレータ、依存ライブラリを揃える環境構築は非常に厄介です。PangeaOSの開発環境は、Nixパッケージマネージャ(shell.nix)を利用して完全にコード化されています。
Nix
# shell.nix の一部
pkgs.mkShell {
buildInputs = [
rust_nightly
pkgs.qemu
];
}
リポジトリをクローンし、ターミナルで nix-shell と叩くだけで、ホスト環境を一切汚すことなく、OSコンパイルに必要なNightly RustツールチェーンとQEMUエミュレータが瞬時に立ち上がります。あとは cargo build でカーネルをビルドし、生成されたディスクイメージ(bios.img)をQEMUに読み込ませてシリアルポートへログを出力するだけです。
「環境依存でビルドが通らない」というOS自作特有のストレスは、PangeaOSには存在しません。
5. 次なるフロンティア:PangeaOSの未来
現在、PangeaOSはブートローダーからの正常な起動と、シリアル通信を用いた安全なタスク所有権の移動のデモンストレーションに成功しました。これは巨大な大陸の「土台」が完成したことを意味します。
今後のロードマップは非常にエキサイティングです。
- IDT(割り込み記述子表)の実装: キーボード入力やハードウェアタイマーといったCPU例外を安全にハンドリングする機構の構築。
- 安全な動的メモリアロケータ: カーネルヒープを実装し、
allocクレートを有効化。これによりベアメタル上でVecやStringが躍動します。 - モダンな非同期スケジューラ: 従来の重いスレッド管理ではなく、Rust標準の
Futureトレイトとasync/awaitを活用した極小オーバーヘッドの協調的マルチタスクの実装。 - GUIフレームワークへの道: UEFIのフレームバッファを活用したピクセル描画エンジンを実装し、最終的にはQt6で描画されるようなモダンでリッチなネイティブGUIを、この単一アドレス空間上で爆速で動作させること。
既存の「常識」という壁を壊し、ゼロから理想のシステムを構築していく。RustによるOS開発は、プログラマーとしての知的好奇心を極限まで満たしてくれる最高のエンターテインメントです。
PangeaOSのコードはGitHubで公開しています。システムプログラミングの深淵に興味がある方は、ぜひこの「新しい大陸」に上陸してみてください。