OpenJDK コミュニ
ティに参加してみよう
KUBOTA Yuji
@sugarlife
NTT OSSセンタ
JJUG CCC 2016 Spring
Copyright©2016 NTT corp. All Rights Reserved.
2016/05/21	
  
はじめに
•  本セッションでは個人的なコミュニ
ティ活動の経験をベースに「最初の
1歩」を紹介します
•  コーディング方法やバグの解析方法
については今回は話しません
•  質問時間を設ける予定です。気にな
る点があったらぜひ共有して下さい
– セッション後でもいつでもどうぞ!
Copyright©2016 NTT corp. All Rights Reserved. 2
(1日は欲しい)
@sugarlife
#ccc_i62
#jjug
Copyright©2016 NTT corp. All Rights Reserved. 3
OpenJDK ?
•  オープンソースの Java SE 実装
– openjdk.java.net
– GNU GPL, version 2
– Java SE Specification 準拠
– API 仕様のレベルでは Oracle JDK
と完全互換している
•  http://www.oracle.com/technetwork/jp/java/javase/
community/opensourcejdk-jsp-136417-ja.html
Copyright©2016 NTT corp. All Rights Reserved. 4
OpenJDK の流れ
•  JDK 7 が OSS 化 (Sun microsystems)
– OpenJDK 7 から OpenJDK 6 が派生
•  OpenJDK7b20 → OpenJDK6b1
– OpenJDK 8 は OpenJDK 7 から派生
•  OpenJDK 9 は OpenJDK 8 から、以後同様
•  JDK 7からコードベースはOpenJDK 7
– Oracle JDK も OpenJDK も元は同じ
•  https://blogs.oracle.com/darcy/entry/openjdk_6_genealogy
Copyright©2016 NTT corp. All Rights Reserved. 5
使い物になるの?
•  http://www.slideshare.net/hadoopxnttdata/openjdk-
nttdata-oss-day-2015-autumn
Copyright©2016 NTT corp. All Rights Reserved. 6
• バグで困ってるので直したい
– Oracle JDK のバグも直る
• 便利な機能を追加したい
– Oracle JDK にも入る
• 30 億のデバイスで自分のコード
が走るなんて素敵やん?
Copyright©2016 NTT corp. All Rights Reserved. 7
貢献するモチベーション
どうやって?
Copyright©2016 NTT corp. All Rights Reserved. 8
困ったらどこを読む?
•  OpenJDK の Contributing ページ
Copyright©2016 NTT corp. All Rights Reserved. 9
もう少し詳しい内容
最初
困ったらどこを読む?
•  OpenJDK Wiki (Adaptionの項)
Copyright©2016 NTT corp. All Rights Reserved. 10
おわり
Copyright©2016 NTT corp. All Rights Reserved. 11
と思いきや
意外に(?)書かれて
ないことも多い
Copyright©2016 NTT corp. All Rights Reserved. 12
どちらかというと最初の1歩以降が書かれてない
書かれている事もない事も含めてご紹介します
改善案の出し方は?
•  大きく分けて二通りの方法
1. メーリングリスト(ML)にパッチ投稿
• 提案・議論から始めるのもあり
2. JEP として機能提案 (JEP1参照)
•  どうすべきか?
– JEP として出すべきかの判断は
コミュニティに任せる。先ずは
ML にパッチを投稿してみよう
Copyright©2016 NTT corp. All Rights Reserved. 13
誰でも出せるの?
•  Oracle Contributor Agreement に
サインすれば誰でも OK
– 締結していないと受理されない
– PDF を印刷・サイン → メール →
2 週間後ぐらいに返事
– 個人でも可能、企業の場合は雇用
者のサインが必要
– パッチ書いた後でも一応 OK (マージはされない)
Copyright©2016 NTT corp. All Rights Reserved. 14
どこからコードを入手するの?
•  基本的には最新版の JDK に対し
てパッチを書く(今ならJDK9)
– 取り込まれたら過去バージョンに
バックポートされる
•  コード管理リポジトリは以下
– http://hg.openjdk.java.net
– OpenJDK は mercurial (hg) 管理
Copyright©2016 NTT corp. All Rights Reserved. 15
寄り道: OpenJDK のリポジトリ
http://hg.openjdk.java.net/プロジェク
ト名/リポジトリ名/サブリポジトリ名
– プロジェクト名: OpenJDK コミュ
ニティトップページの左側にある
Projects 欄から詳細が読める
– (サブ)リポジトリ名: プロジェクト
毎に異なるが、構造は大体一緒
Copyright©2016 NTT corp. All Rights Reserved. 16※正確には nested mercurial repository
(※)
寄り道: OpenJDK のリポジトリ
http://hg.openjdk.java.net/プロジェク
ト名/リポジトリ名/サブリポジトリ名
– プロジェクト名: OpenJDK コミュ
ニティトップページの左側にある
Projects 欄から詳細が読める
– (サブ)リポジトリ名: プロジェクト
毎に異なるが、構造は大体一緒
Copyright©2016 NTT corp. All Rights Reserved. 17
(※)
※正確には nested mercurial repository
どのプロジェクトを選ぶべきか?
•  51 プロジェクト
– 基本は jdkX (今は jdk9)
• jdkX = GA リリース前の
開発リポジトリ
• jdkXu = Updates
– それ以外はopenjdk.java.net
の Projects を眺めよう
Copyright©2016 NTT corp. All Rights Reserved. 18
どのリポジトリを選ぶべきか?
•  hg clone http://hg.openjdk.java.net/jdk9/XXX/
XXX は以下から選ぶ
– dev: 基本はこれ (開発用リポジトリ)
– jdk9: Master. コードを読むだけならこれ
– hs: GC や Runtime (HotSpotVM) の修正
– hs-comp: JIT compiler 等の修正
– client: AWT, Swing等のクライアントの修正
•  get_source.sh を実行してサブリポジトリ取得
– corba, hotspot, jaxp, jaws, jdk, langtools, nashorn
Copyright©2016 NTT corp. All Rights Reserved. 19※正確には nested mercurial repository と言う
どこにどんなコードがあるの?
•  サブリポジトリごとにコンポーネント分けしている
–  リポジトリ(jdk9)には主にビルドスクリプトが格納
•  common, make ディレクトリに入っている
–  各サブリポジトリには以下のようなコードが格納されている
•  hotspot: GC, Runtime, JIT Compiler 等の JVM 主要機能
•  jdk: JDK API や JDK 付属ツール ( jcmd 等)
•  corba: Common Object Request Broker Architecture
•  jaxp: Java API for XML Processing
•  jaxws: Java API for XML Web Services
•  langtools: javac や jshell といった言語関係ツール
•  nashorn: JavaScript Engine (jdk8から登場)
–  パッチを書いたら作業したリポジトリで diff を取る
•  hg diff -g または hg diff -u または hg export を実行する
•  注:テスト(再現コード)の準備や動作確認も!
Copyright©2016 NTT corp. All Rights Reserved. 20
どこにパッチ投稿すべきか?
•  ML を選んで登録し、投稿する
– http://mail.openjdk.java.net/mailman/listinfo
– プロジェクトやコンポーネントごとにある
Copyright©2016 NTT corp. All Rights Reserved. 21
151個もあった…
どこにパッチ投稿すべきか?
•  ML を選んで登録し、投稿する
– http://mail.openjdk.java.net/mailman/listinfo
– プロジェクトやコンポーネントごとにある
主な例
– core-libs-dev: 基本的なライブラリ
– hotspot-dev: HotSpot VM、Runtime周り
– hotspot-gc-dev: GC周り
– serviceability-dev: jmap や jcmd などのツール
– jdk9-dev: JDK 全体に渡る周知や議論・コミッタ
投票等の場で、個別機能の議論の場ではない
Copyright©2016 NTT corp. All Rights Reserved. 22
メール投稿で注意すべきことは?
Copyright©2016 NTT corp. All Rights Reserved. 23
•  パッチはメール本文に貼り付ける
– 添付ファイルや外部サービスは基本NG
•  パッチが採用されるには以下が必要
1.  JIRA (バグトラッカー)への登録
2.  レビュー(パッチの規模で人数が変動)
3.  リポジトリへのコミット
– これらを手伝ってくれるスポンサーが
必要(対象プロジェクトのコミッタ以上)
メール投稿で注意すべきことは?
Copyright©2016 NTT corp. All Rights Reserved. 24
• 反応がないことはザラ
– 休みだったり見てなかったり
– 1週間も反応がなかったら PING する
• 件名に PING: とか付けて送るだけ
• Could someone review this patch?
• 敬意を忘れない
– Thank you for very much!
役割ってあるの?
•  Author
2件の貢献(Contributed-byに名前が付いたコミット)
JIRA 書き込み権限、コードレビューサーバへのアク
セス権限
•  Committer
8件の貢献 + 投票
Author権限+コミット権限+スポンサー権限
•  Reviewer
32件(推奨40件)の貢献 + 投票
Committer権限+レビュー権限
Copyright©2016 NTT corp. All Rights Reserved. 25
役割ってあるの?
•  Author
2件の貢献(Contributed-byに名前が付いたコミット)
JIRA 書き込み権限、コードレビューサーバへのアク
セス権限
•  Committer
8件の貢献 + 投票
Author+コミット権限+スポンサー権限
•  Reviewer
32件(推奨40件)の貢献 + 投票
Committer権限+レビュー権限
Copyright©2016 NTT corp. All Rights Reserved. 26
役割ってあるの?
•  Author
2件の貢献(Contributed-byに名前が付いたコミット)
JIRA 書き込み権限、コードレビューサーバへのアク
セス権限
•  Committer
8件の貢献 + 投票(MLで推薦→投票→承認)
Author権限+コミット権限+スポンサー権限
•  Reviewer
32件(推奨40件)の貢献 + 投票
Committer権限+レビュー権限
Copyright©2016 NTT corp. All Rights Reserved. 27
ぜひ一緒に
やってみよう!
Copyright©2016 NTT corp. All Rights Reserved. 28
KUBOTA Yuji @sugarlife
• OpenJDK テクニカルサポート
– コア解析からGCチューニング, etc…
– OpenJDK Author (jdk9)
• 解析支援ツール HeapStats 開発
– 多数の商用で元気に稼働中 :)
Copyright©2016 NTT corp. All Rights Reserved. 29
NTT OSSセンタ
•  NTT グループの OSS 活用を支える部隊
*)OSSVERT®:OSs Suites VERified Technically(技術検証済みOSS組合せ)
事業会社
SI会社 
問合せ対応、導
入支援、保守等
技術検証、
導入推進
プロダクト/
ツール類開発
技術者育成、
人材交流
各種
OSS コ
ミュニ
ティ
設計, 開
発, 運用
グループ各社
サポー
トベン
ダ、
NTT
研究所
等お
客
様
サポー
ト連携
開発
連携
①OSSトータル
 サポート
NTT OSSセンタ
②OSS適用推進 
 (OSSVERT®*検証)
③技術開発
 (DBMS,高可用ミドル等)
④ソフトウェア
 基盤技術力向上
Copyright©2016 NTT corp. All Rights Reserved. 30
Q
Copyright©2016 NTT corp. All Rights Reserved. 31

OpenJDK コミュニティに参加してみよう #jjug