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

31
OpenJDK コミュニ ティに参加してみよう KUBOTA Yuji @sugarlife NTT OSSセンタ JJUG CCC 2016 Spring Copyright©2016 NTT corp. All Rights Reserved. 2016/05/21

Upload: yuji-kubota

Post on 23-Jan-2018

4.314 views

Category:

Technology


0 download

TRANSCRIPT

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

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

KUBOTA Yuji @sugarlife

NTT OSSセンタ

JJUG CCC 2016 Spring

Copyright©2016 NTT corp. All Rights Reserved.2016/05/21  

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

はじめに•  本セッションでは個人的なコミュニ

ティ活動の経験をベースに「最初の1歩」を紹介します

•  コーディング方法やバグの解析方法については今回は話しません

•  質問時間を設ける予定です。気になる点があったらぜひ共有して下さい – セッション後でもいつでもどうぞ!

Copyright©2016 NTT corp. All Rights Reserved. 2

(1日は欲しい)

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

@sugarlife#ccc_i62

#jjug Copyright©2016 NTT corp. All Rights Reserved. 3

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

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

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

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

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

使い物になるの?

•  http://www.slideshare.net/hadoopxnttdata/openjdk-nttdata-oss-day-2015-autumn

Copyright©2016 NTT corp. All Rights Reserved. 6

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

• バグで困ってるので直したい – Oracle JDK のバグも直る

• 便利な機能を追加したい – Oracle JDK にも入る

• 30 億のデバイスで自分のコードが走るなんて素敵やん?

Copyright©2016 NTT corp. All Rights Reserved. 7

貢献するモチベーション

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

どうやって?

Copyright©2016 NTT corp. All Rights Reserved. 8

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

困ったらどこを読む?• OpenJDK の Contributing ページ

Copyright©2016 NTT corp. All Rights Reserved. 9もう少し詳しい内容

最初

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

困ったらどこを読む?• OpenJDK Wiki (Adaptionの項)

Copyright©2016 NTT corp. All Rights Reserved. 10

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

おわり

Copyright©2016 NTT corp. All Rights Reserved. 11

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

と思いきや 意外に(?)書かれて

ないことも多い

Copyright©2016 NTT corp. All Rights Reserved. 12

どちらかというと最初の1歩以降が書かれてない

書かれている事もない事も含めてご紹介します

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

改善案の出し方は?•  大きく分けて二通りの方法

1. メーリングリスト(ML)にパッチ投稿 • 提案・議論から始めるのもあり

2. JEP として機能提案 (JEP1参照) •  どうすべきか?

– JEP として出すべきかの判断は コミュニティに任せる。先ずは ML にパッチを投稿してみよう

Copyright©2016 NTT corp. All Rights Reserved. 13

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

誰でも出せるの?• Oracle Contributor Agreement に

サインすれば誰でも OK – 締結していないと受理されない – PDF を印刷・サイン → メール →

2 週間後ぐらいに返事 – 個人でも可能、企業の場合は雇用者のサインが必要

– パッチ書いた後でも一応 OK (マージはされない) Copyright©2016 NTT corp. All Rights Reserved. 14

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

どこからコードを入手するの?

• 基本的には最新版の JDK に対してパッチを書く(今ならJDK9) – 取り込まれたら過去バージョンにバックポートされる

• コード管理リポジトリは以下 – http://hg.openjdk.java.net – OpenJDK は mercurial (hg) 管理

Copyright©2016 NTT corp. All Rights Reserved. 15

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

寄り道: OpenJDK のリポジトリ

http://hg.openjdk.java.net/プロジェクト名/リポジトリ名/サブリポジトリ名

– プロジェクト名: OpenJDK コミュニティトップページの左側にある Projects 欄から詳細が読める

– (サブ)リポジトリ名: プロジェクト毎に異なるが、構造は大体一緒

Copyright©2016 NTT corp. All Rights Reserved. 16※正確には nested mercurial repository

(※)

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

寄り道: OpenJDK のリポジトリ

http://hg.openjdk.java.net/プロジェクト名/リポジトリ名/サブリポジトリ名

– プロジェクト名: OpenJDK コミュニティトップページの左側にある Projects 欄から詳細が読める

– (サブ)リポジトリ名: プロジェクト毎に異なるが、構造は大体一緒

Copyright©2016 NTT corp. All Rights Reserved. 17

(※)

※正確には nested mercurial repository

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

どのプロジェクトを選ぶべきか?

• 51 プロジェクト – 基本は jdkX (今は jdk9)

• jdkX = GA リリース前の開発リポジトリ

• jdkXu = Updates – それ以外はopenjdk.java.net

の Projects を眺めよう

Copyright©2016 NTT corp. All Rights Reserved. 18

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

どのリポジトリを選ぶべきか?•  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 と言う

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

どこにどんなコードがあるの?•  サブリポジトリごとにコンポーネント分けしている

–  リポジトリ(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

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

どこにパッチ投稿すべきか?•  ML を選んで登録し、投稿する

– http://mail.openjdk.java.net/mailman/listinfo – プロジェクトやコンポーネントごとにある

Copyright©2016 NTT corp. All Rights Reserved. 21

151個もあった…

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

どこにパッチ投稿すべきか?•  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

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

メール投稿で注意すべきことは?

Copyright©2016 NTT corp. All Rights Reserved. 23

•  パッチはメール本文に貼り付ける – 添付ファイルや外部サービスは基本NG

•  パッチが採用されるには以下が必要 1.  JIRA (バグトラッカー)への登録 2. レビュー(パッチの規模で人数が変動) 3. リポジトリへのコミット – これらを手伝ってくれるスポンサーが

必要(対象プロジェクトのコミッタ以上)

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

メール投稿で注意すべきことは?

Copyright©2016 NTT corp. All Rights Reserved. 24

• 反応がないことはザラ – 休みだったり見てなかったり – 1週間も反応がなかったら PING する

• 件名に PING: とか付けて送るだけ • Could someone review this patch?

• 敬意を忘れない – Thank you for very much!

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

役割ってあるの?•  Author

2件の貢献(Contributed-byに名前が付いたコミット) JIRA 書き込み権限、コードレビューサーバへのアクセス権限

•  Committer 8件の貢献 + 投票 Author権限+コミット権限+スポンサー権限

•  Reviewer 32件(推奨40件)の貢献 + 投票 Committer権限+レビュー権限

Copyright©2016 NTT corp. All Rights Reserved. 25

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

役割ってあるの?•  Author

2件の貢献(Contributed-byに名前が付いたコミット) JIRA 書き込み権限、コードレビューサーバへのアクセス権限

•  Committer 8件の貢献 + 投票 Author+コミット権限+スポンサー権限

•  Reviewer 32件(推奨40件)の貢献 + 投票 Committer権限+レビュー権限

Copyright©2016 NTT corp. All Rights Reserved. 26

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

役割ってあるの?•  Author

2件の貢献(Contributed-byに名前が付いたコミット) JIRA 書き込み権限、コードレビューサーバへのアクセス権限

•  Committer 8件の貢献 + 投票(MLで推薦→投票→承認) Author権限+コミット権限+スポンサー権限

•  Reviewer 32件(推奨40件)の貢献 + 投票 Committer権限+レビュー権限

Copyright©2016 NTT corp. All Rights Reserved. 27

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

ぜひ一緒に やってみよう!

Copyright©2016 NTT corp. All Rights Reserved. 28

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

KUBOTA Yuji @sugarlife

• OpenJDK テクニカルサポート – コア解析からGCチューニング, etc… – OpenJDK Author (jdk9)

• 解析支援ツール HeapStats 開発 – 多数の商用で元気に稼働中 :)

Copyright©2016 NTT corp. All Rights Reserved. 29

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

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

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

Q

Copyright©2016 NTT corp. All Rights Reserved. 31