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
Daishi Tabata
October 27, 2024
Technology
2.3k
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.3k
Generational ZGCのメモリ運用改善 - その物理メモリ使用量、本当に正しい?
tabatad
1
910
Other Decks in Technology
See All in Technology
Issue 駆動でスペシャリストの意図を届ける、AI 実装のアクセシビリティ向上
thkt
0
110
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
2
2.1k
空間オーディオで過去の 自分(ゴースト)と競うランニング 〜HealthKitのルートを足音に変える実装〜
nao_randd
0
220
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
740
2026/09/10 Spring Bootから Jakarta EE/MicroProfileへの移行
megascus
0
370
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
900
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
3
3k
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
160
ユーザー価値を届け続けるためにウォンテッドリーが大切にしている文化
kotaminato
0
160
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
23
15k
beyond jj: config & tools ecosystem
indirect
0
440
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
55
13k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
Joys of Absence: A Defence of Solitary Play
codingconduct
1
520
The untapped power of vector embeddings
frankvandijk
2
1.9k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
We Have a Design System, Now What?
morganepeng
55
8.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
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