(PC用)OS開発の方向性(2006.6.15更新。)ちょっと探すだけでいろいろなOSがあって少し驚いた。習作というか作るのが目的であればいさ知らず、実用を目指す場合には、Linuxや*BSDとの違いをどう出すか。どのようなAPIを実装するか(2007.11.28更新。)アプリケーションとの関係では、どのようなAPIを実装するか、が大きいと思います。Specification)、既存の特定のOSとの互換、あるいは独自か。*BSDがすでに成熟していて、この方面は、もっぱらOS内部での違いを出す方向になると思います。既存OSのクローンは、既存のアプリケーションを動かしたいという動機です。CPUやハードウェアのアーキテクチャが違う場合はソフトウェアでエミュレーションするしかありません。MSX、あるいはX68000など。ソース互換にしてもあまりうれしくありません。そのOS用のアプリケーションを動かすだけなら、例えばWindowsアプリケーションを動かすWineなど、エミュレータで足りることも多い。この路線は、OS/2やBeOSなど、元々PCで動いていたOSとの互換を目指す、ブートできるようにしたい、エミュレートすると現実的な速度が出ない、などの場合に選択肢として出てくると思います。独自APIの定義はハードルが高いです。アプリケーションに対しては、結局、既存のいろいろなプログラムを動かそうと思うと、UNIXっぽいAPIになってしまう。UNIX「っぽい」APIという道は十分あります。Specificationは非常に大きいですし、シグナルなどアプリケーションでの取扱いが難しい機能も含まれます。カーネルから少し離れますが、GUIライブラリまで独自に実装するかどうか。XだとLinuxと代わり映えしません。ポイントになるだろうか。デバイスドライバもユーザ空間で動かす。OSを使う側からしたらどうでもいい部分でもある。ファイルシステムのモジュールをカーネルから追い出したとしても、このモジュールがこけたら普通はシステム全体がクラッシュするから、カーネルの中か外かは重要ではない。雑多なデバイスドライバはユーザランドに追い出す意味がある。「すべての」デバイスドライバの信頼性を確実に高くするのは難しいので、ドライバがクラッシュしてもシステム全体が巻き込まれないようにするのはいいアイディアだと思う。デバイスドライバは独立したユーザーモード・プロセスとして動いていて、ドライバがクラッシュしても、自動的にそのプロセスだけ再起動される。)ネットに接続されていないコンピュータはただの箱、は言い過ぎかもしれませんが、PCの資源(CPU、ハードディスク)はネットワークを介してもっと有効に活用されてもいいように思います。ユーザの使い勝手から言えば、どの端末でログインしても同じ環境で使いたい。nfsによるディスク共有、ajaxでWebサーバに環境構築、など実際に行われていますが、クライアントPCの資源が無駄になります。クライアントのCPU、ハードディスクの一定量をネットワークに供出して、ユーザからは多数の(または単一の)CPU、ディスクとして見えると素晴らしい。セキュリティの考慮が必要です。分散ファイルシステムがいくつか提案・実装されています。9pファイルシステムなど。複合ドキュメントの仕組み。ファイルシステムでは、TRONの実身・仮身の形になるでしょうか。その他L4Linuxのように、Linux用アプリケーションとリアルタイムOS用アプリケーションを並列に動かす、という方向は興味深い。頑張る、という方角はどうだろう。出てきたが、ユーザーインターフェイスはいまだ2Dの延長にある。これはOSでやる話ではない気もする。どれだけ開発者がいるかOSそのものの出来栄えとは関係ないが、実用的であるためには、一定人数の開発者とユーザが必要だと思う。デバイスドライバを書けるような人間が必要。