【Java】OpenJDKってどれ選べばいいの？

# はじめに

OpenJDKがいろいろあってどれを選べばいいか分からん！となり、ちょっと調べましたのでまとめます。

# OpenJDKまとめ

サポート期間を軸に調べました。

<table>
  <caption>OpenJDKのサポート期間まとめ</caption>
    <thead>
        <tr>
            <th rowspan='2'>JDK</th>
            <th colspan='4' style>サポート期間</th>
            <th rowspan='2'>提供体系</th>
        </tr>
        <tr>
            <td>Java 8</td>
            <td>Java 11</td>
            <td>Java 17</td>
            <td>Java 21</td>
        </tr>
    </thead>
        <tr>
            <td>Oracle JDK</td>
            <td>2022/12</td>
            <td>2023/9</td>
            <td>2026/9</td>
            <td>2028/9</td>
            <td>無償・有償提供</td>
        </tr>    
        <tr>
            <td>Red Hat OpenJDK</td>
            <td>2026/11</td>
            <td>2024/10</td>
            <td>2027/10</td>
            <td>2029/12</td>
            <td>有償提供</td>
        </tr>
        <tr>
            <td>Zulu</td>
            <td>2030/12</td>
            <td>2026/9</td>
            <td>2029/9</td>
            <td>2031/9</td>
            <td>無償提供<br>有償の技術サポート</td>
        </tr>
        <tr>
            <td>Liberica JDK</td>
            <td><b>2031/3</b></td>
            <td>2027/3</td>
            <td><b>2030/3</b></td>
            <td><b>2032/3</b></td>
            <td>無償提供<br>有償の技術サポート</td>
        </tr>
        <tr>
            <td>Temurin</td>
            <td>2026/11</td>
            <td>2024/10</td>
            <td>2027/10</td>
            <td>2029/12</td>
            <td>無償提供</td>
        </tr>
        <tr>
            <td>Amazon Corretto</td>
            <td>2026/7</td>
            <td><b>2027/10</b></td>
            <td>2028/10</td>
            <td>2030/10</td>
            <td>無償提供</td>
        </tr>
        <tr>
            <td>SapMachine</td>
            <td colspan='4'>-（見当たらず）</td>
            <td>無償提供</td>
        </tr>
        <tr>
            <td>Microsoft Build <br> of OpenJDK</td>
            <td>-</td>
            <td>2027/9</td>
            <td>2027/9</td>
            <td>2028/9</td>
            <td>無償提供<br>有償の技術サポート</td>
        </tr>
</table>

※ **太字**は最も長いサポート期間を提供しているJDKです。

調べた中だと、有償なのはOracle JDKとRed Hat JDKでそれ以外は無償で提供してます。
サポート期間ですが、「有償提供」の場合はお金を払った場合のサポート期間を、「無償提供」の場合はそれが無償でサポートされる期間を示しています。

ここでいうサポートとは、各ベンダで細かい内容に差分があるかもしれませんが、
- バグフィックス
- セキュリティアップデート
- パフォーマンス強化

を指します。

細かいことはあとの節で触れます。

## Oracle JDK

基本的に、サポート契約をすると5年+3年のサポートを受けられます。
- Premier Support：対象期間はLTS指定されたフィーチャー・リリースの提供開始から5年間 
- Extended Support：Premier Support終了後から3年間を対象とする延長サポート 
- Sustaining Support：Extended Support終了後を対象とする無期限サポート

[上記表](#openjdkまとめ)のサポート期間は「Premier Support」のサポート期間を書いてます。
Extended Supportを契約すると、+3年になります。

無償利用の場合、アップデートを受けられるのは6か月の間に行われる2回のみです。

https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html

https://www.oracle.com/jp/technical-resources/article/java/ja-topics/jdk-release-model.html


ライセンスがややこしいOracle JDKですが、以下に書かれてます。

> ・Oracle JDK 21とOracle JDK 17以降は、すべてのユーザーが無料で利用できるOracle No-Fee Terms and Conditions Licenseに基づいて提供されます。
・Oracle JDK 11、Oracle JDK Java 8、およびOracle JRE with Java Web Start in Java 8は、My Oracle Supportを介して、またOTN License Agreement for Java SEに基づいて、オラクルのお客様に提供されます。このOTNライセンス は、個人的な使用、開発、テスト、プロトタイプ、デモンストレーション、およびその他の限定的な用途において無償利用が許可されます。

https://www.oracle.com/jp/java/technologies/javase/jdk-faqs.html

> Oracle JDK 17からこれらの無料リリースとアップデートを提供し、次のLTSリリースから丸1年間継続します。

https://blogs.oracle.com/java/post/free-java-license

つまり、、
- Oracle JDK 17と21は、次のLTSが出る間（通常2年）＋ 1年間は無料で使える。それ以降は有償。
- Oracle JDK 11までのJDKの商用利用は、今まで通り有償。 

ということですかね。

## Red Hat JDK

有償で提供されるJDKです。

Red Hat JDKはRHEL(Red Hat Enterprise Linux)に組み込まれて提供されてます。
また、Windows版のJDKも提供はしていますが、こちらも有償のサブスクリプション契約が必要とのことです。

> Windows (Red Hat Middleware 以外) でのその他の Java Workload に対しては、Windows 上の OpenJDK 用に追加のサブスクリプションが必要です。

また、アップデートタイミングは4半期ごとです。

> Red Hat は、OpenJDK 8、11、17、および 21 ディストリビューションに対して、約 3 カ月の間隔で年に 4 回のアップデートを提供します。

https://access.redhat.com/ja/articles/1457743

## Zulu
無償提供で有償の技術サポートを提供しています。

2つのサポートプランがあります。

> We offer two levels of enterprise technical support subscriptions to accommodate your business, and application requirements. 

https://www.azul.com/products/core/

無料のプランもあり、4半期ごとの無料アップデートがあります。

https://www.azul.com/products/pricing/

## Liberica JDK
無償提供で有償の技術サポートを提供しています。
特徴はサポート期間が長いことですね。


> BellSoft's commercial support offers access to bug fixes, security updates, enhancements, and other necessary fixes for at least 8 years for Long Term Support (LTS) versions.

https://bell-sw.com/support/

ただ、とりあえずサポート期間が一番長いやつを選ぶならこれを選ぶのがいいのかと思うのですが、これは有償なのでしょうかね。
「`BellSoft's commercial support offers`」は「`for at least 8 years`」とされているのが気になります。（詳しい方教えてください:bow:）

4半期ごとのアップデートがあります。

> Quarterly zero-day releases of JDK and JRE for most popular distributions (8, 11, 17).

https://bell-sw.com/libericajdk/


## Temurin

無償提供のJDKです。
サポートを受けたい場合は外部のサポートを提供している企業と別途契約の必要があります。

> We understand that some users prefer commercial, paid-for support of Eclipse Temurin. Eclipse does not provide such services but please see our Commercial Support page where a list of companies offering contracted support is maintained.

また、アップデートタイミングはOpenJDKがリリースされてから数日かかります。最大3週間かかるらしいです。

> Note that the dates below are from the upstream OpenJDK project page and should not be considered the date which the Adoptium project will have binaries available - there will be a short delay relative to these dates while we complete our extensive build and test cycles which can take up to three weeks. 

https://adoptium.net/support/




## Amazon Corretto

無償提供のJDKです。
AWSの各種サービスで使われてます。

アップデートタイミングは以下のように書かれてます。

> アップデートは四半期ごとにリリースされる予定です。Amazon では、通常の四半期サイクルの範囲外で、利用可能になった際に緊急で対応できる修正 (セキュリティを含む) を適用することも計画しています。

https://aws.amazon.com/jp/corretto/faqs/

## SapMachine

無償提供のJDKですが、サポート期間等がホームページから見当たりませんでした。

https://sap.github.io/SapMachine/

## Microsoft Build of OpenJDK

無償提供で、有償の技術サポートを提供しています。

有償の技術サポートですが、
> Azureサポートプランを持つMicrosoft Azureのお客様のみが利用可能

とのことです。
また、4半期ごとにアップデートする予定です。

https://learn.microsoft.com/ja-jp/java/openjdk/support

# おわりに
どういう軸で選べばいいんですかね？

個人的な感覚では日本語ドキュメントがあってサポート期間も長いAmazon Correttoを選びたいです。

内容に誤りや補足があればコメントくださるとうれしいです。