Friday, November 15, 2013

もうひとつの知られざるオープンソース 〜 ウェブ企業のOSS戦略

「オープンソースソフトウェア(OSS)」と聞いて、あなたがイメージするものはなんですか? 多くの人は Linux や Apache、Firefox といった成功した大規模なソフトウェア製品を思い浮かべることでしょう。

実は、ウェブ上でサービスを提供する会社のエンジニアたちは、これらとは別の種類のOSSを使って仕事をしています。このブログエントリでは、そのようなOSSを紹介し、それらがなぜ開発され使われているかを説明したいと思います。


■ウェブ企業におけるOSS開発の実例と合理性

下の図は、Perl で記述される大規模ウェブアプリケーションの一般的な構成を示しています注1。このうち、「自社ロジック」と書かれているところ以外は、全てオープンソースとして開発/公開されているモジュール(ソフトウェア部品)です。各社のエンジニアが密接に協力しながら、ミドルウェアをオープンソースとして整備していることがわかるかと思います注2


このような部品開発における会社を超えた協力体制は、Perl以外のプログラミング言語を使っているウェブ企業でも良く見られるものです。

いったいなぜ、そのような協力がなされるのでしょうか。

「そのようなエンジニア文化だから」というのもひとつの答えかと思います。ですが、彼らが業務の一環として開発したミドルウェアをオープンソースとして公開している以上、文化を裏打ちする経済的合理性を考えないわけにはいきません。

ウェブ業界は、主にコンテンツをユーザーに配信する企業群として成長してきました。これらの企業におけるコアコンピタンスとは、コンテンツ(あるいはコンテンツを提供してくれるユーザー)です。このため、ソフトウェア自身を金の卵だと考えるソフトウェア業と異なり、ウェブ業界では、ソフトウェアはコンテンツを配信するための手段だという位置づけをされることが多々あります。そして、ソフトウェアが売上をあげるための手段である以上、その開発/運用コストを削減することが重要になります注3

種々多様なコンテンツにあわせて迅速にソフトウェアインフラを整備し安価に運用するためには、カスタム開発を最小限に抑える必要があります。また、社外への発注や人材の流動、ビジネス規模の変化を考慮した場合、ソフトウェアスタック全体を内製し社内で維持改善を続けるよりも、業界全体のデファクトスタンダードとなる実装が自社の都合にあった形で存在することが望ましいと言うことができます。

図で示したソフトウェア構成は、この経済的な要求が反映された結果なのです。

たとえば、Furlを見てみましょう。2010年に開発が開始されたFurlは、LINEに勤務するエンジニアがメンテナンス権をもっている高速かつカスタマイズが容易なHTTPクライアントであり、サーバの必要台数がコストに響くような大規模サービスで好んで使われています。一方で、その開発には、当初からDeNAに所属するエンジニアが参加しており、同社の影響も大きいものがあります。その顕著な例が、DeNAの要件にあわせて追加された、DNSリゾルバの置換機能です。

一般的な使用形態において必要ない機能というのは、第三者が、たとえ必要なコードを書いて追加をお願いしたとしても、なかなか受け入れてもらえるものではありません。それは、機能の追加をいったん受け入れてしまうと、以後その機能をメンテナンスしていく責務が主開発者の肩にかかるからです。にもかかわらず、Furlに同機能が追加されたのは、両社のエンジニアが継続的に共同作業を行っており(Furlが、DeNAのエンジニアがメンテナンスしているHTTPパーサライブラリを使っていることを含みます)既に信頼関係が構築されていたという事情を勘案する必要があるでしょう。

このように、継続的にオープンソースのミドルウェア開発に参加することでコストを分担しつつ、自社にとって便利なものにしていく、という営みが実際に行われているのです。


■OSS共同開発のリスク評価

では、経済的な合理性はあったとして、部品を共同開発することによるリスクはないのでしょうか。よくある質問は「ある会社の社員が、ライバル社に害をなすような機能を組み込んだりしないのですか」というものです。ウェブ企業のエンジニアたちによるオープンソース開発では、この点についても抑止力が働く構造になっています。

本稿で例に挙げたOSSはいずれも、誰がどの機能を書いたか、コミットログを追うことで全て把握できるようになっています。そして、エンジニアのコミュニティにおけるコードの品質に対する最初の評価基準は、どの会社のエンジニアが書いたか、ではなく、誰が書いたか、という点です注4

この条件下において、悪意のあるコードをOSSに埋め込むことは、エンジニアにとってキャリアの終わりを意味します。そのような行為に手を染めたエンジニアは、以後就職先を見つけることはできないでしょう。終身雇用が期待できる業種なら、それでも悪行を働くインセンティブがあるかもしれませんが、ウェブ業界は転職を前提としたキャリアプランを立てざるをえないところです。このように、職業倫理のみならず経済的側面からも、共同開発によるリスクは抑えられていると言うことができます。実際には、コードが多くの目にさらされることによる品質向上効果の方が大きいと考えるべきでしょう。


■まとめ

以上、述べてきたように、ウェブ企業におけるオープンソース開発は、サポート収益を期待するソフトウェア企業のオープンソース注5とは大きく異なる原理に基づいて活発な開発が行われている分野です。コンシューマには見えない小粒なソフトウェアが多いがゆえに見落とされがちな分野ですが、オープンソースソフトウェアに関する議論や検討を行う際には、これらの活動とその背景についても理解しておくことが望ましいかと思います。

注1: 主要なモジュールと本稿に登場するものを中心に抜粋して図示しています。実際には、他にも多くの人が開発した様々なOSSモジュールが使用されています
注2: 会社の枠を超えた恊働の実態とOSSを使うに際してコミッターの所属を気にする必要がないということを説明するためにあえて社名を出しているだけなので、その点、ご理解とご配慮をいただけると幸いです
注3: 主目的がサポート収益の最大化ではなくコードの共有によるコストの削減であるため、ウェブ企業が公開するOSSについては緩やかなOSSライセンスが選択される傾向にあります(Perlモジュールの場合はPerl License(Artistic LicenseとGPLのデュアルライセンス)が通常)
注4: 品質の高い貢献が従来から多い人のコードは信頼される一方、新規参入者のコードは注意深く検査されるという意味です
注5: ソフトウェア企業の(OSSを含む)競争戦略については、やや古いですが「ソフトウエア企業の競争戦略」(マイケル・A.クスマノ)が良書だと思います

9 comments:

  1. I like this a lot. Thank you for sharing. I'm always looking for upcycles like this. In the end, you don't know it was a shipping pallet to begin with!
    Australia vs India Fixtures
    ICC T20 World Cup 2016 Time Table

    ReplyDelete