負の遺産を引きずらない次世代のOS "Earth"について考えてみました。
「オープンソースOS Earth」
マイクロカーネルを採用。ブートローダはアセンブラで、ドライバはC++とアセンブラで、それ以外はC++で記述する。
仮想記憶について3つのモードを採用。起動時のオプションスイッチまたはコントロールパネルなどで指定する。
モード0:仮想記憶を行わずリアルタイムOS(RTOS)として機能する。
モード1:既存のファイルシステム上に仮想記憶用ファイルを生成して使用する。
モード2:Linux等の様に仮想記憶用パーティションを確保し使用する。パーティションのtypeコードはLinuxのSWAP領域と同じものを使用する。
実行中にモードを変更可能にする(全ての変更をできるわけではない)。モード2からモード1や十分なサイズのswap領域がある場合だけモード0やモード1からモード2に移行できる。
またOS-9の様にモジュール(module)構造を使用する。
モジュールの先頭に半角英字でModuleとモジュールであることを示し、その次の2バイトでヘッダサイズを指定する。またモジュールが破壊されていないかどうかヘッダにCRCを持つ。当然ヘッダにはボディのサイズも存在する。
モジュールを配置してROM化すると起動時にカーネルがROMをシーケンシャルにスキャンしてモジュールを認識して(その際モジュールが正しいものかどうかCRCチェックをする)動作する。
モジュールにはタイプ・コード(type code)がありそれぞれ
0 未使用
1 ブートローダ
2 カーネル
3 デバイス・ドライバ
4 サービス・プログラム(デーモン)
5 実行プログラム(アプリケーションなど)
6 プロセス間通信用領域
7 データブロック(RAMディスクなど用)
などを用意する。
OS-9と同じくモジュールを使用しているのでドライバのロード・アンロードを再起動なしに行える。
また組み込み用途でROM化する場合カーネルが最初に起動するようにしておけばモジュールをただ配置するだけでカーネルが起動時にROM全体をスキャンしてモジュールを認識してシステムを構成する。
内部で使用されるコードにはUnicodeにする。
提供されるハードウェアはIA-32(インテルの32ビットアーキテクチャ)やx64(IA-32上位互換の64ビットアーキテクチャ)やMac(PowerPC版も)やARMなど多種多様にしてクロスコンパイル(アセンブル)を行なう。
アプリケーションはネイティブ・コードと仮想マシンコードの2種類で提供する。
また仮想マシンを標準で持ちキャッシュ付きのJIT(Just in Time)コンパイラの機能も持つ。
またAndroidなどのようにアプリケーションを統一的に管理する仕組みを用意する。
またAndroidの様に仮想マシンで提供されたアプリはキャッシュの消去するボタンをアプリケーションごとに持つ。
またGUIはAndroidなどのようにウィジェットを配置可能にする。
ローカライズは世界中の有志によって行なう。
開発環境を用意し誰もがアプリケーション、ドライバ、サービス・プログラムなどを作れるようにする。
GUIはWindows、Mac OS、Linux、iOS、AndroidなどのGUIを参考にして覚えやすく分かりやすいものにする。内容としてスタートメニューと仮想デスクトップやタッチパネル対応などにする。またGUI SDKを用意し、GUIを自由に作成できるようにする。またコントロールパネルにGUIセレクタを設置しGUIをいつでも変更可能にできるようにする。
OSのAPIはWindows、Mac OS X、Linux、TRON、BeOSなどを参考にしてオブジェクト指向プログラミングと親和性の高いものを用意する。
初心者が習得しやすいオブジェクト指向でないポインタの無い手続き型言語を開発言語として統合開発環境(IDE)で提供する。もちろんオブジェクト指向でフル機能の開発言語も提供する。この2つにはネイティブ・コード用と仮想マシン用の2種類を用意する。
コマンド・シェルは2種類用意し、一般向けのコマンドシェルにはファイル名にMS-DOSのワイルド・カードを使用する。またリダイレクトやパイプの機能も持つ。高度なコマンド・シェルはWindows Power Shellのようにオブジェクト指向のものにする。
皆さん、どうでしょうか?