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 何を選ぶ?どう選ぶ? (v1.2) in 熊本

14,199 views

Published on

11/1に熊本Java勉強会での「これからのJDK 何を選ぶ?どう選ぶ?」セッション資料です。

Published in: Technology
  • Login to see the comments

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

  1. 1. これからのJDK 何を選ぶ︖どう選ぶ︖ - How to choose the best OpenJDK distribution – v1.2 Takahiro YAMADA 2019-11-01
  2. 2. ⾃⼰紹介 • CTCテクノロジー所属: マルチベンダーのミドルウェア技術サポート - Oracle Fusion Middleware - Red Hat JBoss Middleware - その他 Java を⼀部利⽤するミドルウェア製品 • コミュニティ - Twitter: @yamadamn - 元: Oracle ACE (Middleware) - 現在: ⽇本GlassFishユーザー会 監事 - 本⽇: OpenJDK警察 OpenJDKソムリエ 2
  3. 3. 免責事項 • Oracle と Java は、Oracle Corporation およびその⼦会社・関連会社 の⽶国およびその他の国における登録商標です。⽂中の社名・商品名 などは、各社の商標または登録商標である場合があります。 • 発表する内容は個⼈の⾒解であり、所属する組織や団体の公式な⾒解 ではありません。 • 本資料に記載している内容は2019年10⽉末時点の情報に基づきます。 ※2019年7⽉に開催した『これからのJDK 何を選ぶ︖どう選ぶ︖』のセッション https://togetter.com/li/1373467 をベースとして、修正を加えています。 3
  4. 4. 本⽇メインで紹介するJDK • Oracle JDK • Oracle OpenJDK • Red Hat OpenJDK • Azul Zulu • SapMachine • BellSoft Liberica JDK • AdoptOpenJDK with HotSpot • Amazon Corretto 4
  5. 5. その前に: JavaとかJDKって何だっけ︖ 『JDK、Oracle JDK、OpenJDK、Java SEってなに︖』by @kis さん 5
  6. 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. 7. アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 7
  8. 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. 9. ⽇本各地の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
  10. 10. アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 10
  11. 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. 12. 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. 13. 時代の変化 進化への追従 セキュリティ対応 の重要性 クラウドやコンテナ 環境の台頭 13
  14. 14. 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
  15. 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. 16. 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
  17. 17. 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
  18. 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. 19. OpenJDKを中⼼として各JDKが競う時代に ソースコード 複数のディストリビューター JDKディストリビューション• 商⽤機能を寄贈 • その他固有機能を削除/OSS化 コミュニティ・プロジェクト 19
  20. 20. 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
  21. 21. アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 21
  22. 22. マルチベンダーによる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
  23. 23. マルチベンダーによる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
  24. 24. マルチベンダーによる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
  25. 25. マルチベンダーによる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
  26. 26. マルチベンダーによる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
  27. 27. マルチベンダーによる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
  28. 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. 29. 改元対応でのバックポート例 [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
  30. 30. 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
  31. 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. 32. [参考] 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
  33. 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. 34. [参考] 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
  35. 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. 36. アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 36
  37. 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. 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. 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. 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. 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. 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. 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. 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. 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. 46. その他注⽬しておきたい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
  47. 47. アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 47
  48. 48. Oracle JDK陣営とRed Hat主導のOpenJDK LTS陣営 (イメージ) 重要な修正は共通しており、Oracle JDKとOpenJDK LTSを近づけるよう努⼒はされている 48
  49. 49. 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
  50. 50. 開発者エコシステムアンケート (グローバル) 『2019年開発者エコシステムの状態インフォグラフィック』 https://www.jetbrains.com/ja-jp/lp/devecosystem-2019/ 50
  51. 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. 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. 53. 判断軸 • サポート - アップデート提供期間 - 商⽤(技術)サポートの度合い - 関連製品との動作保証 • 使いやすさ - インストーラ (特にWindowsクライアント) - 開発環境 - コンテナ対応 - 知名度 • どこで運⽤するか - サーバー (クラウド, オンプレミス) - クライアント - コンテナ - 組み込み 53
  54. 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. 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. 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. 57. コストをどう考えるか • 環境・状況次第で⼤きく変わる (⾃社開発⽤途や個⼈利⽤は無償がほとんど) - Oracle JDK • Oracle Cloud Infrastructure(OCI)やOracle製品で使う場合、基本的には追加費⽤なし - Red Hat OpenJDK • RHEL/UBIやRed Hat Middleware製品とともに使う場合は追加費⽤なし - その他のJDK • 利⽤は無償が多いが、商⽤(技術)サポートは有償 • ITライフサイクルを通じて考える - 調達・購買コストだけではない - 開発〜運⽤時含めトラブル時など対応コストも考慮 - バランスの⾒極めや何かしらのトレードオフは必要 企画・ 設計 調達・ 購買 開発・ 構築 導⼊・ 移⾏ 保守・ 運⽤ ITライフサイクル および継続的改善 57
  58. 58. OpenJDKソムリエ的 JDKオススメMap(超主観) サーバーサイド クライアントサイド 無 償 ア Ý プ デ Þ ト 有 償 サ ポ Þ ト 58
  59. 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. 60. [補⾜] そういえばJava EEってどうなったんだっけ︖ • Eclipse Foundationに移管され、Jakarta EE 8がリリース • 今後「javax」ネームスペースは「jakarta」に変更予定 - Sunから引き継いだ商標や契約に基づくため仕⽅なし • javax.* パッケージは第三者が拡張することを許容されていない • Servlet/JSP APIを含むため、TomcatやSpring Frameworkにも影響あり - 略称もOracleが商標を持つものが多いため変更 60
  61. 61. アジェンダ 1. JDKディストリビューションが出てきた背景 2. 誰がOpenJDKを作っているか 3. 各JDKディストリビューションの特徴 4. JDKディストリビューションの選び⽅ 5. OpenJDKの⽀え⽅ 61
  62. 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. 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. 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. 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. 66. まとめ • 最適なJDKは環境・状況に応じて異なる - 時代の変化にどれだけ追従していくか • セキュリティやライフサイクルの考慮 • サーバーサイドでの可搬性の確保や、クライアントでのカスタムJREの組み込み - サポートや動作保証をどう捉えるか • 利⽤するミドルウェアやライブラリ、JVM⾔語など • 商⽤サポートの利⽤や、法改正の影響を考慮 - どこで利⽤するか • 開発環境と運⽤環境のJDK種類・バージョンの統⼀ • クラウド、オンプレミス、クライアント、コンテナ、組み込み • Java/JVMコミュニティやエコシステムの重要性 - Oracle JDK/JRE⼀強時代ではなく、個々に判断・選択する必要性 - 求められるのはJDK利⽤者側の意識の変化 - OpenJDKなどのOSSは皆で参加し、育てていくもの 66
  67. 67. ご清聴ありがとうございました 本セッションや資料は、Java関連コミュニティの⽅々や関係者各位も含め、 多くの皆様のご協⼒によって⽣まれたものです。改めて感謝を申し上げます。 67

×