KOZOSの方向性について

2009/03/08

あなたは 人目のお客様です.

えーと, 移植編第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の目指すところとなる.

このへんがKOZOSの目指すべきところなのではないかと思うのだな. 実用性とか,多デバイス対応とか,多CPU対応とか,そのときのソースコード共通化 とかは考えないわけだ.だってそのようなきちんとしたOSはすでにいっぱいあるし. まあもともとKOZOSはぼくの趣味と勉強のために作っているのだけれど, せっかく作るのならば,今までに無いものにしたいなあというわけだ.
メールは kozos(アットマーク)kozos.jp まで