OS開発の方向性

(2006.6.15更新。)

ちょっと探すだけでいろいろなOSがあって少し驚いた。しかし、習作というか作るのが目的であればいさ知らず、実用を目指す場合には、Linuxや*BSDとの違いをどう出すか。

どのようなAPIを実装するか

(2007.11.28更新。)

アプリケーションとの関係では、どのようなAPIを実装するか、が大きいと思います。POSIX (Single UNIX Specification)、既存の特定のOSとの互換、あるいは独自か。

フリーのUNIXは、Linux, *BSDがすでに成熟していて、この方面は、もっぱらOS内部での違いを出す方向になると思います。

既存OSのクローンは、既存のアプリケーションを動かしたいという動機です。

CPUやハードウェアのアーキテクチャが違う場合はソフトウェアでエミュレーションするしかありません。例えばMSX、あるいはX68000など。また、ソース互換にしてもあまりうれしくありません。そのOS用のアプリケーションを動かすだけなら、例えばWindowsアプリケーションを動かすWineなど、エミュレータで足りることも多い。

この路線は、OS/2やBeOSなど、元々PCで動いていたOSとの互換を目指す、ブートできるようにしたい、エミュレートすると現実的な速度が出ない、などの場合に選択肢として出てくると思います。

独自APIの定義はハードルが高いです。アプリケーションに対しては、結局、既存のいろいろなプログラムを動かそうと思うと、UNIXっぽいAPIになってしまう。もちろん、UNIX「っぽい」APIという道は十分あります。UNIX Specificationは非常に大きいですし、シグナルなどアプリケーションでの取扱いが難しい機能も含まれます。

カーネルから少し離れますが、GUIライブラリまで独自に実装するかどうか。おおいに大変そうですが。XだとLinuxと代わり映えしません。

マイクロカーネル

内部構造に目を移すと、まずはマイクロカーネルかモノリシック (monolithic) か、がポイントになるだろうか。どのぐらいカーネルが小さければマイクロと呼ぶか明確な定義は分からないが、純粋なマイクロカーネルは、プロセス・スレッド管理、メモリ管理、IPC (プロセス間通信) ぐらいしか含まない。デバイスドライバもユーザ空間で動かす。

ただし、OSを使う側からしたらどうでもいい部分でもある。例えばファイルシステムのモジュールをカーネルから追い出したとしても、このモジュールがこけたら普通はシステム全体がクラッシュするから、カーネルの中か外かは重要ではない。

雑多なデバイスドライバはユーザランドに追い出す意味がある。「すべての」デバイスドライバの信頼性を確実に高くするのは難しいので、ドライバがクラッシュしてもシステム全体が巻き込まれないようにするのはいいアイディアだと思う。

MINIX 3 では、デバイスドライバは独立したユーザーモード・プロセスとして動いていて、ドライバがクラッシュしても、自動的にそのプロセスだけ再起動される。

分散環境

(2007.11.28 この節追加。)

ネットに接続されていないコンピュータはただの箱、は言い過ぎかもしれませんが、PCの資源(CPU、ハードディスク)はネットワークを介してもっと有効に活用されてもいいように思います。

ユーザの使い勝手から言えば、どの端末でログインしても同じ環境で使いたい。nfsによるディスク共有、ajaxでWebサーバに環境構築、など実際に行われていますが、クライアントPCの資源が無駄になります。

クライアントのCPU、ハードディスクの一定量をネットワークに供出して、ユーザからは多数の(または単一の)CPU、ディスクとして見えると素晴らしい。もちろん、セキュリティの考慮が必要です。

分散ファイルシステムがいくつか提案・実装されています。Linuxにも取り込まれたPlan 9 の9pファイルシステムなど。

OLE (COM) など複合ドキュメントの仕組み。ファイルシステムでは、TRONの実身・仮身の形になるでしょうか。

その他

L4Linuxのように、Linux用アプリケーションとリアルタイムOS用アプリケーションを並列に動かす、という方向は興味深い。ITRON + Java とかもありますな。

GUI をとにかく頑張る、という方角はどうだろう。Looking Glass (lg3d), Xgl などが出てきたが、ユーザーインターフェイスはいまだ2Dの延長にある。ただ、これはOSでやる話ではない気もする。

どれだけ開発者がいるか

OSそのものの出来栄えとは関係ないが、実用的であるためには、一定人数の開発者とユーザが必要だと思う。

特に、デバイスドライバを書けるような人間が必要。