Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
失敗しないOpenJDKの非互換調査
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Daishi Tabata
October 27, 2024
Technology
2.4k
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.9k
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
2.4k
Generational ZGCのメモリ運用改善 - その物理メモリ使用量、本当に正しい?
tabatad
1
960
Other Decks in Technology
See All in Technology
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
740
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
0
280
Getting Started with Google Antigravity
glaforge
0
120
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
170
V8のArray.prototype.flatを最大約20倍速くするまでと、巨大OSSへの大規模コミットの道のり
riyaamemiya
0
140
SREでアラート疲れを 解決しよう!
kairim0
1
220
今さら理解するウェブフォントver.2026
takanorip
3
640
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
120
メルペイ 会計システム概要と歴史
mewuto
0
200
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
120
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
370
Essential architectural thinking (revised edition)
ufried
0
110
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
560
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
730
Accessibility Awareness
sabderemane
1
240
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
390
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.3k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
630
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
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