オープンソースという言葉が一般化して、多くの人が使うようになってきたというのは感慨深いものです。ただ、同床異夢というというか、オープンソースというものに対していろいろな誤解とか先入観があるように感じます。僕もまだ業務としてプロダクトを作ってオープンソース化したことはないので(パッチとかpull requestはよく送っている)、至らぬところもあるかもしれませんが、そのようなものがあればTwitter等で補足してもらえればと思います。
手間を減らすために、公開すればいいじゃんという誤解
今あるコードをgithubにgit commit, git pushすればすべてがバラ色、というのがよく言われることです。公開するのはコストゼロというのは本当なんでしょうか?少なくとも僕が知る限りではそうではありません。ざっと考えてこのぐらいの項目のコストがかかるかなぁ、と考えています。
- 社内の特許などの技術に関わるコードがないか、調査したり書き換えるコスト
- 外部ベンダー製のコードがあれば、書き換えるもしくは契約を結びなおすなどのコスト
- 社内のビルド環境に特化した部分などを書き換えるためのコスト
- ドキュメント整備のためのコスト
- ソフトウェアの資産=人件費の減価償却が終わってなければその精算
Windows規模ともなると、コードの調査だけで億の単位でお金がかかるんじゃないかな、と思います。マイクロソフトの場合は、互換性のためにバイナリバージョンを厳しく保持しているので、ビルドシステムも特殊かと思いますし、コンシューマOS、サーバとの共通コンポーネントなどもあって、必要なものを切り出してビルドできるようにするのも一苦労だと思います。公開したら即make worldコマンド一発でヒャッハーというわけにはいかないと思います。
企業内でもう使うことがないプロダクトか、そうじゃないかにもよって多少は変わってきます。企業で今後も使っていく場合には、開発の主体・意思決定を内部に持ったまま、外にだすことになります。当然、外部のユーザから来た要望に対して、企業の方針とすりあわせて方針を決定したり、変更が許容できない場合は今ある機能でどうやってそれを実現していくのかを説明するコストが必要となります。カスタマーサポート的なコストですね。エンジニアを数人張り付きで提供するならそれだけで数千万の費用になったりしますよね。それ以外にも法務のチェックとか、いろいろな部署に協力をお願いすることになるんじゃないでしょうか。
これらのコストをマイクロソフトが負担した上で公開しろ、というのは交渉としては成り立つ要素はゼロですよね。Blenderみたいにコミュニティで必要なお金を寄付で集めて、企業から買い取るという形で実現した例もあるので、お金を用意できればプロダクトによっては可能性はゼロではありません。Windows XPの場合にそれができるかというと、有料で延長サポートというのを行っているし、組み込み向けのWindows XPはまだ使われているので、マイクロソフトとしては「まだ生きている」という扱いなので門前払いじゃないですかね。
コミュニティのためのコスト
公開すれば世界中のエンジニアがなんとかしてくれる、というのも幻想ですよね。エンジニアの興味というのは水物です。餌があれば勝手に発酵する酵母菌とかと違って、興味がなければ見向きもされません。一生懸命ドキュメントをそろえようが、ソースコードをそろえようが、ダメな時はダメです。上記のコスト以外にもコストがかかります。
- コードに興味を持ってもらうための仕組みづくりのコスト
- コードに興味を持ってもらうための宣伝のコスト
貢献しやすい環境をうまくつくり上げることで、興味を責任感に変えて継続的にコミットメントしてもらう、というのを採用しているコミュニティがあります(Ubuntu)。貢献度でカルマが溜まって、ステータスがレベルアップする、みたいな。それ以外にも、プラグインの開発やライブラリの開発といった小さな単位でコミュニティに貢献していくという体制を取っている(各言語のコミュニティ、Fluentd周辺とか?)コミュニティもあります。お金とは違う、信用貯金なり、自己肯定感なりを通貨とする、新たな経済圏をコミュニティに組み込む必要があります。本体がOSSではないので例としてはすこし外していますが、アセットストアというものを提供することで直接お金を還元するUnity 3Dもコミュニティ実現のひとつの例ですね。これらは片手間でできるものではなく、開発者全員がコミュニティメンバーとしてコストを支払って雰囲気作りを下支えしたり、専門のコミュニティマネージャを雇うといったことが行われます。
イベントだったり、本を書いたりといったことを行って、広く知ってもらうことも行われます。企業主体のOSSであれば会社がお金を持ちだして会場を借りたり、社員を動員したりすることになるでしょう。うまくコミュニティができあがっていれば、ボランティアが時間を無償提供してくれますが、それもコミュニティができあがっていなければ成立しません。
で、古いOSのサポートというものに興味を持つエンジニアがどれぐらいいるのかというのが問題になります。お金を投入して仕組みづくりをしたりイベントをしたりしても、見向きもされなければお金を捨てるようなもの。僕が知るかぎり、BeOSのオープンソースでの再実装を目指すHaikuとか、FreeDOSとかそのぐらい?Windowsということであれば、ReactOSとかWine(OSそのものではないけど)などがあります。一部に人気のあったOS/2とかのOSS実装とかはないみたいですね。Windows XPのソースを与えられてうれしいエンジニアっているんでしょうかね?仮にいたとして、「うちのVB6.0で作られた社内システムが動かない」みたいな要望なり苦情なりを受けて、モチベーションを保っていられる趣味プログラマというのが想像できないです。
危険度があがる可能性の方が高いかも
どちらかというと、クラッキングして情報を盗んだり害を与えようという人たちの方がモチベーション高いでしょうし、ソースコードが公開されても、セキュリティ・ホールを見つける手段を提供するだけで、危険度が増える結果になるんじゃないでしょうか?あと、OSS版Windowsが提供されたとして、それをどのようにインストールするのか?というのも問題ですね。Windows Updateを上書きなりして、マイクロソフト以外の人が修正したモジュールをバイナリでインストールさせるというのは危険すぎますよね。RPMなりUbuntuなりPortsなりで似たようなモジュール更新の仕組みはすでに実現されていますし、きちんとしたコミュニティが運用すれば危険度は高くないですが、そもそもサポートが終わっているWindows XPを使おうとするユーザはクラッカー的にはネギを背負ったカモですしね。アップデートの仕組みでインストールなんて危険すぎます。じゃあインストールイメージをビルドして、クリーンインストールするかというと、それも面倒でしょうし、やらないですよね?インストールにかかる人件費を考えたら、延長サポート購入した方が安価ですよね。まぁ、人件費は人事部が持つ固定費で、ソフトウェアは部のお金だから前者でカバー、みたいなのは実に日本的な気がしますが・・・
コミュニティにメンバーを引き寄せるのは「ネコを引き寄せるようなものだ」と著名なコミュニティマネージャのJono Baconも言っています。まずはアート・オブ・コミュニティ
を100冊ぐらい買って、積んでその山を眺めていれば何かつかめるものがあるんじゃないでしょうか(ステマ)。企業がOSSをしようとすると、すごい手間(=人件費=お金)がかかるんですよね。昭和からある大企業特有の難易度insaneなスタンプラリーとか、前例主義みたいなのをちらっと見て経験から、日立のOpen棟梁の公開を実現した人たちの努力って並大抵のものじゃないと思うんですよね。お疲れさまでした!寄付代わりに日立の家電を買って貢献したいと思います。昔から日立のドラム式洗濯機のファンです!