Javaのサポートについてのまとめ
Javaのライセンスやサポート状況について混乱が発生しているように思います。Javaのサポートを各団体がどのように行なっているかをまとめてみます。
知っておいてほしいのは、Javaの実装やサポートはOracle JDKかOpenJDKの二択、ではなくAdoptOpenJDKやAzul Zulu、Corretteなど多くの選択肢があるということです。
ここでサポートはバグやセキュリティに対応したパッチがリリースされることを表しています。
Javaのリリースサイクル
これまで、Javaは3年ごとを目標に結局5年くらいかけて次のバージョンを出したりしていましたが、それでJavaはなかなかバージョンアップしなくて古いと言われていました。それが2017年9月、今後は6ヶ月ごとにフィーチャーリリースを行うというリリースモデルに変更されました。Java9が2017年9月に出た6ヶ月後の2018年3月、実際に計画通りJava10がリリースされています。
この6ヶ月サイクルの中でリリースされるJava10やJava11での変更は、これまででいうとJava 8 update 20やJava 8 update 40のような機能リリースに相当するとのことです。
(ここのQ1)
https://blogs.oracle.com/java-platform-group/update-and-faq-on-the-java-se-release-cadence
(日本語訳)
https://orablogs-jp.blogspot.jp/2018/05/update-and-faq-on-java-se-release.html
問題になるのは、そのサポート期間です。この次の項から、それぞれの団体のサポートポリシーをまとめます。
OpenJDK
Javaの開発コミュニティで、OracleがメインスポンサーとしてJavaの開発を行なっています。実質的にすべてのJavaの実装の中心となります。OpenJ9など独自のJVMやAndroidのようなJava言語互換のプラットフォームはありますが、Java標準APIやコンパイラはOpenJDKのものを使っています。
http://openjdk.java.net/projects/jdk/
サポートポリシーとしては、半年ごとのリリースで次のバージョンが出るまでというのが公式発表です。確かに、これまでもJava 8 update20などは次のupdate40が出ればサポートは終了していたわけなので、これはこれで自然ですね。
問題はLTSです。Oracleの公式の発表ではOpenJDKにLTSは設定されていません。JavaのチーフアーキテクトであるMark Reinhold氏がいくつかのイベントでOpenJDKでも3年ごとのLTSを行うと話していますが、いまのところ公式発表にはいたっていません。また、Mark Reinhold氏の言う通りのLTSが行われるとしても、LTS間のオーバーラップはないので厳しいものがあります。
https://youtu.be/x7pkWlost64?t=5m39s
後述するようにIBMはOpenJDKでの4年間のサポートの意向を示していて、動向については注意する必要がありそうです。
2018/10/4 追記
Red Hatは顧客向けJDK8サポートを2023年まで提供することを表明しています。また、その際に"upstream first"つまり、OpenJDK本体のソースを先に更新するとも述べられていて、2023年までOpenJDK上でJDK8のソースが更新されることになります。
https://developers.redhat.com/blog/2018/09/24/the-future-of-java-and-openjdk-updates-without-oracle-support/
Oracle JDK
Oracle様のJDKです。
Java11からは、実運用に使えるのはOracleと契約した顧客だけになります。3年ごとにLTSとして5年間のサポートが行われます。追加のサポートとしてさらに3年、無期限サポートもあります。
http://www.oracle.com/technetwork/jp/java/eol-135779-ja.html
2021/9/15 追記:Java 17リリースとともに、商用利用でもOracle JDKを無償で使えるようになっています。
https://blogs.oracle.com/java/post/free-java-license
2022/3/23 追記:対外向けサービスの運用には有償ライセンスが必要です。
当初、バイナリを入手できるのは顧客だけとのことでしたが、2018/6/21に更新されたサポートロードマップでは、Java SE 11から開発やデモ用途では引き続きOracle JDKが使えるということになりました。
上記 日本語訳は3月時点のものなので、英語版を確認してください。
Oracle Java SE Support Roadmap
Java8については、2019年1月までのサポート継続を表明しています。デスクトップ利用に関しては2020年まで。顧客向けには2022年3月と3年の追加サポートを予定しています。
サポート金額は仮想マシン100台で1億2000万円という噂も
https://twitter.com/shun_tak/status/988256213379956738
ここに価格表がありました。
https://www.oracle.com/jp/corporate/pricing/price/index.html
プロセッサあたり60万円で、そこにプロセッサコアファクタとして0.5という料率が設定されています。ただしAzureとAWSではこの料率は適用されません。また、ハイパースレッドの場合、2CPUを1CPUとして計算するようです。
ということで、自前のサーバーやOracle Cloudでハイパースレッド有効の4CPU仮想マシン100台なら2CPUx.5x100台x60万=6000万だけどAWSやAzureなら1億2000万ということになりそう。
しかしながら、2018/6/21に新しいJava SE Subscriptionが公開されています。
Oracle Introduces New Java SE Subscription Offering for Broader Enterprise Java Support
デスクトップの場合は$2.5/
人・月かそれ以下、サーバーの場合は$25/
プロセッサ・月かそれ以下、そしてボリュームディスカウントがある、というようなことが書かれています。
Java SE Subscription FAQ
IBM
IBMのJava SDKは2022年4月までJava8をサポートするようですね。
https://developer.ibm.com/javasdk/support/lifecycle/
JVMがJ9だと思うので注意が必要ですけど。
IBMは自社顧客向けのJava8サポートを少なくとも2025年まで行うとしています。
https://developer.ibm.com/javasdk/2018/04/26/java-standard-edition-ibm-support-statement/
また、この文章の中で、OpenJDKでも4年のLTSサポートを行いたいということが書いてあります。それとAdoptOpenJDKというプロジェクトを行なってることも書いていますね。これについては次の項で。
AdoptOpenJDK
AdoptOpenJDKは、OpenJDKのビルドを提供するコミュニティでIBMなどがスポンサーしています。
https://adoptopenjdk.net/index.html
コミュニティのOpenJDKビルドファームが稼働
LTSについて4年間のサポートを表明しています。また、Java8についても2022年9月までのサポートが予定されています。
https://adoptopenjdk.net/support.html
ということで、公式発表ベースで考えるなら今後はAdoptOpenJDKのビルドを使うのが本命になりそう。
しかし、大変そう。
https://github.com/AdoptOpenJDK/openjdk-build/issues
2021/9/15追記 名称問題もあり、Adoptiumに移行しています。
https://adoptium.net/
Zulu/Zulu Enterprise
ZuluはAzul Systemsが提供しているOpenJDKビルドです。Azul Systemsは OpenJDKのサポートを行う企業で元OracleのSimon Ritter氏が属している会社です。
CustomerにMicrosoftもあるので、たぶんMicrosoft Azureもzuluを使っているんではなかろうか。
ここでOpenJDKの独自ビルドを配布しています。
https://www.azul.com/products/zulu-and-zulu-enterprise/
JDK6もu107とかを提供しています。今後はどんな感じになるんだろう?
Zuluは無償で使えますが、Zulu Enterpriseは商用サポートを提供していて、無制限の一番高いサポートでも$310,500です。Oracleのサポートに比べるとわかりやすい!
LTSに関しては8年のサポートを行うようです。また3年ごとのLTSだけではなく毎年9月のリリースについてMTS(Middle Term Support)を提供していて次のLTSが出てから2年のサポートを行なっていたり、それ以外の各リリースについても1年間の追加サポートを提供していたりします。
https://www.azul.com/products/zulu-and-zulu-enterprise/zulu-enterprise-java-support-options/
Red Hat
Red HatはRed Hat Enterprise Linux上で動かすJDKについてサポートを提供していて、OpenJDK8の場合は2023年6月までサポートを行なっています。Java 11についての記述はありませんが、おそらくそれなりに長い期間のサポートを提供すると思います。
https://access.redhat.com/articles/1299013
https://access.redhat.com/articles/3409141
2018/10/4追記 2023年までJDK8をサポートするようです
https://access.redhat.com/ja/articles/1457743
Microsoft(Azure)
Azul Systemsと共にAzure上でのLTSの提供を表明しています。
https://azure.microsoft.com/ja-jp/blog/microsoft-and-azul-systems-bring-free-java-lts-support-to-azure/
Amazon
Amazon Linux 2上のOpenJDK 8とOpenJDK 11について、少なくとも2023年6月30日までのサポートを表明しています。
Re-affirming Long-Term Support for Java in Amazon Linux | AWS Compute Blog
また、CorrettoとしてAmazon Linux 2以外の環境でも動かせるJDKのリリースを発表しました。
Introducing Amazon Corretto, a No-Cost Distribution of OpenJDK with Long-Term Support | AWS Open Source Blog