Previous Next Contents


5。バラがバラでないのは?

Linusの行動を研究して、それが成功している理由について理論ができた ので、この理論を自分の(確かにずっと単純で小規模な)プロジェクトで 試してみようとぼくは意識的に決めた。

でも、まずやったのはpopclientを再構成してすごく単純化することだった。 Carl Harrisの実装はすごくしっかりしていたけれど、Cのプログラマに ありがちな、無用な複雑さが見られた。かれはコードを中心に考えていて、 データ構造はコードのサポートとして扱っていた。結果として、コードは 美しかったけれど、データ構造のデザインはいきあたりばったりで、 いささか醜かった(少なくともこの老いぼれLISPハッカーの高い基準で 見れば)。

でも、書き直しをやったのは、コードやデータ構造の設計を改善する以外 にも目的があった。それは、このソフトを進歩させて、自分が完全に理解 してるものにすることだった。自分でもわかってないプログラムのバグを なおす責任をしょいこむなんて、おもしろくもないからね。

そして最初の1ヶ月かそこらは、単にCarlの基本的な設計の考え方を 追いかけてただけだった。ぼくが加えた最初の大きな変更は、IMAP のサポートを加えることだった。これは、プロトコルマシンを、 汎用ドライバとメソッドテーブル3つ(POP2、POP3、IMAP用)に 再構成することで実現した。これと、その前の変更は、プログラマとして 頭にいれておくといい一般原則を示すものだ。特に、ダイナミックなタイプ 処理をしないCみたいな言語では:

9。賢いデータ構造と間抜けなコードのほうが、その逆より ずっとまし。

またもやFred Brooks本の第11章から。「コードだけ見せてくれて データ構造は見せてもらえなかったら、わたしはわけがわからぬまま だろう。データ構造さえみせてもらえれば、コードのほうはたぶん いらない。見るまでもなく明らかだから」

ほんとはかれが言ったのは「フローチャート」に「テーブル」だった。 でも30年にわたる用語面・文化面での推移を考慮すれば、ほとんど 同じことを言ってる。

この時点(1996年9月頭、ゼロ時点から約6週間後)で、ぼくはそろそろ 名前の変え時かな、と考え出した。なんといっても、もうPOPクライアント だけじゃなくなってたんだし。でも、ためらった。いまのところ、まだ このソフトにはまったく新しい部分が何もなかったからだ。ぼく版の popclientは、まだ独自のアイデンティティを確立するにいたってなかった。

これが派手に変わったのは、fetchmailがとってきたメールをSMTPポート に転送する方法を身につけたときだった。この話はまたあとで。それより まず:上で、このプロジェクトを使って、Linus Torvaldsがうまくやった 点についての自分の理論を試すことにした、と書いた。試すって、どう いうふうに?(という疑問は当然起こるだろう)。それは以下の通り:

  1. はやめしょっちゅうのリリースを心がけた(間が10日以上開いたことは ほとんどない。集中して開発しているときは、1日1回)。
  2. だれかがfetchmailの件で連絡してきたら、その人をベータリスト に加えてリストを増やした。
  3. リリースごとに騒々しいアナウンスをベータリストに送りつけて、 みんなに賛歌をうながした。
  4. そしてベータテスタたちの言うことをきいて、設計上の判断について 意見を求め、パッチやフィードバックを送ってくれたら必ずほめた。

こういう単純な方法の見返りはすぐにやってきた。プロジェクトの始め から、ぼくは他の開発者なら死んでもいいと思うような質の高いバグ レポートをもらったし、しかもそれになかなかいいフィックスまで ついてきた。よく考えられたコメントももらったし、ファンレターも きたし、賢い機能の提案ももらった。これでわかるのが:

10。 ベータテスタをすごく大事な資源であるかのように 扱えば、向こうも実際に大事な資源となることで報いてくれる。

Fetchmailの成功をはかるおもしろい指標としては、このプロジェクト のベータリスト――fetchmail友の会――のサイズを見るといい。 執筆時点では249人で、毎週2、3人追加されている。

実は、1997年5月に改訂している時点だと、このリストは人数が減り はじめてる。その理由がおもしろい。何人かがリストから外してくれ といってきたんだけれど、それはfetchmailがかれらにはまったく 文句なしに機能しているので、メーリングリストのトラフィック を見る必要がないと言うんだ。成熟したバザール形式のライフサイクル では、これが自然なのかも知れない。


Previous Next Contents