[osask 7188] kabao386.

  こんばんは、川合です。

  なんだかひさしぶりになってしまいました。

  現在もまだ仕事をやっているさいちゅうなので、開発にすぐに復帰で
きそうではないのですが、OSASKコミュニティのみんなが、着実にいろ
いろとやってくれているので、とてもうれしいです。

  (参考: http://k.osask.jp/wiki/?klog/essay092 )

  さて、最近僕は仮想マシンについてあれこれ考えたりしているのです
が、それについては以下のページをみてもらうことにして、ここでは、
それとはまた違った方法で、今回のリリースを説明しようと思います。

    仮想マシン
        http://k.osask.jp/wiki/?klog/essay091

    OS依存であるべきもの、そうでないもの
        http://wiki.osask.jp/?K

    OSASKのドライバ
        http://wiki.osask.jp/?K

    kabaとkabao
        http://wiki.osask.jp/?K

---

  かつて、kaodunがリリースされて間もない頃、そのかっこよさのため
に、「これがWindowsでうごいたらいいよなあ」みたいな話題が、2ちゃ
んねるのOSASKスレッドでありました。それでそのときはさらに話題が
広がって、同じソースから、OSASKでもWindowsでもどちらでも動くアプ
リを作れるようにするために、共通化ライブラリを作ろうとか、そんな
話題まで出たように思います。

  一方、共通アプリといえば、この分野ではbaysideさんのWabaがすば
らしい充実を見せていて、Windowsだけではなく多くの和製OSをサポー
トしています。しかし残念ながら、あまりWabaアプリがありません。原
因ははっきりとは分かりませんが、もったいないことだと思います。

  さて実は僕は以前まで、仮想マシンにはどちらかというと否定的でし
た。もちろん、互換性の提供のために仮想マシンを使うということには
大賛成なのですが、「一度書けばどこでも何度でもつかえる」という、
フレーズというか、思想が嫌いだったのです。いや、過去形であること
にあまり意味はなくて、今でもあまりこの思想は好きではありません。
これから劇的にJITコンパイラが進化しない限りは、結局ネイティブア
プリのほうが高速で低負荷でしょう。よく使うアプリであれば、バイト
コードのままで満足してはいけないと思います。だから、全部Javaにし
よう、そうすればばら色だ、とか、全部.NETにしよう、そうすればばら
色だ、みたいな主張は基本的に反対なのです。

  そんな僕は、KH-DOSという構想をかつて立てました。これはKHBIOS対
応OSの一つということになっていましたが、もう一つの試みがありまし
た。KH-DOSのある種の実行ファイルは、win32のコンソールアプリケーシ
ョンとしても動くような、そんなものにしたいと計画していたのです。
それであれこれ設計を練ったりしていましたが、時間がなく、いまだ実
装には至っていません。

  また一方、Wabaはよくできているけど、結局同じCPUのOSなのに、そ
の互換性のためにバイトコードまで作るのは無駄じゃないかと、そう思
ったことがありました。PowerPCでも実行したいとか、そういう意図が
あったのかもしれませんが、僕としては、MacOSをあきらめるだけで、
仮想マシンを使わずに済むなら、むしろその方が現実的ではないかと、
以前から思っていたのです(まあ本家WabaはPDAまでサポートしていた
気がするので、そこまで考えるとバイトコード化は必然だったのかもし
れませんが)。もしくはもしバイトコードを作ることがあったら、
IA-32の下位互換にして、IA-32ではインタプリタやJITコンパイラ無し
に、そのまま実行できてしまうとか、なんかそんなものでもいいかなと
思っていました。

  それで、そのためにはどうしたらいいのかを検討して、APIさえ適当
に共通化させればいいだろうと考えて、水面下で一時期いろいろ試作し
ていました。でもこれも完成する前に忙しくなってしまいました。

  さてようやく今回の話になるのですが、今回リリースするkabao386と
いうのは、要するに、仮想マシンを使わないけど、IA-32用のOSに限れ
ば、Wabaみたいに共通のアプリが利用できるよ、というものです。今回
はまずWindows用から作りました。というのは、OSASK版を最初にしよう
かとも思ったのですが、それだとあたりまえすぎるというか、僕が作っ
たOSで自分のシステムが動かせないなんていう情けないことは普通ない
わけで、面白くないだろうと思ったのです。

  kabao386は仮想マシン技術を使っていないので、速度もかなり出ます
。ただし、やはりネイティブアプリとは多少の差がつくでしょう。そう
いう位置付けです。今回は、タスクセーブに相当する機能や、シングル
タスクしかサポートしないOSででも、kabao386アプリを同時に複数動か
せるなどといった、そういうことができるように、仕様をじっくり練り
ました。つまりkabao386アプリであれば、たとえWindows上であっても
タスクセーブできたり、それをLinux上でタスクロードしたり、そうい
うことが(仕様的には)可能なのです。

  これを作ってみてつくづく思ったのですが、今まで僕が考えていた、
APIを共通化しておけばいいだろう的な発想の産物は、ぜんぜん甘すぎ
ました。あれに時間をかけなくて良かったです。時間をかけていたら、
結局問題にぶつかって、やり直しを強いられたことでしょう。

  またそもそも以前よりOSASKアプリは仮想化が進んでいるので、
OSASK以外のOSでも、OSASKアプリを実行するのはそんなに難しくはない
、と僕は主張してきましたが、これも甘いなと思うようになりました。
確かに僕の主張通り、他のOSのアプリに比べれば、実行環境を整備する
のは簡単だと思います。しかし、結局はOSを多少改造しないと、実行で
きるようにはならないでしょう。改造無しでアプリにできる範囲の方法
だけで実行できるようにするとなると、エミュレーションするしかない
の場合がほとんどでしょう。

  今回のkabao386仕様は、OSの助力というか改造を一切あてにせずに、
アプリに許された範囲の権限で、共通アプリ仕様を考えたらどうなるか
、というものです。かなり不自由な思いをするということがよく分かり
ました。でも、それで共通バイナリができるのですから、これは悪くな
い交換条件かもしれません。

  本当は僕は今こんなことしていてはいけないのですが、今回の仕様を
思いついてしまい、あまりにもその思い付きが気に入ってしまったため
に、とにかく実装しないと、ほかのことがほとんどできなくなってしま
ったのです。今回とりあえず実装して、うまく動くことが確認できたの
で、これで安心して仕事を再開できそうです。

---

  さて、非常に長い前置きでしたが、リリース物件の説明に入りたいと
思います。

        http://osask.jp/files/

のページに、kabaow0a.sarとkb3_helo.sarというアーカイブがあります
。どちらもtolset08でmakeできるソースを含んでいますが、恥ずかしい
のであまりソースは見ないでください(笑)。みちゃいけないわけじゃ
ないので、見たい人は見てもいいですが、仕様の説明がないので意味が
よく分からないと思います。

  使い方は、

prompt> kabao386 helo_t.kb3

とやると、helo_tというkabao386アプリが実行されて、画面に
hello, wolrdと表示されるだけです。たったこれだけなんですが、でも
これは1文字表示ファンクションをループで13回呼んで実現しており、
もしこれをインタプリタやJITコンパイラでやるとしたら、きっと
kabao386.exeはこんなサイズじゃすまないわけです(ちなみに4.00KB)
。

  このkabao386.exeの小ささが、今回の仕様の素直さというか、各OSへ
の適合のしやすさを物語っていると思います(そりゃもちろん今回はあ
ちこち手抜きしていますし、だから今後はバージョンアップにつれて大
きくなると思いますが、それでもhello, wolrdの表示に最低必要な機能
は一通り持っているわけです)。なお、helo_t.kb3アプリは無圧縮でも
192バイトです。1文字づつ表示しないで、文字列表示ファンクションを
使うようにしたら、きっともっと小さくなることでしょう。そしてこの
小さいアプリケーションが、WindowsでもLinuxでも、そのほかにOSASK
やMonaや超漢字をはじめ、その他のほぼすべての和製OSで、適当なアプ
リを用意してやるだけで、実行できるようになるんです。

  今後は、仕様を文章にまとめて、タスクセーブ機能をつけて、共通
DLLの書き方や共通APIの書き方も紹介して、また多くのIA-32のOSで実
行できるように、kabao386.exeを移植していきたいと思っています。で
も他にもやりたいことはたくさんあるし(OSASKのネットワークとか
KHBIOSとか)、今はとにかく仕事を優先しているので、いつになるのか
は分かりませんが。

  それでは。

--
    川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! osask.jp
Homepage http://osask.jp/

ML番号でジャンプ
ML単語検索