OSECPUや第三世代OSASKで、なぜ新規の仮想CPUが必要なのか

  • (by K, 2013.03.26)
    • (osask.netに書こうと思ったんだけどパスワードを忘れて新規ページが作れない。メモを見つけるまでこっちに書いておく)

ようするに

  • なんでJavaのバイトコードをそのまま採用しないのか、もしくはなぜ.NETのバイトコードをそのまま採用しないのか。っていうかせめてサブセットじゃないの?

回答

  • 細かいことを全部抜きして言えば、「Java実行環境や.NET実行環境を、自作OS(たとえば「はりぼてOS」とか)に移植する気になるか、できそうな気がするか?」に尽きる。どちらも10MBを優に超えている。何がそんなに大きいのかわからないけど、とにかく大きい。
    • もはや何が肥大化の原因になっているのかを突き止めることすら簡単ではなさそうな雰囲気がある。いい感じなのはwabaだけなんじゃないかと思う。・・・ってそのwabaも最近は大きくなってきたらしいけど。
  • osecpu.exeはver.0.07で6.50KBだ。JITコンパイラは意外にコンパクトだ。これはすごく移植可能な感じじゃないか。
    • 将来的に見ても、50KBよりは小さいままでいそうな気がする。
  • 「Write once, run anywhere」なんて気の利いたフレーズがあったけど、これが成立するためにはJavaの実行環境がいろいろな環境向けにどんどん移植されなければならない。だから移植しやすくないJavaや.NETはダメなんだ。
  • OSECPUでは検討してないけど、第三世代OSASKでは16bitやそれ以下のCPUもターゲットで、JITCを置けない環境向けにはクロスコンパイラも作るつもりでいる。こんなこともできないうちに「run anywhere」と言ってしまったのは、完全にフレーズ負けしていると僕は思う。
    • まあたぶんすごい最適化とかが入っているのではないかと想像する。それであんなに大きくなってしまったのだろう。そりゃまあ立派なことだけど、しかし高速に動作するとかしないとか以前に、まずは移植されて動作しないことには話にならないのではないか。
  • ちなみにOSECPUは40の命令が予定されている。内訳:
    • ORやADDなどの3項演算: 10
    • 各種比較命令: 14
    • ポインタ操作: 7
    • メモリ読み書き: 4
    • その他: 5
  • これはFPU系の命令がないけど、まあそれは別に考えるとして、この命令の少なさは移植しやすいと思う。

脱線

  • 最近、スマートフォン向けOSがどうこうという話を聞く気がする。これは要するに、デスクトップ向けのOSが大きすぎてスマートフォンの役に立たないからそういうことになったのだと思う。もちろん解像度とか入力方法の違いとかそういうこともあったとは思う。でもそれだけだったらPCと互換性を保つこともできたはずだ。現状ではエミュレータを使わないとスマートフォン用のアプリはPC上で動かせない。
  • きっとOS自作コミュニティの中でも、これからはスマートフォン専用で作ろうとか考えている人たちもいるだろう。
  • しかし僕は断じてそのような路線は選択しない。スマートフォン「でも」動くOSなら作るかもしれない。しかしスマートフォンのみをターゲットにしたOSは作らない。
  • そもそもそうやって対象を絞っていくことに何のメリットがあるのか。もっと汎用的で共通の基盤になりうるものだからこそのOSじゃないのか?
  • 言い方を変えよう。なにか目的があって、その目的のためにOSを作るということはあり得る。しかしまずハードウェアがあって、そのハードウェアに合わせてOSを作るというのは、OS屋の発想ではない。それは与えられた環境に適合するものをを作っているだけじゃないか。世間の人たちがスマートフォンを持っているから作るのか?・・・それは流行の後追いでしかない。
    • まあ職業ではそういう開発も十分にありだけど、趣味のOS開発でそれは悲しすぎる。
  • もしスマートフォンに固有の価値があるのなら、それはそれで結構なことだ。しかしそれなら、その価値をPCでも使えるようにするのがOS屋じゃないのか?・・・だから僕はスマートフォン専用という発想はしないのだ。
  • 結局、どのハードウェアでOSを動かすかではなくて、どんな価値を提供するためにOSを作るかということなんだと思う。価値をまず決めて、その価値をできるだけ多くの機種に届けるべきなんだと思う。

こめんと欄


コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-03-26 (火) 18:45:18 (4051d)