オープンソースソフトウェアとセキュリティ(1/2)

オープンソースソフトウェアだから安全だ、あるいは危険だといった論じ方をされることがあるが、果してそれは正しいのだろうか。

オープンソースソフトウェアとそうでないソフトウェアを比べるような文脈において、次のようなことが周期的に語られているように思える。つまり、それぞれのタイプの代表的なソフトウェアにおけるセキュリティ関係のバグの数によって、各タイプのソフトウェアの安全性や危険性を論じようとすることだ。比較的はっきりとした数値が示されることもあり、見方によっては説得力を持ってしまうこともある。しかし、かなり単純に考えても次のようなことが言えるだろう。

  • カウントされるのは発見され、かつ、公表されたバグだけである。発見されたバグのすべてをカウントすることはできない。
  • バグはよく使われているソフトウェアほど見付けられやすく、あまり使われないソフトウェアでは見付けられにくい。
  • 同じくらい広く使われているソフトウェアであっても、より多様な使われかたをするもののほうが、発見されるバグは多くなりがちである。

バグが多いソフトウェアほど発見されるバグの数が多くなりがちなのはたしかだろうが、かと言って機能、規模、用途など各種の条件あるいは仕様が異なっているソフトウェアについて、それぞれのバグの数だけを比べあっても安全性を論じたことにはならない。よく知られているバグがどれくらいあるかが分かるだけだろう。ましてや種々雑多なソフトウェアを集めてきて十把一絡で足し算をしても得られるものはなさそうだ。

ただし、バグの状況を調べることそのものに意味がないかというと、そうではない。ソフトウェアの品質を判断するにあたっては、これまでの実績に頼らざるを得ない部分が大きい。だから一つ一つのソフトウェアについて、たとえば放置されているバグがどれくらいあるかや各バージョン間でのバグ数の推移を調べたり、バグが解決されるまでにかかった時間やその間になされた議論、予備的な対応を調べたりするのは有用だろう。この点においては、より効率的に、より正しく調査できることが望まれる。

また、同じような文脈でこんなことが言われることもある。オープンソースとして誰でもソースコードにアクセスすることが可能だとは言っても、ソフトウェアの難しい部分を理解でき、かつ、実際に手を動かすことのできるプログラマは少数なはずだ。よって「難しい部分」のあるソフトウェアについてはオープンソース一般に言われているメリットを享受することができない――というわけだ。

これについては少なくとも二通りのことが言える。まず一つは、難しい部分があったとしても、その難しさも含めて公開されているのであるから、エンジニアが新たに加わる可能性はたしかにあるということ。ソースコードへのアクセスが制限されていれば、可能性はより限られたものとなるかもしれない。もっとも、技術力のあるエンジニアがいくらいても、そのソフトウェアへの関心が持たれなければ開発に加わることはないため、オープンソースであるからという理由で楽観することはできない。

もう一つ言えるのは、企業内でクローズドな開発をしている場合であったとしても、本当に難しい部分を理解できるエンジニアの割合が小さくなるという事情に変わりはないはずであるということだ。開発主体が何であれ、無限にコストをかけることはできないし、エンジニアの意識を高いレベルに保つことは難しい(強制されていればなおさら難しい)。結局のところ、オープンソースであってもなくても、能力の高いエンジニアを集めることは難しいのである。

オープンソースのもう一つの性質

さて、ここまでに挙げてきたオープンソースの性質に関連して、注目すべきことがある。それはオープンソースプロジェクトの多くに共通して見られる開発体制のオープン性だ。

クローズドな開発が行われている場合、エンドユーザの視点からは開発の様子を窺い知ることはほとんどできない。例えば、実際にはどのようなレベルのエンジニアが何人いて、どのような体制がとられているのかは分からないことが多い。これに対して、多くのオープンソースプロジェクトでは、誰がどんな作業をしているのかがクリアであり、調べさえすれば開発体制や開発状況のほとんどが誰にでも把握することができる。開発状況を見渡すことができれば、そのソフトウェアが十分にメンテナンスがされているかどうか、バグへの対応、改良や機能追加の様子などの動向も分かり、広い意味でのソフトウェアの品質を知る上で重要な情報を得ることができる。

ソフトウェアを実際に使用するのはエンドユーザであり、直接的な利害を受けるのもエンドユーザである。その意味でエンドユーザがソフトウェアの品質を理解しておくのは重要なことだ。オープンソースの要件では開発プロセスについては触れられていないが、そもそもの性質のために、ソフトウェアが使われるようになればなるほど開発の実態が見えやすくなってくる。あらゆる情報が誰に対しても同じように開かれているのがオープンソースソフトウェアの性質の一つであり、ユーザに対しては非常に正直な存在だと言えるだろう。そんなオープンソースを十分に生かすための最初の一歩は、ユーザ自身がオープンソースとその正直さを理解し、さらにオープンソースの使い方を理解することだ。

オープンソースは魔法の杖ではないので、オープンソースであるということだけからは何かを得られることはない。オープンソースをオープンソースとして活用するためには、様々な形でユーザ自身が動くことも必要となってくる。次の記事にてエンドユーザにできることについて考えてみようと思う。