最近、PHP言語のとある有名なライブラリにバグを見つけたのでレポートしたら、即座に修正版がリリースされた。
別に大したことではないのだが、ついでなので、オープンソースソフトというものの品質とその管理サイクルはこういうものなんだよという話をつらつらと。
PHP言語にはPEARと呼ばれるライブラリ群がある。perlでいうところのCPANにあたると思ってもらえばいい。Javaで言うとjakartaがそれなのかな。
PEARのひとつとしてCache_Liteモジュールと言うものがある。様々なリソースをキャッシュ(一時保存)してくれる便利なクラスだ。PHP関係の書籍でもたいてい紹介されていて、これに依存しているほかのモジュールも少なくない。メンテナはこの人で、フランス人らしい。
ここからは時系列で書こう。すべて日本時間。
| 2006年2月21日 |
Cache_Liteのバージョン1.7.0(stable)がリリースされる。stableとは安定版の意 |
| 2006年5月13日15時54分 |
上記のバージョン1.7.0を使った筆者がたまたまバグを発見。バグレポートを投稿する |
| 2006年5月13日19時32分 |
バグのステータスがOpenからVerified(確認済)に変わる。誰かが(たぶんメンテナが)確かにバグであることを確認したということだ。この作業日時はWebの記録には残らないらしいが、通報者である筆者の下には自動でメールが届いていた。 |
| 2006年5月14日7時12分 |
修正版がCVS(ソースコード管理サーバ)上に格納される。同時にステータスがclosedに変わる。これでバグ管理データベース上での作業は完了となる。この段階ではユーザーはcvsに匿名アクセスすればコードをダウンロード可能だがそこまでやる人は少ない。大したバグではない場合にはこの状態でしばらくの間放置され、他のバグの修正や機能追加とあわせて数日から数ヵ月後のリリースとなることが多い。 |
| 2006年5月14日7時21分 |
10分とたたずに1.7.1とバージョン番号を上げてstable版としてリリースされた。大したバグだったらしい(笑)。
この段階ではユーザーはpear upgradeコマンドなどを叩くだけで自動アップデートすることが可能になる。 |
先にバグの内容について触れておくが、同じキャッシュIDを使った複数回のキャッシュ保存&読み出しができない(最初の1回目しかうまくできない)というものだ。コードを読める人はこちらで一目瞭然。使い方がおかしいとか意地悪すぎるテストコードだとかいうものではない、普通に実装されうる使い方を、ちょっと短く書き直したものだ。
はっきり言ってかなり致命的というか基本的なバグである。
ここからは、それぞれの事象について適当に述べてゆくことにするので適当に読んでいただきたい。
まず、基本的かつ致命的なバグを抱えたコードがStable(安定版)として公開されていたという事実。と言うと「ひどいもんだなぁ」という人と「そんくらいかわいいもんだろ」という人とに分かれる。後者は当然ソフト開発やその業界の現場の人に多い。客観的に言うと、この程度の現象はソフト業界ではしょっちゅう起こりうることである。
さらに、2ヵ月半も誰もバグに気づかなかったという事実。あるいは気づいた人は世界中のどこかに一人か二人くらいいたのかもしれないが、報告はされなかった。あるいはバグにぶちあたるような書き方のソフトが少なかったため見つからなかったせいもあるだろう。もっとも多いと思われる理由は、皆が最新の1.7.0よりも古いバージョンを使っていたということだろう。
しかし、誰でもいい、世界中の開発者のうちの一人でもいいから、バグに気づき「バグじゃね?」とひとこと報告した瞬間にあっという間にソフトは修正される。上の表で、筆者がバグを報告してから次のバージョンができるまでに24時間もかかっていないことにご注目いただきたい。企業組織にはマネのできないスピードである。もちろんバグの程度にもよる。ちなみに今回修正されたのはたったの一行である。(笑)
今回、メンテナーさんは筆者が投稿したバグの再現コードにちょっと手を加えただけでそのまま
テストコードにしたようだ。自動単体テストと呼ばれる仕組みである。以後、すべての開発者はいつでもコマンド一発でこのテストを実施できる。二度と同じバグを発生させないための仕組みだ。多くの企業の開発現場で機能追加やバグ修正のためにコードに手を入れるたびにけだるそうな顔をしたプログラマーがMS-Excel上にずらりとならんだ単体テスト項目に沿ってひとつずつテストしなおしているのと比べると、なんと合理的なことか。
オープンソースはいい面ばかりではない。Cache_Liteのメンテナーは現在のところfab氏だけのようだ。cvsの履歴を追うと他の2,3人もかかわっているようだが、もしもfabさんがやる気をなくしたり車で事故ってもうそれどころじゃないとかなったら? もちろん他のだれかが引き継いでくれるだろうが、そうならないケースもある。
XML_Beautifierモジュールはもう長いことメンテナー募集の状態のままだ。
「GMOインターネット証券はJBoss,MySQL,PHPなどオープンソースを活用」だそうだ。
ネット証券のシステムでつまらないバグを出したりしたらただじゃすまないのでテストはしっかりやっているのだろう。それでも、そのシステムが土台としているオープンソースソフトウェアたちの品質とその修正プロセスは、実はこんな感じなんだよ、ということは知っておくべきだろう。
see also:
「CVSの言い訳」と途方にくれるユーザ(japan.linux.com 2006/5)