Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

これからのJDK/JVM 何を選ぶ?どう選ぶ?

5,963 views

Published on

2019年7月に #kanjava #okajug #jjug で話したセッション資料です。

Published in: Technology
  • Login to see the comments

これからのJDK/JVM 何を選ぶ?どう選ぶ?

  1. 1. これからのJDK/JVM 何を選ぶ︖どう選ぶ︖ - Tasting OpenJDK distribution - Takahiro YAMADA 2019-07 #kanjava #okajug #jjug #OpenJDKソムリエ
  2. 2. ⾃⼰紹介 • CTCテクノロジー所属: マルチベンダーのミドルウェア技術サポート - Oracle Fusion Middleware - Red Hat JBoss Middleware - その他 Java を⼀部利⽤するミドルウェア製品 • コミュニティ - Twitter: @yamadamn - 元: Oracle ACE (Middleware) - 現在: ⽇本GlassFishユーザー会 監事 - 本⽇: OpenJDK警察 OpenJDKソムリエ #kanjava #okajug #jjug #OpenJDKソムリエ
  3. 3. 免責事項 • Oracle と Java は、Oracle Corporation およびその⼦会社・関連会社 の⽶国およびその他の国における登録商標です。⽂中の社名・商品名 などは、各社の商標または登録商標である場合があります。 • 発表する内容は個⼈の⾒解であり、所属する組織や団体の公式な⾒解 ではありません。 • 本資料に記載している内容は2019年7⽉中旬時点の情報に基づきます。 ※2019年5⽉中旬に開催されたOracle Code Tokyo, JJUG CCCのセッションでの 『OpenJDKディストリビューションの選び⽅』https://togetter.com/li/1356223 を ベースとして、修正を加えています。 #kanjava #okajug #jjug #OpenJDKソムリエ
  4. 4. 本⽇メインで紹介するJDKディストリビューション • Oracle JDK • Oracle OpenJDK • Red Hat OpenJDK • Azul Zulu • SapMachine • BellSoft Liberica JDK • AdoptOpenJDK with HotSpot • Amazon Corretto #kanjava #okajug #jjug #OpenJDKソムリエ
  5. 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問題 (例) #kanjava #okajug #jjug #OpenJDKソムリエ
  6. 6. アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ #kanjava #okajug #jjug #OpenJDKソムリエ
  7. 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の無償版はなくならないぞ︕」 #jjug』 https://togetter.com/li/1239234 #kanjava #okajug #jjug #OpenJDKソムリエ
  8. 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 さん #kanjava #okajug #jjug #OpenJDKソムリエ
  9. 9. アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ #kanjava #okajug #jjug #OpenJDKソムリエ
  10. 10. OpenJDKの歴史 • 最初に開発中のJDK 7がOSS化 (Sun時代) • 開発中のJDK 7の開発途中からOpenJDK 6が派⽣ • JDK 7からはコードベースが OpenJDK に⼀本化 『アプリケーション実⾏基盤としてのOpenJDKの評価』 https://ossipedia.ipa.go.jp/nfs/pdf_pub/1007/208/670/670.pdf 実際はその後 Oracle JDKとして リリース #kanjava #okajug #jjug #OpenJDKソムリエ
  11. 11. 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にも対応 #kanjava #okajug #jjug #OpenJDKソムリエ
  12. 12. 時代の変化 進化への追従 セキュリティ対応 の重要性 クラウドやコンテナ 環境の台頭 #kanjava #okajug #jjug #OpenJDKソムリエ
  13. 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) #kanjava #okajug #jjug #OpenJDKソムリエ
  14. 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 #kanjava #okajug #jjug #OpenJDKソムリエ
  15. 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/ #kanjava #okajug #jjug #OpenJDKソムリエ
  16. 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⾔語、ライブラリ、フレームワーク、ツールなどに影響 #kanjava #okajug #jjug #OpenJDKソムリエ
  17. 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)以降にも適⽤ #kanjava #okajug #jjug #OpenJDKソムリエ
  18. 18. OpenJDKを中⼼として各ディストリビューションが競う時代に ソースコード 複数のディストリビューター JDKディストリビューション• 商⽤機能を寄贈 • その他固有機能を削除/OSS化 コミュニティ・プロジェクト #kanjava #okajug #jjug #OpenJDKソムリエ
  19. 19. 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 2019-07 8u221/222 11.0.4 12.0.2 2018-05 AdoptOpenJDK 8u172 2018-03 SapMachine 10 2019-02 Amazon Corretto 8u212 Oracle JDK/OpenJDK 8u212, 11.0.3 (LTS), 12.0.1 2019-04 Oracle JDK/JRE 8 Public Updates 延⻑発表 2017-10 ※各ディストリビューションの 正式と⾒られるリリース年⽉ • Red Hat OpenJDK Windows版サポート発表 • Azul ZuluFXリリース 2018-12 #kanjava #okajug #jjug #OpenJDKソムリエ
  20. 20. アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ #kanjava #okajug #jjug #OpenJDKソムリエ
  21. 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%) #kanjava #okajug #jjug #OpenJDKソムリエ
  22. 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%) #kanjava #okajug #jjug #OpenJDKソムリエ
  23. 23. マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 8u212/222) 『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/ pushes-openjdk8u212.txt, pushes-openjdk8u222.txt – [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/222であって、Oracle JDK 8u212/222ではないことに注意 72 20 13 4 2 1 Issues fixed in OpenJDK 8u212 Red Hat Amazon Oracle SAP 個人 Azul #kanjava #okajug #jjug #OpenJDKソムリエ Total Issue: 152 1. Red Hat (70.4%) 2. SAP (15.1%) 3. Amazon (9.2%) 4. IBM (2.6%) 5. Azul (1.3%) 6. Oracle (0.7%) 7. 個⼈ (0.7%) 107 23 14 4 2 1 Issues fixed in OpenJDK 8u222 Red Hat SAP Amazon IBM Azul Oracle
  24. 24. マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 11.0.3/11.0.4) 『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/ pushes-11.0.3.txt, pushes-11.0.4.txt – [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.4であって、Oracle JDK 11.0.3/11.0.4ではないことに注意 83 58 23 7 7 5 1 1 Issues fixed in OpenJDK 11.0.3 Red Hat SAP Oracle 個人 Google Amazon BellSoft Intel #kanjava #okajug #jjug #OpenJDKソムリエ 124 96 8 7 7 2 2 1 Issues fixed in OpenJDK 11.0.4 SAP Red Hat Amazon Azul Google Oracle Huawei Total Issue: 247 1. SAP (50.2%) 2. Red Hat (38.9%) 3. 個⼈ (3.2%) 4. Amazon (2.8%) 5. Azul (2.8%) 6. Google (0.8%) 7. Oracle (0.8%) 8. Huawei (0.4%)
  25. 25. マルチベンダーによる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 #kanjava #okajug #jjug #OpenJDKソムリエ
  26. 26. マルチベンダーによるOpenJDKへの貢献/投資 (OpenJDK 13-ea) 『OpenJDK Backports Monitor』https://builds.shipilev.net/backports-monitor/ pushes-13.txt – [Distribution by email/name] から独⾃集計 (7⽉頭時点) Total Issue: 2284 1. Oracle (75.9%) 2. Red Hat (10.1%) 3. SAP (5.4%) 4. Google (3.4%) 5. 個⼈ (2.8%) 6. BellSoft (0.6%) 7. ARM (0.5%) 8. Huawei (0.5%) 9. Intel (0.3%) 10.IBM (0.2%) 11.Amazon (0.1%) 12.Azul (0.1%) #kanjava #okajug #jjug #OpenJDKソムリエ ※JDK 13は9⽉中旬リリース予定のため、確定した内容ではない 1733 230 123 77 65 Issues Fixed in 13-ea Oracle Red Hat SAP Google BellSoft ARM Huawei Intel IBM Amazon Azul
  27. 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 #kanjava #okajug #jjug #OpenJDKソムリエ
  28. 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への修正 • 11.0.x • openjdk8uXXX 最初に実装されるのは 開発中のリリース • 13 (EA版で確認可) #kanjava #okajug #jjug #OpenJDKソムリエ
  29. 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などを通じて状況も明らかなので分断を招く訳ではない #kanjava #okajug #jjug #OpenJDKソムリエ
  30. 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 #kanjava #okajug #jjug #OpenJDKソムリエ 数が⼤きいほうが多くの修正 を含んでいる訳ではない
  31. 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) #kanjava #okajug #jjug #OpenJDKソムリエ 『JavaのリリースにはCPUとPSUの2種類があります』by @jyukutyo さん https://www.sakatakoichi.com/entry/2015/07/22/173205 (Amazon Correttoの例だが他も基本的に同様)
  32. 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 #kanjava #okajug #jjug #OpenJDKソムリエ
  33. 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 #kanjava #okajug #jjug #OpenJDKソムリエ (AdoptOpenJDKの例だが他も基本的に同様) OpenJDKのビルド番号 とは無関係
  34. 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エコシステムを安定的に維持する狙いも⼤きいと⾒られる 旧BEA社のJRockit JDK機能を統合 商⽤機能はすべてOpenJDKに寄贈 素のOpenJDKに⾜りない機能は IceadTeaで⼀部補完 Web Start代替のIceadTea-Webは AdoptOpenJDK配下にリポジトリ移管 Shenandoah GCなどをOpenJDKに寄贈 #kanjava #okajug #jjug #OpenJDKソムリエ
  35. 35. アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ #kanjava #okajug #jjug #OpenJDKソムリエ
  36. 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 Ebataさん #kanjava #okajug #jjug #OpenJDKソムリエ
  37. 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は現状認証不要) ライセンス 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ライセンスの変更に関するまとめ』 • ⽇本語を含めて情報量が最も豊富 #kanjava #okajug #jjug #OpenJDKソムリエ
  38. 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) #kanjava #okajug #jjug #OpenJDKソムリエ
  39. 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/ ダウンロード 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) #kanjava #okajug #jjug #OpenJDKソムリエ
  40. 40. 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対応を重視 #kanjava #okajug #jjug #OpenJDKソムリエ
  41. 41. 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 を別に持つ #kanjava #okajug #jjug #OpenJDKソムリエ
  42. 42. BellSoft Liberica JDK ⼀般向け情報 種類・名称 参照先 導⼊・運⽤ ドキュメント 各リリースのダウンロードページから [installation guide]参照 リリースノート 各リリースのダウンロードページから [Release Notes]参照 * 修正内容はOracle JDKのリリースノートにリンク ライフサイクル https://support.bell-sw.com/support 動作環境 リリースノート参照 動向把握 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との統合 (11以降は含まないLite版もあり) 『Liberica JDKやExecutable Jarの是⾮に対するJavaFXガチ勢とのやり取りまとめ』 • JetBrainsとの戦略的提携、Oracleとの提携?(ビルド番号などから推測) #kanjava #okajug #jjug #OpenJDKソムリエ
  43. 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, Microsoft Azure, Azul Systems, Pivotal, Red Hat, etc.) • TCK/JCKを通せていないが、独⾃のテストスイートで対応 #kanjava #okajug #jjug #OpenJDKソムリエ
  44. 44. 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)に注⼒ #kanjava #okajug #jjug #OpenJDKソムリエ
  45. 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独⾃機能 - Azul Zing : Linux x64に特化し、C4 GCやFalcon JITで⾼速化をうたう - GraalVM : Oracleが中⼼に開発する多⾔語対応VM (HotSpotだがAOTでネイティブイメージ対応) 直接関係ないけど、こちらも適宜参照『VMの歩む道。 Dalvik、ART、そしてJava VM』 by @yy_yank さん #kanjava #okajug #jjug #OpenJDKソムリエ
  46. 46. アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ #kanjava #okajug #jjug #OpenJDKソムリエ
  47. 47. Oracle JDK陣営とRed Hat主導のOpenJDK LTS陣営 (イメージ) 重要な修正は共通しており、Oracle JDKとOpenJDK LTSを近づけるよう努⼒はされている #kanjava #okajug #jjug #OpenJDKソムリエ
  48. 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⽉より前のアンケートと想定される #kanjava #okajug #jjug #OpenJDKソムリエ
  49. 49. 開発者エコシステムアンケート (グローバル) 『2019年開発者エコシステムの状態インフォグラフィック』 https://www.jetbrains.com/ja-jp/lp/devecosystem-2019/ #kanjava #okajug #jjug #OpenJDKソムリエ
  50. 50. JVM⾔語利⽤者向け簡易アンケート (⽇本) 『 (2019年4⽉時点) JVM⾔語を使う⽅がどのJDK/JVMを使うか︖アンケートと考察まとめ』 https://togetter.com/li/1340853 Q1. 商⽤環境でScala, Kotlin, Clojure, Groovy などのJVM⾔語を使う⽅はJDK/JREは何を利⽤ しますか︖ Q2. 商⽤環境でJVM⾔語を使う⽅はJDK/JVM バージョンとして何をメインで使いますか︖ ︖ #kanjava #okajug #jjug #OpenJDKソムリエ
  51. 51. Java/JVM⾔語利⽤者向けアンケート (⽇本) 『 (2019年7⽉時点) Java/JVM⾔語を商⽤で使っている⽅向けのアンケートと考察まとめ』 https://togetter.com/li/1376545 Q1. 回答者の⽴場 Q2. メインで利⽤するJDKバージョン #kanjava #okajug #jjug #OpenJDKソムリエ Q3. メインで利⽤するJDKの種類 Q4. どこでJDK/JVMを実⾏するか Q5. JDK/JVMの商⽤サポートの必要性
  52. 52. 判断軸 • サポート - アップデート提供期間 - 商⽤サポートの有無 - 関連製品との動作保証 • 使いやすさ - インストーラ (特にWindowsクライアント) - 開発環境 - コンテナ対応 • どこで運⽤するか - サーバー (クラウド, オンプレミス) - クライアント - コンテナ - 組み込み #kanjava #okajug #jjug #OpenJDKソムリエ
  53. 53. [参考] 判断軸によるディストリビューションの⽐較(例) ディストリビューション 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-01 2027-03 2019-09 英語 ︖ 知名度はまだ低い AdoptOpenJDK 2023-09 2022-09 2019-09 ⽇本語︖ △ 利⽤増加中だがTCKが難点 Amazon Corretto 2023-06 2024-08 - - △ 利⽤増加中︖ 最低期間なので、今後延⻑ される可能性は⼤いにありサポート • Oracle JDK/Liberica JDK以外は、基本的にRed Hat主導のOpenJDK LTSに依存 • 商⽤サポートがあるディストリビューションは、そのEOLを記載 • 総じて以前からのディストリビューションが強そうだが、将来は不明 #kanjava #okajug #jjug #OpenJDKソムリエ
  54. 54. [参考] 判断軸によるディストリビューションの⽐較(例) ディストリビューション インストーラ SDKMAN & Scoop コンテナ (Docker) 備考 8 11 Oracle JDK ◎ ○ △ △ Docker Storeのイメージは古い (Oracle Container RegistryもServer JRE 8 のみ) Oracle OpenJDK - - ◎ ○ LTSはないが最新版を利⽤可能 Red Hat OpenJDK ○ ○ - △ Red Hat Container Catalogで利⽤ 再配布⾃由なRed Hat Universal Base Imageに今後注⽬ Azul Zulu △ ◎ ○ ◎ インストーラ・Dockerとも各種環境に注⼒ ZuluFXコミュニティ版にはあまり⼒を⼊れていない SapMachine - ○ ○ ◎ Docker公式イメージもあり (ベースOSはUbuntu) BellSoft Liberica JDK ○ ◎ ○ ○ 現状AlpineのDockerイメージは中途半端 AdoptOpenJDK △ ○ ◎ ◎ IDEバンドルも含めて⼀通り利⽤可能 Amazon Corretto ○ ◎ ○ ○ DockerのベースOSはAmazon Linux2のみ (Alpine対応は保留されている) 使いやすさ • JDK 8のインストーラは、既存のWindow⽤Oracle JRE 8との互換性を基準に評価 • JDK 11のインストーラは、多くのプラットフォームに対応しているかに注⽬ #kanjava #okajug #jjug #OpenJDKソムリエ
  55. 55. [参考] 判断軸によるディストリビューションの⽐較(例) ディストリビューション クラウド オンプレミス クライアント コンテナ 組み込み 備考 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) ○ ○ ◎ ○ IceadTea-Web for Windows バンドル(オプション) Amazon Corretto AWS ○ △ ○ - 8のみOpenJFXバンドルだが Webkit周りで難あり どこで運⽤するか • オンプレミスのサーバ環境は、特にどれでも問題なし (対応プラットフォーム次第) • 既存クライアント環境との互換性を重視する場合は、Oracle JRE 8が妥当か #kanjava #okajug #jjug #OpenJDKソムリエ
  56. 56. コストをどう考えるか • 環境・状況次第で⼤きく変わる (⾃社開発⽤途や個⼈利⽤は無償がほとんど) - Oracle JDK • Oracle Cloud InfrastructureやOracle製品とともに使う場合、多くは追加費⽤なし - Red Hat OpenJDK • RHELやRed Hat Middleware製品とともに使う場合は追加費⽤なし - その他のJDKディストリビューション • 利⽤は無償が多いが、商⽤(技術)サポートは有償 • ITライフサイクルを通じて考える - 調達・購買コストだけではない - 開発〜運⽤時含めトラブル時など対応コストも考慮 - バランスの⾒極めや何かしらのトレードオフは必要 企画・ 設計 調達・ 購買 開発・ 構築 導⼊・ 移⾏ 保守・ 運⽤ ITライフサイクル および継続的改善 #kanjava #okajug #jjug #OpenJDKソムリエ
  57. 57. アジェンダ 1. OpenJDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各OpenJDKディストリビューションの特徴 4. OpenJDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ #kanjava #okajug #jjug #OpenJDKソムリエ
  58. 58. 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を利⽤する (⺠法改正の影響なども考慮) - アプリケーションに応じて適切なプラットフォーム・JDKを検討する #kanjava #okajug #jjug #OpenJDKソムリエ
  59. 59. [参考] JDKディストリビューションの他の選び⽅(例) • 例えば、好きなベンダー(ディストリビューター)のJDKを利⽤する e.g. OpenJDK本体に貢献しているベンダーを応援したい - Oracle JDK/Oracle OpenJDK - Red Hat OpenJDK - SapMachine - BellSoft Liberica JDK - IBM SDK Java Technology Edition - Amazon Corretto • ディストリビューションの応援の仕⽅の例 - まずは使ってみる - 意⾒を伝えたり、フィードバックして改善してみる - Oracle Java SE Desktop Subscription, IBM Runtimes for Java Desktopを個⼈購⼊してみる #kanjava #okajug #jjug #OpenJDKソムリエ
  60. 60. 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 #kanjava #okajug #jjug #OpenJDKソムリエ
  61. 61. コミュニティへの参加 • 勉強会・セミナーへの参加 - 各現場での啓蒙 - 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 #kanjava #okajug #jjug #OpenJDKソムリエ
  62. 62. まとめ • 最適なOpenJDKディストリビューションは環境・状況に応じて異なる - 時代の変化にどれだけ追従していくか • セキュリティやライフサイクルの考慮 • サーバーサイドでの可搬性の確保や、クライアントでのカスタムJREの組み込み - サポートや動作保証をどう捉えるか • 利⽤するミドルウェアやライブラリ、JVM⾔語など • 有償サポートの利⽤有無や、法改正の影響を考慮 - どこで利⽤するか • 開発環境と運⽤環境のJDK種類・バージョンの統⼀ • クラウド、オンプレミス、クライアント、コンテナ、組み込み • Java/JVMコミュニティやエコシステムの重要性 - Oracle JDK/JRE⼀強時代ではなく、個々に判断・選択する必要性 - 求められるのはディストリビューション利⽤者側の意識の変化 - OpenJDKなどのOSSは皆で参加し、育てていくもの #kanjava #okajug #jjug #OpenJDKソムリエ
  63. 63. ご清聴ありがとうございました 本セッションや資料は、Java関連コミュニティの⽅々や関係者各位も含め、 多くの皆様のご協⼒によって⽣まれたものです。改めて感謝を申し上げます。 #kanjava #okajug #jjug #OpenJDKソムリエ

×