(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

えーと,移植編第1回であえて書かなかったことなのだが,実は一番言いたかったことがある.まずは移植編第1回のソースコードを見てほしい.

% ls
Makefile crtn.c kozos.h make.sh startup.s
command.c extintr.c ld.scr memory.c syscall.c
configure.h extintr.h lib.c memory.h syscall.h
crt1.c idle.c lib.h serial.c thread.c
crti.c kozos.c main.c serial.h thread.h
% cat *.[ch] | wc -l
1933
% cat thread.c | wc -l
554
%

ソースコード全体で,2000行を切っている.中核である thread.c にいたってはわずか500行程度.これだけでも,スレッド管理やメモリ管理をしてくれて,スレッド間通信も提供されている.OSってこれくらいで作れちゃうもんなんだな.

どうも,OS作るのは非常に難しいと無駄に思われている気がする.しかしOSって簡単なものならば作ることはたいして難しいことではなく,ソースコードの量的にはむしろパッと作ってしまえるようなものだ(実際,KOZOSの原型は1日程度で作っている).そりゃまあファイルシステム積んだりネットワーク機能積んだり多CPU対応したり様々なデバイスに対応したり汎用的な構造にしたりすれば,そりゃもうたいへんな時間と知識が必要だ.だけどそれらはOSの本質ではなくて,最低限の機能に抑えれば,わずか2000行程度で書けてしまうもんなのだ.

組み込みOSはとっつきにくいとか勉強が難しいとか自作はたいへんと思われている理由なのだけど,思うにはじめるまでの敷居が高いのが原因だと思うのだな.まずは動かしてみてみたいので,なんらかの組み込みOSが動作するターゲットボードを選ばなければならないのだけど,これが数万円もして,それでも頑張って購入して,ビルド環境作りに3日間,OSがビルドできるようになるまでさらに3日間,で,ようやくファームウエアが作成できて,インストールしてリセットボタン押したらウンともスンとも言わない...こんな感じで,普通はモチベーションが続かずに終ってしまう.ほんとはOSの勉強がしたいのに,それを動かして試してみるというスタートラインに立つまでだけで,いろんなハードルがあるわけだ.これは,それが本業ならばいいのだけれど,勉強のために個人でやるとか,中学生や高校生が遊びや部活動でやるとなると,作業的にも金銭的にも,ちょっと厳しいだろう.KOZOSのユーザーランド動作は,このような現状に対するひとつの回答でもある.

世の中にOSは星の数ほどあり,オープンソースなOSもいろいろあるのだけど,OSの勉強となると,サンプルに適切なOSがあまり無いと思う.まず思い浮かぶのはLinuxやNetBSDだけど,これらはOSの勉強には大きすぎるし,まず全貌を理解できない.

あとはμiTRON系のTOPPERSHOSなのだけど,これらも(OSの基本構造の学習用サンプルとしては)大きすぎると思う.あとμiTRON系だと,結局はμiTRONの勉強になってしまい,「OSを作る」という学習には向いていないと思うのだな.というのは,μiTRONのかなり完成された仕様がすでに存在しているので,自分でシステムコールを設計したり追加したりする,という学習に向いていないと思うのです.仕様がはじめから用意されているので,どんなシステムコールが必要なのか?そのシステムコールがなぜ必要なのか?という学習にも向いていない(そのシステムコールははじめからありき,という雰囲気になってしまう).あとわからないことあるとすぐに「μiTRONの仕様を読んで...」ということになってしまい,これってOSの勉強でなくμiTRONの(仕様の)勉強だよなあ,ということになりがちだ.

実際,μiTRON関連の書籍とかはいっぱいあるのだけど,「μiTRONの上でアプリを作って動かしてみよう」「μiTRONを使って制御実験をしよう」というような感じで,まずμiTRON系OSありきで,その上でアプリを動かす,という内容のものがほとんどであり,OSを自分で設計して作る,どのようにしたら便利な(実用的な)OSになるか考える,という方向性のものではない.

で,KOZOSの目指すところとなる.
  • PC-UNIX上で動作することで,誰でも簡単に(ボードを購入することもなく)試せる.
  • さらに実ハードウエアで動かしたいと思っても,数千円で買えるような(中学生がおこずかいで買ったり,高校のパソコン部が部費で買えるような)ボードの上で動作する.
  • ソースコードは余計なものは一切はぶいて,要点のみわかりやすくする.大規模開発やオブジェクト指向などの知識が無くても読める.プロのプログラマとしての知識が無いアマチュアにも読める.
  • 多CPU対応については,ソースコードは共通化せずに各CPUごとに専用化して,読みやすくする.
  • 多ボード対応時に,そのボードでのスタートアップガイド(まあ,このホームページですが)を充実させる.
  • ビルドのためにスクリプト実行とかは不要.動くソースコードをパッと読める.
このへんがKOZOSの目指すべきところなのではないかと思うのだな.実用性とか,多デバイス対応とか,多CPU対応とか,そのときのソースコード共通化とかは考えないわけだ.だってそのようなきちんとしたOSはすでにいっぱいあるし.まあもともとKOZOSはぼくの趣味と勉強のために作っているのだけれど,せっかく作るのならば,今までに無いものにしたいなあというわけだ.