SlideShare une entreprise Scribd logo
1  sur  56
Télécharger pour lire hors ligne
#codetokyo19B3 & #ccc_l5
最適なOpenJDKディストリビューションの選び方
- How to choose the best OpenJDK distribution -
Takahiro YAMADA
2019-05
#codetokyo19B3 & #ccc_l5
自己紹介
• お仕事: SIerの片隅でマルチベンダーのミドルウェア技術サポート
- Oracle Fusion Middleware
- Red Hat JBoss Middleware
- その他 Java を一部利用するミドルウェア製品
• コミュニティ
- Twitter: @yamadamn
- 元: Oracle ACE (Middleware)
- 現在: 日本GlassFishユーザー会 監事
- 本日: OpenJDK警察 OpenJDKソムリエ
2
#codetokyo19B3 & #ccc_l5
免責事項
• Oracle と Java は、Oracle Corporation およびその子会社・関連会社
の米国およびその他の国における登録商標です。文中の社名・商品名
などは、各社の商標または登録商標である場合があります。
• 発表する内容は個人の見解であり、所属する組織や団体の公式な見解
ではありません。
• 本資料に記載している内容は2019年5月前半時点の情報に基づきます。
また、本資料を使用したことにより被った直接的、間接的な損害等に
ついて、いかなる責任も負いかねます。
3
#codetokyo19B3 & #ccc_l5
本日メインで紹介するJDKディストリビューション
• Oracle JDK
• Oracle OpenJDK
• Red Hat OpenJDK
• Azul Zulu
• SapMachine
• BellSoft Liberica JDK
• AdoptOpenJDK with HotSpot
• Amazon Corretto
4
#codetokyo19B3 & #ccc_l5
なぜマルチプラットフォーム対応の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は若干古かったり、パッケージ更新に依存
• 例: 改元「令和」対応
5
(例)
#codetokyo19B3 & #ccc_l5
アジェンダ
1. OpenJDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各OpenJDKディストリビューションの特徴
4. OpenJDKディストリビューションの選び方
5. OpenJDKの支え方
6
#codetokyo19B3 & #ccc_l5
その前に: 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の無償版はなくならないぞ!」 #jjug』
https://togetter.com/li/1239234
7
#codetokyo19B3 & #ccc_l5
アジェンダ
1. OpenJDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各OpenJDKディストリビューションの特徴
4. OpenJDKディストリビューションの選び方
5. OpenJDKの支え方
8
#codetokyo19B3 & #ccc_l5
OpenJDKの歴史
• 最初に開発中のJDK 7がOSS化 (Sun時代)
• 開発中のJDK 7の開発途中からOpenJDK 6が派生
• JDK 7からはコードベースが OpenJDK 7に一本化
『アプリケーション実行基盤としてのOpenJDKの評価』
https://ossipedia.ipa.go.jp/nfs/pdf_pub/1007/208/670/670.pdf
実際はその後
Oracle JDKとして
リリース
9
#codetokyo19B3 & #ccc_l5
OpenJDKディストリビューションの歴史: 前編
• 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にも対応
10
#codetokyo19B3 & #ccc_l5
時代の変化
11
進化への追従
セキュリティ対応
の重要性
クラウドやコンテナ
環境の台頭
#codetokyo19B3 & #ccc_l5
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)
12
#codetokyo19B3 & #ccc_l5
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
13
#codetokyo19B3 & #ccc_l5
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/
14
#codetokyo19B3 & #ccc_l5
Java 8と11の互換性
• Oracle JDK/JRE 11から削除された内容
- Javaプラグイン(アプレット), Java Web Start
- Public JRE+自動更新
- JavaFX (OpenJFXに移管)
- 32bit版バイナリ (Windows, Linux) ※Oracle JDK/JRE 9~
➡ クライアント環境に影響 (特にレガシーな環境)
• モジュール・システム(Project Jigsaw)による壁
- 内部APIに対するアクセス制限
- JAXBなどJava EE関連モジュール削除
➡ ミドルウェア、JVM言語、ライブラリ、フレームワーク、ツールなどに影響
15
#codetokyo19B3 & #ccc_l5
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)以降にも適用
16
#codetokyo19B3 & #ccc_l5
OpenJDKを中心として各ディストリビューションが競う時代に
ソースコード
複数のディストリビューター
JDKディストリビューション• 商用機能を寄贈
• その他固有機能を削除/OSS化
17
コミュニティ・プロジェクト
#codetokyo19B3 & #ccc_l5
OpenJDKディストリビューションの歴史: 後編
• JDK 9リリース~実質的に初のLTSとなる11.0.3登場 (1年7ヶ月)
- 既存3ベンダーを含む計7つのディストリビューターで戦国時代に突入(?)
OpenJDK 9
2017-09
OpenJDK 10
2018-03
OpenJDK 12
2019-03
2018-04
BellSoft Liberica JDK
10 for Raspberry Pi
Oracle JDK/JRE 8
Public Updates終了
2019-01
OpenJDK 11 (LTS)
2018-09
12.0.1
2019-04
2018-05
AdoptOpenJDK
8u172
2018-03
SapMachine 10
2019-02
Amazon Corretto
8u212
Oracle JDK/OpenJDK
8u212, 11.0.3 (LTS)
2019-04
Oracle JDK/JRE 8
Public Updates 延長発表
2017-10
※各ディストリビューションの
正式と見られるリリース年月
18
• Red Hat OpenJDK
Windows版サポート発表
• Azul ZuluFXリリース
2018-12
#codetokyo19B3 & #ccc_l5
アジェンダ
1. OpenJDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各OpenJDKディストリビューションの特徴
4. OpenJDKディストリビューションの選び方
5. OpenJDKの支え方
19
#codetokyo19B3 & #ccc_l5
マルチベンダーによる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%)
20
#codetokyo19B3 & #ccc_l5
マルチベンダーによる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%)
21
#codetokyo19B3 & #ccc_l5
マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 8u212)
『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/
pushes-openjdk8u212.txt – [Distribution by email/name] から独自集計
Total Issue: 112
1. Red Hat (64%)
2. Amazon (18%)
3. Oracle (12%)
4. SAP (4%)
5. 個人 (2%)
6. Azul (1%)
従来もOracle JDKのPublic Updates終了後は
Red HatがOpenJDKの修正を主導
※OpenJDK 8u212であって、
Oracle JDK 8u212ではないことに注意
72
20
13
4 2
1
Issues fixed in OpenJDK 8u212
Red Hat Amazon Oracle SAP 個人 Azul
22
#codetokyo19B3 & #ccc_l5
マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 11.0.3)
『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/
pushes-11.0.3.txt – [Distribution by email/name] から独自集計
Total Issue: 185
1. Red Hat (45%)
2. SAP (31%)
3. Oracle (12%)
4. 個人 (4%)
5. Google (4%)
6. Amazon (3%)
7. BellSoft (1%)
8. Intel (1%)
※OpenJDK 11.0.3であって、
Oracle JDK 11.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
23
#codetokyo19B3 & #ccc_l5
マルチベンダーによる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ヵ月間
OpenJDK 12.0.1 はデータが見つからないが
Oracle主導と想定
つまり、Oracleは最新版OpenJDKに注力し、
OpenJDK 11 LTSは他のベンダーに委任
50
20
18
2 2
Issues fixed in OpenJDK 11.0.2
Oracle SAP Red Hat 個人 Google
24
#codetokyo19B3 & #ccc_l5
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
25
#codetokyo19B3 & #ccc_l5
改元対応でのバックポート例
[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への修正
• 11.0.x
• openjdk8uXXX
最初に実装されるのは
開発中のリリース
• 13 (EA版で確認可)
26
#codetokyo19B3 & #ccc_l5
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などを通じて状況も明らかなので分断を招く訳ではない
27
#codetokyo19B3 & #ccc_l5
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
28
#codetokyo19B3 & #ccc_l5
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
29
#codetokyo19B3 & #ccc_l5
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エコシステムを安定的に維持する狙いも大きいと見られる
旧BEA社のJRockit JDK機能を統合
商用機能はすべてOpenJDKに寄贈
素のOpenJDKに足りない機能は
IceadTeaで一部補完
Web Start代替のIceadTea-Webは
AdoptOpenJDK配下にリポジトリ移管
30
Shenandoah GCなどをOpenJDKに寄贈
#codetokyo19B3 & #ccc_l5
アジェンダ
1. OpenJDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各OpenJDKディストリビューションの特徴
4. OpenJDKディストリビューションの選び方
5. OpenJDKの支え方
31
#codetokyo19B3 & #ccc_l5
その前に: 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 Ebataさん
32
#codetokyo19B3 & #ccc_l5
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は現状認証不要)
ライセンス 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への最大の貢献者
• エンドユーザーへの慣れ・安心感があるが、ライセンス変更での混乱あり
• 日本語を含めて情報量が最も豊富
33
#codetokyo19B3 & #ccc_l5
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)
34
#codetokyo19B3 & #ccc_l5
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/
ダウンロード Red Hat Developer | OpenJDK Download
https://developers.redhat.com/products/openjdk/download/ (開発者用Windows版で要アカウント認証)
ライセンス GPLv2 + Classpath Exception
• Oracleに次ぐOpenJDKの貢献者であり、以前からPublic Updates終了後に主導
• RHEL/CentOSで豊富な実績を持ち、従来はIceadTeaで機能拡張
• 今後はWindows版OpenJDKも正式サポート (例: Icead-Tea Web)
35
#codetokyo19B3 & #ccc_l5
Azul Zulu
一般向け情報 種類・名称 参照先
導入・運用 ドキュメント Zulu user documentation
リリースノート Zulu Community Release Notes
ライフサイクル Azul Product Support Lifecycle
動作環境 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/ *認証不要
ライセンス GPLv2 + Classpath Exception
• JDK/JVM専業ベンダーで、異なるJVMであるAzul Zingを持つ
• Microsoft Azureで以前から利用され、商用のZulu Enterprise相当を提供
• 以前は素のOpenJDKビルドに近かったが、最近は機能拡張やDocker対応を重視
36
#codetokyo19B3 & #ccc_l5
SapMachine
一般向け情報 種類・名称 参照先
導入・運用 ドキュメント https://github.com/SAP/SapMachine/wiki
リリースノート (見当たらず) * 基本はOracle OpenJDKやAdoptOpenJDKと同じはず
ライフサイクル https://github.com/SAP/SapMachine/wiki/Security-Updates,-Maintenance-
and-Support
動作環境 https://github.com/SAP/SapMachine/wiki/Supported-platforms
動向把握 Twitter @SweetSapMachine
GitHub https://github.com/SAP/SapMachine
ダウンロード https://sap.github.io/SapMachine/ *認証不要(GitHubからダウンロード)
ライセンス GPLv2 + Classpath Exception
• アーリーアクセス(EA)版を含めた最新リリースへの追従 (JDK8は未対応)
• サーバーサイドで実行するうえでの診断機能の強化
• 元々モニタリングに強い SAP JVM を別に持つ
37
#codetokyo19B3 & #ccc_l5
BellSoft Liberica JDK
一般向け情報 種類・名称 参照先
導入・運用 ドキュメント 各リリースのダウンロードページから [installation guide]参照
リリースノート 各リリースのダウンロードページから [Release Notes]参照
* 修正内容はOracle JDKのリリースノートにリンク
ライフサイクル 8/11 LTSは最低2026年まで *非公式な確認であり、サイト準備中とのこと
動作環境 リリースノート参照
動向把握 Twitter @bellsoftware
Blog https://www.bell-sw.com/index.html
GitHub https://github.com/bell-sw/Liberica
ダウンロード https://www.bell-sw.com/ *認証不要
ライセンス GPLv2 + Classpath Exception
• AdoptOpenJDKに次ぎ、広範なプラットフォームに対応
• JavaFX(OpenJFX)との統合に強み
『AdoptOpenJDKにOpenJFXをバンドルして欲しい要望に対してのまとめ』
• JetBrainsとの戦略的提携、Oracleとの提携?(ビルド番号などから推測)
38
#codetokyo19B3 & #ccc_l5
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, Microsoft Azure, Azul Systems, etc.)
• TCK/JCKを通せていないが、独自のテストスイートで対応
39
#codetokyo19B3 & #ccc_l5
Amazon Corretto
一般向け情報 種類・名称 参照先
導入・運用 ドキュメント Corretto 8 User Guide / Corretto 11 User Guide
リリースノート 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 https://aws.amazon.com/blogs/opensource/category/devops/aws-java-
development/
GitHub https://github.com/corretto/
ダウンロード https://aws.amazon.com/corretto/ *認証不要、英語に切り替えないと古いモジュールが見える場合がある
ライセンス GPLv2 + Classpath Exception
• AWSおよびJava Fatherの強力なネームバリュー
• ドキュメントに力を入れている (日本語翻訳などもあるが遅れる)
• 独自バックポートありで、ダウンストリーム(LTS)に注力
40
#codetokyo19B3 & #ccc_l5
その他注目しておきたい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独自機能
- Azul Zing : Linux x64に特化し、C4 GCやFalcon JITで高速化をうたう
- GraalVM : Oracleが中心に開発する多言語対応VM (JITにGraal採用でネイティブイメージ対応)
41
直接関係ないけど、こちらも適宜参照『VMの歩む道。 Dalvik、ART、そしてJava VM』 by @yy_yank さん
#codetokyo19B3 & #ccc_l5
アジェンダ
1. OpenJDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各OpenJDKディストリビューションの特徴
4. OpenJDKディストリビューションの選び方
5. OpenJDKの支え方
42
#codetokyo19B3 & #ccc_l5
Oracle JDK陣営とRed Hat主導のOpenJDK LTS陣営 (イメージ)
大半の修正は共通しており、Oracle JDKとOpenJDK LTSを近づけるよう努力はされている
43
#codetokyo19B3 & #ccc_l5
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月より前のアンケートと想定される
44
#codetokyo19B3 & #ccc_l5
JVM言語利用者向け簡易アンケート (日本)
『 (2019年4月時点) JVM言語を使う方がどのJDK/JVMを使うか?アンケートと考察まとめ』
https://togetter.com/li/1340853
Q1. 商用環境でScala, Kotlin, Clojure, Groovy
などのJVM言語を使う方はJDK/JREは何を利用
しますか?
Q2. 商用環境でJVM言語を使う方はJDK/JVM
バージョンとして何をメインで使いますか?
?
45
#codetokyo19B3 & #ccc_l5
判断軸
• サポート
- アップデート提供期間
- 商用サポートの有無
- 関連製品との動作保証
• 使いやすさ
- インストーラ (特にWindowsクライアント)
- 開発環境
- コンテナ対応
• どこで運用するか
- サーバー (クラウド, オンプレミス)
- クライアント
- コンテナ
- 組み込み
46
#codetokyo19B3 & #ccc_l5
[参考] 判断軸によるディストリビューションの比較(例)
ディストリビューション
8 (LTS)
EOL
11 (LTS)
EOL
12 EOL
(non-LTS)
商用
サポート
関連製品の
動作保証
備考
Oracle JDK 2025-03 2026-09 2019-09 日本語可 ◎→? 既存では強いが今後不明
Oracle OpenJDK - 2019-03 2019-09 - △ 追従できる製品は限定
Red Hat OpenJDK 2023-06 2024-10 - 日本語可 △→? Windows対応で増える?
Azul Zulu 2026-03 2027-09 2019-09 英語 ○ 奇数リリースで商用はMTS
SapMachine - 2022-09 2019-09 - ? SAP製品内に限定?
BellSoft Liberica JDK 2026-12 2026-12 2019-09 英語 ? ライフタイムは非公式に確認
AdoptOpenJDK 2023-09 2022-09 2019-09 英語 △ 利用増加中だがTCKが難点
Amazon Corretto 2023-06 2024-08 - - △ 利用増加中?
最低期間なので、今後延長
される可能性は大いにありサポート
• Oracle JDK/Liberica JDK以外は、基本的にRed Hat主導のOpenJDK LTSに依存
• Azul Zuluは、コミュニティ版でのアップデート提供期間の保証はなし
• 総じて以前からのディストリビューションが強そうだが、将来は不明
47
#codetokyo19B3 & #ccc_l5
[参考] 判断軸によるディストリビューションの比較(例)
ディストリビューション
インストーラ sdkman &
chocolatey
コンテナ
(Docker)
備考
8 11
Oracle JDK ◎ ○ - △
Docker Storeのイメージは古い
(Oracle Container RegistryもServer JRE 8 のみ)
Oracle OpenJDK - - ◎ ○ LTSはないが最新版を利用可能
Red Hat OpenJDK ○ ○ - △ Red Hat Container Catalogで利用
Azul Zulu △ ◎ ◎ ◎ インストーラ・Dockerとも各種環境に注力
SapMachine - ○ ◎ ○ DockerのベースOSはUbuntuのみ
BellSoft Liberica JDK ○ ◎ ○ ○ 現状AlpineのDockerイメージは中途半端
AdoptOpenJDK △ ○ ○ ◎ 一通り利用可能
Amazon Corretto ○ ◎ ○ ○
DockerのベースOSはAmazon Linux2のみ
(Alpine対応は保留されている)
使いやすさ
• JDK 8のインストーラは、既存のWindow用Oracle JRE 8との互換性を基準に評価
• JDK 11のインストーラは、多くのプラットフォームに対応しているかに注目
48
#codetokyo19B3 & #ccc_l5
[参考] 判断軸によるディストリビューションの比較(例)
ディストリビューション クラウド オンプレミス クライアント コンテナ 組み込み 備考
Oracle JDK Oracle ○ ◎ △ ○
クライアント用のJava Web
Start (アプレットは非推奨)
Oracle OpenJDK (any) ○ △ ○ -
Red Hat OpenJDK OpenShift ○ ○ △ -
IceadTea-Web for Windows
正式サポート予定
Azul Zulu Azure ○ △ ◎ ○
ZuluFXコミュニティ版はイン
ストーラなし
SapMachine (any) ○ △ ○ -
BellSoft Liberica JDK (any) ○ ○ ○ ○ JavaFX(OpenJFX)バンドル
AdoptOpenJDK (any) ○ △ ◎ ○
Amazon Corretto AWS ○ △ ○ -
どこで運用するか
• オンプレミスのサーバ環境は、特にどれでも問題なし (対応プラットフォーム次第)
• 既存クライアント環境との互換性を重視する場合は、Oracle JRE 8が妥当か
49
#codetokyo19B3 & #ccc_l5
アジェンダ
1. OpenJDKディストリビューションが出てきた背景
2. 誰がOpenJDKを作っているか
3. 各OpenJDKディストリビューションの特徴
4. OpenJDKディストリビューションの選び方
5. OpenJDKの支え方
50
#codetokyo19B3 & #ccc_l5
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
• 構築・運用担当者
- 各製品のライフサイクルやOpenJDKのリリーススケジュールを把握する
- 動作保証に適したJDKを利用する (民法改正の影響なども考慮)
- アプリケーションに応じて適切なプラットフォームを検討する
51
#codetokyo19B3 & #ccc_l5
[参考] JDKディストリビューションの他の選び方(例)
• 例えば、好きなベンダー(ディストリビューター)のJDKを利用する
e.g. OpenJDK本体に貢献しているベンダーを応援したい
- Oracle JDK/Oracle OpenJDK
- Red Hat OpenJDK
- SapMachine
- BellSoft Liberica JDK
- IBM
- Amazon Corretto
• ディストリビューションの応援の仕方の例
- まずは使ってみる
- 意見を伝えたり、フィードバックして改善してみる
- Oracle Java SE Desktop Subscriptionを個人購入してみる
52
#codetokyo19B3 & #ccc_l5
コミュニティへの参加
• 勉強会、セミナーへの参加
- 各現場での啓蒙
- 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 さん
53
#codetokyo19B3 & #ccc_l5
Java/JVMエコシステムはこれまでと変わらず重要
• Javaはこれからますます進化を続ける
- 半年単位での機能リリース
- Project Panama, Valhalla, Loom
- Quarkus, MicronautなどGraalVMを利用したフレームワーク
• エコシステムは強力で重要不可欠
- 『有償化やEOLに関して誤解があるけど、様々なクラウドやサービス系企業で
Java/JVMが使われ続けてるよって話』https://togetter.com/li/1342273
- 『SunからOracleに変わって10年経ったけど第三者から見てもJavaは心配ない
よというポエム』https://togetter.com/li/1342209
54
#codetokyo19B3 & #ccc_l5
まとめ
• 最適なOpenJDKディストリビューションは環境・状況に応じて異なる
- 時代の変化にどれだけ追従していくか
• セキュリティやライフサイクルの考慮
• サーバーサイドでの可搬性の確保や、クライアントでのカスタムJREの組み込み
- サポートや動作保証をどう捉えるか
• 利用するミドルウェアやライブラリ、JVM言語など
• 有償サポートの利用有無や、法改正の影響を考慮
- どこで利用するか
• 開発環境と運用環境のJDK種類・バージョンの統一
• クラウド、オンプレミス、クライアント、コンテナ、組み込み
• - Java/JVMコミュニティやエコシステムの重要性
- Oracle JDK/JRE一強時代ではなく、個々に判断・選択する必要性
- 求められるのはディストリビューション利用者側の意識の変化
- OpenJDKなどのOSSは皆で参加し、育てていくもの
55
#codetokyo19B3 & #ccc_l5
ご清聴ありがとうございました
本セッションや資料は、Java関連コミュニティの方々や関係者各位も含め、
多くの皆様のご協力によって生まれたものです。改めて感謝を申し上げます。
56

Contenu connexe

Tendances

Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)NTT DATA Technology & Innovation
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)NTT DATA Technology & Innovation
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)Trainocate Japan, Ltd.
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...Shinji Takao
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 

Tendances (20)

ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 

Similaire à 最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5

OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoTakahiro YAMADA
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Chihiro Ito
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付きInsight Technology, Inc.
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決オラクルエンジニア通信
 
JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209
JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209
JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209オラクルエンジニア通信
 
JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019
JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019
JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019Takashi Ito
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-PE-BANK
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJavaTakashi Ito
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpYuji Kubota
 
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用オラクルエンジニア通信
 
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語るOracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語るオラクルエンジニア通信
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)オラクルエンジニア通信
 

Similaire à 最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5 (20)

OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
 
20190202 jdk new_release_model_sendai
20190202 jdk new_release_model_sendai20190202 jdk new_release_model_sendai
20190202 jdk new_release_model_sendai
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
 
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
 
Oracle GoldenGate 概要 2020年11月版
Oracle GoldenGate 概要 2020年11月版Oracle GoldenGate 概要 2020年11月版
Oracle GoldenGate 概要 2020年11月版
 
JDK: 新しいリリースモデル解説
JDK: 新しいリリースモデル解説JDK: 新しいリリースモデル解説
JDK: 新しいリリースモデル解説
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
JDK:新しいリリースモデル解説 @ 熊本・福岡
JDK:新しいリリースモデル解説 @ 熊本・福岡JDK:新しいリリースモデル解説 @ 熊本・福岡
JDK:新しいリリースモデル解説 @ 熊本・福岡
 
JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209
JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209
JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209
 
JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019
JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019
JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
JDK:新しいリリースモデル解説 @ 岡山・広島
JDK:新しいリリースモデル解説 @ 岡山・広島JDK:新しいリリースモデル解説 @ 岡山・広島
JDK:新しいリリースモデル解説 @ 岡山・広島
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
 
Ptt391
Ptt391Ptt391
Ptt391
 
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
 
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語るOracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
 
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
GoldenGateテクニカルセミナー3「Oracle GoldenGate Technical Deep Dive」(2016/5/11)
 

最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5

  • 1. #codetokyo19B3 & #ccc_l5 最適なOpenJDKディストリビューションの選び方 - How to choose the best OpenJDK distribution - Takahiro YAMADA 2019-05
  • 2. #codetokyo19B3 & #ccc_l5 自己紹介 • お仕事: SIerの片隅でマルチベンダーのミドルウェア技術サポート - Oracle Fusion Middleware - Red Hat JBoss Middleware - その他 Java を一部利用するミドルウェア製品 • コミュニティ - Twitter: @yamadamn - 元: Oracle ACE (Middleware) - 現在: 日本GlassFishユーザー会 監事 - 本日: OpenJDK警察 OpenJDKソムリエ 2
  • 3. #codetokyo19B3 & #ccc_l5 免責事項 • Oracle と Java は、Oracle Corporation およびその子会社・関連会社 の米国およびその他の国における登録商標です。文中の社名・商品名 などは、各社の商標または登録商標である場合があります。 • 発表する内容は個人の見解であり、所属する組織や団体の公式な見解 ではありません。 • 本資料に記載している内容は2019年5月前半時点の情報に基づきます。 また、本資料を使用したことにより被った直接的、間接的な損害等に ついて、いかなる責任も負いかねます。 3
  • 4. #codetokyo19B3 & #ccc_l5 本日メインで紹介するJDKディストリビューション • Oracle JDK • Oracle OpenJDK • Red Hat OpenJDK • Azul Zulu • SapMachine • BellSoft Liberica JDK • AdoptOpenJDK with HotSpot • Amazon Corretto 4
  • 5. #codetokyo19B3 & #ccc_l5 なぜマルチプラットフォーム対応の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は若干古かったり、パッケージ更新に依存 • 例: 改元「令和」対応 5 (例)
  • 6. #codetokyo19B3 & #ccc_l5 アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び方 5. OpenJDKの支え方 6
  • 7. #codetokyo19B3 & #ccc_l5 その前に: 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の無償版はなくならないぞ!」 #jjug』 https://togetter.com/li/1239234 7
  • 8. #codetokyo19B3 & #ccc_l5 アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び方 5. OpenJDKの支え方 8
  • 9. #codetokyo19B3 & #ccc_l5 OpenJDKの歴史 • 最初に開発中のJDK 7がOSS化 (Sun時代) • 開発中のJDK 7の開発途中からOpenJDK 6が派生 • JDK 7からはコードベースが OpenJDK 7に一本化 『アプリケーション実行基盤としてのOpenJDKの評価』 https://ossipedia.ipa.go.jp/nfs/pdf_pub/1007/208/670/670.pdf 実際はその後 Oracle JDKとして リリース 9
  • 10. #codetokyo19B3 & #ccc_l5 OpenJDKディストリビューションの歴史: 前編 • 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にも対応 10
  • 12. #codetokyo19B3 & #ccc_l5 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) 12
  • 13. #codetokyo19B3 & #ccc_l5 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 13
  • 14. #codetokyo19B3 & #ccc_l5 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/ 14
  • 15. #codetokyo19B3 & #ccc_l5 Java 8と11の互換性 • Oracle JDK/JRE 11から削除された内容 - Javaプラグイン(アプレット), Java Web Start - Public JRE+自動更新 - JavaFX (OpenJFXに移管) - 32bit版バイナリ (Windows, Linux) ※Oracle JDK/JRE 9~ ➡ クライアント環境に影響 (特にレガシーな環境) • モジュール・システム(Project Jigsaw)による壁 - 内部APIに対するアクセス制限 - JAXBなどJava EE関連モジュール削除 ➡ ミドルウェア、JVM言語、ライブラリ、フレームワーク、ツールなどに影響 15
  • 16. #codetokyo19B3 & #ccc_l5 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)以降にも適用 16
  • 18. #codetokyo19B3 & #ccc_l5 OpenJDKディストリビューションの歴史: 後編 • JDK 9リリース~実質的に初のLTSとなる11.0.3登場 (1年7ヶ月) - 既存3ベンダーを含む計7つのディストリビューターで戦国時代に突入(?) OpenJDK 9 2017-09 OpenJDK 10 2018-03 OpenJDK 12 2019-03 2018-04 BellSoft Liberica JDK 10 for Raspberry Pi Oracle JDK/JRE 8 Public Updates終了 2019-01 OpenJDK 11 (LTS) 2018-09 12.0.1 2019-04 2018-05 AdoptOpenJDK 8u172 2018-03 SapMachine 10 2019-02 Amazon Corretto 8u212 Oracle JDK/OpenJDK 8u212, 11.0.3 (LTS) 2019-04 Oracle JDK/JRE 8 Public Updates 延長発表 2017-10 ※各ディストリビューションの 正式と見られるリリース年月 18 • Red Hat OpenJDK Windows版サポート発表 • Azul ZuluFXリリース 2018-12
  • 19. #codetokyo19B3 & #ccc_l5 アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び方 5. OpenJDKの支え方 19
  • 20. #codetokyo19B3 & #ccc_l5 マルチベンダーによる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%) 20
  • 21. #codetokyo19B3 & #ccc_l5 マルチベンダーによる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%) 21
  • 22. #codetokyo19B3 & #ccc_l5 マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 8u212) 『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/ pushes-openjdk8u212.txt – [Distribution by email/name] から独自集計 Total Issue: 112 1. Red Hat (64%) 2. Amazon (18%) 3. Oracle (12%) 4. SAP (4%) 5. 個人 (2%) 6. Azul (1%) 従来もOracle JDKのPublic Updates終了後は Red HatがOpenJDKの修正を主導 ※OpenJDK 8u212であって、 Oracle JDK 8u212ではないことに注意 72 20 13 4 2 1 Issues fixed in OpenJDK 8u212 Red Hat Amazon Oracle SAP 個人 Azul 22
  • 23. #codetokyo19B3 & #ccc_l5 マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 11.0.3) 『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/ pushes-11.0.3.txt – [Distribution by email/name] から独自集計 Total Issue: 185 1. Red Hat (45%) 2. SAP (31%) 3. Oracle (12%) 4. 個人 (4%) 5. Google (4%) 6. Amazon (3%) 7. BellSoft (1%) 8. Intel (1%) ※OpenJDK 11.0.3であって、 Oracle JDK 11.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 23
  • 24. #codetokyo19B3 & #ccc_l5 マルチベンダーによる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ヵ月間 OpenJDK 12.0.1 はデータが見つからないが Oracle主導と想定 つまり、Oracleは最新版OpenJDKに注力し、 OpenJDK 11 LTSは他のベンダーに委任 50 20 18 2 2 Issues fixed in OpenJDK 11.0.2 Oracle SAP Red Hat 個人 Google 24
  • 25. #codetokyo19B3 & #ccc_l5 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 25
  • 26. #codetokyo19B3 & #ccc_l5 改元対応でのバックポート例 [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への修正 • 11.0.x • openjdk8uXXX 最初に実装されるのは 開発中のリリース • 13 (EA版で確認可) 26
  • 27. #codetokyo19B3 & #ccc_l5 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などを通じて状況も明らかなので分断を招く訳ではない 27
  • 28. #codetokyo19B3 & #ccc_l5 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 28
  • 29. #codetokyo19B3 & #ccc_l5 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 29
  • 30. #codetokyo19B3 & #ccc_l5 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エコシステムを安定的に維持する狙いも大きいと見られる 旧BEA社のJRockit JDK機能を統合 商用機能はすべてOpenJDKに寄贈 素のOpenJDKに足りない機能は IceadTeaで一部補完 Web Start代替のIceadTea-Webは AdoptOpenJDK配下にリポジトリ移管 30 Shenandoah GCなどをOpenJDKに寄贈
  • 31. #codetokyo19B3 & #ccc_l5 アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び方 5. OpenJDKの支え方 31
  • 32. #codetokyo19B3 & #ccc_l5 その前に: 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 Ebataさん 32
  • 33. #codetokyo19B3 & #ccc_l5 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は現状認証不要) ライセンス 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への最大の貢献者 • エンドユーザーへの慣れ・安心感があるが、ライセンス変更での混乱あり • 日本語を含めて情報量が最も豊富 33
  • 34. #codetokyo19B3 & #ccc_l5 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) 34
  • 35. #codetokyo19B3 & #ccc_l5 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/ ダウンロード Red Hat Developer | OpenJDK Download https://developers.redhat.com/products/openjdk/download/ (開発者用Windows版で要アカウント認証) ライセンス GPLv2 + Classpath Exception • Oracleに次ぐOpenJDKの貢献者であり、以前からPublic Updates終了後に主導 • RHEL/CentOSで豊富な実績を持ち、従来はIceadTeaで機能拡張 • 今後はWindows版OpenJDKも正式サポート (例: Icead-Tea Web) 35
  • 36. #codetokyo19B3 & #ccc_l5 Azul Zulu 一般向け情報 種類・名称 参照先 導入・運用 ドキュメント Zulu user documentation リリースノート Zulu Community Release Notes ライフサイクル Azul Product Support Lifecycle 動作環境 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/ *認証不要 ライセンス GPLv2 + Classpath Exception • JDK/JVM専業ベンダーで、異なるJVMであるAzul Zingを持つ • Microsoft Azureで以前から利用され、商用のZulu Enterprise相当を提供 • 以前は素のOpenJDKビルドに近かったが、最近は機能拡張やDocker対応を重視 36
  • 37. #codetokyo19B3 & #ccc_l5 SapMachine 一般向け情報 種類・名称 参照先 導入・運用 ドキュメント https://github.com/SAP/SapMachine/wiki リリースノート (見当たらず) * 基本はOracle OpenJDKやAdoptOpenJDKと同じはず ライフサイクル https://github.com/SAP/SapMachine/wiki/Security-Updates,-Maintenance- and-Support 動作環境 https://github.com/SAP/SapMachine/wiki/Supported-platforms 動向把握 Twitter @SweetSapMachine GitHub https://github.com/SAP/SapMachine ダウンロード https://sap.github.io/SapMachine/ *認証不要(GitHubからダウンロード) ライセンス GPLv2 + Classpath Exception • アーリーアクセス(EA)版を含めた最新リリースへの追従 (JDK8は未対応) • サーバーサイドで実行するうえでの診断機能の強化 • 元々モニタリングに強い SAP JVM を別に持つ 37
  • 38. #codetokyo19B3 & #ccc_l5 BellSoft Liberica JDK 一般向け情報 種類・名称 参照先 導入・運用 ドキュメント 各リリースのダウンロードページから [installation guide]参照 リリースノート 各リリースのダウンロードページから [Release Notes]参照 * 修正内容はOracle JDKのリリースノートにリンク ライフサイクル 8/11 LTSは最低2026年まで *非公式な確認であり、サイト準備中とのこと 動作環境 リリースノート参照 動向把握 Twitter @bellsoftware Blog https://www.bell-sw.com/index.html GitHub https://github.com/bell-sw/Liberica ダウンロード https://www.bell-sw.com/ *認証不要 ライセンス GPLv2 + Classpath Exception • AdoptOpenJDKに次ぎ、広範なプラットフォームに対応 • JavaFX(OpenJFX)との統合に強み 『AdoptOpenJDKにOpenJFXをバンドルして欲しい要望に対してのまとめ』 • JetBrainsとの戦略的提携、Oracleとの提携?(ビルド番号などから推測) 38
  • 39. #codetokyo19B3 & #ccc_l5 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, Microsoft Azure, Azul Systems, etc.) • TCK/JCKを通せていないが、独自のテストスイートで対応 39
  • 40. #codetokyo19B3 & #ccc_l5 Amazon Corretto 一般向け情報 種類・名称 参照先 導入・運用 ドキュメント Corretto 8 User Guide / Corretto 11 User Guide リリースノート 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 https://aws.amazon.com/blogs/opensource/category/devops/aws-java- development/ GitHub https://github.com/corretto/ ダウンロード https://aws.amazon.com/corretto/ *認証不要、英語に切り替えないと古いモジュールが見える場合がある ライセンス GPLv2 + Classpath Exception • AWSおよびJava Fatherの強力なネームバリュー • ドキュメントに力を入れている (日本語翻訳などもあるが遅れる) • 独自バックポートありで、ダウンストリーム(LTS)に注力 40
  • 41. #codetokyo19B3 & #ccc_l5 その他注目しておきたい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独自機能 - Azul Zing : Linux x64に特化し、C4 GCやFalcon JITで高速化をうたう - GraalVM : Oracleが中心に開発する多言語対応VM (JITにGraal採用でネイティブイメージ対応) 41 直接関係ないけど、こちらも適宜参照『VMの歩む道。 Dalvik、ART、そしてJava VM』 by @yy_yank さん
  • 42. #codetokyo19B3 & #ccc_l5 アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び方 5. OpenJDKの支え方 42
  • 43. #codetokyo19B3 & #ccc_l5 Oracle JDK陣営とRed Hat主導のOpenJDK LTS陣営 (イメージ) 大半の修正は共通しており、Oracle JDKとOpenJDK LTSを近づけるよう努力はされている 43
  • 44. #codetokyo19B3 & #ccc_l5 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月より前のアンケートと想定される 44
  • 45. #codetokyo19B3 & #ccc_l5 JVM言語利用者向け簡易アンケート (日本) 『 (2019年4月時点) JVM言語を使う方がどのJDK/JVMを使うか?アンケートと考察まとめ』 https://togetter.com/li/1340853 Q1. 商用環境でScala, Kotlin, Clojure, Groovy などのJVM言語を使う方はJDK/JREは何を利用 しますか? Q2. 商用環境でJVM言語を使う方はJDK/JVM バージョンとして何をメインで使いますか? ? 45
  • 46. #codetokyo19B3 & #ccc_l5 判断軸 • サポート - アップデート提供期間 - 商用サポートの有無 - 関連製品との動作保証 • 使いやすさ - インストーラ (特にWindowsクライアント) - 開発環境 - コンテナ対応 • どこで運用するか - サーバー (クラウド, オンプレミス) - クライアント - コンテナ - 組み込み 46
  • 47. #codetokyo19B3 & #ccc_l5 [参考] 判断軸によるディストリビューションの比較(例) ディストリビューション 8 (LTS) EOL 11 (LTS) EOL 12 EOL (non-LTS) 商用 サポート 関連製品の 動作保証 備考 Oracle JDK 2025-03 2026-09 2019-09 日本語可 ◎→? 既存では強いが今後不明 Oracle OpenJDK - 2019-03 2019-09 - △ 追従できる製品は限定 Red Hat OpenJDK 2023-06 2024-10 - 日本語可 △→? Windows対応で増える? Azul Zulu 2026-03 2027-09 2019-09 英語 ○ 奇数リリースで商用はMTS SapMachine - 2022-09 2019-09 - ? SAP製品内に限定? BellSoft Liberica JDK 2026-12 2026-12 2019-09 英語 ? ライフタイムは非公式に確認 AdoptOpenJDK 2023-09 2022-09 2019-09 英語 △ 利用増加中だがTCKが難点 Amazon Corretto 2023-06 2024-08 - - △ 利用増加中? 最低期間なので、今後延長 される可能性は大いにありサポート • Oracle JDK/Liberica JDK以外は、基本的にRed Hat主導のOpenJDK LTSに依存 • Azul Zuluは、コミュニティ版でのアップデート提供期間の保証はなし • 総じて以前からのディストリビューションが強そうだが、将来は不明 47
  • 48. #codetokyo19B3 & #ccc_l5 [参考] 判断軸によるディストリビューションの比較(例) ディストリビューション インストーラ sdkman & chocolatey コンテナ (Docker) 備考 8 11 Oracle JDK ◎ ○ - △ Docker Storeのイメージは古い (Oracle Container RegistryもServer JRE 8 のみ) Oracle OpenJDK - - ◎ ○ LTSはないが最新版を利用可能 Red Hat OpenJDK ○ ○ - △ Red Hat Container Catalogで利用 Azul Zulu △ ◎ ◎ ◎ インストーラ・Dockerとも各種環境に注力 SapMachine - ○ ◎ ○ DockerのベースOSはUbuntuのみ BellSoft Liberica JDK ○ ◎ ○ ○ 現状AlpineのDockerイメージは中途半端 AdoptOpenJDK △ ○ ○ ◎ 一通り利用可能 Amazon Corretto ○ ◎ ○ ○ DockerのベースOSはAmazon Linux2のみ (Alpine対応は保留されている) 使いやすさ • JDK 8のインストーラは、既存のWindow用Oracle JRE 8との互換性を基準に評価 • JDK 11のインストーラは、多くのプラットフォームに対応しているかに注目 48
  • 49. #codetokyo19B3 & #ccc_l5 [参考] 判断軸によるディストリビューションの比較(例) ディストリビューション クラウド オンプレミス クライアント コンテナ 組み込み 備考 Oracle JDK Oracle ○ ◎ △ ○ クライアント用のJava Web Start (アプレットは非推奨) Oracle OpenJDK (any) ○ △ ○ - Red Hat OpenJDK OpenShift ○ ○ △ - IceadTea-Web for Windows 正式サポート予定 Azul Zulu Azure ○ △ ◎ ○ ZuluFXコミュニティ版はイン ストーラなし SapMachine (any) ○ △ ○ - BellSoft Liberica JDK (any) ○ ○ ○ ○ JavaFX(OpenJFX)バンドル AdoptOpenJDK (any) ○ △ ◎ ○ Amazon Corretto AWS ○ △ ○ - どこで運用するか • オンプレミスのサーバ環境は、特にどれでも問題なし (対応プラットフォーム次第) • 既存クライアント環境との互換性を重視する場合は、Oracle JRE 8が妥当か 49
  • 50. #codetokyo19B3 & #ccc_l5 アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び方 5. OpenJDKの支え方 50
  • 51. #codetokyo19B3 & #ccc_l5 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 • 構築・運用担当者 - 各製品のライフサイクルやOpenJDKのリリーススケジュールを把握する - 動作保証に適したJDKを利用する (民法改正の影響なども考慮) - アプリケーションに応じて適切なプラットフォームを検討する 51
  • 52. #codetokyo19B3 & #ccc_l5 [参考] JDKディストリビューションの他の選び方(例) • 例えば、好きなベンダー(ディストリビューター)のJDKを利用する e.g. OpenJDK本体に貢献しているベンダーを応援したい - Oracle JDK/Oracle OpenJDK - Red Hat OpenJDK - SapMachine - BellSoft Liberica JDK - IBM - Amazon Corretto • ディストリビューションの応援の仕方の例 - まずは使ってみる - 意見を伝えたり、フィードバックして改善してみる - Oracle Java SE Desktop Subscriptionを個人購入してみる 52
  • 53. #codetokyo19B3 & #ccc_l5 コミュニティへの参加 • 勉強会、セミナーへの参加 - 各現場での啓蒙 - 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 さん 53
  • 54. #codetokyo19B3 & #ccc_l5 Java/JVMエコシステムはこれまでと変わらず重要 • Javaはこれからますます進化を続ける - 半年単位での機能リリース - Project Panama, Valhalla, Loom - Quarkus, MicronautなどGraalVMを利用したフレームワーク • エコシステムは強力で重要不可欠 - 『有償化やEOLに関して誤解があるけど、様々なクラウドやサービス系企業で Java/JVMが使われ続けてるよって話』https://togetter.com/li/1342273 - 『SunからOracleに変わって10年経ったけど第三者から見てもJavaは心配ない よというポエム』https://togetter.com/li/1342209 54
  • 55. #codetokyo19B3 & #ccc_l5 まとめ • 最適なOpenJDKディストリビューションは環境・状況に応じて異なる - 時代の変化にどれだけ追従していくか • セキュリティやライフサイクルの考慮 • サーバーサイドでの可搬性の確保や、クライアントでのカスタムJREの組み込み - サポートや動作保証をどう捉えるか • 利用するミドルウェアやライブラリ、JVM言語など • 有償サポートの利用有無や、法改正の影響を考慮 - どこで利用するか • 開発環境と運用環境のJDK種類・バージョンの統一 • クラウド、オンプレミス、クライアント、コンテナ、組み込み • - Java/JVMコミュニティやエコシステムの重要性 - Oracle JDK/JRE一強時代ではなく、個々に判断・選択する必要性 - 求められるのはディストリビューション利用者側の意識の変化 - OpenJDKなどのOSSは皆で参加し、育てていくもの 55