はじめてのOSコードリーディング

Lions' Commentary on UNIX 読書会で親交のあった@superhogeさんが「はじめてのOSコードリーディング」を上梓される(「はじめてのOSコードリーディング」という本を出版します)。読書会の活動が書籍として結晶したことに感動するし、自分が生まれた頃のソースコードの解説本が今出版されるというのも感慨深い。

OSに限らず技術には理論と実践の両面がある。UNIX V6やLions本が出た頃は、OSの黎明期であり、その理論については論文などで知ることができたけど、実際にどのように作られているのか、その方法についての情報は手に入らなかった。そこにLions本が受け入れられた背景がある。翻って現在は、実践的な情報が氾濫している。で、どこから初めていいのかわからず思考停止に陥ってしまいがち。まず簡単なところ(しかし、トイOSではなく実用に耐える(た)OS)から一歩踏み出してみようというのが、本書の価値じゃないかな。

UNIX V6は約1万行とコンパクトにも関わらず、近代的なOSの基本的な概念はすべて実装されている。1万行というと、LinuxのDocuments以下よりも少ないw コンパクトな実装のOSならば探せばいろいろあると思うけど、その辺のトイOSとは異なり、UNIX V6は実用として使われた実績がある。バグがないとは言えないけど、短くてもよく考えられており、読む価値がある。あとロジックが単純という点も読みやすさに貢献している。ハードウェア資源に制限があるので、固定配列を線形探索が基本である。もちろんpre K&R CやPDP-11という問題点はある。pre K&Rには慣れるしかないのだが、PDP-11に関しては、ドキュメントが豊富だし、simhシミュレータで動かしながら動作を追うことができる。この際、プロセッサアーキテクチャも一緒に勉強してしまうのもよいかも。

少し自分語りをすれば、私においての「はじめてのOSコードリーディング」は、大学の研究室で開発していた独自OSだった。作っている人が隣にいるので分からないことは聞けたし、何しろそれを理解して改造できないと卒業できないので、必死だった。サイズも適当だったしね。論文は全く書けなかったけど、今の仕事の血肉になっているのは確かだ。

有名な1974年のCommunications of the ACM誌の論文("The UNIX Time-Sharing System")には、(あまり知られていないかもしれないけど)システムにソースコードを含めて出荷することの重要性が指摘されている。さらにシステム開発・保守の観点から、単にソースコードが見られるだけではなく、セルフ開発できるべきであり、そのために全ソースコードをシステム上に置く必要があると書かれている。とことんプログラマ向けの思考である。

閑話休題。この本をきっかけにOSの中の実装に興味を持ってくれる人が増えることを期待したい。一人で読むのは辛いという人は読書会などのイベント(はじめてのOSコードリーディング 読書会)を活用するとよい。

さぁ、正月休みにじっくり読むことにしよう。

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)