More Related Content
More from NTT DATA Technology & Innovation (20)
OpenJDKに初めてパッチを出した話(JJUGナイトセミナー 2020年8月26日 発表資料)
- 1. © 2020 NTT DATA Corporation
OpenJDKに初めてパッチを出した話
2020年8月26日
株式会社NTTデータ 技術開発本部
阪田 浩一
- 2. © 2020 NTT DATA Corporation 2
自己紹介
• 阪田 浩一(さかた -)
• 通称 じゅくちょー
• JVMになりたい人
• NTTデータでJava/OpenJDK + GraalVM
の研究開発とサポート業に従事しています
• Javaチャンピオン
• OpenJDK Author(1週間前に承認)
jyukutyo
- 3. © 2020 NTT DATA Corporation 3
劇的に変化した環境(個人的)
• 転職
• 40年住んだ関西から東京へ
• 職種
• Webアプリ開発運用から研究開発へ
- 4. © 2020 NTT DATA Corporation 4
「OpenJDKに
パッチをガンガン
書いてください」
- 5. © 2020 NTT DATA Corporation 5
もちろん
これをやりたくての
転職でした
- 6. © 2020 NTT DATA Corporation 6
レビュワーの同僚から
パッチを書く元ネタを
もらえました
- 7. © 2020 NTT DATA Corporation 7
パッチの元ネタ
• GCCのバージョンを最新の10にしてOpenJDKをビルドすると
コンパイルの警告が出る
• 警告の検出内容が改善されている
• パッチを書いて警告が出ないようにしよう!
- 8. © 2020 NTT DATA Corporation 8
やることリスト
1. 警告を解消するよう修正する
2. 最新リビジョンで最終確認をする
3. OpenJDKメーリングリストにパッチをメールする
4. パッチのスポンサーを見つけ、リポジトリへプッシュしてもらう
- 9. © 2020 NTT DATA Corporation 9
1. 警告を解消するよう修正する
• 警告の内容を確認(抜粋)
/home/jyukutyo/code/jdk/src/hotspot/share/oops/symbol.hpp:130:18: error:
writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
130 | _body[index] = value;
| ~~~~~~~~~~~~~^~~~~~~
/home/jyukutyo/code/jdk/src/java.base/share/native/libfdlibm/k_standard.c:743:19:
error: 'exc.retval' may be used uninitialized in this function [-Werror=maybe-
uninitialized]
743 | return exc.retval;
| ~~~^~~~~~~
/home/jyukutyo/code/jdk/src/java.base/unix/native/libnet/NetworkInterface.c:974:13:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error:
'__builtin_strncpy' output may be truncated copying 15 bytes from a string of length 15
[-Werror=stringop-truncation]
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 10. © 2020 NTT DATA Corporation 10
1. 警告を解消するよう修正する
• 以下のコードが対象
• symbol.{hpp,cpp}
• k_standard.c
• NetworkInterface.c
- 11. © 2020 NTT DATA Corporation 11
四苦八苦しながら
修正する
(各ファイル数行)
理解の記録:https://www.sakatakoichi.com/entry/2020/06/22/HotSpot_VMのシンボル名に関わるコード
- 12. © 2020 NTT DATA Corporation 12
2. 最新リビジョンで最終確認をする
• 念のため、複数のGCCバージョンでビルドを実行して確認した
• ビルドなので、確認に時間がかかる
- 13. © 2020 NTT DATA Corporation 13
3. メーリングリストにパッチをメールする
どのMLに出す??
- 14. © 2020 NTT DATA Corporation 14
3. メーリングリストにパッチをメールする
• hotspot-runtime-devのMLへパッチをメールする
↓
• 一部をJBSにissue登録してもらえた
• パッチに対するコメントももらえた
- 15. © 2020 NTT DATA Corporation 15
ただ、ここから反応がなく
数週経ってしまう
- 16. © 2020 NTT DATA Corporation 16
3. メーリングリストにパッチをメールする
• 一部をJBSへ登録してもらえた
• パッチに対するコメントももらえた
↓
• 再度メールし、「この課題を進めたいです」と主張してみる
↓
• パッチへのコメントが再開
• 最終的にレビューまで進んだ!
- 17. © 2020 NTT DATA Corporation 17
参考: MLへの英語メール
• 文章表現がとても難しく感じた
• ビジネスメールでもない
• プライベートでもない
• メールなのでGitHubでやり取りするときの感じだと簡素すぎ!?
• 数行の英語メールを書くのにものすごく時間がかかる
• Google翻訳で英語を書き、和訳が変でないかを確認する
• (日本語を英語にするのではなく、逆にする)
- 18. © 2020 NTT DATA Corporation 18
主要開発者の方
からも長文の
コメントをもらえた
- 19. © 2020 NTT DATA Corporation 19
1. スポンサーを見つけ、リポジトリへプッシュしてもらう
• パッチへのコメントから最終的にレビューまで進んだ!
↓
• レビュー者にスポンサーとしてリポジトリにプッシュしてもらえた
- 20. © 2020 NTT DATA Corporation 20
ついに僕も
JVMの一部に…!
- 21. © 2020 NTT DATA Corporation 21
めでたしめでたし
(ん!?待てよ)
- 22. © 2020 NTT DATA Corporation 22
3. メーリングリストにパッチをメールする
• hotspot-runtime-devのMLへパッチをメールする
↓
• 一部をJBSへ登録してもらえた
- 23. © 2020 NTT DATA Corporation 23
パッチの残りの部分を
新たに進めなくては!
- 24. © 2020 NTT DATA Corporation 24
私のやること
3. メーリングリストにパッチをメールする
• 別のML(core-libs-dev)に
パッチの残りの部分をメールする
4. スポンサーを見つける
5. スポンサーにパッチを適用し、リポジトリへプッシュしてもらう
- 25. © 2020 NTT DATA Corporation 25
3. メーリングリストにパッチをメールする
• 別のML(core-libs-dev)にパッチの残りの部分をメールする
↓
• 残りの中のさらに一部をレビューしてもらえた
• 最後の1ファイルは長年更新がなく、レビューできる人が
簡単に見つからない
↓
• コード修正ではない解決方法を模索し、提案をメールする
• ビルドでその警告を無視する設定など
- 26. © 2020 NTT DATA Corporation 26
3. メーリングリストにパッチをメールする
• しばらくやり取りしていると、
ここをレビューできる方からメールがあり
(つまりOpenJDK主要開発者からのメール) 、
レビューOKをもらえた!
• 同僚(OpenJDKレビュワー)のレビューも加えて、
そのままスポンサーになってもらう
- 27. © 2020 NTT DATA Corporation 27
4. スポンサーを見つける/パッチを適用してプッシュしてもらう
• リポジトリにプッシュしてもらえた
- 28. © 2020 NTT DATA Corporation 28
図解
最初に作ったパッチ
パッチ1
HotSpot系
(Symbol)
パッチ2
core-libs系
レビュー1
NetworkInterface
レビュー2
k_standard
- 29. © 2020 NTT DATA Corporation 29
まとめ
• OpenJDKへのパッチは、ひるまず自分から動いていこう!
• 規模が大きいだけに、パッチを出して終わりではない
• その分プッシュされたときの喜びもひとしお
• Project SkaraでOpenJDKがGitHubベースになっても、
この作業内容は変わらないはず
- 30. © 2020 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です