「群衆の叡智サミット」という討論会に,パネラーとして出席しました(関連記事)。
「群衆の叡智」という言葉は耳慣れない人も少なくないかも知れませんが,あちこちで解説されたり使われている言葉なので,ちょっとぐぐってみればたくさんの情報に当たることができると思います。
「オープンソース」はよく「群衆の叡智」の例として挙げられます。これがそうであるか否かは,皆さん自身で考えてみられると良いと思います。私は最近の複数の事件から,ちょっとそうだと言い切るのは難しいのではないかと思い始めました。どう結論づけするかは,読者の皆さんにお任せするとして,今回はまずその「事件」について考えてみたいと思います。
最近起きたショックな事件
一つは「DebianのOpenSSL問題」です*1。詳しい障害の内容はリンク先を見て戴くと分かると思います。この問題はOpenSSLのメンテナがバグを取ろうとして間違った修正をした結果起きたものだそうです。この問題により,元々安全なはずのOpenSSLが,非常に脆弱な状態になってしまっただけではなく,それが原因となってDebianと関係のないシステムまでもが脆弱になってしまいました。私はセキュリティの専門家ではありませんし,この連載自体セキュリティを扱うものではないので,起きている現象についてここでは詳しく述べません。ただ,この連載的に重要なことは,「たった1人のメンテナのミスのせいで,非常に広範に悪影響を及ぼす障害を作ってしまった」ということです。
もう一つは「4.2BSD以降のすべてのBSD libcに残っていたseekdir()の問題」です*2。これはある特定の条件下でseekdirが正しい動作をしないというもので,バグの存在そのものは広く知られていたらしいのですが,ごく最近になって修正されたというものです。バグの存在が知られていたにもかかわらず,25年にもわたって修正されなかったというのは,ちょっとした驚威です。
いずれの問題も,オープンソースを肯定する理由の一つである「目が多ければバグも見つかる」ということに反した事件です。
*1 OpenSSL パッケージの脆弱性とその影響について (SSH鍵,SSL証明書等)
http://www.debian.or.jp/blog/openssl_package_and_its_vulnerability.html
*2 When seekdir() Won't Seek to the Right Position
http://www.vnode.ch/fixing_seekdir
オープンソースの品質改善
普段,我々が目にするオープンソースは,既にテストが終わったものです。とは言え,完全なテストが存在しないのは世の常ですから,すべてのソフトウエアでバグがないわけではありません。また,オープンソースのリリースには特に規定があるわけでもないですから,開発者によってはバグだらけのものをリリースしていることもあります。さらに,特にリリースということなく,cvs等をそのまま晒して「as is」で持って行くことにしている人もいます。ですから,実際に使っているうちに,バグが発見することが少なくありません。それを見つけるのはハッカーとしての楽しみの一つだったりするわけなので,だからどうだと責める性質のものでもありません。
理想的なオープンソース・プロジェクトの場合,バグを報告すれば直ちに修正され,修正版が公開されます。「直ちに」というのが難しい場合でも,いくつかの修正がまとめられた結果の「バグフィックス版」が公開されるものですし,そうでないものでも「次」の公開版ではバグも合わせて修正されているものです。このサイクルを繰り返すことにより,テストの不十分なソフトウエアであっても,どんどん品質を良くして行くことが可能です。ですから,多少品質が悪いものを公開してしまっても,早晩品質は良くなるものです*3。
多くの人が使っているということは,様々な条件の下で使われるということです。それは「実運用」であることは確かではありますが,作者の立場からすればテストをされているのと同じことです。つまり,完全なテストが困難であっても,テストそのものの頻度や条件を様々に取ることにより,良質のテストが行なわれたのと同じ効果をもたらすわけです。
この効果は延べの利用頻度によるものですから,なるべく大勢になるべく長い時間使われれば使われるほど,品質が良くなるわけです。「定番」が好まれるのも,このような品質改善の機会が多くあって高品質が期待できるからというのがあるわけです。
また,オープンソースの場合は利用者の手元にソースコードがあり,誰でも確認や修正が可能です。これはテスターが大勢いるということだけではなく,レビュアーがたくさんいるのと同じですし,デベロッパが大勢いるということにもなります。こういった諸々のものが相乗して,品質が良くなって行くのがオープンソースだということになっています。
*3 修正による品質改善は,「素状」を良くしたことにはなりません。とは言え,バグを取れば取るだけ,実用的な品質が向上するのは確かです。