3 ポイント 投稿者 GN⁺ 2024-05-25 | 1件のコメント | WhatsAppで共有

新しいプログラミングプロジェクト: Bunnix

プロジェクトの背景

  • 最近、「本業」から少し離れるため、リスクが低く純粋に余暇のための新しいプログラミングプロジェクトを始めた。
  • 4月21日から、x86_64ターゲット向けのUnixライクなオペレーティングシステムを約1か月でどこまで作れるか試してみることにした。
  • 成果物はBunnixという名前のオペレーティングシステムである。
  • このプロジェクトには合計27日間時間を投じた。

Bunnixデモ

  • Bunnix 0.0.0 ISOファイルを提供している。
  • QEMUを使って起動できる:
    qemu-system-x86_64 -cdrom bunnix.iso -display sdl -serial stdio
    
  • ISOをUSBスティックに書き込んで実機で起動することもできる。
  • ほとんどのAMD64機器で動作する可能性が高い。
  • 制限事項: USBをサポートしていないため、PS/2キーボードが必要。

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件のコメント

 
GN⁺ 2024-05-25
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.

    • オリジナルのUnixが、リッチーの家族がCAへ義実家を訪ねて休暇に出ている数週間のあいだに発明されたことを思い出させる、とても素晴らしいプロジェクト。
  • 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.

    • シグナルの仕組みを最初から最後までようやく学べたが、実にひどい。以前からUnix設計の最も弱い点のひとつだと感じていたが、このプロジェクトでもその考えは変わらなかった。
  • 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.

    • 「X日で印象的なものを作る」という例は、長年かけて培われた多くの経験と才能を必要とする。
  • 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.

    • Mastodonでほぼ毎日の更新を追うのは本当に面白く、これほど熟練した人が複雑なソフトウェアを少しずつ組み上げていく様子を見るのは興味深かった。
  • From "Linux System Call Table – Chromiumos"

    • Linuxのシステムコールテーブルに関する資料を共有。
  • Code is here: Git Repository

  • Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:

    • Hareは興味深い言語に見える。ただ、この制約はマルチコア時代における採用を妨げるのではないかと思う。
  • Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.

    • とてもクール。こうしたUnixクローンの多くは通常Cで書かれるが、これは新しいプログラミング言語で書かれている。
  • Quite cool, by making use of Hare instead.

    • 代わりにHareを使っているのがかなり面白い。
  • Waiting for an OS that treats GPU(s) as a first class citizen ...

    • GPUを第一級の存在として扱うOSを待っている……