[Java] 今（2020年）から始めるJava開発で選択できるプラットフォーム

Java界隈のウワサ話は聞いていたけれど、いざ使おうとしたらどれを使ったらいいかわからない。
サポート期間が長くて、あまりお金がかからないのがいいな。
そんなひと（自分 :smiley: :point_left:）がのための情報まとめです。

# JDK一覧

受託開発業者が、客先へ納品するプロダクトの実行環境として使用できそうなJavaをまとめてみました。

| 名前 | Javaバージョン | サポートOS | サポート期限 | 必要なもの | ライセンス |
|:--|:--|:--|:--|:--|:--|
| [Oracle JRE](https://www.java.com/ja/download/manual.jsp) (Oracle Java SE)  | 8 | Windows, Linux, macOS, Solaris | 2025年3月   | サブスクリプションを購入 | OTN Agreement for Oracle Java SE | 
| [Oracle Java SE](https://www.oracle.com/technetwork/java/javase/downloads/index.html#JDK11)  | 11  | Windows, Linux, macOS | 2026年9月  | サブスクリプションを購入  | OTN Agreement for Oracle Java SE| 
| Red Hat OpenJDK (Windows用) | 11 | Windows | 2024年10月 | サブスクリプションを購入 | GPLv2 with CPE |
| [AdoptOpenJDK](https://adoptopenjdk.net/) | 8 | Windows, Linux, macOS, AIX, Solaris | 2023年9月 | （なし） | GPLv2 with CPE |
| [AdoptOpenJDK](https://adoptopenjdk.net/) | 11 | Windows, Linux, macOS, AIX | 2022年9月 | （なし） | GPLv2 with CPE|
| [Amazon Corretto](https://aws.amazon.com/corretto/) | 8 | Windows, Linux, macOS | 2023年6月 | （なし） | GPLv2 with CPE |
| [Amazon Corretto](https://aws.amazon.com/corretto/) | 11 | Windows, Linux, macOS | 2024年8月 | （なし）　| GPLv2 with CPE |
| [Azul Zulu Enterprise](https://jp.azul.com/products/zulu-enterprise/) | 8 | Windows, Linux, macOS | 2026年3月 | サブスクリプションを購入 | GPLv2 with CPE |
| [Azul Zulu Enterprise](https://jp.azul.com/products/zulu-enterprise/) | 11 | Windows, Linux, macOS | 2027年9月 | サブスクリプションを購入 | GPLv2 with CPE | 
| [Azul Zulu Community](https://jp.azul.com/products/zulu-community/)| 11 | Windows, Linux, macOS, Solaris | 2027年9月 | （なし） | GPLv2 with CPE |
| [SapMachine](https://sap.github.io/SapMachine/) | 11 | Windows, Linux, macOS | 2022年9月 | （なし） | GPLv2 with CPE |

Oracle OpenJDK 13（サポート期限2020年3月）とOracle OpenJDK 14（サポート期限2020年9月）は省きました。

## Linuxディストリビューション付属のパッケージ

Linuxディストリビューションに含まれているOpenJDKパッケージです。
たいていはこちらを利用することになると思います。

| ディストリビューションとバージョン | Javaバージョン | サポート期限 |
|:--|:--|:--|
| RHEL 6, 7, 8 | 8 | 2023年6月 |
| RHEL 7, 8 | 11 | 2024年10月 |
| CentOS 6, 7, 8 | 8 | RHELに準ずる？ |
| CentOS 7, 8 | 11 | RHELに準ずる？


## クラウド環境で使用できるJDK

| クラウドベンダ | サービス | OS | Javaバージョン | サポート期限 |
|:--|:--|:--|:--|:--|
| Amazon Web Services | EC2 | Amazon Linux 1 | 8 | 2020年6月(?) |
| Amazon Web Services | EC2 | Amazon Linux 2 | 8 | 2023年4月(?) |
| Amazon Web Services | EC2 | Amazon Linux 2 | 11 | 2023年4月(?) |
| Microsoft Azure | VM | Windows, Linux | 7 | 2023年7月 |
| Microsoft Azure | VM | Windows, Linux | 8 | 2025年3月 |
| Microsoft Azure | VM | Windows, Linux | 11 | 2026年9月 |



# 結局どれ使えばいい？

## バージョンは？

今すぐ動かすなら11一択です。

2021年9月以降に動かすなら、次のLTSである17へ向けて備えると良いと思われます。

## JDKは？

条件に応じての選択になるかと思われます。

### Oracleにする？Oracle以外にする？

まずOracleにするか、Oracle以外にするかを選びます。
フェラーリを買えるようなお金持ちはOracleを選ぶんだろうなぁ（ひがみ）。

### Oracle以外の場合

クラウドの場合は、環境についてくるJavaを使うのがよいと思われます。

オンプレのLinuxの場合は、OSとサポートを合わせられますし、付属のパッケージを使うのが簡単かと思われます。

オンプレのWindowsで有償サポートが欲しい場合は、Red HatかZuluがよいと思われます。

# リンク集

* Oracle
  * [Oracle Java SE サポート・ロードマップ](https://www.oracle.com/technetwork/jp/java/eol-135779-ja.html)
  * [Oracle Technology Network License Agreement for Oracle Java SE](https://www.oracle.com/jp/downloads/licenses/oracle-javase-license.html)
  * [Java SE Subscription](https://www.oracle.com/java/java-se-subscription.html)
  * [Oracle Java SE ライセンスFAQ](https://www.oracle.com/technetwork/jp/java/javase/overview/oracle-jdk-faqs-5488066-ja.html)
* RedHat
  * [OpenJDK ライフサイクルおよびサポートポリシー ](https://access.redhat.com/ja/articles/1457743)
  * [16.3. RHEL 8 における Java 実装および Java ツール](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html-single/considerations_in_adopting_rhel_8/index#java-tools_compilers-and-development-tools)
  * [OpenJDK 11 for Windows Release Notes](https://access.redhat.com/documentation/en-us/openjdk/11/html/openjdk_11_for_windows_release_notes/index)
  * [OpenJDK 11 for Windows Getting Started Guide](https://access.redhat.com/documentation/en-us/openjdk/11/html/openjdk_11_for_windows_getting_started_guide/index)
  * [Red HatのOpenJDK](https://www.slideshare.net/agetsuma/red-hatopenjdk-166814039)
* AdoptOpenJDK
  * [AdoptOpenJDK Support](https://adoptopenjdk.net/support.html)
  * [AdoptOpenJDK Supported Platforms](https://adoptopenjdk.net/supported_platforms.html)
* Amazon
  * [Amazon Corretto](https://aws.amazon.com/corretto/)
  * [Amazon LinuxでのJavaのLTS (Long-Term Support)提供について](https://aws.amazon.com/jp/blogs/news/re-affirming-long-term-support-for-java-in-amazon-linux/)
* Microsoft
  * [Java long-term support for Azure and Azure Stack](https://docs.microsoft.com/en-us/java/azure/jdk/?view=azure-java-stable)
* Azul Systems
  * [Azul Product Support Lifecycle](https://jp.azul.com/products/azul-support-roadmap/)
  * [Azul Systems製品の価格](https://jp.azul.com/products/pricing/)
* SAP
    * [SapMachine](https://sap.github.io/SapMachine/)
* [最適なOpenJDKディストリビューションの選び方](https://www.oracle.co.jp/campaign/code/2019/pdfs/oct2019_b-3-3.pdf)

# ところで

いまどきのJavaアプリケーションのデプロイは、どうするのが正解なんでしょうか？

1. 昔ながらのjarを配布
2. dockerイメージを作成して配布
3. GraalVMでネイティブ化して配布

使う側からしたら、3.が一番手間なくてよさそうですが、実際にやっているひといるのかな。