ページへ戻る

− Links

 印刷 

第二世代OSASKについて のバックアップソース(No.1) :: OSASK計画

osaskwiki:第二世代OSASKについて のバックアップソース(No.1)

  Next »[4]
TITLE:x
COLOR(red){試作中・・・}
----
*OSASK-HBとは? [#p5f012b7]

ものすごく簡単に言えば、ほぼゼロから新しくOSASKを興しなおす。OSASKの作り直しバージョンだと思ってください。そのコードネームです。

**なぜ作り直すのか [#t525a0ac]
川合氏いわく・・・
 川合氏が「はりぼてOS」や「KHBIOS」などの開発を通じてスキルアップした後の
 目で旧OSASKを見たとき、これはひどい!と思いました。
 OSASKは長い間多くの問題点がありながらも、大改修を避けてきました。
 しかしこれを機にそれらの問題点についても、多くを修正することにしました。
 HBは「Haribte-Based」を意味していて、OSとしてOSASK-HBは、「はりぼてOS」の
 コードをベースに作りはじめています。
 これはOSASK-HBを当面はC言語主体で書いてみようと思ったからです。

旧OSASKを建て増してゆくのに限界が出てきた。ヘタに手直しするより新しい技術・新しいツール・新しい設計で作り直したほうが早く良いものができるかもしれない。こうした考えから始動したものです。

COLOR(blue){よく「OSASKはもう終わった」という発言がありますがそれは間違いです。新設計の元、作り直しているのです。}



*作り直しによる成果(OSASK-HBの特徴) [#p1a57760]
せっかく動いていたOSASKを事実上凍結してまで行った作り直し。その成果は???

**アプリのサイズ: [#l2770a83]

まずは川合氏拘り(笑)のファイルサイズについてです。((この賛否に対するご意見は聞く気はありません。ヨソで思う存分やってください))

OSASK-HBのアプリケーションフォーマットやAPIは、残念ながら旧OSASKとは互換性のないものになっています(とはいえ、APIブリッジなどでサポート可能ではありますが)。

アプリの実行ファイルがコンパクトにできることを最優先に、徹底的に再設計されたようです。

川合氏にとって「人生の最高傑作」といっても恥ずかしくないレベルに達っすることができたとのこと。なにしろ''世界最高の仕様''を目指したようなので。

残念ながら現時点ではGUIまわりのAPIが装備されていません。




なく、旧OSASKに対して見劣りすることを含めても、それでもこの成果は現段階でリリースするに値します(将来的にはもちろんGUIのAPIも追加されます)。世界中に似たようなことを志している人はいるかもしれませんが、その人たちが私たちの技術を学ばずにOSASK-HBを追い抜くことはまず無理でしょう。いや追いつくことすら無理でしょう。

少し例を挙げます。 OSASK-HBにおいては、コンソール画面に「hello, world\n」と表示するアプリを、わずか16バイトで作ることができます。こんなサイズですがアプリの先頭の2バイトは誤認防止用の「47 01」というシグネチャが入っており、DOSの.COMファイルのようなヘッダのないフォーマットではありません(このシグネチャは全てのOSASK-HBアプリに共通して含まれます)。
さらに、注意してほしいのですが、「hello, world\n」はそれだけで13バイトあります。アプリのフォーマットの効率の高さ(無駄の少なさ)が察せられるのではないでしょうか?これはもちろん、「hello, world\n」に特化したAPIを持つなどの卑怯なことはしないで実現しています
(参考:DOSの.COMファイルで書くと22バイトになります)。

別の例です。コンソールに「 !"#$%&'() ... uvwxyz{|}~」と、キャラクタコード0x20から0x7eを出力するプログラムを作ると、OSASK-HB用は13バイトになります。念のために書いておきますが、これは16bitアプリではなくもちろん32bitのネイティブアプリです
(参考:DOSの.COMファイルで書くと17バイトになります)。

さらに別の例です。 OSASK-HBのアプリにはcpy.g01というものがあり、これはファイルのコピーや連結を行うことができるアプリです。このアプリは引数無しで起動すると、usageが出力されます。

      usage>cpy.g01 [in:]input-file [[in:]input-file]... out:output-file

これの文字数を数えると、66文字あります。

しかしながら、このcpy.g01というファイルはたったの45バイトしかありません。たったの45バイトでも、コピーや連結ができる上に、66バイトものusage出力が可能なのです。それがOSASK-HBの常識であり、x86の本当の能力なのです。

他のOSは機能密度の高いアプリを作りやすいAPIはどうあるべきかを考えていません。考えたつもりかもしれませんが、そんなのはOSASK-HBからすれば、考えていないに等しいのです。十分な汎用性や表現力を担保しつつ、かつ簡潔な表現を可能にするにはどうしたらいいのか、その答えがOSASK-HBのAPIにはつまっています。

このほかにもhexdump.g01やcalendar.g01など、紹介したいものはたくさんありますが、きりがないのでここまでにしておきます。


*OSASK-HBの特徴(アプリの互換性): [#vb864eb7]

OSASK-HBのアプリは、ただ小さいだけではありません。他のOS上で実行可能にするということにも配慮しました。

旧OSASKアプリは、QEMU等のエミュレータ無しでは、Windows上で実行することができませんでした。しかしOSASK-HB用のアプリは、QEMU等のエミュレータを使わずともefg01と呼ばれる20KB程度のローダを使うだけで、Windows上での実行が可能です(efg01の大きさはバージョンabcdw014時のもの)。 Windows上で、この極小のOSASK-HBアプリが動いてしまうのですよ!?なんだWindowsも「やればできる子」だったんですね、たった20KBのローダアプリを使うだけここまでできるんですから(笑)。

efg01はLinux用もMonaOS用もMEG-OS用もあります。「はりぼてOS」用や旧OSASK用も検討されています。その気になればTownsOS用やDOS汎用(DOS|Extender的なもの)も用意できると思います。基本的にx86用32bitOSであれば、ほとんど対応可能なはずです。 efg01の移植には多少の苦労が伴いますが、それさえできれば、OSASK-HB用のアプリは再コンパイルしなくてもバイナリのまま動いてしまうのです。それに苦労といってもたかが20KBのアプリです。それだけで全てのOSASK-HB用のアプリが使えるようになるのですから、安いものです。

これで分かるように、OSASK-HBアプリは単に機能密度が高いというだけではなく、OS横断的な共通互換アプリしての資質まで備えているのです。むろんこの分野ではJavaや.netというすばらしい先人がいます。これらはx86という壁も越えているので、互換性に関しては格が違います。しかしJavaや.netのランタイムは非常に大きく、waba等の軽量実装でさえ40KBを切ることは非常に難しいです。またOSASK-HBアプリはx86ネイティブなので、JIT等が不要で実行開始までのレイテンシもほとんどありません。そして多分Javaや.netでは.g01よりも小さく作ることはできないでしょう。・・・したがってOSASK-HBを「バイトコードを使わずにやったらどこまでいけるのか」の実験例としてみていただければと思います。

この「エミュレータなしで実行可能にする」を実現しようとすると、APIの設計の選択肢が減ります。そのため旧OSASKアプリでは実現できませんでしたし、他のOS用のアプリでもこのような特徴を挙げているものはほとんどないと思います。サイズの追求という面とは競合もしています。つまりこのバイナリ互換を捨てれば、アプリサイズはもっと小さくできたのです。・・・しかしこれは逆にとらえてほしいです。互換性まで盛り込みながらも、このサイズを達成できているのだ、と。

せっかく苦労して作ったアプリがOSASK-HBでしか動かないなんて、寂しいではありませんか。最高のアプリを、好きなOSの上で使ってもらう、これこそがKの理想です。仮に機能密度の低いアプリがOSを超えて利用できたとしても、そんなものは使う気がしないというものです。


*OSASK-HBの特徴(実用性): [#z893df63]

ここまでの説明だと、実用性に乏しいhelloなどが極端に小さいサイズで書けて、それでそれが他のOSでも動くだけ、なんていう印象を持つかもしれません。しかし現状はもう少し進んでいます(バージョンabcdw014時点)。

たとえば、OSASKや「はりぼてOS」の開発ツールの定番に、naskというアセンブラがあります。このnaskはwin32版で27,648というサイズで、x86用アセンブラとしては世界最小をうたっています。このサイズは当時から「さすがだ」とたくさんの人に評価していただきました。しかし実はこのnaskはすでにOSASK-HB用に移植が完了していて、そのサイズは22,824です。つまり4,824バイトも小さくなっているのです。機能は全く損なっていませんし、先のefg01を持っていれば、この小さくなったnaskもWindows上で実行できます。そればかりか、Linux上でも、ほかのOS上でも動くのに、こんなに小さくなったのです。


移植したのはnaskだけではありません。以下に代表的な例を挙げます。

            ・obj2bim  	12,800 → 6,272	 汎用リンカ
            ・gas2nask  	11,155 → 4,559	 gccの出力するアセンブラをnask用に変換
            ・bim2hrb  	4,096 → 384	 「はりぼてOS」用のリンカ
            ・makefont  	3,072 → 72	 OSASKと「はりぼてOS」用の半角フォントデータ生成プログラム

技術的な細部に興味があるひとは、とりあえず http://wiki.osask.jp/?OsaTech を見てください

  Next »[4]