パスワードを忘れた? アカウント作成
497581 journal

cyber205の日記: OS開発ネタでなんでそこまで荒れるかな

日記 by cyber205

単なるアプリケーション開発とOS開発の違いを一言で言うと、
「本質的に、アプリよりOSのほうが動かすのは難しい」ってことだろうな。
もちろんレイヤーが違うわけだけど、そこそこOSができあがってる環境なら、
そのOS用の開発ツールそろえて、必要なことはOSのレイヤーを叩けばいろいろ安全に知ることができる。
移植が完了していれば、ドライバも揃ってるだろうし。実際のところ、資源管理は頭のいい人が
誰か書いたものをもってくればいい話で、本当に大変なのは泥臭いコーディングを要求され、
いろいろ揃えないといけないドライバ部分だと思う。

まぁ、μITRON準拠のTOPPERS/JSPみたいに、CPUまわりを拡張してマルチスレッド実行するための、
最低限の機能しか持たず、メモリ等の資源保護機能が無くて、デバイスドライバとアプリケーションの
差異がほとんど存在しないようなOSだとちょっと同じに見ることはできないんだけど、

ある程度しっかりした保護機能を持つOS、基本ソフトウェアをきちんと動かすのはかなり難しい。
確かにグチャグチャなソースコードのアプリケーションを移植するのも難しいっちゃ難しいだろうけど、
そういうのとは本質的に違う難しさがある。
既存OSの移植で済ませるにしても、ハードと仕様書を用意して初期化コードをアタッチして、
もしくはスクラッチから書く必要があるのは、やはりOS開発ならではの大変さだし、
プログラム上での論理が正しくてもハードのバグでアドホックな対処を要求されることは多々ある。
特にデバイスドライバなんかの移植は本当に大変なのだ。なにしろ、割り込みをONにしたとたんに
できたてホヤホヤのバグだらけなドライバは「ドカーン」なんだよ。一気に暴れだす。
LinusがLinuxの初期開発について語った時のように「死ぬほどリブートしまくる」必要があるのが
OS開発の辛いところ。メモリを破壊されたら、安全に動くよう復旧させるより再起動のほうがまだ速い。
最近はJTAGなどでそれなりのリモートデバッガが使えるからずっとマシなのかもしれないが、
「OSの保護が効かないから誰も暴走を止めてくれない」ってのがカーネル開発の難しさだ。
特にリアルタイム性を重要視するアプリでは実時間で動作を追わないと出てこないバグがあったりして
なかなか大変。ハードは動作を待ってはくれないのだから。(エミュレートしながら開発する人もいるが)
OSの動作がひと通り頭の中に入っていて連想できる状態でないとデバッグは難しいので、結構頭を使う。

だが、OSはその上で動くアプリよりも自由度が高いから改造できる場所も多い。
特権モードの奥で秘密裏に行われるハードウェアとの対話は、確かに難しいけれど、
その重要性は特筆すべきものだ。たとえば「ハードの性能を引き出すチューニング」なんかは
このレイヤーに依存する部分が多い。もちろん、きちんと動かせることが大前提なわけだが。
だから、彼が大トロ好きで、OS開発はそのようなものだと考えているその理由はわかる。

料理人が素材を見ながら「どんなおいしい料理を作ろうか、どうやって素材の良さを引き出そうか」
と楽しんでるのを横から「たかが料理人のくせにいい気になるなよ、食べるのだって楽しいんだ」
と貶す(けなす)のはおかしいと思うんだけどな。

Linusだって「そんな古臭い構造のOSをわざわざ1から作って何が楽しいんだ」って批判されたものだけど、
当時普及しはじめた「保護機能を持ち、実用的な速度で動く386PC」「インターネットでの情報交換、相互開発」
「ユーザコミュニティの育成」に成功してここまで普及した。もちろん私も使っている。
決して意味のないことではなかったと思うのだよね。(時期的に機が熟していたのだろうけど)

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

Stay hungry, Stay foolish. -- Steven Paul Jobs

読み込み中...