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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Daishi Tabata
October 27, 2024
Technology
2.2k
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
1.8k
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
2.2k
Generational ZGCのメモリ運用改善 - その物理メモリ使用量、本当に正しい?
tabatad
1
870
Other Decks in Technology
See All in Technology
モバイルアプリ開発概論2026
recruitengineers
PRO
5
570
Pavlokで始める電撃駆動開発
sgrsn
0
190
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
200
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.6k
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
260
LanceDB入門
mocobeta
7
390
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
190
関東Kaggler会発表資料
takoi
1
220
TypeScript入門 2026
recruitengineers
PRO
3
570
Goでデータパイプラインを作ろう
sansantech
PRO
1
420
第3回しろおびセキュリティスポンサーセッション
log0417
0
170
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
We Are The Robots
honzajavorek
0
300
Site-Speed That Sticks
csswizardry
13
1.4k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
990
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
480
How GitHub (no longer) Works
holman
316
150k
Leo the Paperboy
mayatellez
8
2.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
460
Darren the Foodie - Storyboard
khoart
PRO
3
3.6k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
640
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
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