Oracle JDK 8にあってOpenJDKにない機能

# はじめに
Oracle JDK/JRE 8のPublic Updates[^1]が商用ユーザーに対しては2019年1月までで終了し、[2019年4月のリリースからライセンスが変更された](https://logico-jp.io/2019/04/17/oracle-jdk-license-has-changed-for-releases-starting-april-16-2019/)ため、別のJDKディストリビューションへの切り替えを考えている方も多いと思います。
しかし、特にOracle JDK 8までは、素のOpenJDKにはない[^2]機能が多く存在します。
安易に切り替えてトラブルにならないように、Oracle JDK 8にはあるが、一般的なOpenJDKディストリビューション[^3]にはない機能を無償・有償別にまとめてみます。

# Oracle JDK 8で無償利用できていた機能
- Applets/JRE Browser plug-in [^4]
- Java Web Start [^5]
- JavaFX [^6]
- VisualVM [^7]
- Derby DB [^8]
- Font Rendering/Fonts [^9]
- Color Matching [^10]
- Anti-Aliased 2D Rendering [^11]
- Cryptography Extensions [^12]
- Timezone Updater Tool [^13]
- Error Report Transmission [^14]
- SNMP Protocol Adapter [^15]
 
# Oracle JDK 8でもともと有償利用する機能
- Flight Recorder [^16]
- Mission Control [^17]
- Application Class Data Sharing [^18]
- Resource Management [^19]
- Advanced Management Console [^20]
- Usage Tracker [^21]
- Enterprise Performance Pack [^22]
 
# 補足
- Oracle JRE 8(≠JDK)までは自動更新もありますが、他のJDKディストリビューションには基本的にありません。[^23]
    - JRE単体を多くのディストリビューション[^24]で配布するようになっていますが、含まれない機能が多々ありますので、本記事の注釈を適宜参照ください。
- インストーラについては多くのディストリビューションが対応するようになっています。[^25]
    - 有償機能ですが、Oracle JRE 8には[MSI Enterprise JRE Installer](https://docs.oracle.com/javacomponents/jp/java-se-enterprise-installer/doc/)も用意されています。[^26]
- SSL証明書用のデフォルトのキーストア(JRE_HOME/lib/security/cacerts)やタイムゾーン・データベース(JRE_HOME/lib/tzdb.dat)は、JDKディストリビューションによって異なる場合が多いです。

# まとめ
- JDKディストリビューションは有償版・無償版を含め数多く存在しますので、環境・状況に適したものを選びましょう。

# 参考リンク
- [Oracle Java SE Supportロードマップ](https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html)
- [各JDKベンダの動向を知ってJava 11に備えよう：レポート](https://gihyo.jp/news/report/2018/10/0501)
- [OpenJDK のライフサイクルおよびサポートポリシー - Red Hat Customer Portal](https://access.redhat.com/ja/articles/1457743)
- [Zulu EnterpriseのFAQ - Azul Systems Inc.](https://web.archive.org/web/20210628114730/https://jp.azul.com/products/zulu-enterprise/zuluentfaq/) (Web Archive)
- [OpenJDKは使い物になるか？OpenJDKの実際と今後 （NTTデータ オープンソースDAY 2015 Autumn）](https://www.slideshare.net/hadoopxnttdata/openjdk-nttdata-oss-day-2015-autumn)
- [Java SE Subscription | オラクル | Oracle 日本](https://www.oracle.com/jp/java/java-se-subscription/)
- [JDK 新しいリリースモデル解説](https://www.slideshare.net/oracle4engineer/jdk-127825124)
- [JDK、Oracle JDK、OpenJDK、Java SEってなに？](https://qiita.com/nowokay/items/c1de127354cd1b0ddc5e)

[^1]: 参考リンクのサポート･ロードマップ(日本語)では、以前は"公式アップデート"と訳されていましたが、実際は"公開アップデート"の意味であり、[英語原文](https://www.oracle.com/java/technologies/java-se-support-roadmap.html)の"Public Updates"のままとしました。
[^2]: OpenJDK 11では元々Oracle JDKで有償だった多くの機能が寄贈されているため、事情が異なります。また、それ以前であっても、JDKディストリビューションによっては代替機能が存在する場合もあります。
[^3]: JDK 8では、以前から[Red Hat build of OpenJDK](https://developers.redhat.com/products/openjdk/overview/)、[Azul Zulu](https://www.azul.com/downloads/)があり、JDK 9からのリリースモデル変更以降は、[BellSoft Liberica JDK](https://bell-sw.com/libericajdk/)や[Amazon Corretto](https://aws.amazon.com/corretto/)などが正式リリースされています。
[^4]: ChromeやFirefoxでは2015年以降に順次利用できなくなり、[Oracle JDK/JRE 9から非推奨となることが2016年頭に発表](https://orablogs-jp.blogspot.com/2016/01/moving-to-plugin-free-web.html)され、JDK 11から削除されました。(2018年9月のSafari 12でも利用できなくなりました。)
[^5]: JDK 11から削除されましたが、[KarakunがOpenWebStartをリリース](https://openwebstart.com/)しました。また、[IcedTea-Web](https://github.com/AdoptOpenJDK/IcedTea-Web)で開発されたWeb Startは、[RHEL用のOpenJDK以外にWindows版も正式サポート](https://www.redhat.com/en/about/press-releases/leadership-openjdk-8-and-openjdk-11-transitions-red-hat)されました。
[^6]: JDK 11から含まれていませんが、[OpenJFX](https://openjfx.io/)を独自に組み込むことはできます。また、[BellSoft Liberica JDKのFull版](https://bell-sw.com/pages/downloads/?package=jdk-full)と[Azul Zulu](https://www.azul.com/downloads/?package=jdk-fx)はOpenJFXをバンドルしているパッケージも配布しています。なお、[Amazon Corretto 8はOpenJFXをバンドルしています](https://stackoverflow.com/questions/53375201/is-javafx-supported-by-corretto)が古いバージョンのままであり、[11には含まれません](https://github.com/corretto/corretto-11/issues/1)。
[^7]: [JDK 9から削除](https://docs.oracle.com/javase/jp/9/migrate/toc.htm#GUID-A3F99AB7-7425-4420-8EDE-E4237BC5FD7D)されましたが、[オープンソースとして配布](https://visualvm.github.io/)されています。
[^8]: Java DBとも呼ばれ、[JDK 9から削除](https://docs.oracle.com/javase/jp/9/migrate/toc.htm#GUID-12237744-E23B-42F8-8892-26BA1BDD63F2)されましたが、実体は[Apache Derby](https://db.apache.org/derby/)です。
[^9]: [Red Hat build of OpenJDK Windows版](https://developers.redhat.com/products/openjdk/download/)では[RHELからインポートしたTrueTypeフォントのセットが含まれているようです](https://web.archive.org/web/20230326060150/https://access.redhat.com/documentation/ja-jp/openjdk/8/html/release_notes_for_openjdk_8.0.292/openjdk8-windows-difference-from-upstream)。Azul Zuluでは[Commercial Compatibility Kit](https://www.azul.com/products/components/commercial-compatibility-kit/)としてフォントライブラリを別途配布しています。[Eclipse TemurinはFreetypeを採用](https://adoptium.net/docs/migration/#_freetype_font_rendering_library)しています。[Oracle JDK 11では固有だったT2KやLucidaフォントは削除](https://docs.oracle.com/javase/jp/11/migrate/index.html#GUID-D7936F0D-08A9-411E-AD2F-E14A38DA56A7__GUID-0F828B9B-4C5D-40F5-B46B-CC017AA9490F)されました。
[^10]: JDK 9までKodak Color Management System (KCMS)ライブラリが使われていましたが、JDK 10からOpenJDKで使われていたLittle CMS (LCMS)ライブラリに置き換わったようです。[Eclipse TemurinはLCMSを採用](https://adoptium.net/docs/migration/#_lcms)しています。
[^11]: Oracle JDK 8ではDuctusを利用していますが、[JEP 265](https://openjdk.org/jeps/265)としてJDK 9からオープンソースのMarlinライブラリに置き換わりました。[Eclipse Temurin 8はPiscesを採用](https://adoptium.net/docs/migration/#_pisces_and_marlin)しています。[OpenJDK 8u252からMarlinがバックポート](https://bugs.openjdk.org/browse/JDK-8238211)されましたが[デフォルトでは利用されない](https://bugs.openjdk.org/browse/JDK-8241307)とのことです。また、Azul Zulu 8は以前からMarlinを独自にバックポートしているようです。
[^12]: [JDK 9からはデフォルトで無制限の暗号化ポリシー](https://docs.oracle.com/javase/jp/9/migrate/toc.htm#GUID-BBA33F8F-17BC-493F-B39E-6A0411CFD916)となっています。[Oracle JDK 8u161以降は無制限の暗号化ポリシーが有効](https://www.oracle.com/technetwork/java/javase/8u161-relnotes-4021379.html#JDK-8170157)になっていますが、それ以前は [別途ダウンロード](https://www.oracle.com/java/technologies/javase-jce-all-downloads.html)して設定する必要があります。
[^13]: [Java Tools and Resources](https://www.oracle.com/java/technologies/downloads/tools/)からダウンロードできます。また、Azul Systemsはオープンソースの[ZIUpdater](https://www.azul.com/products/components/ziupdater-time-zone-tool/)を配布しています。BellSoftも[IANA Updater](https://bell-sw.com/iana-updater/)を提供しています。
[^14]: [OpenJDK 12で削除](https://bugs.openjdk.org/browse/JDK-8209857)されました。
[^15]: 代替として[SNMP4J](https://www.agentpp.com/api/java/snmp4j.html)を使う場合もあるようです。
[^16]: [JEP 328](https://openjdk.org/jeps/328)としてOpenJDK 11からFlight Recorderが入っていますが、[OpenJDK 8u262からバックポート](https://bugs.openjdk.org/browse/JDK-8223147)されて利用できるようになりました。
[^17]: [Oracle JDK 8u261からはバンドルされなくなりました](https://www.oracle.com/java/technologies/javase/8u261-relnotes.html#JDK-8244662)が、[jdk.java.netで配布](https://jdk.java.net/jmc/)されたり、[Java Tools and Resources](https://www.oracle.com/java/technologies/downloads/tools/)からダウンロードできます。[Red Hat build of OpenJDKでも利用できる](https://developers.redhat.com/blog/2019/03/15/jdk-mission-control-red-hat-build-openjdk/)ようになりました。また、Azul Systemsは[Azul Mission Control](https://www.azul.com/products/components/azul-mission-control/)として配布したり、BellSoftは[Liberica Mission Control](https://bell-sw.com/liberica-mission-control/)をリリースしています。[Amazon Corretto用のJMC](https://github.com/corretto/corretto-jmc)や[AdoptiumのEclipse Mission Control](https://adoptium.net/jmc/)としても利用可能です。
[^18]: [JEP 310](https://openjdk.org/jeps/310)としてOpenJDK 10から利用できるようになっています。[Liberica JDK Performance Edition](https://bell-sw.com/libericajdk-performance-edition/)にも含まれているようです。
[^19]: [Oracle JDK 10から非推奨](https://docs.oracle.com/javase/10/docs/api/jdk.management.resource-summary.html)となり、[JDK 11でオプションが削除](https://docs.oracle.com/javase/jp/11/tools/java.html#GUID-3B1CE181-CD30-4178-9602-230B800D4FAE__REMOVEDJAVAOPTIONS-A4E6F213)されました。
[^20]: [以前は公開サイトからダウンロードできました](https://www.oracle.com/java/technologies/javase-amc-downloads.html)が、[Java Management Serviceに移行](https://blogs.oracle.com/java/post/migrate-from-amc-to-jms)しました。また、[Liberica Administration Center](https://bell-sw.com/liberica-administration-center/)も同等の機能を持っているようです。
[^21]: [オープンソース化に向けての動きがありましたが取り下げられました](https://bugs.openjdk.org/browse/JDK-8240497)。[Java Management Serviceで使用状況を管理する](https://docs.public.oneportal.content.oci.oraclecloud.com/ja-jp/iaas/jms/doc/fleet-management.html)のに使われています。
[^22]: [JavaOne 2022で発表](https://www.publickey1.jp/blog/22/java_8java_17java_8javaone_2022.html)され、[64ビットのサーバー側Linux用にOracle JDK 8u345から導入](https://www.oracle.com/java/technologies/javase/epp-relnotes.html)されました。[Java 17までのパフォーマンスに関する機能修正をJava 8ランタイムに提供](https://docs.oracle.com/javacomponents/jp/enterprise-performance-pack/epp-user-guide/overview.html)しています。また、[Liberica JDK Performance Edition](https://bell-sw.com/libericajdk-performance-edition/)も同等の機能を実現しているようです。
[^23]: [Red Hat build of OpenJDK Windows版の開発者向けインストーラ](https://developers.redhat.com/products/openjdk/download/) 8u212(April 2019)から8u332(April 2022)まではUpdate Notifierがあります。[Liberica JDK](https://bell-sw.com/libericajdk/)には商用ライセンス機能としてAuto Updaterも用意されているようです。
[^24]: [java.comからのダウンロード](https://www.java.com/ja/download/)も2019年4月リリースからライセンスが変わり、商用ではサブスクリプションが必要となりました。無償でJRE 8を配布しているのは[Azul Zulu](https://www.azul.com/downloads/?version=java-8-lts&package=jre)、[BellSoft Liberica JDK](https://bell-sw.com/pages/downloads/?version=java-8&package=jre-full)、[Amazon Corretto](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html)、[Eclipse Temurin](https://adoptium.net/releases.html?variant=openjdk8)があります。
[^25]: 上記[^24]以外では[Red Hat build of OpenJDK Windows版](https://developers.redhat.com/products/openjdk/download/)にもインストーラがあります。
[^26]: JRE 8のWindows MSIインストーラで32ビット(x86)にも対応しているのは、[BellSoft Liberica JDK](https://bell-sw.com/pages/downloads/?version=java-8&bitness=32&os=windows)、[Azul Zulu](https://www.azul.com/downloads/?version=java-8-lts&os=windows&architecture=x86-32-bit)、[Eclipse Temurin](https://adoptium.net/temurin/releases/?variant=openjdk8&package=jre&os=windows)があります。