どーもー、現在某IT系の会社でjavaエンジニアとして働ている者です。(当ブログの管理人です)
2019年4月16日、javaを提供しているオラクル社からの発表(ライセンスの変更など)によって、世界中のjavaを利用している企業や個人が、大混乱に陥りました。
それが、
「javaの有料化」です。
あの発表を機に、
「変更するって言っても、こんな大規模なプログラム、どうやって他の言語に変更するんだよ。。」
「そもそも有料化って何だよ。。条件やプランなど、詳細の情報を集めて。そのうえで対策を決めないと。」
きっと、こんな声が世界中に相次いでたと思います。
実際、javaを利用していた私の所属する会社でも、同じような感じでした。
というわけで今回は、java有償化問題の詳細(ライセンスの変更情報含め)と、その対策について解説していきたいと思います。
以下、今回の目次です。
- java(Oracle JDK)のライセンス変更と、商用利用の有償化について
- 有償化への対策と、「Oracle Open JDK(オープンソース版)」のライセンスの特徴について
- どの企業(団体)のOpenJDK(オープンソース版)がおすすめなのか ~各ディストリビューション:5選
- java17以降、再度ライセンスが変更され商用利用が無償化へ
※2021年9月14日、Oracleは再度ライセンスを変更して、「商用利用の無料化」へと舵を切っています。(java17~)
なので、java17を利用している場合は、最後の章の確認だけでも問題ありません。(とはいえ、全体像を把握するためにも、すべて読み進めることをオススメしますが。)
java(Oracle JDK)のライセンス変更と、商用利用の有償化について
まず、前提知識の話になりますが、javaでプログラミング開発をする場合、JDK(Java Development Kit)というソフトウェアが必須となります。
なので、一般的に「java」という言葉は、「JDK」を指して使われている事がほとんどです。
※javaに関連した専門用語(JDKや、JVM、JRE等)については、以下にまとめて解説しているので、ぜひ参考にしてください。
→ Java SEとは?EE、MEとの違いや、JDK、JRE、JVMについて初心者向けに解説します
で、この「JDK」について、大きく以下の2種類に分類することができます。
-
「Oracle JDK」:オラクル社のライセンス対象(一般的にこちらが公式のJDKとして扱われている)
-
「Open JDK」:オープンソース・ライセンス対象
で、今回の記事ネタである商用利用の有償化や、ライセンスが変更されたのは、前者の「Oracle JDK」となります。
この「Oracle JDK」ですが、Javaのバージョン8までは、ライセンスは「BCL:Oracle Binary Code License」というもので、
これは、デスクトップおよびサーバーによる私用・商用問わず、無償での利用を許可していました。
※厳密には、java8についても、マイナーバージョンによって、ライセンス形態が違います。(詳細は後述しています)
ただし、java9以降のバージョンについては、以下の新ルールが追加される事となります(9のリリース日は、2017/9)
※JDKは半年ごとのメジャーアップデートを行い、新しいバージョンが出たタイミングで、古いバージョンの無償アップデート(セキュリティパッチ等)は行われなくなり、アップデートをするには有償となる、新ルールが追加されます。
各メジャー・バージョンの無償アップデートは、リリース後、2回のみ行われます(3ヶ月ごとのアップデート)
※有償アップデートの対象は、LTS(Long term support)のバージョンのみとなります。
(LTSとは、Javaは半年ごとにメジャーアップデート・リリースが行われますが、こののうち、3年に1度だけ、長期サポート版(LTS版)としてリリースされます。)
(2022/5時点での、LTS版は、バージョン8,11,17 となります。)
参考:オラクル公式サイト:JDKの新しいリリース・モデルおよび提供ライセンスについて
(有償アップデートについての詳細(対象期間や、Ver8以前の扱い)は、上記の「オラクルによる有償サポートの提供」を参考にしてください。)
これだけでは終わりません。。
オラクル社はさらに、2019年4月16日以降のリリース分(マイナーバージョン含め)について、「Oracle JDK」のライセンスは、「OTN:Oracle Technology Network License」に変更としました。
このライセンス変更によって、「Oracle JDK」は、開発用途などの私用利用には、無償で利用できますが、商用利用には有償(「Oracle Java SE Subscriptions」の購入)となってしまいます。
※ただし、変更対象となるのは、2019年4月16日時点で、無料サポート(アップデート)期間が、終わっていないバージョンのみとなります。なので、Ver7以前や、9,10については、BCLのままなので、商用利用も引き続きOKです(ただし、サポート対象外なので、なるべく早くバージョンアップをした方が良い事は変わりません)
そして、java8については、マイナーバージョンが「8u211」以降は「OTN」で、それより前は「BCL」という扱いとなっています(ややこしいですね)
(この新ルール追加とライセンス変更によって、業界ではオラクル社に対して批判の嵐で、Java離れが大きく進みました。。まあ当然ですよね)
では、「OTN」に変更されたバージョンのjava(jdk)を商用利用するには、有償化にするしか無いのか・・
そんなことはありません。その対応策について、次の章にて解説していきます。
java商用利用有償化への対策と、「Oracle Open JDK(オープンソース版)」のライセンスの特徴について
もう一方のJDKである「Open JDK」
こちらはオープンソース・ライセンスである「GPL v2.0」が適用されているため、私用・商用問わず、お金は掛かりません。
(オラクルがサンを買収する前から、「Open JDK」は存在し、GPL v2.0でサンによって管理されていました)
前述の「Oracle JDK」とは、ライセンス形態もそのルールも全く違う扱いとなるのですが、
「Open JDK」も、管理はオラクル社であり、「Oracle Open JDK」をリリース・管理しています。
以下は「Oracle Open JDK」(公式HP)の、各バージョンのアーカイブ公開ページになりますが、リリースバージョンと、2つのアップデートバージョンのみ、公開されていることが分かります。
参考:Oracle OpenJDK公式HP:アーカイブ公開ページ
また、ソースについては、Github上で管理・公開されており、以下の通り、Tag情報からは、リリースバージョンのみ公開されていることが分かります。
(最後の2桁の数字は、マイナーバージョンですね。)
そして、java11からは、機能差異も全く無いとのことです(11よりも前のバージョンについては、一部機能差異あり(有償機能のみ))
ただし、「Oracle Open JDK」についても、「Oracle JDK」と同様にアップデートに関する制限があります(上述の通り、リリース後半年分(2回分)のアップデートバージョンしか、公開がされていません。)
なので、半年以降も同じバージョンを利用したい、かつ、アップデートのサポートを受けたい場合には、結局、有償の「Oracle JDK」を利用することになってしまいます、、
(アップデートをしないと、セキュリティ的に脆弱性を含んでしまう問題が出てきます、、)
「では、もうどうしようも無いのか。有償で利用するしか無いのか」
・
・
「いえ、実はちゃんと対策方法が用意されています。」
「Oracle Open JDK」は、上述の通りオープンソース・ライセンスの「GPL v2.0」として公開されているので、他の企業がアップデート(セキュリティパッチ等を適用)して、再配布することが可能となっています。
実際に現状では、SAP、Red Hat、Amazon、MicroSoft等々、名だたる大手IT企業が、それぞれの「Open JDK」を再配布しています。
なので例えば、「5年間無償でのセキュリティ・アップデート保障ありの、JDK11」なんかを、利用することが可能になるわけですね。(いずれかの会社が提供している場合に限り)
ここで、オープンソース・ライセンスについて、少し触れておこうと思います。
一口(ひとくち)に、オープンソース・ライセンスと言っても、その種類は複数あって、
-
「GNU GPL v2」:今回話題としている、「openJDK」のライセンスです
-
「MIT License」
-
「Apache License Version 2.0」
等々。
そして、それぞれ条件なども異なっています。
例えば、「改変や再頒布する事は可能なのか」だったり、
「もし再配布する場合、ソースコードは開示しないといけないのか」など。
この辺のオープンソース・ライセンスに関する情報について、IT企業に勤務している方やエンジニア等については、ある程度理解をしておいた方が良いでしょう。
※各ライセンスの違いなど、詳細については以下にてまとめられています。
また、補足ですが、「OpenJDK」については、「GPL v2」がライセンスとなりますが、一つ重要な例外があります(以下)
「クラスパス例外(Classpath Exception)」
この例外によって、JDKの改変・再配布や、JDKを利用したプロジェクトの配布について、そのソースコードの公開をしなくても良いことになります
(この例外が無ければ、JDKを利用したソースは、すべて配布時に公開しなければいけなくなるという、とんでもない事になってしまいますね、、)
ちなみに、このオープンソース・ライセンス絡みで、OracleとGoogleは、何度も裁判で争っている問題があります(以下、気になる方はぜひ。)
どの企業(団体)のOpenJDK(オープンソース版)がおすすめなのか ~各ディストリビューション:4選
javaを有償化しないで商用利用する場合の対応策として、「openJDK」を利用するのは分かったが、では、どの企業が配布しているものを利用するのが良いのか。
ここでは、OpenJDKを配布している代表的なベンダーの情報をまとめていきたいと思います。
(最後に、私の所属する会社が採用した「openJDK」についても記載しています。)
-
「Amazon Corretto」
Amazon(AWS)が管理・配布しているOpenJDKのディストリビューションになります。
私用・商用問わず無料で利用することができ、さらに、長期間のサポート(セキュリティ対応等のアップデート)も無料で付いています
もともとは、AWS(クラウドサービス)にて標準で利用していたJavaを、無償で外部公開した形になります。
配布対象も、Windows、Linux、macOSとあり、AWS以外の利用も可能となっています。
長期間のサポート対象のバージョンについては、「Oracle JDK」と同じで、java8以降のLTSが対象となっています。
(バージョン表記については、「Corretto 8」等とされ、「openJDK」に紐づいています)
各バージョンのサポート期間については、以下の公式サイト(FAQ)を参考にしてください。
→ AWS公式HP:Amazon Correttoのよくある質問
もともと、Corretto 8は、2023年まで。11は2024年までのサポートでしたが、どちらも3年間延長されたみたいですね。参考:AWS公式HP:Amazon Corretto8、および11のサポートを延長
(おそらく、ユーザー数など市場の動向や、他のディストリビューションの動向によっては、さらに延長する可能性も十分にあるでしょう。)
-
「Microsoft Build of OpenJDK」
続いて、Microsoftが管理・配布しているOpenJDKのディストリビューションになります。(リリース日は、2021/4/7~)
Microsoftも自社のクラウドサービス(Azure)で提供する標準のjavaが、こちらになり、
各種条件については、基本的に上述のAmazonのものと同じで、違うのは、サポート期間(以下)くらいかと思います。
あと、「Microsoft Build of OpenJDK」では、java8が対象外となっている事です(これは、大きな違いですね)
-
「Red Hat OpenJDK」
こちらは、Red Hatが管理・配布しているOpenJDKのディストリビューションになります。
ただしこちらは、RHEL(Red Hat Enterprise Linux)などのサブスクリプション(有償サービス)に契約していないと、利用できません。。
RHELを利用している場合は、プラス料金無しで自動付与されるようなので良いですが、それ以外は、他のディストリビューションを利用した方が良さそうですね。
また、バイナリの配布についても、Windows版のみとなっています(以下、ダウンロードページ)・Red Hat公式HP:OpenJDKのダウンロードページ
(商用利用でなく、開発目的のみであれば、無料で利用できるようですね。ただし、Red Hatアカウントが必要になりますが。)
各バージョンのサポート期間や、契約が必要なサブスクリプション(有償サービス)については、以下にまとめられています。
・Red Hat公式HP:OpenJDKのライフサイクルおよびサポートポリシー
(有償サブスクの詳細については、上記の「OpenJDK エンタイトルメント」の章に記載されています。)
-
「Adopt OpenJDK(Eclipse Temurin)」
2021/7/24、Adopt OpenJDKは、「Eclipse Temurin」に名称変更し、管理も「Eclipse Foundation」に移行されました。
公式サイトも変更になり、2021年7月以降のリリースは、Adoptium.netから提供されるとのこと。
以降の情報は、「Adopt OpenJDK」の時の情報となっていますが、各種条件など基本的な扱いは変更ないので、そのまま記載しておきます。
こちらは、javaコミュニティーによって管理・配布している、openJDKのディストリビューションです。
コミュニティーの主要スポンサーには、IBMやマイクロソフト・amazonといった名立たる企業がそろっています。(上述の、openJDKを提供している会社は全てがスポンサーになっています。)
Adopt OpenJDKも、私用・商用問わず無料で利用でき、長期間のサポート(セキュリティ対応等のアップデート)も無料で付いています。
その他の各種条件についても、基本的にAmazonのものと同じで、違うのは、サポート期間(以下)くらいかと思います。
※サポート期間については、以下にてまとめられています。
LTSのバージョンについては、ちゃんと長期のサポートが付いており、注意書きの内容(以下)から、記載されている期限がさらに延長される可能性は十分にあるでしょう。
Adopt OpenJDKは、対応するアップストリームソースがアクティブにメンテされている限り、LTSリリースのバイナリを構築し続けます。
以上、代表的なopenJDKのディストリビューション:4選でした。
ちなみに、私の働いている会社では、比較検討の結果「Adopt Open JDK」を採用して、利用させていただいています。
無償での商用利用は必須で、あとは無料でのサポート期間の長さについて。
また、Open JDKを提供している他の大手ベンダーや、javaに深く関係している企業がスポンサーになっている事も、決め手の一つとなっています。
java(Oracle JDK)17以降、再度ライセンスが変更され商用利用が無償化へ ~2021/9/14更新分の最新情報
java11以降の、初のLTS版であるjava17。
このリリースに合わせて、オラクルが、また「Oracle JDK」のライセンスや各種条件を変更してきました。
(java11の時に、変更したばっかりなのに。。)
上述の通り、java11のリリース以降、ライセンスは「OTN(Oracle Technology Network License)」と変更されましたが、
今回、LTS版であるjava17のリリースに伴って、さらにライセンスが「NFTC(Oracle No-Fee Terms and Conditions)」に変更になりました。
新ライセンスであるNFTCのポイントは以下になります。
- Java 17以降のバージョンが対象
- 商用利用を含むすべてのユーザーに対して無料での利用を許可する
- 後続のLTSのリリース後1年間、このライセンスの下でアップデートリリースとなる(java17の場合、少なくも、2024/9までと記載されています)
- 上記の期間が過ぎると、以降のアップデートリリース版では、OTNライセンスとなってしまう。
- java18などの非LTSリリースについては、予定されている6ヶ月のサポート期間はNFTCの下でリリースされる。
というわけで、java17を利用する分には、商用利用で、かつ長期サポートも無料となっているので、「Oracle JDK」を利用しても良さそうですね。
おそらく、前回のLTS(java11)にて、強い制限をおこなったところ、他のベンダー提供の「openJDK」に多くの利用者や企業が流れてしまったため、
それに対して危機感を持ち、今回のライセンス変更に至ったのではないかと、推測しています。
では。