概要
- Munal OS はRust製の実験的なOSで、unikernel設計とWASMサンドボックスによるセキュリティモデルを特徴
- 仮想アドレス空間や割り込みを持たず、単一EFIバイナリとして構築される
- HD解像度のグラフィカルUI、VirtIOドライバ、カスタマイズ可能なUIツールキットを搭載
- WASMアプリのサンドボックス実行と独自システムコールAPIを実装
- QEMU上で動作し、ウェブブラウザやテキストエディタなど複数の組み込みアプリを提供
Munal OSの概要
- Rust製 のフルスクラッチOS、ユニカーネル設計
- WASMサンドボックス によるアプリケーション分離とセキュリティ
- HD解像度対応のグラフィカルUI、マウス・キーボード入力対応
- VirtIO 1.1 準拠のPCIドライバ実装
- キーボード、マウス、ネットワーク、GPU用VirtIOドライバ
- カスタマイズ可能なUIツールキット(Uitk) によるウィジェット・レイアウト・テキスト描画
- 組み込みアプリ :ウェブブラウザ(DNS, HTTPS, 基本的なHTML対応)、テキストエディタ、Pythonターミナル
アーキテクチャと設計思想
- シンプルなコードベース を追求した実験的設計
- ブートローダ非依存、単一のEFIバイナリでカーネル・WASMエンジン・アプリを内包
- 仮想アドレス空間・ページマッピング未実装
- UEFIのIDマップ空間をそのまま利用
- メモリ空間は単一、WASMサンドボックスでユーザー/カーネル分離を代用
- 割り込み・マルチコア未対応、全てポーリングベースのドライバ
- グローバルイベントループ による逐次処理
- 各ループでネットワーク・入力・UI描画・WASMアプリ実行・フレームバッファ更新を順次処理
- 各処理のCPU/フレーム時間計測が容易
ドライバとハードウェア対応
- PS/2やVGA未対応、VirtIO専用設計
- QEMUなど仮想環境でのみ動作
- PCI経由のVirtIOドライバ
- キーボード、マウス、ネットワーク、GPU用
- 割り込み未使用、全てポーリング方式
アプリケーション実行モデル
- wasmi WASMエンジン でWASMアプリをサンドボックス実行
- カーネルとは独立したメモリ空間を確保
- 独自の「システムコール」APIでOS機能にアクセス
- 入力取得、TCPソケット操作、フレームバッファ描画など
- WASI Preview1 の部分的サポート
- 必要最小限のみ実装、WASI非互換
- 協調的スケジューリング (Cooperative Scheduling)
- 各アプリはイベントループ毎にCPU制御を明示的に返却
- 長時間処理は明示的なyieldが必要
- wasmiのfuel limitingで暴走アプリの強制終了も理論上可能(未実装)
- アプリごとのログストリーム (UNIXのstdout類似)、監査ビューでリソース消費を可視化
UIツールキット(Uitk)
- 即時モードUIツールキット
- ボタン、プログレスバー、テキスト編集、スクロールキャンバス等の基本ウィジェット
- 三角形ラスタライザで3Dデモやラジアルメニューも描画可能
- グローバルスタイルシート による一括スタイリング、個別要素の上書きも可能
- タイルキャッシュシステム
- 変更IDで再描画判定、不要な再描画を回避
- Rustのミュータビリティルールを活用した自動変更検知
ビルドと実行方法
- Rust Nightly 2025-06-01、QEMU 10.0.0で動作確認済み
- 必要コンポーネントの追加
rustup target add --toolchain nightly-2025-06-01-x86_64-unknown-linux-gnu wasm32-wasip1rustup component add rust-src --toolchain nightly-2025-06-01-x86_64-unknown-linux-gnu
- ビルド・実行スクリプト :
./run.sh- WASMアプリ→カーネル→QEMUの順でビルド・実行
- QEMUコマンド名は
qemu-system-x86_64を想定、環境に合わせて修正可能
クレジット・参考資料
- Philipp Oppermann’s Rust OS tutorial、OSDev Wiki、Wasmi、smoltcp、Rustls、RustPythonなどのOSS
- フォント・アイコン・壁紙の出典明記
Munal OSの今後と課題
- 実機対応未実装
- BIOS/UEFIのPS/2/VGA/GOPやGPU・USBドライバの追加が必要
- WASMアプリの多言語対応可能
- Rust以外の言語でもWASMコンパイル対応で実行可能
- WASI完全互換ではない
- アプリごとの独自API設計、移植性に制限
- マルチコア・割り込み・仮想記憶未対応
- 今後の拡張余地
公式リポジトリ :https://github.com/Askannz/munal-os デモ動画 :https://streamable.com/5xqjcf 技術詳細 :README参照