オープンソース活動がフルタイムの仕事になる仕組みの話

僕の仕事をひとに説明するときに、「Googleで仕事をしているけどオープンソースなのでGoogleのプロダクトを作っているわけではないし、むしろアップルとかソニーの人と一緒に仕事している」と言うと、「???」という反応になることが多いので、僕はこういう仕事をしているんだよということをここでちょっと説明してみようと思います。

(2016年の僕のFacebookの投稿の転載です。)

僕のいるチームはLanguage Platform Teamというところで、プログラミング言語や開発ツールの開発をしています。LPTの中にもいろいろ細かいチームが分かれているのですが、僕がいるのはC++チームで、Googleで主要開発言語になっているC++言語の開発環境を担当しています。

C++で開発をするときには、C++ツールチェインと呼ばれる一連のツールを使います。ツールチェインの一番大きなコンポーネントは、人間がC++で書いたプログラムをコンピュータで実行できる形式に変換するコンパイラと呼ばれるプログラムで、これは何百万行もあるような複雑で巨大なプログラムです。そのほかにもリンカというものや(これが僕がメインでやっている仕事)、デバッガというものもあります。

こういうツールはゼロから自社開発するというのは現実的ではないし、そういうことをしてもあまり意味がないので、よそから購入するか、オープンソースの無料のものを使うかのどちらかになります。普通はオープンソースのものが高品質でメンテナンス性もよいのでそちらを使うことになります。我々のチームもClang/LLVMというオープンソースのコンパイラを使っています。

そうすると会社における僕らの仕事というのは、社外のオープンソースのコンパイラのプロジェクトに参加して、自分たちの足したい改良点を既存のものに入れていく、ということになります。つまり素直な仕事のやり方をすると、開発したものはそのまま公開されてしまうわけです。

公開することが嫌ならば、ソースコードだけもらってきて自分たちの変更点はフィードバックしないということも可能ですが、そういう開発体制だと元のソースコードの開発ペースに追いついていくのが大変で、現実的には辛いことになるようです。例えば(アメリカの)ソニーはPlayStation 4の開発環境としてClangを利用して、当初は変更点をプライベートに保持していたのですが、Clangがアップグレードしたので新しいバージョンに社内の変更点を移植しようとしたら、その作業だけで数ヶ月もかかってしまったようです。それに懲りてソニーは変更点はなるべく直接オープンソースのほうに加えるようになりました。こうするとPlayStation 4スペシャルな変更点をあまり秘密にしておくことはできませんが、損得でいうとソニーはそれでよいというわけです。

Googleでも社内スペシャルな変更点というのは特にありません。性能向上の変更であろうと新規プロセッサへの移植であろうと、公開されている以上はよその会社もそのまま使うことができます。別にそれはそれで良しとしているわけです。

開発に参加するのは単にメーリングリストに参加すればいいだけなので、いろんな会社・団体や個人が開発を行っていて、そういうふうにみんなで議論してコードを書いて、よってたかって作っていくという仕組みになっています。

では、そもそも公開のソフトで勝手に開発が進んでいくのなら、高給取りのソフトウェアエンジニアを自社でアサインして開発する必要なんてないのではないかと思うかもしれませんが、それはそれでうまくいきません。というのも、自分たちのやりたいことは自分たちでやらないかぎり誰かがやってくれる可能性は低いからです。例えば僕らが「コンパイル待ちの時間を短くしたい」と思っても、メーリングリストに要望を出すだけでは基本的に誰もやってくれません。つまり、オープンソースの仕事というものは、結果を独占することはできないし、開発方針を完全にコントロールすることもできないという違いはあるものの、エンジニアを雇って会社にとって価値のあることをやらせる、という意味では別にクローズドな仕事と変わらないわけです。

僕のプロジェクトは高速なリンカ(というもの)を作るというもので、完成の暁にはGoogle社内でデフォルトとして使うものにしようと思ってコツコツ開発してます。これが社内では一人プロジェクトみたいになっています。以前はアップルのひとが盛んに参加していたんですが、最近ではSony Computer Entertainmentから数人が開発に参加してくれていて(PlayStationで使うぽい)、ソニーの人のコードレビューをしたりしてもらったりしています。ソニーからみると、GoogleのRui Ueyamaというひとがオーナーでやっているプロジェクトの開発を自分たちの力で加速させて、早くPlayStationのデフォルトの開発環境として使えるようにしたい、という気持ちがあるわけです。そのほかにもFreeBSDといった非営利団体が多少開発を手伝ってくれたりしています。FreeBSDもFreeBSDで使いたいという目論見があるわけです。

結果として、会社間でなんの契約関係もないにもかかわらず、緩やかな共同開発体制(とはいっても極めて個人的な繋がりによる)ができています。

個人的にこの状態はとてもよい状態で、開発したものは公開されるし、個人で活動しているので社外にも名前が売れるし、見知らぬ誰かの役にも立っているので気分もよいです。一方で、会社は善意でこういうことをやっているわけではなく、ビジネス上の判断でやっているわけですが、結果的に会社と会社、それに会社と個人の利害が一致しているわけです。これってとても面白い状況だと思うんですよね。ソフトウェアの性質(コピーするコストが実質ゼロ、物理的な場所に限られない、一から作るのは大変、改良するのは比較的簡単など)によってこういう均衡状態が生じているわけですが、それと個人的な「よいものを作って広く使われたい」という気持ちが偶然か必然か一致しているというのがほんと面白いと思います。

311

Rui Ueyama

#エンジニア 系記事まとめ

noteに投稿されたエンジニア系の記事のまとめ。コーディングTIPSよりは、考察や意見などを中心に。
10つのマガジンに含まれています

コメント1件

素敵な仕事です。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。