未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

96/12/22 Unixのソースコードの解説本

シリコンバレー日記(96/12/22)より

http://web.archive.org/web/19990423081028/www.best.com/~yoshioka/d/96/12/i961216.html

Unixのソースコードの解説本

先日,IMUGの帰りに本屋でいくつか本を仕入れてきた.今日はその話.

Lions' Commentary on Unix 6th Edition, with Source Code, by John Lions; ISBN 1-57398-013-7,

Peer-to-Peer Communications, Inc.

これは70年代後半に出版されたLionsの著作の復刻版である.内容はUnixの第6版のカーネルソースコードとその解説である.

第6版というのは現時点でいえば技術的な資料性はない.歴史的な価値しかないしろものである.なんといっても20年前のソースコードである.実装したコンピュータはPDP11/45である.実メモリ64KBの16ビットコンピュータである.CPUの性能から言えば現時点のPCは1000倍位は強力であろう.メモリも数百倍つんでいるし.

にもかかわらづこれは面白い.非常に面白い.ソースコードを,うひょうひょいいながら面白いなあとか読む姿はおたくである.いつのまにかに自分もおたくになっていたのである.ベッドで寝ながらごろごろソースコードとLionsのコメント(解説)を読むのだ.色気もへったくれもない.あぶない光景である.

この問題の本はUnixのライセンス(AT&Tが当時持っていた)の関係で正規には出版されていなかったのである.唯一Unixのライセンスを持っているところが入手できたのである.というのが建て前で実は地下出版でこっそり出回っていたらしい.といってもわたしは実物をみたわけではないので真偽のほどはよく判らないのだけど.でもThe New Hacker's Dictionaryで紹介されているように伝説の地下出版だったのである.

ソースコードを読む技術というのはプロのプログラマには必須だ.しかしいきなり大規模なソースを読み,その技量をつけるというのもなかなか難しい.できればなんらかのガイドがほしいところである.そんなニーズにぴったりなのがこの本なのである.

Ken ThompsonとDennis RitchieがCを使ってどのようにUnixを構築していったがソースプログラムレベルで解説されている.昔の人の知恵を目のあたりにできる非常に貴重な経験である.


ソースコードは約9000行だ.1ページ50行2段組なので90ページ.解説が100ページあまり.これだけなのである.非常にシンプルだ.極めて簡潔である.そしてUnixを起源とするいろいろな歴史がここから始まったのである.

malloc()が2528行から定義されている.驚くほど単純なアルゴリズムだ.本体は10数行しかない.mfree()は2556行から定義されている.

ソースコードを読みながらいろいろなことを考えるのが冬の夜長である.若いプログラマ(おぢさんのプログラマでもいいんだけど)にはいっぱいソースを読んでそこからいろいろ学んでさらにいいプログラムを作って欲しいと思うのである.先人達の知恵を盗もう.そして新しい道を作ろう.




はげましのお便りは よしおかひろたか までどーぞ.

シリコンバレーでデータベースのカーネルプログラマをやっていたころの日記である。

Lions Commentaryは後に日本語訳を出版されたので読んだ人も多いと思う。

プログラマの基礎的な訓練としてソースコードを読むことの重要性は変わっていない。

オープンソースソフトウェアの偉大なる貢献の一つは、ソースコードの読み方の情報を共有できることにある。それは教育的な価値である。この点についてはもっと強調されていいと思う。

商用ソフトウェア開発の現場では新入社員(中途入社)に対して当該ソフトウェアのソースコードの読み方のガイダンスを行う。それは例えば下記のようなガイダンスである。

  • ソフトウェアアーキテクチャの概説(ソフトウェアの論理的な枠組の解説になる)。
  • 物理的な実装の概説。(ディレクトリ構造の解説、名前付け規約の解説など)
  • 開発環境の説明。(ビルドの仕方、チェックイン、チェックアウト、リグレッションテストの流し方など)

まあ、ソースコードの読み方と言うのはソフトウェア開発の極々一部であることは間違いないのであるが、重要な一部である。

プロのプログラマは、上記のようなガイダンスを受けた日から猛スピードで、ソースコードの改良、修正を始めるのである。(7つ道具として xemacs (エディタ)とか gdb (デバッガ)とかを使いまくって)