OS開発のマイルストーンを現代的に定義するとするなら : 1.libcをどうにかして、自分のオブジェクト環境の中でgccをコンパイルする 2.mingwのbashやm4等各種ツールを自分のオブジェクト環境の中で動かす 3.Xenの上で動くカーネルを作る 4.(Xorgを移植する)
要するに、 あのリストは、「今後近代的なPCで動作するOSを製作するために必ず通る道」を挙げたもので、 デバイスドライバを作るとか、Windowsystemを作るとかはこれらの『後』に来ることを想定している。 もちろん、あのリストを誰かが代表して埋めて、フレームワークとして共通化するのも 方向性としては想像できる。 コンパイラがself-hostingにならなければならない理由は、Linuxのカーネル以外に依存する デザインにするとHypervisorとLinuxユーザランドの両方に依存してしまうため。 また既存のソフトウェアの流用を非常に難しくする。
API or Language(なぜAPIでなくてファイルシステムなのか) 個人的には、究極に効率的なシステムのためにも、APIを決めることよりも「記述環境」を 作ることに意義が有ると考えている。 システムとして出荷されたときのバイナリサイズよりも、実行時に占めるメモリサイズのほうが 多分重要で、そのためには必要な部分だけをロードするといった対策が必要になる。 出荷されたときのバイナリサイズにしても、部品の共通化を進めるのは良い影響を与える。 (少なくとも、僕の知識ではAPIコールの効率性とシステムの効率性を関連付けられない) そもそも、現代的なシステムではプログラムよりもデータの方が圧倒的に大きな存在感を占めている。 メモリからキャッシュへのコピー、データの配列、そのほかのI/Oがシステムの速度を決定付けている。 (もし必要なら、)良くデザインされたファイルシステムはこの側面にアプローチできる。 ただ僕の主張としてより重要なのは、APIはプログラマにしか触れないけれどファイルシステムは ユーザ全員が触るという点で、より端的に表現すれば「多くのプログラミングは 本来プログラムの外部で行われる必要が有る」。 一つ一つのプログラムを小さくすることよりも、プログラムの数そのものを減らした方が 効率的に思える。
(This host) = http://osask.net