概要
Java、具体的にはOracle JDKとOpenJDKについて2018年3月現在の最新の状況をライセンスの面からまとめておきたいと思います。
Javaの種類
Oracle JDKと、OpenJDKの2種類があり、今後どちらかを使うことになります。
Oracle JDKは、オラクル社が所有するものです。OpenJDKは、オープンソースです。ここから派生したもの、例えばIBM SDK, Java Technology Editionなども存在しますが一旦はこの2つがあることをおさえましょう。
それぞれのJDKのライセンス
Oracle JDKのライセンス(Java10まで)
Oracle JDKのライセンスは、Oracleバイナリ・コード・ライセンス(BCL)というものです。Oracle JDKそのものはバイナリーによる提供であり、ソースコードは公開されていません。ライセンス名にバイナリーとあるのはそのためです。
このBCLですが、正しくはオラクルが提供する日本語訳を見るべきだと思います。
Java SEプラットフォーム製品及びJavaFXに関するオラクル・バイナリ・コード・ライセンス契約 【日本語参考訳】
ただ、見ていただければわかる通り、契約書というのはいつでも長文でわかりにくいものです。オラクルからわかりやすい説明がでていますので、こちらを見ることにします。
・ダウンロードしたものは、他のコンピュータに複製しても良い。
・社内に配布することができる
・社内のイントラネットにアップロードできる
・Javaの独自開発ソフトウェアとともに配布できる(ただしBCLには従うこと)
・上記の場合でJDKとJREは同じメディアで配布できる
・Javaのみを同じメディアで配布してはいけない
つまり、アプリケーション開発をOracle JDKで行う場合は、無償で利用できるし、そのJDKのバイナリーコードを完全な形でパッケージして複製、配布できるということになります。
なお、昨今報道されているように、バージョン9からはリリースから半年しか無償アップデートが公開されなくなります。有償でオラクルとサポート契約を結べば限定的にアップデートが入手できるようになります。
詳しくは、
をご覧ください。
Oracle JDKのライセンス(Java11から)
こちら、2018年9月にリリースされたJava11から、ライセンスが大きく変更されました。
具体的に、本番用途で使う場合は、サブスクリプションあるいはサポート契約を結ぶ必要がある形になっています。お気を付けください。
OpenJDKのライセンス
OpenJDKのライセンスは、GPLリンク例外つきの GNU General Public License (GNU GPL)です。下記が根拠です。
OpenJDK: GPLv2 + Classpath Exception
この内容を端的に表現すると、以下のようになります。
OpenJDKでは、Sunはクラスライブラリコードの「クラスパス例外(Classpath Exception)」と呼ばれるものをGPLに付け加えた。その例外は、GPLの管理下にあるプロジェクトから派生したプロジェクトもGPLの管理下に置かれるという重要なGPL要件を回避するものだった。クラスパス例外によって、プログラマーは、GPLの管理下にあるライブラリの使用で自分のソフトウェアが「感染」し、そのソフトウェアもGPLの下でのリリースを義務づけられてしまうことを心配する必要がなかった。
FAQ:「Java」をめぐるオラクル対グーグルの戦い--そのテクノロジを振り返る - (page 3) - CNET Japan
もっと簡単に言いますと、完全にGPLにしてしまうと、OpenJDKを使ったアプリケーションもGPLにしなければいけなくなります。つまりソースコードを完全公開し、第三者に流用しても構わないということです。それだと商用利用できませんよね。したがってOpenJDK自体はGPLですが、それをアプリケーションのクラスパスで読み込み使う限りは、自身のアプリケーションにGPLは及ばない、ということです。
わかりやすいページを紹介しておきます。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
なかなか素敵な解説です。
なお、Oracle JDKとちがって、OpenJDKはソースコードに対してライセンスが適用されているので注意です。
OpenJDKに関するロードマップについては実は公式ホームページにはありません。基本的にはOracle JDKと同じ(ただし有償サポートなし)であると思われます。したがって、LTS(長期サポート)があるのかないのかでJava界隈はやきもきしているという状況です。
RedHat Enterprise Linux内のOpenJDKについては、Red Hat社から案内されていますので後述します。
RedHat Linuxに同梱されるOpenJDKのライセンスについて
公式からは以下のドキュメントがあります。
OpenJDK ライフサイクルおよびサポートポリシー - Red Hat Customer Portal
結局のところ、RedHat社もGPLに基づいてバイナリーを提供しているに過ぎません。したがって、修正パッチをRedHat社が作成することができます。改変した場合はソースコードを公開しなければいけません。
現在、Java9以降について、Oracle JDKの無償パッチ公開が終了した後に、Red Hat社がパッチ公開を続けるかについては、まだRed Hat社は立場を明らかにしていません。
Java8については文書の通り、2020年10月までは続けるようです。オラクルは2019年1月で終了することを発表していますので、Red Hat Enterprise Linux内のOpenJDK 8を使い続けることが今のところ延命策と言えるとは思います。
まとめ
Oracle JDKと、OpenJDKで、ライセンスの考え方が大きく違うことが理解できました。今後Javaでアプリケーションを開発するのならば必ず知っておく必要があると思います。
補足
Dockerでコンテナ上でOracle JDKを使う場合に、DockerイメージにOracle JDKを入れて配布すると、BCEにひっかるんじゃないかという議論。
いろいろ地雷があり大変なJava関連ですが、今後もまとめてまいります。これだけたくさんのプログラム資産があるのですから、何とか乗り越えないといけないですよね。
※自分の学習目的であり、個人の見解です。
スッキリわかるJava入門 第2版 スッキリわかるシリーズ Kindle版