これからのJDK 何を選ぶ︖どう選ぶ︖
- How to choose the best OpenJDK distribution – v1.2
Takahiro YAMADA
2019-11-01
⾃⼰紹介
• CTCテクノロジー所属: マルチベンダーのミドルウェア技術サポート
- Oracle Fusion Middleware
- Red Hat JBoss Middleware
- その他 Java を⼀部利⽤するミドルウェア製品
• コミュニティ
- Twitter: @yamadamn
- 元: Oracle ACE (Middleware)
- 現在: ⽇本GlassFishユーザー会 監事
- 本⽇: OpenJDK警察 OpenJDKソムリエ
2
免責事項
• Oracle と Java は、Oracle Corporation およびその⼦会社・関連会社
の⽶国およびその他の国における登録商標です。⽂中の社名・商品名
などは、各社の商標または登録商標である場合があります。
• 発表する内容は個⼈の⾒解であり、所属する組織や団体の公式な⾒解
ではありません。
• 本資料に記載している内容は2019年10⽉末時点の情報に基づきます。
※2019年7⽉に開催した『これからのJDK 何を選ぶ︖どう選ぶ︖』のセッション
https://togetter.com/li/1373467 をベースとして、修正を加えています。
3
本⽇メインで紹介するJDK
• Oracle JDK
• Oracle OpenJDK
• Red Hat OpenJDK
• Azul Zulu
• SapMachine
• BellSoft Liberica JDK
• AdoptOpenJDK with HotSpot
• Amazon Corretto
4
その前に: JavaとかJDKって何だっけ︖
『JDK、Oracle JDK、OpenJDK、Java SEってなに︖』by @kis さん
5
なぜマルチプラットフォーム対応のJDKに着⽬するか
• ⼿動でビルドするのは⾯倒⼿間や動作保証などの観点から困難
- 開発環境とテスト・本番環境でのJDK種類・バージョンによる差異を極⼒なくす
• 開発環境: Windows 10, macOS X, Ubuntu, Docker
• テスト環境: CentOS, Windows Server, Docker, クラウド, Raspberry Pi
• 本番環境: RHEL, Windows Server, Solaris, Docker, クラウド, Raspberry Pi
• 各JDKディストリビューターが⼒を⼊れている
- Oracle, Red Hat, Azul Systems, SAP, BellSoft, AdoptOpenJDK, Amazon
- リリースも早い
• Oracleが最初にリリース後に、各ディストリビューターが競ってリリース
• ゼロデイ脆弱性への対応を考慮
- Linux distroに含まれるOpenJDKは若⼲古かったり、パッケージ更新に依存
• 例: 改元「令和」対応、Mystery meat問題
(例)
6
アジェンダ
1. JDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各JDKディストリビューションの特徴
4. JDKディストリビューションの選び⽅
5. OpenJDKの⽀え⽅
7
その前に: Javaが有償化されたと思っている⽅いないですよね︖
• Javaは誰のもの︖
- 「Javaはオラクルのもの︖」、「いいえ、これからもJavaコミュニティのもので
す︕」(2011年頃 by @yoshioterada さん: 現Java Champion)
• 「Java有償化」ではなく「Java⾃由化」の⽅が正しい理解
- Linuxのようなディストリビューションモデルに変更
- 現状の主流は、OpenJDK with HotSpot JVMであり、⼤きな差異はない
• 関連ツイートまとめ
- 『「Java 有償化」で誤解する⼈になるべく分かりやすく説明するためのまとめ』
https://togetter.com/li/1343743
- 『Oracle JREの商⽤無償版EOLの話をするには、政府CIOの「Javaのサポートポリシー変更等に関
する技術レポート」がオススメ』 https://togetter.com/li/1342198
- 『JJUG ナイトセミナー 「緊急特集︕ Javaの無償版はなくならないぞ︕」』
https://togetter.com/li/1239234
8
⽇本各地のJavaコミュニティでも広がる「Java is Still Free」
『Javaは今でも無償です、という話 / Java is still free』
https://speakerdeck.com/kishida/java-is-still-free by @kis さん
『Java Do #osc19do Java有償化(していない件)について』
https://speakerdeck.com/gishi_yama/java-do-number-osc19do by @gishi_yama さん
9
アジェンダ
1. JDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各JDKディストリビューションの特徴
4. JDKディストリビューションの選び⽅
5. OpenJDKの⽀え⽅
10
OpenJDKの歴史
• 最初に開発中のJDK 7がOSS化 (Sun時代)
• 開発途中のOpenJDK 7からOpenJDK 6が派⽣
• JDK 7からはコードベースが OpenJDK に⼀本化
『アプリケーション実⾏基盤としてのOpenJDKの評価』
https://ossipedia.ipa.go.jp/nfs/pdf_pub/1007/208/670/670.pdf
実際はその後
Oracle JDKとして
リリース
11
JDKディストリビューションの歴史: 前編
• JDK 6リリース〜JDK 8リリース当初 (7年3ヶ⽉)
3つの主要ディストリビューションで、実質的にSun/Oracle JDK⼀強
Sun JDK 6
2006-12
Oracle JDK 7
2011-07
Oracle JDK 8
2014-03
2009-01
Red Hat OpenJDK
(OpenJDK 6 on RHEL5.3)
2013-09
Azul Zulu
(Zulu 7 for Windows)
Oracle
buys Sun
2010-01
その後、RHEL 6/7などにも搭載
2012-06 OpenJDK 7 on RHEL6.3
2014-10 OpenJDK 8 on RHEL6.6
Oracle
buys BEA
2008-04
旧BEA JRockit JDKについては
その後、Project HotRockitとして
Oracle JDK 7以降に機能マージ
その後、LinuxやmacOSにも対応
12
時代の変化
進化への追従
セキュリティ対応
の重要性
クラウドやコンテナ
環境の台頭
13
Java 8から11で何が起こったか
『Java SE 8から11で何が起きた︖⼀気におさらいしてみよう︕ /java-se-8-to-11』
https://speakerdeck.com/miyakawataku/java-se-8-to-11 by @miyakawa_taku さん (CC BY 4.0)
14
JDKリリースモデルの変更
• LTSとnon-LTSモデル
- 近年は様々な製品が採⽤: https://en.wikipedia.org/wiki/Long-term_support
- 数年かけてのメジャーリリースではなく、半年単位の機能リリースによる継続的な変更
• 共有ランタイム(Public JRE)ではなく、カスタムJREをアプリに組込むことを推奨
- モジュール・システム (Project Jigsaw) により実現
- jlinkを使って作成し、将来的にはjpackage(旧:javapackager)を利⽤
• ライセンス変更
- 以前のSun/Oracle JDKのBCLライセンスではJRE単独の再配布が不可
• Oracle JDK: OTNLA for Oracle Java SE
• Oracle OpenJDK: GPLv2 + Classpath Exception
『JDKの新しいリリース・モデル、および提供ライセンスについて』
https://www.oracle.com/technetwork/jp/articles/java/ja-topics/jdk-release-model-4487660-ja.html
15
Oracle JDK/JRE 8までとOpenJDKの違い
『JDK:新しいリリースモデル解説』
https://www.slideshare.net/oracle4engineer/jdk-127825124
詳細はこちら『Oracle JDK 8にあってOpenJDKにない機能』
https://qiita.com/yamadamn/items/bb813dccaa1dc5585c9b
『How Do We Define Java? 』
https://www.azul.com/how-
do-we-define-java/
16
Java 8と11の⾮互換性
• Oracle JDK 11から削除された内容
- Javaプラグイン(アプレット), Java Web Start
- Public JRE+⾃動更新
- JavaFX (OpenJFXに移管)
- 32bit版バイナリ (Windows, Linux) ※Oracle JDK/JRE 9~
➡ クライアント環境に影響 (特にレガシーな環境)
• モジュール・システム(Project Jigsaw)による壁
- 内部APIに対するアクセス制限
- JAXBなどJava EE関連モジュール削除
➡ ミドルウェア、JVM⾔語、ライブラリ、フレームワーク、ツールなどに影響
17
Java 11以降はOpenJDKとOracle JDKが実質的に同⼀
• Oracleが商⽤機能をOpenJDKに寄贈 (JFR/JMC, AppCDS, ZGC)
• プロプライエタリな機能(JavaプラグインやJava Web Start)を削除
• 3rd-partyライセンスのライブラリ(フォントや描画など)をOSSベースに変更
『JDK:新しいリリース
モデル解説』
https://www.slideshare
.net/oracle4engineer/jd
k-127825124
2019年4⽉のOracle JDK 8
(8u211/8u212)以降にも適⽤
18
OpenJDKを中⼼として各JDKが競う時代に
ソースコード
複数のディストリビューター
JDKディストリビューション• 商⽤機能を寄贈
• その他固有機能を削除/OSS化
コミュニティ・プロジェクト
19
JDKディストリビューションの歴史: 後編
• JDK 9リリース〜実質的に初のLTSとなる11.0.3登場 (1年7ヶ⽉)
- 既存3ベンダーを含む計7つのディストリビューターで戦国時代に突⼊(?)
JDK 9
2017-09
JDK 10
2018-03
JDK 12
2019-03
2018-04
BellSoft Liberica JDK
10 for Raspberry Pi
Oracle JDK/JRE 8
Public Updates終了
2019-01
JDK 11 (LTS)
2018-09
2019-10
8u231/232
11.0.5
13.0.1
2018-05
AdoptOpenJDK
8u172
2018-03
SapMachine 10
2019-02
Amazon Corretto
8u202
Oracle JDK/OpenJDK
8u212, 11.0.3 (LTS)
2019-04
※各ディストリビューションの
正式と⾒られるリリース年⽉
• Red Hat OpenJDK
Windows版サポート発表
• Azul ZuluFXリリース
2018-12
JDK 13
2019-09
2018-11
Amazon Linux⽤LTS発表
Amazon Corretto
8u192 (Preview)
• Zulu Enterprise
on MS Azure発表
2018-09
延⻑発表
2018-01
Oracle JDK/JRE 8
Public Updates
終了発表
2017-10
20
アジェンダ
1. JDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各JDKディストリビューションの特徴
4. JDKディストリビューションの選び⽅
5. OpenJDKの⽀え⽅
21
マルチベンダーによるOpenJDKへの貢献/投資 (JDK 11GA)
『Building JDK 11 Together』
https://blogs.oracle.com/java-platform-group/building-jdk-11-together
Total Issue: 2,468
1. Oracle (80%)
2. SAP (7%)
3. Red Hat (5%)
4. Google (3%)
5. 個⼈ (2%)
6. BellSoft (1%)
7. IBM (1%)
22
マルチベンダーによるOpenJDKへの貢献/投資 (JDK 12GA)
『The arrival of Java 12!』
https://blogs.oracle.com/java-platform-group/the-arrival-of-java-12
Total Issue: 1,919
1. Oracle (75%)
2. Red Hat (8%)
3. Google (6%)
4. SAP (4%)
5. 個⼈ (3%)
6. BellSoft (1%)
7. IBM (1%)
23
マルチベンダーによるOpenJDKへの貢献/投資 (JDK 13GA)
『The arrival of Java 13!』
https://blogs.oracle.com/java-platform-group/the-arrival-of-java-13
『OpenJDK Backports Monitor』
https://builds.shipilev.net/backports-monitor/
pushes-13.txt – [Distribution by email/name] から独⾃集計
* 上記図とは若⼲異なるため、JBSをもとに補正
Total Issue: 2,127
1. Oracle (68%)
2. Red Hat (11%)
3. SAP (7%)
4. 個⼈ (4%)
5. Google (3%)
24
マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 8u212/232)
『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/
pushes-openjdk8u212.txt, pushes-openjdk8u232.txt ※2019年7⽉の8u222は割愛
– [Distribution by email/name] から独⾃集計
Total Issue: 112
1. Red Hat (64.3%)
2. Amazon (17.9%)
3. Oracle (11.6%)
4. SAP (3.6%)
5. 個⼈ (1.8%)
6. Azul (0.9%)
従来もOracle JDKのPublic Updates終了後は、Red HatがOpenJDKの修正を主導
※OpenJDK 8u212/232であって、Oracle JDK 8u212/232ではないことに注意
Public Updates終了前はOracleが主導し、その後Oracleはプライベートリポジトリに反映
Total Issue: 81
1. Red Hat (91.4%)
2. Amazon (4.9%)
3. IBM (2.5%)
4. NTTデータ (1.2%)72
20
13
4 2
1
Issues fixed in OpenJDK 8u212
Red Hat Amazon Oracle SAP Azul
74
4 2
1
Issues fixed in OpenJDK 8u232
Red Hat Amazon IBM NTT
25
マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 11.0.3/11.0.5)
『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/
pushes-11.0.3.txt, pushes-11.0.5.txt ※ 2019年7⽉の11.0.4は割愛
– [Distribution by email/name] から独⾃集計
Total Issue: 185
1. Red Hat (44.9%)
2. SAP (31.4%)
3. Oracle (12.4%)
4. 個⼈ (3.8%)
5. Google (3.8%)
6. Amazon (2.7%)
7. BellSoft (0.5%)
8. Intel (0.5%)
※OpenJDK 11.0.3/11.0.5であって、Oracle JDK 11.0.3/11.0.5ではないことに注意
OracleはLTSリリースについて、プライベートリポジトリにのみ基本的に反映
Total Issue: 287
1. Red Hat (53.0%)
2. SAP (40.1%)
3. 個⼈ (2.4%)
4. NTTデータ (1.4%)
5. Amazon (1.0%)
6. BellSoft (0.7%)
7. Google (0.7%)
8. Azul (0.3%)
9. IBM (0.3%)
83
58
23
7
7 5
1
1
Issues fixed in OpenJDK 11.0.3
Red Hat SAP Oracle
Google Amazon BellSoft Intel
152115
7
4
3 2 2
Issues fixed in OpenJDK 11.0.5
Red Hat SAP NTT
Amazon BellSoft Google
26
マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 11.0.2)
『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/
pushes-11.0.2.txt – [Distribution by email/name] から独⾃集計
Total Issue: 92
1. Oracle (54%)
2. SAP (22%)
3. Red Hat (20%)
4. 個⼈ (2%)
5. Google (2%)
OpenJDK 11.0.2 まではOracle主導
※次の機能リリースが出る6ヵ⽉間
つまり、Oracleは最新版OpenJDKに注⼒し、
OpenJDK LTSは他のベンダーに委任
50
20
18
2 2
Issues fixed in OpenJDK 11.0.2
Oracle SAP Red Hat Google
27
OpenJDK 8u212/11.0.3 LTSがリリースされて⾒えてきたこと
• 2019年4⽉のリリース前後から⾒えたこと
- Red HatがOpenJDK 8u212/11.0.3以降 LTSのアップデートを主導
• 『Red HatがOpenJDK 8/11 LTSの修正を主導することへの⾒解や反響』
https://togetter.com/li/1342856
- (補⾜) Oracle JDK/Oracle OpenJDK 12にはRed Hat由来のShenandoah GCは⼊らず
- Oracle JDK 8u212/11.0.3 と OpenJDK 8u212/11.0.3以降は似て⾮なるもの
• 『OpenJDK 11.0.3/8u212 LTS以降でのリリースノートや脆弱性の追い⽅』
https://togetter.com/li/1342936
• 『改元(新元号)対応に⾒るOracle JDKとOpenJDKの攻防あるいは協⼒ #令和』
https://togetter.com/li/1343228
28
改元対応でのバックポート例
[JDK-8205432] Replace the placeholder Japanese era name - Java Bug System
OpenJDKとOracle JDK
共通の修正
• 12.0.1/12.0.2
(non-LTS/最初の6ヵ⽉)
Oracle JDK 固有の修正
• 11.0.x-oracle
• 8uXXX
Red Hatが主導する
OpenJDK LTSへの修正
• 11.0.x
• openjdk8uXXX
最初に実装されるのは
開発中のリリース
• 13 (既にリリース済)
29
LTSリリースはOracle JDKとRed Hat主導のOpenJDKで差異あり
Red Hat主導の
OpenJDK LTS
• 11.0.3以降
• 8u212以降
Oracle JDK LTS
• 11.0.3以降
• 8u211/212以降
Oracle JDK/OpenJDK LTS
共通の修正
• セキュリティ脆弱性
• その他重⼤な不具合
• 影響の⼤きい修正
最新版(non-LTS含む)は原則共通であり、Java Bug Systemなど通じて状況も明らかなので分断を招く訳ではない
また、JDKディストリビューション間でも独⾃バックポートなどによる差異は元々ある
30
LTSリリースでの差異を⾒分けるにはビルド番号を参考 (JDK 8)
• ビルド番号≒該当バージョンでのソースコードのセットにつけるタグ
「$ java –version」での確認 (Java 9以降はAPIでも基本的に取得可能)
• 8u212 (java.runtime.version, java.vm.version システムプロパティから基本的に確認可能)
- Oracle JDK
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
- Red Hat OpenJDK
openjdk version "1.8.0_212-3-redhat"
OpenJDK Runtime Environment (build 1.8.0_212-3-redhat-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
ビルド番号: b10
ビルド番号: b04
数が⼤きいほうが多くの修正
を含んでいる訳ではない
31
[参考] 2019年7⽉以降はバージョンで識別可能 (JDK 8)
• Oracle JDK 8u221 (8u222はリリースされず)
- Critical Patch Updates (CPU) 相当
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
• その他 OpenJDK 8u222
- Patch Set Updates (PSU) 相当?
openjdk version "1.8.0_222"
OpenJDK Runtime Environment Corretto-8.222.10.1 (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM Corretto-8.222.10.1 (build 25.222-b10, mixed mode)
『JavaのリリースにはCPUとPSUの2種類があります』by @jyukutyo さん
https://www.sakatakoichi.com/entry/2015/07/22/173205
(Amazon Correttoの例だが他も基本的に同様)
32
LTSリリースでの差異を⾒分けるにはビルド番号を参考 (JDK 11)
• 11.0.3 (Runtime.Version クラスからも基本的に取得可能)
- Oracle JDK
java version "11.0.3" 2019-04-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode)
- Red Hat OpenJDK
openjdk version "11.0.3-redhat" 2019-04-16 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.3-redhat+7-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.3-redhat+7-LTS, mixed mode)
ビルド番号: 12
ビルド番号: 7
『Java 10 で変わる Java のバージョン表記』by @YujiSoftware さん
https://qiita.com/YujiSoftware/items/2c5a9117a577700ea540
33
[参考] 2019年7⽉以降はビルド番号で識別困難 (JDK 11)
• Oracle JDK 11.0.4
java version "11.0.4" 2019-07-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.4+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.4+10-LTS, mixed mode)
修正数:104 https://bugs.openjdk.java.net/issues/?jql=project+%3D+JDK+AND+fixVersion+%3D+11.0.4-oracle
• その他 OpenJDK 11.0.4
openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.4+11)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.4+11, mixed mode)
修正数:251 https://bugs.openjdk.java.net/issues/?jql=project+%3D+JDK+AND+fixVersion+%3D+11.0.4
(AdoptOpenJDKの例だが他も基本的に同様)
OpenJDKのビルド番号
とは無関係
34
OpenJDKを利⽤したビジネスモデルの変遷例
• Oracle
- (旧Sun) Java SE for Business: ⻑期サポート
- Java SE Advanced: ⻑期サポートおよび商⽤機能を⾼付加価値として提供するライセンスモデル
- Java SE Subscription: ⽐較的安価に広く提供し、⻑期サポートするサブスクリプションモデル
• Red Hat
- Red Hat Subscription: RHEL利⽤ユーザーに⻑期アップデートを提供するサブスクリプションモデル
- OpenJDK Subscription for Windows: WindowsユーザーにもOpenJDKのサブスクリプションを提供
JDKリリースモデルの変更は、ビジネスモデル的には他のベンダー(ディストリビューター)に
負荷分散してOpenJDKエコシステムを安定的に維持する狙いも⼤きいと⾒られる
『各JDKのビジネスモデルに関するまとめ』 https://togetter.com/li/1404489
旧BEA社のJRockit JDK機能を統合
商⽤機能はすべてOpenJDKに寄贈
素のOpenJDKに⾜りない機能は
IcedTeaで⼀部補完
Web Start代替のIcedTea-Webは
AdoptOpenJDK配下にリポジトリ移管
Shenandoah GCなどをOpenJDKに寄贈
35
アジェンダ
1. JDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各JDKディストリビューションの特徴
4. JDKディストリビューションの選び⽅
5. OpenJDKの⽀え⽅
36
その前に: OpenJDK Projectの動向把握⽤の基礎情報源
種類・名称 URL ⽤途・備考
Webサイト http://openjdk.java.net/ OpenJDK開発者⽤のため少し構成が複雑
JDK Enhancement Proposal
(JEP)
http://openjdk.java.net/jeps/0 JDKバージョンごとに⼊る機能確認
2011年に策定されJSRを牽引
JDK Project http://openjdk.java.net/projects/jdk/ JDKリリース時期と含まれるJEP
OCTLA Signatories List https://openjdk.java.net/groups/conf
ormance/JckAccess/jck-access.html
Javaの正式実装を証明する技術互換キット
(TCK/JCK)にアクセスできる署名者⼀覧
Twitter @OpenJDK
メーリングリスト (ML) http://mail.openjdk.java.net/ 興味があるトピックを参照・購読・投稿
Java Bug System (JBS) https://bugs.openjdk.java.net/ JIRAによるIssueのトラッキング (Bugだけ
でなく、機能拡張や互換性確認なども含む)
ソースコード管理 http://hg.openjdk.java.net/ Mercurialにて管理
Project SkaraにてGitHubへの移⾏も検証中
https://github.com/openjdk
『JSRとJEPとJBSの⾒⽅や調べ⽅について』
https://www.slideshare.net/AyaEbata/jsrjepjbs by @aya_122 さん
37
Oracle JDK
⼀般向け情報 種類・名称 参照先
導⼊・運⽤ ドキュメント Java SE API & ドキュメント (Oracleだけではなく他のJDKを使う場合も必要)
リリースノート JDK Release Notes
脆弱性関連 Critical Patch Updates and Security Alerts
ライフサイクル Oracle Java SE サポート・ロードマップ
動作環境 Java SE Subscription ドキュメント - システム要件
動向把握 Twitter @Java (OracleだけではなくJavaの各種情報源)
Blog Oracle Java Platform Group, Product Management Blog
ダウンロード Java SE - Downloads | Oracle Technology Network * 個⼈・開発⽤で要アカウント認証 (java.comのJREは現状認証不要)
All Java SE Downloads on MOS * 商⽤でOracle製品の契約者向け
ライセンス Oracle Binary Code License (BCL for Java SE): ~JDK 10, ~8u201/202
Oracle Technology Network License Agreement (OTNLA) for Oracle Java SE: JDK 11~, 8u211/212~
* 組み込み⽤途は元々開発無償、配備はロイヤリティ必要
• 従来からのメインディストリビューターであり、OpenJDKへの最⼤の貢献者
• ユーザーへの慣れ・安⼼感があったが、ライセンス変更で⼤混乱
『4⽉からのOracle JDK/JREライセンスの変更に関するまとめ』
• ⽇本語を含めて情報量が最も豊富
38
Oracle OpenJDK
⼀般向け情報 種類・名称 参照先
導⼊・運⽤ Oracle JDKと同じだが、ライフサイクルは半年のみ (次期機能リリースまで)
動向把握 Oracle JDKと同じだが、ダウンロードページからも各種リンクあり
ダウンロード JDK Builds from Oracle: https://jdk.java.net/ (JDK 9~)
* 認証不要
ライセンス GPLv2 + Classpath Exception
(GNU General Public License, version 2, with the Classpath Exception)
[参考] OpenJDKソースコードと同じ: https://openjdk.java.net/legal/gplv2+ce.html
• 汎⽤プラットフォームで最新版へ追従 (JDK8は未対応)
• アーリーアクセス(EA)版の評価・検証にも利⽤
• インストーラなし (tar.gz/zip)
39
Red Hat OpenJDK
⼀般向け情報 種類・名称 参照先
導⼊・運⽤ ドキュメント Product Documentation for OpenJDK
* Windows⽤で現状英語のみ、JBossユーザ向けにRHELでのインストールガイドは別途あり
リリースノート
ライフサイクル OpenJDK Life Cycle and Support Policy
* ⽇本語翻訳は https://access.redhat.com/ja/articles/1457743動作環境
動向把握 Twitter @rhdevelopers (他、個⼈アカウントも適宜確認)
Blog https://developers.redhat.com/blog/category/java/
ダウンロード https://developers.redhat.com/products/openjdk/download/ * 開発者⽤Windows版で要アカウント認証
https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?product=core.service.openjdk&downloa
dType=distributions * 商⽤でJBoss製品などのサブスクリプション必要, 別途RHEL⽤のyumリポジトリあり
ライセンス GPLv2 + Classpath Exception
• Oracleに次ぐOpenJDKの貢献者であり、以前からPublic Updates終了後に主導
『Red HatのOpenJDK』by @nagetsum さん
• RHEL/CentOSで豊富な実績を持ち、従来はIcedTeaで機能拡張
• Windows版OpenJDKも正式サポート (例: IcedTea-Web)
40
Azul Zulu
⼀般向け情報 種類・名称 参照先
導⼊・運⽤ ドキュメント Zulu user documentation
リリースノート Zulu Community Release Notes
ライフサイクル Azul Product Support Lifecycle
Zulu Community Roadmap
動作環境 Tested and Validated Platforms
動向把握 Twitter @AzulSystems
Blog https://www.azul.com/blog/
GitHub https://github.com/zulu-openjdk (現状ほぼDockerfile⽤)
ダウンロード https://www.azul.com/downloads/zulu-community/ * 認証不要(Zulu Community)
https://www.azul.com/downloads/azure-only/zulu/ * Azure利⽤者向け
ライセンス GPLv2 + Classpath Exception
• JDK/JVM専業ベンダーで、異なるJVMであるAzul Zingを持つ
• Microsoft Azureで以前から利⽤され、商⽤のZulu Enterprise相当を提供
• 以前は素のOpenJDKビルドに近かったが、最近は機能拡張やDocker対応を重視
41
SapMachine
⼀般向け情報 種類・名称 参照先
導⼊・運⽤ ドキュメント https://github.com/SAP/SapMachine/wiki
リリースノート (⾒当たらず) * 基本はOracle OpenJDKやAdoptOpenJDKと同じはず
ライフサイクル Security Updates, Maintenance and Support
動作環境 Certification and Java Compatibility
動向把握 Twitter @SweetSapMachine
GitHub https://github.com/SAP/SapMachine
ダウンロード https://sap.github.io/SapMachine/ * 認証不要(GitHubからダウンロード)
ライセンス GPLv2 + Classpath Exception
• アーリーアクセス(EA)版を含めた最新リリースへの追従 (JDK8は未対応)
• サーバーサイドで実⾏するうえでの診断機能の強化
• 元々モニタリングに強い SAP JVM を別に持つ
42
BellSoft Liberica JDK
⼀般向け情報 種類・名称 参照先
導⼊・運⽤ ドキュメント 各リリースのダウンロードページから [installation guide]参照
リリースノート 各リリースのダウンロードページから [Release Notes]参照
* 修正内容はOracle JDKのリリースノートにリンク
ライフサイクル https://support.bell-sw.com/support
動作環境 リリースノート参照
動向把握 Twitter @bellsoftware
Blog https://bell-sw.com/blog/
GitHub https://github.com/bell-sw/Liberica
ダウンロード https://www.bell-sw.com/ * 認証不要
ライセンス GPLv2 + Classpath Exception
• AdoptOpenJDKに次ぎ、広範なプラットフォームに対応
• JavaFX/OpenJFXとの統合 (11以降は含まないLite版もあり)
『Liberica JDKやExecutable Jarの是⾮に対するJavaFXガチ勢とのやり取りまとめ』
• JetBrainsとの戦略的提携、Oracleとの提携?(ビルド番号などから推測)
43
AdoptOpenJDK with HotSpot
⼀般向け情報 種類・名称 参照先
導⼊・運⽤ ドキュメント https://adoptopenjdk.net/installation.html
リリースノート https://adoptopenjdk.net/release_notes.html
ライフサイクル https://adoptopenjdk.net/support.html
動作環境 https://adoptopenjdk.net/supported_platforms.html
動向把握 Twitter @adoptopenjdk
Blog https://blog.adoptopenjdk.net/
GitHub https://github.com/AdoptOpenJDK/openjdk-build
Slack https://adoptopenjdk.net/slack
ダウンロード https://adoptopenjdk.net/ * 認証不要(GitHubからダウンロード)
ライセンス GPLv2 + Classpath Exception
• ビルドファームによる広範なプラットフォームに対応
• コミュニティに最も近い存在で、スポンサーとも協⼒関係
(Platinum Sponsors: IBM, MS Azure, Azul Systems, Pivotal, Red Hat, AWS, etc.)
• TCK/JCKを通せていないが、独⾃のテストスイートで対応
44
Amazon Corretto
⼀般向け情報 種類・名称 参照先
導⼊・運⽤ ドキュメント Amazon Corretto Documentation
リリースノート Change Log for Amazon Corretto 8
Change Log for Amazon Corretto 11
ライフサイクル https://aws.amazon.com/corretto/faqs/#support
動作環境 https://aws.amazon.com/corretto/faqs/#Using_Amazon_Corretto
動向把握 Twitter @AWSOpen
Blog AWS Java Development | AWS Open Source Blog
GitHub https://github.com/corretto/
ダウンロード https://aws.amazon.com/corretto/ * 認証不要、英語に切り替えないと古いモジュールが⾒える場合がある
ライセンス GPLv2 + Classpath Exception
• AWSおよびJava Fatherの強⼒なネームバリュー
• ドキュメントに⼒を⼊れている (⽇本語翻訳などもあるが遅れる)
• 独⾃バックポートありで、ダウンストリーム(LTS)に注⼒
45
その他注⽬しておきたいJDK
• OpenJDK with HotSpot JVMベース
- Linux distroバンドル : 各Linuxディストリビューションで対応に差異あり
- 国内ベンダーJDK : 富⼠通、⽇⽴などの各製品でサポート
- Alibaba Dragonwell : 現状LinuxのJDK8専⽤で、JWarmupや独⾃のJFRバックポートあり
- ojdkbuild : Red Hat OpenJDK Windows版のベースでFedora的扱い
• OpenJDK with NOT HotSpot JVM
- AdoptOpenJDK with OpenJ9 : フットプリントのよさをうたうEclipse OpenJ9ベース
- IBM SDK Java Technology Edition : 最近はOpenJ9ベース+IBM独⾃機能
『OpenJ9+OpenJDK』『OpenJ9 VMとIBM Javaについて』 by @TTakakiyo さん
- Azul Zing : Linux x64に特化し、C4 GCやFalcon JITで⾼速化をうたう
- GraalVM : Oracleが中⼼に開発する多⾔語対応VM (HotSpotだがAOTでネイティブイメージ対応)
『⼀体何モノなの? GraalVM⼊⾨編』 by @cotoc88 さん, @hhiroshell さん
直接関係ないけど、こちらも適宜参照『VMの歩む道。 Dalvik、ART、そしてJava VM』 by @yy_yank さん
46
アジェンダ
1. JDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各JDKディストリビューションの特徴
4. JDKディストリビューションの選び⽅
5. OpenJDKの⽀え⽅
47
Oracle JDK陣営とRed Hat主導のOpenJDK LTS陣営 (イメージ)
重要な修正は共通しており、Oracle JDKとOpenJDK LTSを近づけるよう努⼒はされている
48
JVMエコシステムアンケート (グローバル)
https://snyk.io/blog/jvm-ecosystem-report-2018/ (2018年10⽉レポート)
Which Java SE version do you use in
production for your main application?
Which Java vendorʼs JDK do you use in
production for your main applications?
※実際には2018年9⽉より前のアンケートと想定される
49
開発者エコシステムアンケート (グローバル)
『2019年開発者エコシステムの状態インフォグラフィック』
https://www.jetbrains.com/ja-jp/lp/devecosystem-2019/
50
JVM⾔語利⽤者向け簡易アンケート (⽇本)
『 (2019年4⽉時点) JVM⾔語を使う⽅がどのJDK/JVMを使うか︖アンケートと考察まとめ』
https://togetter.com/li/1340853
Q1. 商⽤環境でScala, Kotlin, Clojure, Groovy
などのJVM⾔語を使う⽅はJDK/JREは何を利⽤
しますか︖
Q2. 商⽤環境でJVM⾔語を使う⽅はJDK/JVM
バージョンとして何をメインで使いますか︖
︖
51
Java/JVM⾔語利⽤者向けアンケート (⽇本)
『 (2019年7⽉時点) Java/JVM⾔語を商⽤で使っている⽅向けのアンケートと考察まとめ』
https://togetter.com/li/1376545
Q1. 回答者の⽴場 Q2. メインで利⽤するJDKバージョン Q3. メインで利⽤するJDKの種類
Q4. どこでJDK/JVMを実⾏するか Q5. JDK/JVMの商⽤サポートの必要性
52
判断軸
• サポート
- アップデート提供期間
- 商⽤(技術)サポートの度合い
- 関連製品との動作保証
• 使いやすさ
- インストーラ (特にWindowsクライアント)
- 開発環境
- コンテナ対応
- 知名度
• どこで運⽤するか
- サーバー (クラウド, オンプレミス)
- クライアント
- コンテナ
- 組み込み
53
[参考] 判断軸による⽐較(例) – サポート
ディストリビューション
8 (LTS)
EOL
11 (LTS)
EOL
13 EOL
(non-LTS)
商⽤(技術)
サポート
関連製品の
動作保証
備考
Oracle JDK 2025-03 2026-09 2020-03 多⾔語 S→︖ 既存では強いが今後不明
Oracle OpenJDK - 2019-03 2020-03 - B 追従できる環境は限定
Red Hat OpenJDK 2023-06 2024-10 - 多⾔語,英語 B→︖ Windows対応で増える︖
Azul Zulu 2026-03 2027-09 2023-05 英語 A→︖ 奇数リリースで商⽤はMTS
SapMachine - 2022-09 2020-03 - ︖ SAP製品内に限定︖
BellSoft Liberica JDK 2026-01 2027-03 2020-03 英語 ︖ 知名度はまだ低い
AdoptOpenJDK 2023-09 2022-09 2020-03 多⾔語 *IBM B 利⽤増加したがTCKが難点
Amazon Corretto 2023-06 2024-08 - - B ⼀定のシェア確保
最低期間なので、今後延⻑される可能性は⼤いにあり
• 商⽤サポートがあるJDKは、そのEOLを記載
• Oracle JDK/Liberica JDK以外は、基本的にRed Hat主導のOpenJDK LTSのアップデートに依存
• 動作保証については、以前からのJDKがシェア・提携関係的に強そうだが、将来は不明
54
[参考] 判断軸による⽐較(例) – 使いやすさ
ディストリビューション
インストーラ SDKMAN
& Scoop
コンテナ
(Docker)
知名度 備考
8 11
Oracle JDK S A B B S Docker対応はServer JRE 8 のみ
Oracle OpenJDK - - S A A LTSはないが最新版を利⽤可能
Red Hat OpenJDK A A - B B
Red Hat Container Catalogで利⽤
再配布⾃由なUniversal Base Image(UBI)に今後注⽬
Azul Zulu B S A S B インストーラ・Dockerなども各種環境に注⼒
SapMachine - A A A - Docker公式イメージもあり (ベースOSはUbuntu)
BellSoft Liberica JDK A S A S - AlpineのDockerイメージはかなり軽量
AdoptOpenJDK B A S S A IDEバンドルも含めて⼀通り利⽤可能
Amazon Corretto A A A A A
DockerのベースOSはAmazon Linux2のみ
(Alpine対応は保留されている)
• JDK 8のインストーラは、既存のWindow⽤Oracle JRE 8との互換性を基準に評価
• JDK 11のインストーラは、多くのプラットフォームに対応しているかに注⽬
• 知名度は過去に実施したアンケートなどから判断
55
[参考] 判断軸による⽐較(例) -どこで運⽤するか
ディストリビューション クラウド オンプレミス クライアント コンテナ 組み込み 備考
Oracle JDK OCI A S B A
クライアント⽤のJava Web
Start (アプレットは⾮推奨)
Oracle OpenJDK (any) A - A - 最新版はコンテナに適す
Red Hat OpenJDK OpenShift A A B B
IcedTea-Web for Windows
正式サポート予定
Azul Zulu Azure A B S A OpenJFXバンドル版や
IcedTea-Webも使われる︖
SapMachine (any) A - A - 基本はサーバ環境⽤途
BellSoft Liberica JDK Yandex A A S A JavaFX/OpenJFXバンドル
AdoptOpenJDK (any) A A S A
IcedTea-Web for Windows
バンドル(オプション)
Amazon Corretto AWS A - A B 8のみOpenJFXバンドルだが
古いのとWebkit周りで難あり
• オンプレミスのサーバ環境は、特にどれでも問題なし (対応プラットフォーム次第)
• 既存クライアント環境との互換性を重視する場合は、Oracle JRE 8が妥当か
56
コストをどう考えるか
• 環境・状況次第で⼤きく変わる (⾃社開発⽤途や個⼈利⽤は無償がほとんど)
- Oracle JDK
• Oracle Cloud Infrastructure(OCI)やOracle製品で使う場合、基本的には追加費⽤なし
- Red Hat OpenJDK
• RHEL/UBIやRed Hat Middleware製品とともに使う場合は追加費⽤なし
- その他のJDK
• 利⽤は無償が多いが、商⽤(技術)サポートは有償
• ITライフサイクルを通じて考える
- 調達・購買コストだけではない
- 開発〜運⽤時含めトラブル時など対応コストも考慮
- バランスの⾒極めや何かしらのトレードオフは必要
企画・
設計
調達・
購買
開発・
構築
導⼊・
移⾏
保守・
運⽤
ITライフサイクル
および継続的改善
57
OpenJDKソムリエ的 JDKオススメMap(超主観)
サーバーサイド
クライアントサイド
無
償
ア
Ý
プ
デ
Þ
ト
有
償
サ
ポ
Þ
ト
58
[参考] サーバサイドでの選び⽅
1. 製品にJDKサポートが含まれていれば、そちらを最優先
- WebLogic Server → Oracle JDK
- JBoss EAP → Red Hat OpenJDK
- Payara → Azul Zulu
- WebSphere/Liberty → IBM SDK Java Technology Edition
- Interstage → FJVM
2. プラットフォームにJDKサポートが含まれていれば、そちらを検討
- AWS (Amazon Linux/2) → Amazon Corretto
- MS Azure → Azul Zulu
- OpenShift/RHEL → Red Hat OpenJDK
- Oracle Cloud → Oracle JDK
59
[補⾜] そういえばJava EEってどうなったんだっけ︖
• Eclipse Foundationに移管され、Jakarta EE 8がリリース
• 今後「javax」ネームスペースは「jakarta」に変更予定
- Sunから引き継いだ商標や契約に基づくため仕⽅なし
• javax.* パッケージは第三者が拡張することを許容されていない
• Servlet/JSP APIを含むため、TomcatやSpring Frameworkにも影響あり
- 略称もOracleが商標を持つものが多いため変更
60
アジェンダ
1. JDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各JDKディストリビューションの特徴
4. JDKディストリビューションの選び⽅
5. OpenJDKの⽀え⽅
61
JDKディストリビューションにどう接していくか
• 設計・開発担当者
- 複数のJDKの特徴を把握し、必要に応じて使い分ける
• 基本的には運⽤環境と合わせる
• ⾃社製品や⾃社サービスでどのディストリビューションを利⽤するかは要検討
- 新しい機能リリース(できればEA版)やディストリビューションを試しておく
• 必要時はBug/Issue報告やPull Requestなどして改善に協⼒
- 例: [JDK-8218287] jshell tool: input behavior unstable after 12-ea+24 on Windows
- 例: Easy identification x86/x64 in Apps & Features of Windows · Issue #37 · corretto/corretto-8
• 構築・運⽤担当者
- 各JDKのライフサイクルやリリース/更新スケジュールを把握する
- 動作保証に適したJDKを利⽤する (⺠法改正の影響なども考慮)
- アプリケーションに応じて適切なプラットフォーム・JDKを検討する
62
[参考] JDKの他の選び⽅(例)
• 例えば、好きなベンダー(ディストリビューター)のJDKを利⽤する
e.g. OpenJDK本体に貢献しているベンダーを応援したい
- Oracle JDK/Oracle OpenJDK
- Red Hat OpenJDK
- SapMachine
- BellSoft Liberica JDK
- IBM SDK Java Technology Edition
• ディストリビューションの応援の仕⽅の例
- まずは使ってみる
- 意⾒を伝えたり、フィードバックして改善してみる
- Oracle Java SE Desktop Subscription, IBM Runtimes for Java Desktopを個⼈購⼊してみる
63
Java/JVMエコシステムはこれまでと変わらず重要
• Javaはこれからますます進化を続ける
- 半年単位での機能リリース
- Project Panama, Valhalla, Loom
- Quarkus, Micronaut, HelidonなどGraalVMに対応したWebフレームワーク
『Introduction to GraalVM / GraalVMが照らす未来』by @jyukutyo さん
『Javaは今でも無償ですという話と最近のJava Webフレームワーク』by @kis さん
• エコシステムは強⼒で重要不可⽋
- 『有償化やEOLに関して誤解があるけど、様々なクラウドやサービス系企業で
Java/JVMが使われ続けてるよって話』https://togetter.com/li/1342273
- 『SunからOracleに変わって10年経ったけど第三者から⾒てもJavaは⼼配ない
よというポエム』https://togetter.com/li/1342209
64
コミュニティへの参加
• 勉強会・セミナーへの参加
- 各現場での啓蒙
- Twitterでの感想やブログ記事などでの情報発信
• OpenJDKコミュニティへの参加
- 気になるMLやBug/Issueをウォッチしてみる
- Bug Reportを上げたり、MLで報告してみる
• JDKディストリビューションへの参加
- まずは使ってみる
- Twitter/GitHubでウォッチしてみる
- Twitter/Slackで聞いてみたり、GitHubでIssueをあげてみる
- Pull Requestしてみる
https://www.slideshare.net/yusuke/java-98886920
by @yusuke_arclamp さん
『エンタープライズ、アーキテクチャ、アジャイルのこれから』
by @yusuke_arclamp さん ©Growth Architectures & Teams, Inc
65
まとめ
• 最適なJDKは環境・状況に応じて異なる
- 時代の変化にどれだけ追従していくか
• セキュリティやライフサイクルの考慮
• サーバーサイドでの可搬性の確保や、クライアントでのカスタムJREの組み込み
- サポートや動作保証をどう捉えるか
• 利⽤するミドルウェアやライブラリ、JVM⾔語など
• 商⽤サポートの利⽤や、法改正の影響を考慮
- どこで利⽤するか
• 開発環境と運⽤環境のJDK種類・バージョンの統⼀
• クラウド、オンプレミス、クライアント、コンテナ、組み込み
• Java/JVMコミュニティやエコシステムの重要性
- Oracle JDK/JRE⼀強時代ではなく、個々に判断・選択する必要性
- 求められるのはJDK利⽤者側の意識の変化
- OpenJDKなどのOSSは皆で参加し、育てていくもの
66
ご清聴ありがとうございました
本セッションや資料は、Java関連コミュニティの⽅々や関係者各位も含め、
多くの皆様のご協⼒によって⽣まれたものです。改めて感謝を申し上げます。
67

これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本

  • 1.
    これからのJDK 何を選ぶ︖どう選ぶ︖ - Howto choose the best OpenJDK distribution – v1.2 Takahiro YAMADA 2019-11-01
  • 2.
    ⾃⼰紹介 • CTCテクノロジー所属: マルチベンダーのミドルウェア技術サポート -Oracle Fusion Middleware - Red Hat JBoss Middleware - その他 Java を⼀部利⽤するミドルウェア製品 • コミュニティ - Twitter: @yamadamn - 元: Oracle ACE (Middleware) - 現在: ⽇本GlassFishユーザー会 監事 - 本⽇: OpenJDK警察 OpenJDKソムリエ 2
  • 3.
    免責事項 • Oracle とJava は、Oracle Corporation およびその⼦会社・関連会社 の⽶国およびその他の国における登録商標です。⽂中の社名・商品名 などは、各社の商標または登録商標である場合があります。 • 発表する内容は個⼈の⾒解であり、所属する組織や団体の公式な⾒解 ではありません。 • 本資料に記載している内容は2019年10⽉末時点の情報に基づきます。 ※2019年7⽉に開催した『これからのJDK 何を選ぶ︖どう選ぶ︖』のセッション https://togetter.com/li/1373467 をベースとして、修正を加えています。 3
  • 4.
    本⽇メインで紹介するJDK • Oracle JDK •Oracle OpenJDK • Red Hat OpenJDK • Azul Zulu • SapMachine • BellSoft Liberica JDK • AdoptOpenJDK with HotSpot • Amazon Corretto 4
  • 5.
  • 6.
    なぜマルチプラットフォーム対応のJDKに着⽬するか • ⼿動でビルドするのは⾯倒⼿間や動作保証などの観点から困難 - 開発環境とテスト・本番環境でのJDK種類・バージョンによる差異を極⼒なくす •開発環境: Windows 10, macOS X, Ubuntu, Docker • テスト環境: CentOS, Windows Server, Docker, クラウド, Raspberry Pi • 本番環境: RHEL, Windows Server, Solaris, Docker, クラウド, Raspberry Pi • 各JDKディストリビューターが⼒を⼊れている - Oracle, Red Hat, Azul Systems, SAP, BellSoft, AdoptOpenJDK, Amazon - リリースも早い • Oracleが最初にリリース後に、各ディストリビューターが競ってリリース • ゼロデイ脆弱性への対応を考慮 - Linux distroに含まれるOpenJDKは若⼲古かったり、パッケージ更新に依存 • 例: 改元「令和」対応、Mystery meat問題 (例) 6
  • 7.
    アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3.各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 7
  • 8.
    その前に: Javaが有償化されたと思っている⽅いないですよね︖ • Javaは誰のもの︖ -「Javaはオラクルのもの︖」、「いいえ、これからもJavaコミュニティのもので す︕」(2011年頃 by @yoshioterada さん: 現Java Champion) • 「Java有償化」ではなく「Java⾃由化」の⽅が正しい理解 - Linuxのようなディストリビューションモデルに変更 - 現状の主流は、OpenJDK with HotSpot JVMであり、⼤きな差異はない • 関連ツイートまとめ - 『「Java 有償化」で誤解する⼈になるべく分かりやすく説明するためのまとめ』 https://togetter.com/li/1343743 - 『Oracle JREの商⽤無償版EOLの話をするには、政府CIOの「Javaのサポートポリシー変更等に関 する技術レポート」がオススメ』 https://togetter.com/li/1342198 - 『JJUG ナイトセミナー 「緊急特集︕ Javaの無償版はなくならないぞ︕」』 https://togetter.com/li/1239234 8
  • 9.
    ⽇本各地のJavaコミュニティでも広がる「Java is StillFree」 『Javaは今でも無償です、という話 / Java is still free』 https://speakerdeck.com/kishida/java-is-still-free by @kis さん 『Java Do #osc19do Java有償化(していない件)について』 https://speakerdeck.com/gishi_yama/java-do-number-osc19do by @gishi_yama さん 9
  • 10.
    アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3.各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 10
  • 11.
    OpenJDKの歴史 • 最初に開発中のJDK 7がOSS化(Sun時代) • 開発途中のOpenJDK 7からOpenJDK 6が派⽣ • JDK 7からはコードベースが OpenJDK に⼀本化 『アプリケーション実⾏基盤としてのOpenJDKの評価』 https://ossipedia.ipa.go.jp/nfs/pdf_pub/1007/208/670/670.pdf 実際はその後 Oracle JDKとして リリース 11
  • 12.
    JDKディストリビューションの歴史: 前編 • JDK6リリース〜JDK 8リリース当初 (7年3ヶ⽉) 3つの主要ディストリビューションで、実質的にSun/Oracle JDK⼀強 Sun JDK 6 2006-12 Oracle JDK 7 2011-07 Oracle JDK 8 2014-03 2009-01 Red Hat OpenJDK (OpenJDK 6 on RHEL5.3) 2013-09 Azul Zulu (Zulu 7 for Windows) Oracle buys Sun 2010-01 その後、RHEL 6/7などにも搭載 2012-06 OpenJDK 7 on RHEL6.3 2014-10 OpenJDK 8 on RHEL6.6 Oracle buys BEA 2008-04 旧BEA JRockit JDKについては その後、Project HotRockitとして Oracle JDK 7以降に機能マージ その後、LinuxやmacOSにも対応 12
  • 13.
  • 14.
    Java 8から11で何が起こったか 『Java SE8から11で何が起きた︖⼀気におさらいしてみよう︕ /java-se-8-to-11』 https://speakerdeck.com/miyakawataku/java-se-8-to-11 by @miyakawa_taku さん (CC BY 4.0) 14
  • 15.
    JDKリリースモデルの変更 • LTSとnon-LTSモデル - 近年は様々な製品が採⽤:https://en.wikipedia.org/wiki/Long-term_support - 数年かけてのメジャーリリースではなく、半年単位の機能リリースによる継続的な変更 • 共有ランタイム(Public JRE)ではなく、カスタムJREをアプリに組込むことを推奨 - モジュール・システム (Project Jigsaw) により実現 - jlinkを使って作成し、将来的にはjpackage(旧:javapackager)を利⽤ • ライセンス変更 - 以前のSun/Oracle JDKのBCLライセンスではJRE単独の再配布が不可 • Oracle JDK: OTNLA for Oracle Java SE • Oracle OpenJDK: GPLv2 + Classpath Exception 『JDKの新しいリリース・モデル、および提供ライセンスについて』 https://www.oracle.com/technetwork/jp/articles/java/ja-topics/jdk-release-model-4487660-ja.html 15
  • 16.
    Oracle JDK/JRE 8までとOpenJDKの違い 『JDK:新しいリリースモデル解説』 https://www.slideshare.net/oracle4engineer/jdk-127825124 詳細はこちら『OracleJDK 8にあってOpenJDKにない機能』 https://qiita.com/yamadamn/items/bb813dccaa1dc5585c9b 『How Do We Define Java? 』 https://www.azul.com/how- do-we-define-java/ 16
  • 17.
    Java 8と11の⾮互換性 • OracleJDK 11から削除された内容 - Javaプラグイン(アプレット), Java Web Start - Public JRE+⾃動更新 - JavaFX (OpenJFXに移管) - 32bit版バイナリ (Windows, Linux) ※Oracle JDK/JRE 9~ ➡ クライアント環境に影響 (特にレガシーな環境) • モジュール・システム(Project Jigsaw)による壁 - 内部APIに対するアクセス制限 - JAXBなどJava EE関連モジュール削除 ➡ ミドルウェア、JVM⾔語、ライブラリ、フレームワーク、ツールなどに影響 17
  • 18.
    Java 11以降はOpenJDKとOracle JDKが実質的に同⼀ •Oracleが商⽤機能をOpenJDKに寄贈 (JFR/JMC, AppCDS, ZGC) • プロプライエタリな機能(JavaプラグインやJava Web Start)を削除 • 3rd-partyライセンスのライブラリ(フォントや描画など)をOSSベースに変更 『JDK:新しいリリース モデル解説』 https://www.slideshare .net/oracle4engineer/jd k-127825124 2019年4⽉のOracle JDK 8 (8u211/8u212)以降にも適⽤ 18
  • 19.
  • 20.
    JDKディストリビューションの歴史: 後編 • JDK9リリース〜実質的に初のLTSとなる11.0.3登場 (1年7ヶ⽉) - 既存3ベンダーを含む計7つのディストリビューターで戦国時代に突⼊(?) JDK 9 2017-09 JDK 10 2018-03 JDK 12 2019-03 2018-04 BellSoft Liberica JDK 10 for Raspberry Pi Oracle JDK/JRE 8 Public Updates終了 2019-01 JDK 11 (LTS) 2018-09 2019-10 8u231/232 11.0.5 13.0.1 2018-05 AdoptOpenJDK 8u172 2018-03 SapMachine 10 2019-02 Amazon Corretto 8u202 Oracle JDK/OpenJDK 8u212, 11.0.3 (LTS) 2019-04 ※各ディストリビューションの 正式と⾒られるリリース年⽉ • Red Hat OpenJDK Windows版サポート発表 • Azul ZuluFXリリース 2018-12 JDK 13 2019-09 2018-11 Amazon Linux⽤LTS発表 Amazon Corretto 8u192 (Preview) • Zulu Enterprise on MS Azure発表 2018-09 延⻑発表 2018-01 Oracle JDK/JRE 8 Public Updates 終了発表 2017-10 20
  • 21.
    アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3.各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 21
  • 22.
    マルチベンダーによるOpenJDKへの貢献/投資 (JDK 11GA) 『BuildingJDK 11 Together』 https://blogs.oracle.com/java-platform-group/building-jdk-11-together Total Issue: 2,468 1. Oracle (80%) 2. SAP (7%) 3. Red Hat (5%) 4. Google (3%) 5. 個⼈ (2%) 6. BellSoft (1%) 7. IBM (1%) 22
  • 23.
    マルチベンダーによるOpenJDKへの貢献/投資 (JDK 12GA) 『Thearrival of Java 12!』 https://blogs.oracle.com/java-platform-group/the-arrival-of-java-12 Total Issue: 1,919 1. Oracle (75%) 2. Red Hat (8%) 3. Google (6%) 4. SAP (4%) 5. 個⼈ (3%) 6. BellSoft (1%) 7. IBM (1%) 23
  • 24.
    マルチベンダーによるOpenJDKへの貢献/投資 (JDK 13GA) 『Thearrival of Java 13!』 https://blogs.oracle.com/java-platform-group/the-arrival-of-java-13 『OpenJDK Backports Monitor』 https://builds.shipilev.net/backports-monitor/ pushes-13.txt – [Distribution by email/name] から独⾃集計 * 上記図とは若⼲異なるため、JBSをもとに補正 Total Issue: 2,127 1. Oracle (68%) 2. Red Hat (11%) 3. SAP (7%) 4. 個⼈ (4%) 5. Google (3%) 24
  • 25.
    マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 8u212/232) 『OpenJDKBackports Monitor』https://builds.shipilev.net/backports-monitor/ pushes-openjdk8u212.txt, pushes-openjdk8u232.txt ※2019年7⽉の8u222は割愛 – [Distribution by email/name] から独⾃集計 Total Issue: 112 1. Red Hat (64.3%) 2. Amazon (17.9%) 3. Oracle (11.6%) 4. SAP (3.6%) 5. 個⼈ (1.8%) 6. Azul (0.9%) 従来もOracle JDKのPublic Updates終了後は、Red HatがOpenJDKの修正を主導 ※OpenJDK 8u212/232であって、Oracle JDK 8u212/232ではないことに注意 Public Updates終了前はOracleが主導し、その後Oracleはプライベートリポジトリに反映 Total Issue: 81 1. Red Hat (91.4%) 2. Amazon (4.9%) 3. IBM (2.5%) 4. NTTデータ (1.2%)72 20 13 4 2 1 Issues fixed in OpenJDK 8u212 Red Hat Amazon Oracle SAP Azul 74 4 2 1 Issues fixed in OpenJDK 8u232 Red Hat Amazon IBM NTT 25
  • 26.
    マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 11.0.3/11.0.5) 『OpenJDKBackports Monitor』https://builds.shipilev.net/backports-monitor/ pushes-11.0.3.txt, pushes-11.0.5.txt ※ 2019年7⽉の11.0.4は割愛 – [Distribution by email/name] から独⾃集計 Total Issue: 185 1. Red Hat (44.9%) 2. SAP (31.4%) 3. Oracle (12.4%) 4. 個⼈ (3.8%) 5. Google (3.8%) 6. Amazon (2.7%) 7. BellSoft (0.5%) 8. Intel (0.5%) ※OpenJDK 11.0.3/11.0.5であって、Oracle JDK 11.0.3/11.0.5ではないことに注意 OracleはLTSリリースについて、プライベートリポジトリにのみ基本的に反映 Total Issue: 287 1. Red Hat (53.0%) 2. SAP (40.1%) 3. 個⼈ (2.4%) 4. NTTデータ (1.4%) 5. Amazon (1.0%) 6. BellSoft (0.7%) 7. Google (0.7%) 8. Azul (0.3%) 9. IBM (0.3%) 83 58 23 7 7 5 1 1 Issues fixed in OpenJDK 11.0.3 Red Hat SAP Oracle Google Amazon BellSoft Intel 152115 7 4 3 2 2 Issues fixed in OpenJDK 11.0.5 Red Hat SAP NTT Amazon BellSoft Google 26
  • 27.
    マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 11.0.2) 『OpenJDKBackports Monitor』https://builds.shipilev.net/backports-monitor/ pushes-11.0.2.txt – [Distribution by email/name] から独⾃集計 Total Issue: 92 1. Oracle (54%) 2. SAP (22%) 3. Red Hat (20%) 4. 個⼈ (2%) 5. Google (2%) OpenJDK 11.0.2 まではOracle主導 ※次の機能リリースが出る6ヵ⽉間 つまり、Oracleは最新版OpenJDKに注⼒し、 OpenJDK LTSは他のベンダーに委任 50 20 18 2 2 Issues fixed in OpenJDK 11.0.2 Oracle SAP Red Hat Google 27
  • 28.
    OpenJDK 8u212/11.0.3 LTSがリリースされて⾒えてきたこと •2019年4⽉のリリース前後から⾒えたこと - Red HatがOpenJDK 8u212/11.0.3以降 LTSのアップデートを主導 • 『Red HatがOpenJDK 8/11 LTSの修正を主導することへの⾒解や反響』 https://togetter.com/li/1342856 - (補⾜) Oracle JDK/Oracle OpenJDK 12にはRed Hat由来のShenandoah GCは⼊らず - Oracle JDK 8u212/11.0.3 と OpenJDK 8u212/11.0.3以降は似て⾮なるもの • 『OpenJDK 11.0.3/8u212 LTS以降でのリリースノートや脆弱性の追い⽅』 https://togetter.com/li/1342936 • 『改元(新元号)対応に⾒るOracle JDKとOpenJDKの攻防あるいは協⼒ #令和』 https://togetter.com/li/1343228 28
  • 29.
    改元対応でのバックポート例 [JDK-8205432] Replace theplaceholder Japanese era name - Java Bug System OpenJDKとOracle JDK 共通の修正 • 12.0.1/12.0.2 (non-LTS/最初の6ヵ⽉) Oracle JDK 固有の修正 • 11.0.x-oracle • 8uXXX Red Hatが主導する OpenJDK LTSへの修正 • 11.0.x • openjdk8uXXX 最初に実装されるのは 開発中のリリース • 13 (既にリリース済) 29
  • 30.
    LTSリリースはOracle JDKとRed Hat主導のOpenJDKで差異あり RedHat主導の OpenJDK LTS • 11.0.3以降 • 8u212以降 Oracle JDK LTS • 11.0.3以降 • 8u211/212以降 Oracle JDK/OpenJDK LTS 共通の修正 • セキュリティ脆弱性 • その他重⼤な不具合 • 影響の⼤きい修正 最新版(non-LTS含む)は原則共通であり、Java Bug Systemなど通じて状況も明らかなので分断を招く訳ではない また、JDKディストリビューション間でも独⾃バックポートなどによる差異は元々ある 30
  • 31.
    LTSリリースでの差異を⾒分けるにはビルド番号を参考 (JDK 8) •ビルド番号≒該当バージョンでのソースコードのセットにつけるタグ 「$ java –version」での確認 (Java 9以降はAPIでも基本的に取得可能) • 8u212 (java.runtime.version, java.vm.version システムプロパティから基本的に確認可能) - Oracle JDK java version "1.8.0_212" Java(TM) SE Runtime Environment (build 1.8.0_212-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode) - Red Hat OpenJDK openjdk version "1.8.0_212-3-redhat" OpenJDK Runtime Environment (build 1.8.0_212-3-redhat-b04) OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode) ビルド番号: b10 ビルド番号: b04 数が⼤きいほうが多くの修正 を含んでいる訳ではない 31
  • 32.
    [参考] 2019年7⽉以降はバージョンで識別可能 (JDK8) • Oracle JDK 8u221 (8u222はリリースされず) - Critical Patch Updates (CPU) 相当 java version "1.8.0_221" Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode) • その他 OpenJDK 8u222 - Patch Set Updates (PSU) 相当? openjdk version "1.8.0_222" OpenJDK Runtime Environment Corretto-8.222.10.1 (build 1.8.0_222-b10) OpenJDK 64-Bit Server VM Corretto-8.222.10.1 (build 25.222-b10, mixed mode) 『JavaのリリースにはCPUとPSUの2種類があります』by @jyukutyo さん https://www.sakatakoichi.com/entry/2015/07/22/173205 (Amazon Correttoの例だが他も基本的に同様) 32
  • 33.
    LTSリリースでの差異を⾒分けるにはビルド番号を参考 (JDK 11) •11.0.3 (Runtime.Version クラスからも基本的に取得可能) - Oracle JDK java version "11.0.3" 2019-04-16 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode) - Red Hat OpenJDK openjdk version "11.0.3-redhat" 2019-04-16 LTS OpenJDK Runtime Environment 18.9 (build 11.0.3-redhat+7-LTS) OpenJDK 64-Bit Server VM 18.9 (build 11.0.3-redhat+7-LTS, mixed mode) ビルド番号: 12 ビルド番号: 7 『Java 10 で変わる Java のバージョン表記』by @YujiSoftware さん https://qiita.com/YujiSoftware/items/2c5a9117a577700ea540 33
  • 34.
    [参考] 2019年7⽉以降はビルド番号で識別困難 (JDK11) • Oracle JDK 11.0.4 java version "11.0.4" 2019-07-16 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.4+10-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.4+10-LTS, mixed mode) 修正数:104 https://bugs.openjdk.java.net/issues/?jql=project+%3D+JDK+AND+fixVersion+%3D+11.0.4-oracle • その他 OpenJDK 11.0.4 openjdk version "11.0.4" 2019-07-16 OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.4+11) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.4+11, mixed mode) 修正数:251 https://bugs.openjdk.java.net/issues/?jql=project+%3D+JDK+AND+fixVersion+%3D+11.0.4 (AdoptOpenJDKの例だが他も基本的に同様) OpenJDKのビルド番号 とは無関係 34
  • 35.
    OpenJDKを利⽤したビジネスモデルの変遷例 • Oracle - (旧Sun)Java SE for Business: ⻑期サポート - Java SE Advanced: ⻑期サポートおよび商⽤機能を⾼付加価値として提供するライセンスモデル - Java SE Subscription: ⽐較的安価に広く提供し、⻑期サポートするサブスクリプションモデル • Red Hat - Red Hat Subscription: RHEL利⽤ユーザーに⻑期アップデートを提供するサブスクリプションモデル - OpenJDK Subscription for Windows: WindowsユーザーにもOpenJDKのサブスクリプションを提供 JDKリリースモデルの変更は、ビジネスモデル的には他のベンダー(ディストリビューター)に 負荷分散してOpenJDKエコシステムを安定的に維持する狙いも⼤きいと⾒られる 『各JDKのビジネスモデルに関するまとめ』 https://togetter.com/li/1404489 旧BEA社のJRockit JDK機能を統合 商⽤機能はすべてOpenJDKに寄贈 素のOpenJDKに⾜りない機能は IcedTeaで⼀部補完 Web Start代替のIcedTea-Webは AdoptOpenJDK配下にリポジトリ移管 Shenandoah GCなどをOpenJDKに寄贈 35
  • 36.
    アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3.各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 36
  • 37.
    その前に: OpenJDK Projectの動向把握⽤の基礎情報源 種類・名称URL ⽤途・備考 Webサイト http://openjdk.java.net/ OpenJDK開発者⽤のため少し構成が複雑 JDK Enhancement Proposal (JEP) http://openjdk.java.net/jeps/0 JDKバージョンごとに⼊る機能確認 2011年に策定されJSRを牽引 JDK Project http://openjdk.java.net/projects/jdk/ JDKリリース時期と含まれるJEP OCTLA Signatories List https://openjdk.java.net/groups/conf ormance/JckAccess/jck-access.html Javaの正式実装を証明する技術互換キット (TCK/JCK)にアクセスできる署名者⼀覧 Twitter @OpenJDK メーリングリスト (ML) http://mail.openjdk.java.net/ 興味があるトピックを参照・購読・投稿 Java Bug System (JBS) https://bugs.openjdk.java.net/ JIRAによるIssueのトラッキング (Bugだけ でなく、機能拡張や互換性確認なども含む) ソースコード管理 http://hg.openjdk.java.net/ Mercurialにて管理 Project SkaraにてGitHubへの移⾏も検証中 https://github.com/openjdk 『JSRとJEPとJBSの⾒⽅や調べ⽅について』 https://www.slideshare.net/AyaEbata/jsrjepjbs by @aya_122 さん 37
  • 38.
    Oracle JDK ⼀般向け情報 種類・名称参照先 導⼊・運⽤ ドキュメント Java SE API & ドキュメント (Oracleだけではなく他のJDKを使う場合も必要) リリースノート JDK Release Notes 脆弱性関連 Critical Patch Updates and Security Alerts ライフサイクル Oracle Java SE サポート・ロードマップ 動作環境 Java SE Subscription ドキュメント - システム要件 動向把握 Twitter @Java (OracleだけではなくJavaの各種情報源) Blog Oracle Java Platform Group, Product Management Blog ダウンロード Java SE - Downloads | Oracle Technology Network * 個⼈・開発⽤で要アカウント認証 (java.comのJREは現状認証不要) All Java SE Downloads on MOS * 商⽤でOracle製品の契約者向け ライセンス Oracle Binary Code License (BCL for Java SE): ~JDK 10, ~8u201/202 Oracle Technology Network License Agreement (OTNLA) for Oracle Java SE: JDK 11~, 8u211/212~ * 組み込み⽤途は元々開発無償、配備はロイヤリティ必要 • 従来からのメインディストリビューターであり、OpenJDKへの最⼤の貢献者 • ユーザーへの慣れ・安⼼感があったが、ライセンス変更で⼤混乱 『4⽉からのOracle JDK/JREライセンスの変更に関するまとめ』 • ⽇本語を含めて情報量が最も豊富 38
  • 39.
    Oracle OpenJDK ⼀般向け情報 種類・名称参照先 導⼊・運⽤ Oracle JDKと同じだが、ライフサイクルは半年のみ (次期機能リリースまで) 動向把握 Oracle JDKと同じだが、ダウンロードページからも各種リンクあり ダウンロード JDK Builds from Oracle: https://jdk.java.net/ (JDK 9~) * 認証不要 ライセンス GPLv2 + Classpath Exception (GNU General Public License, version 2, with the Classpath Exception) [参考] OpenJDKソースコードと同じ: https://openjdk.java.net/legal/gplv2+ce.html • 汎⽤プラットフォームで最新版へ追従 (JDK8は未対応) • アーリーアクセス(EA)版の評価・検証にも利⽤ • インストーラなし (tar.gz/zip) 39
  • 40.
    Red Hat OpenJDK ⼀般向け情報種類・名称 参照先 導⼊・運⽤ ドキュメント Product Documentation for OpenJDK * Windows⽤で現状英語のみ、JBossユーザ向けにRHELでのインストールガイドは別途あり リリースノート ライフサイクル OpenJDK Life Cycle and Support Policy * ⽇本語翻訳は https://access.redhat.com/ja/articles/1457743動作環境 動向把握 Twitter @rhdevelopers (他、個⼈アカウントも適宜確認) Blog https://developers.redhat.com/blog/category/java/ ダウンロード https://developers.redhat.com/products/openjdk/download/ * 開発者⽤Windows版で要アカウント認証 https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?product=core.service.openjdk&downloa dType=distributions * 商⽤でJBoss製品などのサブスクリプション必要, 別途RHEL⽤のyumリポジトリあり ライセンス GPLv2 + Classpath Exception • Oracleに次ぐOpenJDKの貢献者であり、以前からPublic Updates終了後に主導 『Red HatのOpenJDK』by @nagetsum さん • RHEL/CentOSで豊富な実績を持ち、従来はIcedTeaで機能拡張 • Windows版OpenJDKも正式サポート (例: IcedTea-Web) 40
  • 41.
    Azul Zulu ⼀般向け情報 種類・名称参照先 導⼊・運⽤ ドキュメント Zulu user documentation リリースノート Zulu Community Release Notes ライフサイクル Azul Product Support Lifecycle Zulu Community Roadmap 動作環境 Tested and Validated Platforms 動向把握 Twitter @AzulSystems Blog https://www.azul.com/blog/ GitHub https://github.com/zulu-openjdk (現状ほぼDockerfile⽤) ダウンロード https://www.azul.com/downloads/zulu-community/ * 認証不要(Zulu Community) https://www.azul.com/downloads/azure-only/zulu/ * Azure利⽤者向け ライセンス GPLv2 + Classpath Exception • JDK/JVM専業ベンダーで、異なるJVMであるAzul Zingを持つ • Microsoft Azureで以前から利⽤され、商⽤のZulu Enterprise相当を提供 • 以前は素のOpenJDKビルドに近かったが、最近は機能拡張やDocker対応を重視 41
  • 42.
    SapMachine ⼀般向け情報 種類・名称 参照先 導⼊・運⽤ドキュメント https://github.com/SAP/SapMachine/wiki リリースノート (⾒当たらず) * 基本はOracle OpenJDKやAdoptOpenJDKと同じはず ライフサイクル Security Updates, Maintenance and Support 動作環境 Certification and Java Compatibility 動向把握 Twitter @SweetSapMachine GitHub https://github.com/SAP/SapMachine ダウンロード https://sap.github.io/SapMachine/ * 認証不要(GitHubからダウンロード) ライセンス GPLv2 + Classpath Exception • アーリーアクセス(EA)版を含めた最新リリースへの追従 (JDK8は未対応) • サーバーサイドで実⾏するうえでの診断機能の強化 • 元々モニタリングに強い SAP JVM を別に持つ 42
  • 43.
    BellSoft Liberica JDK ⼀般向け情報種類・名称 参照先 導⼊・運⽤ ドキュメント 各リリースのダウンロードページから [installation guide]参照 リリースノート 各リリースのダウンロードページから [Release Notes]参照 * 修正内容はOracle JDKのリリースノートにリンク ライフサイクル https://support.bell-sw.com/support 動作環境 リリースノート参照 動向把握 Twitter @bellsoftware Blog https://bell-sw.com/blog/ GitHub https://github.com/bell-sw/Liberica ダウンロード https://www.bell-sw.com/ * 認証不要 ライセンス GPLv2 + Classpath Exception • AdoptOpenJDKに次ぎ、広範なプラットフォームに対応 • JavaFX/OpenJFXとの統合 (11以降は含まないLite版もあり) 『Liberica JDKやExecutable Jarの是⾮に対するJavaFXガチ勢とのやり取りまとめ』 • JetBrainsとの戦略的提携、Oracleとの提携?(ビルド番号などから推測) 43
  • 44.
    AdoptOpenJDK with HotSpot ⼀般向け情報種類・名称 参照先 導⼊・運⽤ ドキュメント https://adoptopenjdk.net/installation.html リリースノート https://adoptopenjdk.net/release_notes.html ライフサイクル https://adoptopenjdk.net/support.html 動作環境 https://adoptopenjdk.net/supported_platforms.html 動向把握 Twitter @adoptopenjdk Blog https://blog.adoptopenjdk.net/ GitHub https://github.com/AdoptOpenJDK/openjdk-build Slack https://adoptopenjdk.net/slack ダウンロード https://adoptopenjdk.net/ * 認証不要(GitHubからダウンロード) ライセンス GPLv2 + Classpath Exception • ビルドファームによる広範なプラットフォームに対応 • コミュニティに最も近い存在で、スポンサーとも協⼒関係 (Platinum Sponsors: IBM, MS Azure, Azul Systems, Pivotal, Red Hat, AWS, etc.) • TCK/JCKを通せていないが、独⾃のテストスイートで対応 44
  • 45.
    Amazon Corretto ⼀般向け情報 種類・名称参照先 導⼊・運⽤ ドキュメント Amazon Corretto Documentation リリースノート Change Log for Amazon Corretto 8 Change Log for Amazon Corretto 11 ライフサイクル https://aws.amazon.com/corretto/faqs/#support 動作環境 https://aws.amazon.com/corretto/faqs/#Using_Amazon_Corretto 動向把握 Twitter @AWSOpen Blog AWS Java Development | AWS Open Source Blog GitHub https://github.com/corretto/ ダウンロード https://aws.amazon.com/corretto/ * 認証不要、英語に切り替えないと古いモジュールが⾒える場合がある ライセンス GPLv2 + Classpath Exception • AWSおよびJava Fatherの強⼒なネームバリュー • ドキュメントに⼒を⼊れている (⽇本語翻訳などもあるが遅れる) • 独⾃バックポートありで、ダウンストリーム(LTS)に注⼒ 45
  • 46.
    その他注⽬しておきたいJDK • OpenJDK withHotSpot JVMベース - Linux distroバンドル : 各Linuxディストリビューションで対応に差異あり - 国内ベンダーJDK : 富⼠通、⽇⽴などの各製品でサポート - Alibaba Dragonwell : 現状LinuxのJDK8専⽤で、JWarmupや独⾃のJFRバックポートあり - ojdkbuild : Red Hat OpenJDK Windows版のベースでFedora的扱い • OpenJDK with NOT HotSpot JVM - AdoptOpenJDK with OpenJ9 : フットプリントのよさをうたうEclipse OpenJ9ベース - IBM SDK Java Technology Edition : 最近はOpenJ9ベース+IBM独⾃機能 『OpenJ9+OpenJDK』『OpenJ9 VMとIBM Javaについて』 by @TTakakiyo さん - Azul Zing : Linux x64に特化し、C4 GCやFalcon JITで⾼速化をうたう - GraalVM : Oracleが中⼼に開発する多⾔語対応VM (HotSpotだがAOTでネイティブイメージ対応) 『⼀体何モノなの? GraalVM⼊⾨編』 by @cotoc88 さん, @hhiroshell さん 直接関係ないけど、こちらも適宜参照『VMの歩む道。 Dalvik、ART、そしてJava VM』 by @yy_yank さん 46
  • 47.
    アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3.各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 47
  • 48.
    Oracle JDK陣営とRed Hat主導のOpenJDKLTS陣営 (イメージ) 重要な修正は共通しており、Oracle JDKとOpenJDK LTSを近づけるよう努⼒はされている 48
  • 49.
    JVMエコシステムアンケート (グローバル) https://snyk.io/blog/jvm-ecosystem-report-2018/ (2018年10⽉レポート) WhichJava SE version do you use in production for your main application? Which Java vendorʼs JDK do you use in production for your main applications? ※実際には2018年9⽉より前のアンケートと想定される 49
  • 50.
  • 51.
    JVM⾔語利⽤者向け簡易アンケート (⽇本) 『 (2019年4⽉時点)JVM⾔語を使う⽅がどのJDK/JVMを使うか︖アンケートと考察まとめ』 https://togetter.com/li/1340853 Q1. 商⽤環境でScala, Kotlin, Clojure, Groovy などのJVM⾔語を使う⽅はJDK/JREは何を利⽤ しますか︖ Q2. 商⽤環境でJVM⾔語を使う⽅はJDK/JVM バージョンとして何をメインで使いますか︖ ︖ 51
  • 52.
    Java/JVM⾔語利⽤者向けアンケート (⽇本) 『 (2019年7⽉時点)Java/JVM⾔語を商⽤で使っている⽅向けのアンケートと考察まとめ』 https://togetter.com/li/1376545 Q1. 回答者の⽴場 Q2. メインで利⽤するJDKバージョン Q3. メインで利⽤するJDKの種類 Q4. どこでJDK/JVMを実⾏するか Q5. JDK/JVMの商⽤サポートの必要性 52
  • 53.
    判断軸 • サポート - アップデート提供期間 -商⽤(技術)サポートの度合い - 関連製品との動作保証 • 使いやすさ - インストーラ (特にWindowsクライアント) - 開発環境 - コンテナ対応 - 知名度 • どこで運⽤するか - サーバー (クラウド, オンプレミス) - クライアント - コンテナ - 組み込み 53
  • 54.
    [参考] 判断軸による⽐較(例) –サポート ディストリビューション 8 (LTS) EOL 11 (LTS) EOL 13 EOL (non-LTS) 商⽤(技術) サポート 関連製品の 動作保証 備考 Oracle JDK 2025-03 2026-09 2020-03 多⾔語 S→︖ 既存では強いが今後不明 Oracle OpenJDK - 2019-03 2020-03 - B 追従できる環境は限定 Red Hat OpenJDK 2023-06 2024-10 - 多⾔語,英語 B→︖ Windows対応で増える︖ Azul Zulu 2026-03 2027-09 2023-05 英語 A→︖ 奇数リリースで商⽤はMTS SapMachine - 2022-09 2020-03 - ︖ SAP製品内に限定︖ BellSoft Liberica JDK 2026-01 2027-03 2020-03 英語 ︖ 知名度はまだ低い AdoptOpenJDK 2023-09 2022-09 2020-03 多⾔語 *IBM B 利⽤増加したがTCKが難点 Amazon Corretto 2023-06 2024-08 - - B ⼀定のシェア確保 最低期間なので、今後延⻑される可能性は⼤いにあり • 商⽤サポートがあるJDKは、そのEOLを記載 • Oracle JDK/Liberica JDK以外は、基本的にRed Hat主導のOpenJDK LTSのアップデートに依存 • 動作保証については、以前からのJDKがシェア・提携関係的に強そうだが、将来は不明 54
  • 55.
    [参考] 判断軸による⽐較(例) –使いやすさ ディストリビューション インストーラ SDKMAN & Scoop コンテナ (Docker) 知名度 備考 8 11 Oracle JDK S A B B S Docker対応はServer JRE 8 のみ Oracle OpenJDK - - S A A LTSはないが最新版を利⽤可能 Red Hat OpenJDK A A - B B Red Hat Container Catalogで利⽤ 再配布⾃由なUniversal Base Image(UBI)に今後注⽬ Azul Zulu B S A S B インストーラ・Dockerなども各種環境に注⼒ SapMachine - A A A - Docker公式イメージもあり (ベースOSはUbuntu) BellSoft Liberica JDK A S A S - AlpineのDockerイメージはかなり軽量 AdoptOpenJDK B A S S A IDEバンドルも含めて⼀通り利⽤可能 Amazon Corretto A A A A A DockerのベースOSはAmazon Linux2のみ (Alpine対応は保留されている) • JDK 8のインストーラは、既存のWindow⽤Oracle JRE 8との互換性を基準に評価 • JDK 11のインストーラは、多くのプラットフォームに対応しているかに注⽬ • 知名度は過去に実施したアンケートなどから判断 55
  • 56.
    [参考] 判断軸による⽐較(例) -どこで運⽤するか ディストリビューションクラウド オンプレミス クライアント コンテナ 組み込み 備考 Oracle JDK OCI A S B A クライアント⽤のJava Web Start (アプレットは⾮推奨) Oracle OpenJDK (any) A - A - 最新版はコンテナに適す Red Hat OpenJDK OpenShift A A B B IcedTea-Web for Windows 正式サポート予定 Azul Zulu Azure A B S A OpenJFXバンドル版や IcedTea-Webも使われる︖ SapMachine (any) A - A - 基本はサーバ環境⽤途 BellSoft Liberica JDK Yandex A A S A JavaFX/OpenJFXバンドル AdoptOpenJDK (any) A A S A IcedTea-Web for Windows バンドル(オプション) Amazon Corretto AWS A - A B 8のみOpenJFXバンドルだが 古いのとWebkit周りで難あり • オンプレミスのサーバ環境は、特にどれでも問題なし (対応プラットフォーム次第) • 既存クライアント環境との互換性を重視する場合は、Oracle JRE 8が妥当か 56
  • 57.
    コストをどう考えるか • 環境・状況次第で⼤きく変わる (⾃社開発⽤途や個⼈利⽤は無償がほとんど) -Oracle JDK • Oracle Cloud Infrastructure(OCI)やOracle製品で使う場合、基本的には追加費⽤なし - Red Hat OpenJDK • RHEL/UBIやRed Hat Middleware製品とともに使う場合は追加費⽤なし - その他のJDK • 利⽤は無償が多いが、商⽤(技術)サポートは有償 • ITライフサイクルを通じて考える - 調達・購買コストだけではない - 開発〜運⽤時含めトラブル時など対応コストも考慮 - バランスの⾒極めや何かしらのトレードオフは必要 企画・ 設計 調達・ 購買 開発・ 構築 導⼊・ 移⾏ 保守・ 運⽤ ITライフサイクル および継続的改善 57
  • 58.
  • 59.
    [参考] サーバサイドでの選び⽅ 1. 製品にJDKサポートが含まれていれば、そちらを最優先 -WebLogic Server → Oracle JDK - JBoss EAP → Red Hat OpenJDK - Payara → Azul Zulu - WebSphere/Liberty → IBM SDK Java Technology Edition - Interstage → FJVM 2. プラットフォームにJDKサポートが含まれていれば、そちらを検討 - AWS (Amazon Linux/2) → Amazon Corretto - MS Azure → Azul Zulu - OpenShift/RHEL → Red Hat OpenJDK - Oracle Cloud → Oracle JDK 59
  • 60.
    [補⾜] そういえばJava EEってどうなったんだっけ︖ •Eclipse Foundationに移管され、Jakarta EE 8がリリース • 今後「javax」ネームスペースは「jakarta」に変更予定 - Sunから引き継いだ商標や契約に基づくため仕⽅なし • javax.* パッケージは第三者が拡張することを許容されていない • Servlet/JSP APIを含むため、TomcatやSpring Frameworkにも影響あり - 略称もOracleが商標を持つものが多いため変更 60
  • 61.
    アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3.各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 61
  • 62.
    JDKディストリビューションにどう接していくか • 設計・開発担当者 - 複数のJDKの特徴を把握し、必要に応じて使い分ける •基本的には運⽤環境と合わせる • ⾃社製品や⾃社サービスでどのディストリビューションを利⽤するかは要検討 - 新しい機能リリース(できればEA版)やディストリビューションを試しておく • 必要時はBug/Issue報告やPull Requestなどして改善に協⼒ - 例: [JDK-8218287] jshell tool: input behavior unstable after 12-ea+24 on Windows - 例: Easy identification x86/x64 in Apps & Features of Windows · Issue #37 · corretto/corretto-8 • 構築・運⽤担当者 - 各JDKのライフサイクルやリリース/更新スケジュールを把握する - 動作保証に適したJDKを利⽤する (⺠法改正の影響なども考慮) - アプリケーションに応じて適切なプラットフォーム・JDKを検討する 62
  • 63.
    [参考] JDKの他の選び⽅(例) • 例えば、好きなベンダー(ディストリビューター)のJDKを利⽤する e.g.OpenJDK本体に貢献しているベンダーを応援したい - Oracle JDK/Oracle OpenJDK - Red Hat OpenJDK - SapMachine - BellSoft Liberica JDK - IBM SDK Java Technology Edition • ディストリビューションの応援の仕⽅の例 - まずは使ってみる - 意⾒を伝えたり、フィードバックして改善してみる - Oracle Java SE Desktop Subscription, IBM Runtimes for Java Desktopを個⼈購⼊してみる 63
  • 64.
    Java/JVMエコシステムはこれまでと変わらず重要 • Javaはこれからますます進化を続ける - 半年単位での機能リリース -Project Panama, Valhalla, Loom - Quarkus, Micronaut, HelidonなどGraalVMに対応したWebフレームワーク 『Introduction to GraalVM / GraalVMが照らす未来』by @jyukutyo さん 『Javaは今でも無償ですという話と最近のJava Webフレームワーク』by @kis さん • エコシステムは強⼒で重要不可⽋ - 『有償化やEOLに関して誤解があるけど、様々なクラウドやサービス系企業で Java/JVMが使われ続けてるよって話』https://togetter.com/li/1342273 - 『SunからOracleに変わって10年経ったけど第三者から⾒てもJavaは⼼配ない よというポエム』https://togetter.com/li/1342209 64
  • 65.
    コミュニティへの参加 • 勉強会・セミナーへの参加 - 各現場での啓蒙 -Twitterでの感想やブログ記事などでの情報発信 • OpenJDKコミュニティへの参加 - 気になるMLやBug/Issueをウォッチしてみる - Bug Reportを上げたり、MLで報告してみる • JDKディストリビューションへの参加 - まずは使ってみる - Twitter/GitHubでウォッチしてみる - Twitter/Slackで聞いてみたり、GitHubでIssueをあげてみる - Pull Requestしてみる https://www.slideshare.net/yusuke/java-98886920 by @yusuke_arclamp さん 『エンタープライズ、アーキテクチャ、アジャイルのこれから』 by @yusuke_arclamp さん ©Growth Architectures & Teams, Inc 65
  • 66.
    まとめ • 最適なJDKは環境・状況に応じて異なる - 時代の変化にどれだけ追従していくか •セキュリティやライフサイクルの考慮 • サーバーサイドでの可搬性の確保や、クライアントでのカスタムJREの組み込み - サポートや動作保証をどう捉えるか • 利⽤するミドルウェアやライブラリ、JVM⾔語など • 商⽤サポートの利⽤や、法改正の影響を考慮 - どこで利⽤するか • 開発環境と運⽤環境のJDK種類・バージョンの統⼀ • クラウド、オンプレミス、クライアント、コンテナ、組み込み • Java/JVMコミュニティやエコシステムの重要性 - Oracle JDK/JRE⼀強時代ではなく、個々に判断・選択する必要性 - 求められるのはJDK利⽤者側の意識の変化 - OpenJDKなどのOSSは皆で参加し、育てていくもの 66
  • 67.