ようやく裁判の結果が出ました。結果としてフェアユースが認められたのはよかったのですが、Googleが勝訴したということは素直に喜べないので、その理由を書いておきます。
関連ニュースは、こういったところから。
約1兆円の賠償金を巡るGoogleとOracleの10年にわたる訴訟が決着、「APIのコピー」は結局違法なのか? - GIGAZINE
Google、オラクルの著作権侵害せず 米最高裁判決: 日本経済新聞
グーグル、米最高裁でオラクルに勝訴--「Android」Javaコード訴訟で - CNET Japan
経緯
では、経緯について時系列に沿って整理していきます。推定可能な事実に基づきますが、一部、妄想も含まれています。
2005年
Google(広告収入増やすには無償で改変自由なスマホOSが重要になるはず。普及させるなら開発者の多いJavaベースだよな。でも、クラスライブラリ改変しないとダメだな...)
↓
IBM「AL2なJDKとしてApache Harmonyをみんなで一緒に作ろう!大きくなりすぎたJDKをモジュール化するんだ」 ※AL2:改変部分の公開義務なし
↓
Google(お、いいじゃん。採用したいな)
↓
2007年
ASF「完成したから 標準互換認定してよ」
Sun「ダメ。使用分野にモバイルOSがあるけど、それは規定違反(ややこじつけ)」
ASF「なんやと、こら。公開質問状だ!SunはJavaのエコシステムを阻害している!」
↓
Google(なんか揉めてる...。標準互換認定は取ったほうがいいけどな...)
↓
ジョブス「iPhoneでるよー」
↓
Sun「Sunが保有するJDKをGPLv2でOSSにしたよ。OpenJDK!」※改変部分の公開義務あり
ASF「ぐぬぬ」
↓
2008年
Google「Android公開!好きに使ってね、Javaで書けるよ」
Sun「それJavaの亜種でしょ!そういうの良くないよ(あ、会社が潰れそう...)」
↓
2010年
Oracle「Sun買った。でも、モバイルのライセンス収入、少なっ。AppleとGoogleのせいだ...。なんとか訴えたいな...おや、Androidのコードが怪しいぞ!」 ※妄想
↓
2011年
IBM「みんなでOpenJDKにしよ。Harmony中止(しれっ」
↓
2012年
一審「APIに著作権はない(≒Google勝訴)」
↓
2014年
二審「APIに著作権はある(≒Google敗訴)」
↓
2016年
Google「AndroidもOpenJDKに対応したよ」
↓
2018年
控訴審「フェアユースではない(≒Google敗訴)」
↓
2021年
最高裁「フェアユースです(≒Google勝訴)」
解説
訴えた内容は言いがかりに近い
裁判でOracleがGoogleが訴えたのは「AndroidにOracle(当時Sun)が保有するJava(クラスライブラリ)のコードが流用されている」というものです。
AndroidはJavaを利用していますが、そもそも、Sunが保有していたコードを流用したのではなく、Apache Harmonyという別のコードを利用しています。なので、流用したとされる量も微々たるものです。
本体コードはわずか9行で「rangeCheckじゃ、そう書くわな」というもので、裁判でもあまりに対象が小さいため棄却されています。残ったのがAPIの37個。ただ、Android全体のコード量からして37個がなんなの、というのが正直な感想です。なので、ほぼ言いがかりです。
APIにフェアユースが認められたのはよかった
とはいえ、Googleが敗訴する可能性もありました。米国の裁判では巨大企業が懲罰的に賠償金を支払うことがあるためです。ただ、裁判の結果としてはフェアユースが認められました。
APIというのは、あえて真似して互換性があるコードを作ることがあります。裁判中も「Oracleだって、Amazon S3のAPI互換な製品を販売している」といわれていました。ユーザーからするとAPIが同じであればコードの書き換えコストなく製品を乗り換えできます。APIにおいてフェアユースが認められないとなると、結果的にプラットフォーマーの独占を強化し、ユーザーに負担を強いることになります。
そもそも、当時のJavaが「標準APIをみんなでオープンに決めて、各社がクローズに実装する」という考え方です。これによってJavaは多くのユーザーを獲得しました。この際「標準への互換性を維持する」のが、Javaの非常に重要なポリシーとなります。
こうして考えるとフェアユースが認められたのはソフトウェア業界全体にとってよかったのです。ただ、その付随としてGoogleが勝訴したことについては想うところがあります。
オープンソースライセンスとJava
まず、AndroidのベースとなったApache HarmonyとOpenJDKの違いを整理します。
前述通り、Javaは「標準仕様をみんなでオープンに決めて、各社がクローズに実装する」という考え方ですが、バージョンを重ねるごとにコードが肥大化しており、各社にとって負担になっていました。そこでApache Harmonyは
- 実装もオープンソース化して共有資産にする
- モジュール化を可能にし、必要な部分だけで構成できるようにする
というコンセプトでスタートしました。これはオープンソースベースの商用製品では重要な考え方で、現在のOpenJDKも同じです。ただし、ソフトウェアライセンスが違います。
Apache HarmonyはAL2(Apache License 2.0)で「改変部分の公開義務がない」、OpenJDKはGPLv2で「改変部分に公開義務がある」というライセンスです。
Java自身がサーバサイドで大きく発展したのはTomcatやStrutsといったAL2で開発されたOSSの存在を抜きにしては語れません。無償利用できたことも重要ですが、それらが改変や流用され商用製品の一部となっていたのです。
ただしAL2には「OSS本体にコードが還元されない」という問題があります。近年でもAWSがOSSをカスタマイズして儲けていることに対してOSSコミュニティが反発し、ライセンス規定を変える動きがありました。このようにOSSを土台にして金儲けをしたらOSSに還元する、というのは大企業のたしなみとして重要です。
Redis、MongoDB、Kafkaらが相次いで商用サービスを制限するライセンス変更。AWSなどクラウドベンダによる「オープンソースのいいとこ取り」に反発 - Publickey
Sunは、JDKのオープンソース化にあたりGPLv2を選択しました。GPLv2では改変したコードをOSS本体にコントリビュートすることになります。こうすることで本当に1つのコードが共有されるのです。LinuxもGPLv2ですね。
現状のOpenJDKは、GPLv2になったことで開発リソースが集約され、機能開発が半年サイクルで行われています。そこにはOracleだけではなく、Redhat、IBM、Microsoft、AWS、Googleなどの多くの企業が参加しています。こんな言語は他にありません。結論から見れば、Javaのような基盤製品にはGPLv2が望ましいのでしょう。
ちなみにAndroidはAL2です。Android初期に「メーカーによる改変が大きすぎて本体のアップデートについていけない」とか「メーカーごとの非互換が強すぎてアプリが動かない」と言った混乱がありました。現在はGoogleの努力もあって、少しはマシになっていますが、それを見ているとAL2が必ずしも正しい選択ではないことがわかります。ま、当時の携帯メーカーの文化や力関係を考えるとGPLv2では受け入れられなかったとは思いますが...。
時代の流れで生まれたAndroidの幸運と問題
というわけで、AL2かGPLv2か、というのは非常に重要な議論です。この大激論が闘わされている最中に、GoogleはApache HarmonyをベースにAndroidを作ってしまいました。Apache HarmonyはAL2として公開されていたわけで、それを流用してAndroidを作ってもライセンス的には問題ありません。
しかし、Javaというのは「標準への互換性を維持する」ということについて各社が非常に大きな努力を払ってきました。IBMなど各社がAL2でオープンソース化しようとしたのは「標準の範囲内で自由度を増す」ための取り組みであって、標準を無視して亜種を作ることを目指したわけではありません。
それなのにGoogleは、Javaの「標準への互換性を維持する」という取り組みを無視し、勝手に亜種を作ってしまったのです(経緯もある通り、2016年にはAndroidもOpenJDKベースになっています)。
とはいえ、Googleも無視したくて無視したわけではないと思います。裁判資料の中でもAndroidの父、Andy Rubin氏が「標準互換認定を得るべきだ」というメモを書いていたことがわかっています。タイミングの問題は大きいと思います。AppleがiPhoneを発表しており、急いでAndroidを作り上げる必要があった中で、AL2かGPLv2かという議論に付き合っている暇はありません。
結果論としては、この判断はJavaにとっても、スマホユーザーにとっても良かったのでしょう。Javaは開発者を増やし、iOSよりも安いスマホが作られました。
時代の流れの中で、Googleは幸運にもタイミングよくタダで自由に改変できるJavaのコードを入手しました。しかし、その時代の流れはJavaのエコシステムをよくしようとした企業やコミュニティの努力の成果によって生まれたものです。その成果を使い、しかも標準への互換性を無視し、利益を得たGoogleは批判されるべきです。
フェアユースは認められたが、Googleは対価を支払うべき
2016年にOracleが提出した裁判資料によれば、GoogleはAndroidによって420億ドルもの広告収入を得たと試算されています。ここにはJavaが必要だったのでしょうし、Javaのオープンソース化について貢献した企業やコミュニティの努力が含まれています。それを無視してGoogleの勝訴を喜ぶ気にはなれません。
というわけで、僕としては「APIの流用についてフェアユースは認められてよかったがGoogleは相応の対価を支払うべきだ」という感情になります。ただ、その対価はOracleに払うというよりは、なんらかの形でOSSコミュニティに貢献をするのが望ましいでしょう。支払わなくて済んだお金を、なにか良い形で使ってもらいたいですね。Googleは、それができる企業だと信じています。
ここまでOracleの話をしていませんでした。10年前に訴えたこと自体はどうかと思いますが、OpenJDKの現状を見るに、OracleはJavaというOSSとOSSコミュニティにきちんと貢献をしています。その点は、ちゃんと評価したいと思います。