Javaのサポートについてのまとめ2018

# 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](http://www.oracle.com/technetwork/java/eol-135779.html)

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](https://www.oracle.com/corporate/pressrelease/java-se-subscription-offering-062118.html)
デスクトップの場合は$2.5`/`人・月かそれ以下、サーバーの場合は$25`/`プロセッサ・月かそれ以下、そしてボリュームディスカウントがある、というようなことが書かれています。
[Java SE Subscription FAQ](http://www.oracle.com/technetwork/java/javaseproducts/overview/javasesubscriptionfaq-4891443.html)

## 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ビルドファームが稼働](https://www.infoq.com/jp/news/2018/04/AdoptOpenJDKMar18)

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](https://aws.amazon.com/jp/blogs/compute/re-affirming-long-term-support-for-java-in-amazon-linux/)

また、CorrettoとしてAmazon Linux 2以外の環境でも動かせるJDKのリリースを発表しました。
[Introducing Amazon Corretto, a No-Cost Distribution of OpenJDK with Long-Term Support | AWS Open Source Blog](https://aws.amazon.com/jp/blogs/opensource/amazon-corretto-no-cost-distribution-openjdk-long-term-support/?sc_channel=sm&sc_publisher=TWITTER&sc_country=Open+Source&sc_geo=GLOBAL&sc_outcome=adoption&trk=_TWITTER&sc_content=blog&linkId=59607335)