新しいプログラミングプロジェクト: Bunnix
プロジェクトの背景
- 最近、「本業」から少し離れるため、リスクが低く純粋に余暇のための新しいプログラミングプロジェクトを始めた。
- 4月21日から、x86_64ターゲット向けのUnixライクなオペレーティングシステムを約1か月でどこまで作れるか試してみることにした。
- 成果物はBunnixという名前のオペレーティングシステムである。
- このプロジェクトには合計27日間時間を投じた。
Bunnixデモ
Bunnixの構成要素
- Bunnixカーネルは主にHareで書かれており、一部にCコンポーネント(lwext4、libvterm)を含む。
- サポートしているドライバ:
- PCI (legacy)
- AHCIブロックデバイス
- GPTおよびMBRパーティションテーブル
- PS/2キーボード
- プラットフォームシリアルポート
- CMOSクロック
- フレームバッファ(ブートローダによって設定される)
- ext4およびmemfsファイルシステム
- サポートしているカーネル機能:
- 仮想ファイルシステム
- 各種 /dev デバイス
- ターミナルエミュレータおよびtermiosサポート
- 約40個のシステムコール(例: clock_gettime, poll, openat, fork, exec など)
- Bunnixはシングルユーザーシステムであり、現在はUnixのファイルモードと所有権を強制していない。
ブートローダ
- 2種類のブートローダを含む:
- Legacyブート: Hareで記述。
- EFIブート: Cで記述。
- カーネルをELFファイルとしてロードし、必要に応じてinitramfsもロードする。
ユーザー空間ソフトウェア
- 主にサードパーティ製ソフトウェアで構成される:
- Colossal Cave Adventure (advent)
- dash (/bin/sh)
- Doom
- gzip
- less (pager)
- lok (/bin/awk)
- lolcat
- mandoc (man pages)
- sbase (core utils)
- tcc (Cコンパイラ)
- Vim 5.7
- libcはmusl libcから派生しており、Bunnixの要件に合わせて修正されている。
Bunnixの開発過程
- Mastodonで開発過程を記録していた。
- Bunnixのコードの一部は以前のプロジェクトであるHeliosから持ってきた。
- ext4サポートと仮想ターミナル統合が最も難しい部分だった。
- スケジューラとシグナル処理の実装も挑戦的だった。
- サードパーティ製ソフトウェアの移植は、musl libcベースのおかげで比較的簡単だった。
学んだこと
- ファイルシステムについて多くを学んだ。
- ドライバへのアプローチがよりシンプルになった。
- シグナル処理の複雑さを理解するようになった。
- メモリ管理ではbitmapアロケータが効果的であることを確認した。
- モノリシックカーネルはマイクロカーネルより実装がはるかに簡単だと実感した。
今後の計画
- Bunnixは余暇のためのプロジェクトであり、現時点ではこれ以上時間を投入する予定はない。
- 今後はHeliosプロジェクトに戻り、多くの教訓を適用する予定である。
- Bunnixの改善優先項目:
- ファイルシステムキャッシュ
- ext4のバグ修正
- procfsとtop
- mmapファイル
- さらなるシグナル(例: SIGSEGV)
- マルチユーザー対応
- NVMeブロックデバイス
- IDEブロックデバイス
- ATAPIおよびISO 9660サポート
- Intel HD Audioサポート
- ネットワークスタック
- ベースシステムへのHareツールチェーン
- セルフホスティング
GN⁺の見解
- Bunnixの価値: BunnixはHare言語を使ったカーネルハックの良い例であり、新しい言語や技術を学びたい開発者にとって興味深いものになりうる。
- ファイルシステム設計: ファイルシステム設計はOS開発で重要な部分であり、Bunnixを通じて多くを学べる。
- モノリシック vs マイクロカーネル: モノリシックカーネルとマイクロカーネルの長所と短所を比較できる好例であり、OS設計への深い理解をもたらす。
- コミュニティ参加: Bunnixはオープンソースプロジェクトであり、コミュニティの参加と貢献を通じてさらに発展する可能性がある。
- 今後の改善点: Bunnixの今後の改善項目は、OS開発に関心のある人々にとって良い学習機会を提供する。
1件のコメント
Hacker Newsの意見
Hacker Newsコメントまとめ
This is really cool. Reminds me of the original Unix was invented in a couple weeks while Ritchie's family went on vacation to CA to visit his in-laws.
I also finally learned how signals work from top to bottom, and boy is it ugly. I’ve always felt that this was one of the weakest points in the design of Unix and this project did nothing to disabuse me of that notion.
Impressive, super cool, and inspiring!
Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.
It was really cool watching the ~daily updates on this on Mastodon - seeing how someone so skilled gradually pieces together a complex piece of software.
From "Linux System Call Table – Chromiumos"
Code is here: Git Repository
Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:
Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.
Quite cool, by making use of Hare instead.
Waiting for an OS that treats GPU(s) as a first class citizen ...