Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
失敗しないOpenJDKの非互換調査
Search
Daishi Tabata
October 27, 2024
Technology
2.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
失敗しないOpenJDKの非互換調査
JJUG CCC 2024 Fall
Daishi Tabata
October 27, 2024
More Decks by Daishi Tabata
See All by Daishi Tabata
JEP 522 Deep Dive - G1 GC同期コスト削減によるスループット向上を徹底検証&解説
tabatad
1
870
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
2.1k
Generational ZGCのメモリ運用改善 - その物理メモリ使用量、本当に正しい?
tabatad
1
820
Other Decks in Technology
See All in Technology
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
360
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
270
探して_入れて_作って_使う_Agent_Skills___LT.pdf
peintangos
2
160
React、まだ楽しくて草
uhyo
7
4.1k
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
140
チームで実践する AI-DLC 思考の軌跡を残すチェックポイント設計
belongadmin
0
2.7k
Mastering Ruby Box
tagomoris
3
150
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
8
300
AIガバナンス実践 - 生成AIコネクタのデータ漏洩リスクと実務対策
knishioka
0
190
GoとSIMDとWasmの今。
askua
3
510
そのPoC、何を検証したつもりでしたか? AIプロダクトの価値検証で陥った落とし穴
techtekt
PRO
0
150
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
230
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
580
Done Done
chrislema
186
16k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
200
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
770
How to Ace a Technical Interview
jacobian
281
24k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
600
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
エンジニアに許された特別な時間の終わり
watany
107
250k
Balancing Empowerment & Direction
lara
6
1.1k
Transcript
失敗しない OpenJDKの非互換調査 2024/10/27 田端 大志 © 2024 Fujitsu Limited JJUG
CCC 2024 Fall @tbtdis
Javaバージョンアップ時の行動 Javaの互換性 CSR Groupの活動 CSRを用いた非互換調査 アジェンダ
© 2024 Fujitsu Limited •アプリケーションサーバー製品の開発・保守 •OpenJDK関連のコミュニティ活動 自己紹介 3 JJUG初登壇よろしくお願いします! 富士通株式会社
社会人2年目 田端 大志 (Tabata, Daishi) •近況 •GeoGuessrにドハマり中 •河村選手の大活躍をみてNBAに興味あり
Javaバージョンアップ時の行動 Javaの互換性 CSR Groupの活動 CSRを用いた非互換調査 アジェンダ
© 2024 Fujitsu Limited Javaバージョンアップ時の行動 5 ドキュメント調査 リリースノートや移行ガイドなどを読む 依存ライブラリの調査 新しいJavaにライブラリが対応しているか
プログラムの修正 非互換対応、および新機能を使ったソースに変更 各種テストの実行 新しいJavaでにアプリが期待通りに動作するか
© 2024 Fujitsu Limited Javaバージョンアップ時の行動 6 ドキュメント調査 リリースノートや移行ガイドなどを読む 依存ライブラリの調査 新しいJavaにライブラリが対応しているか
プログラムの修正 非互換対応、および新機能を使ったソースに変更 各種テストの実行 新しいJavaでにアプリが期待通りに動作するか
© 2024 Fujitsu Limited ドキュメント調査 各ベンダーが自分たちの方針で 発行しているドキュメント 7 ✓非推奨化された機能 ✓削除された機能
✓追加された機能 ✓バグ修正 ✓セキュリティの改善 リリースノート 移行ガイド ※名前はベンダーによる
© 2024 Fujitsu Limited ドキュメント調査 各ベンダーが自分たちの方針で 発行しているドキュメント OpenJDKの変更が網羅的に記載されていない可能性 8 ✓非推奨化された機能
✓削除された機能 ✓追加された機能 ✓バグ修正 ✓セキュリティの改善 リリースノート 移行ガイド ※名前はベンダーによる
© 2024 Fujitsu Limited 失敗例 9 ベンダー JDK 17 ドキュメント方針:機能の削除、追加のみ記載
Thread.stop() アプリ 自社 JDK17からJDK21に移行 提供 JDK 21
© 2024 Fujitsu Limited 失敗例 10 ベンダー JDK 17 ドキュメント方針:機能の削除、追加のみ記載
Thread.stop() アプリ 自社 JDK17からJDK21に移行 常にExceptionをスロー (OpenJDK20~) 提供 ベンダー発行のドキュメントを 読むだけでは気づけない JDK 21
Javaバージョンアップ時の行動 Javaの互換性 CSR Groupの活動 CSRを用いた非互換調査 アジェンダ
© 2024 Fujitsu Limited 互換性分類 12 ベンダー互換性 バージョン間互換性 本日のテーマ はこちら
OracleJDK、Temurin、・・・ JDK11、JDK17、JDK21、・・・ プラットフォーム互換性 Windows、Linux、Android、・・・ 互換性
© 2024 Fujitsu Limited Javaの「互換性」の定義 参考 https://wiki.openjdk.org/display/csr/Kinds+of+Compatibility 13 ソース互換(Source Compatibility)
バイナリ互換(Binary Compatibility) ふるまい互換(Behavioral Compatibility) Javaはほかのプログラミング言語と比較して バージョン間の互換性維持を非常に重要視 しかし、非互換がまったくないわけではない 互換性 定義 非互換を厳密に管理している
© 2024 Fujitsu Limited ⚫Javaソースがクラスファイルに変換される過程の互換性 ① 既存のコードはコンパイルできること ② 1が満たし、クラスファイル内のすべてのバイナリ名が同じであること ③
2が満たさない場合、クラスファイルのふるまいは同じであること ソース互換(Source Compatibility) public double foo(double d) { return d * 2.0; } foo(4)を呼び出す 旧版:foo(double) ⇒ return 8.0 新版:foo(int) ⇒ return 8.0 バイナリ名が異なる = 2を満たさない 呼び出し結果は同じ = 3を満たす // New overloading public double foo(int i) { return i * 2.0; } 新バージョンで追加 14 互換なし
© 2024 Fujitsu Limited ⚫Javaソースがクラスファイルに変換される過程の互換性 ① 既存のコードはコンパイルできること ② 1が満たし、クラスファイル内のすべてのバイナリ名が同じであること ③
2が満たさない場合、クラスファイルのふるまいは同じであること ソース互換(Source Compatibility) public double foo(double d) { return d * 2.0; } // New overloading public double foo(int i) { return i * 2.0 4.0; } 新バージョンで追加 foo(4)を呼び出す 旧版:foo(double) ⇒ return 8.0 新版:foo(int) ⇒ return 16.0 バイナリ名が異なる = 2を満たさない 呼び出し結果が異なる= 3を満たさない 15 互換なし
© 2024 Fujitsu Limited •既存のバイナリがエラーなくリンクできること •Java言語仕様で定義されている(JLS Chapter 13) バイナリ互換(Binary Compatibility)
Compiler.enable(); JDK21で削除されるAPI JDK17のjavacでコンパイル X.class JDK17のjavaで実行 ⇒ OK JDK21のjavaで実行 ⇒ NG java.lang.NoClassDefFoundError: java/lang/Compiler 16 既存のバイナリ 互換なし
© 2024 Fujitsu Limited •同じ入力であれば同じ結果になること ふるまい互換(Behavioral Compatibility) public int bar(int
i) { return i * 2; } 新バージョンで変更 public int bar(int i) { return i * 4; } bar(4)を呼び出す 旧版:foo(int) ⇒ return 8 新版:foo(int) ⇒ return 16 同じ入力で異なる結果 = ふるまい互換を満たさない 17 互換なし
© 2024 Fujitsu Limited •同じ入力であれば同じ結果になること •スレッドAとスレッドBのどちらが先に終了するか判定 ふるまい互換(Behavioral Compatibility) タイミングに依存する"ふるまい"はふるまい互換の対象外 スレッドA
スレッドB スレッドA スレッドB 先 先 後 後 旧バージョン 新バージョン 18
© 2024 Fujitsu Limited 3つの互換性のいずれか、または複数を満たさない Javaの非互換管理方法 19 非互換 Q. 非互換を取り込むことをだれが承認している?
A. CSR Group 判断基準 判断できたとしてもなんでも取り込んでも良いわけではない
Javaバージョンアップ時の行動 Javaの互換性 CSR Groupの活動 CSRを用いた非互換調査 アジェンダ
© 2024 Fujitsu Limited •CSR = Compatibility and Specification Review
直訳:互換性と仕様のレビュー •JDK Release Projectに提案されたJDKとJDKユーザ間の インターフェースの変更をレビューする権限をもつ組織 ※インターフェース = API、JDKツール、ログ形式など •構成員 •Lead:Joe Darcy “Java Floating-Point Czar”「Java浮動小数点の皇帝」 •Member:6名(ほぼ全員が他プロジェクトのリードレベル) CSR Groupとは 21 参考 https://openjdk.org/census#csr https://inside.java/u/JoeDarcy
© 2024 Fujitsu Limited •十分な理由がない限り、バイナリ非互換を発生させない •ソース非互換は避ける •ふるまい非互換はマネジメントする CSRの互換性ポリシー 22 ポリシーの下でレビューを実施することでバランス保っている
イノベーション 互換性の維持
Javaバージョンアップ時の行動 Javaの互換性 CSR Groupの活動 CSRを用いた非互換調査 アジェンダ
© 2024 Fujitsu Limited 失敗例 24 ベンダー JDK 17 ドキュメント方針:機能の削除、追加、非推奨化のみ記載
Thread.stop() アプリ 自社 JDK17からJDK21に移行 常にExceptionをスロー (OpenJDK20~) 提供 ベンダー発行のドキュメントを 読むだけでは気づけない JDK 21
© 2024 Fujitsu Limited 失敗例 25 ベンダー JDK 17 ドキュメント方針:機能の削除、追加、非推奨化のみ記載
Thread.stop() アプリ 自社 JDK17からJDK21に移行 常にExceptionをスロー (OpenJDK20~) 提供 ベンダー発行のドキュメントを 読むだけでは気づけない JDK 21 失敗しないために どうすればいい?
© 2024 Fujitsu Limited •CSR Groupが変更をレビューするときに使うドキュメント •JDK Bug Systemで管理されている CSRドキュメント
26 限りある工数のなかですべてを読むことはできない 自分たちのアプリに影響がありそうなものを優先して確認したい ベンダーの主観なく網羅的に調査することができる 各バージョン間で100件以上と件数が多い 例:JDK17 → JDK21で634件
© 2024 Fujitsu Limited デモ 27 実際のCSRドキュメントを見ながら 優先度決めの考え方をご紹介します https://bugs.openjdk.org/secure/Dashboard.jspa
サマリ OpenJDKはCSR Groupによる互換審議プロセスによって イノベーションと互換性維持のバランスを保っている ベンダー発行のドキュメントにはバイアスがかかっている可能性 フラットな視点で非互換調査をするにはCSRドキュメントが有効 CSRドキュメントは数が多くすべてを読むことは困難 JDK Bug Systemの検索機能を活用して優先度をつける
© 2024 Fujitsu Limited © 2024 Fujitsu Limited Thank you