kagamihogeの日記

kagamihogeの日記です。

JEP 1: JDK Enhancement-Proposal & Roadmap Processをテキトーに訳した

http://openjdk.java.net/jeps/1 のテキトーな訳。

そもそもJEPとか良く知らんし~というわけで、JEPについてあーだこーだ書いてあるJEP 1を読むことにした。

JEP 1: JDK機能拡張提案とロードマップのプロセス JDK Enhancement-Proposal & Roadmap Process

作者:Mark Reinhold
組織:Oracle
作成日:2011/6/23
更新日:2012/12/4
タイプ:Process
状態:Active
Discussion:openjdk.java.netに関する議論

要約 Summary

このドキュメントは、JDKの機能拡張提案結果の記録・収集・レビュー・ソート・記録のためのプロセスおよび、プロセスとインフラ改善のような関連する取り組みを定義します。

目的 Goals

このプロセスの第一目的は、長期的なRoadmap for JDK Release Projectsと関連する取り組みとしての役割を果たす、定期更新される提案リストを提示することです。このRoadmapは、相当複雑な提案が調査・定義・実装されるのに十分な時間を許容するために、将来に向けて少なくとも三年は延長すべきです。

このプロセスの第二目的は、すべての利害関係者が検索・参照・コメントまたは貢献できるような機能拡張提案のセントラル・アーカイブと、統一形式を定義することです。提案ドキュメントは、進捗の結果として発展していき、最終的に完成した提案は権威として機能します。変更された内容と理由の記録となりますが、必ずしも自己完結するとは限りません。

このプロセスはすべてのOpenJDK Committerにオープンです。仕様提案に関する決定は透明性のある方法で作られますが、最終的にはOpenJDK Leadの責任となります。

このプロセスはJava Community Processを置き換えるものではありません。JCPは引き続きすべての標準Java SE APIと関連インタフェースの本体を管理します。もしこのプロセスで承認される提案が、既存の標準インタフェースを変更したり新インタフェースの定義をする予定の場合、既存JSRのMaintenance Reviewもしくは新JSRのコンテキストの一部のどちらかとして、JCPで平行して設計・レビュー・変更の承認に取り組まなければなりません。

概要 Overview

機能拡張(enhancement)とは、JDKコードベースに対する重要な変更を実装または設計すること、もしくは、広く周知する価値のある結果・進捗・目的に対するその他の作業、のことです。JDK Enhancement Proposal(以下、"JEP")は、以下の基準のうち少なくとも一つを満たす起草をすべきです。

  • 二週間以上の技術的努力を要する。
  • JDK・プロセス・開発インフラに対する重要な変更。
  • 開発者もしくは使用者(customers)の高い要望の声。

JDK Roadmapとは、OpenJDK Leadによる現在と将来のJDK Release Projectsの候補として受理されたJEPのリストです。The JEPs in the Roadmapは、他のJEPとの依存性と提案日があれば、それらに従って順序付けがされます。

Roadmapにおける個々のJEPは技術的観点からの記録提案でしかありません。誰かしらがそれに取り組む保証は無く、ましてや任意のJDK Release Projectにおいて結果が出る保証はありません。

この点について、どのJEPに誰が取り組むかを決めるため、しばしば個々のCommittersの雇用組織で協議の上、決定されます。

また、十分なCommittersと他のContributorsが、funded*1とみなされる、JEPの完成に要求される全作業終了に署名したかどうかを、Group Leads, Area Leads, OpenJDK Leadが確認することに依存します。この全作業の内訳は設計と実装だけではなく、必要に応じて、QAテスト、TCKテスト、ドキュメンテーション、その他必要とされる活動、となります。

もしJEPがJDKに統合される機能を定義する場合、一度fundedになったら、OpenJDK LeadによるJDK Release Projectの策定対象になることが出来ます。

意志決定と合意形成 Making decisions and building consensus

OpenJDK Leadは、Roadmap内にJEPを受け入れることを最終的に決定します。JDKはしかし、非常に巨大で複雑なシステムであり、誰にも全領域とコンポーネントの達人レベルの詳細で完全なる理解を望むことは出来ません。OpenJDK Leadは、それゆえ、Reviewers, Group Leads, Area Leadsが提案評価時に実証した専門知識を頼りにします。

NOTE:“Area Lead”は提案されるOpenJDK Community Bylawsで定義される用語ではありません。Area Leadsはグループ横断的に(cross-Group)専門知識と責任を有するOpenJDK Membersです。彼らはOpenJDK Leadによって非公式に任命されます。

成功するJEPの背後には沢山の作業があり、GroupもしくはArea Leadsからの支持とReviewersにレビューをもらうための説得による、提案の合意形成が不可欠です。

このプロセスは目的に達するために任意の特定の方法を強制しません。予想されることとしては、一般的な新提案は非公式に検討されたアイデアとして出発し、特定グループ内でブラッシュアップされ、追加レビューとコメントでJEPドラフトを作成し、Group’s Leadと関連するArea Leadによって承認され、OpenJDK Leadに受け入れを申し込みます。この方法に沿った議論は通常e-mailで行われますが、レビュー・ミーティング(review meetings)は特定の大規模提案か論争中の提案のために行われます。そのようなミーティング結果はいずれも記録のためにJEPの議論リストに報告されるべきです。

GroupもしくはArea LeadによるJEPの承認は、かなり強力な表明(reasonably strong statement)を意味します。これは、“私はこのJEPがfundedされるべきだと主張します(I will argue that this JEP should be funded.)”という表明と同等だと考えられるべきでしょう。

ReviewerのJEPレビュー時もしくはGroup or Area LeadのJEP承認時には、JEP自身にファクトが記録されます。そのGroupでRoadmapにするためのGroupLeadに承認されたJEPのリスト、同様に、そのAreaでRoadmapにするためのArea Leadに承認されたJEPのリスト、が考えられます*2

奇抜なアイデア Wacky ideas

このプロセスは、創意工夫(outside-the-box)、奇抜なアイデアにも等しく、積極的に開かれています。そうしたアイデアはしばしば、JDKの機能拡張として提案が準備される前に、重要な先進的研究、実験、社会化(socialization)*3を要求します。こうしたアイデアから余分な箇所を削ぎ落としていく作業は、一つ以上の探索的調査提案によって可能となります。研究JEP(research JEP)の最終結果は、JDKで動作しないコードというよりはむしろ、その問題に対する取り組みをドキュメント化した詳細な知見および解空間(solution space)である、と言えます。できれば、具体的な機能拡張提案をサポートするのに十分な詳細である、とベターです。

プロセスの状態 Process states

JEPは以下の状態遷移を通じて完成します。

  • Draft - 初回レビュー(initial review)と合意形成のために作者が提出。
  • Posted - 広域レビュー(wider review)のため作者がJEP Archiveに提出。
  • Submitted - 評価準備が出来たことを作者が宣言。
  • Candidate - Roadmapに含めることをOpenJDK Leadが受諾。
  • Funded - GroupないしArea Leadが完全にfundedであると判定。
  • Completed - 完了したことの通知。

提案の作者は、DraftからPostedへ、および、PostedからSubmittedへ、進めることが出来ます。また、作者は、FundedからCandidateもしくはPosted、および、 CandidateからPostedへ、戻すことも出来ます。

提案の作者は、CompletedもしくはRejectedを除く任意の状態から、以下の状態に移行することが出来ます。

  • Withdrawn - 作者による廃案。再度Draftからとなる(may be re-drafted later)。

Group Lead, Area Lead, OpenJDK Leadは提案を、CandidateからFunded、および、FundedからCompletedへ、進めることが出来ます。

OpenJDK Leadは提案を、SubmittedからCandidateへ、および、Submitted, Candidate, Fundedから以下の状態に進めることが出来ます。

  • Rejected - 取り組む価値が無いアイデアか、Roadmapでメンテナンスする価値が無くfundedに成る見込みが無いアイデアである、と認識された。

あなたが今読んでいるJEPのような、長期的情報とJEPのプロセスについては、追加の状態を持ちます。

  • Active - OpenJDK Leadが公表を承認。

提案のフォーマット Proposal format

JEPドキュメントは、Markdown lightweight markup languageを使用したplain textで書かれます。正確なフォーマットはJEP 2: JEP Templateで定義されています。サンプルのJEPドラフトはここから利用できます。

JEPに関する共通データはRFC-822ライクのフォーマットでファイルの先頭に書かれます。"+"で始まる行は提案をサブミットするために必要です。JEP 2: JEP Templateは詳細をヘッダー行に記述していますが、ここでは要約を載せるに留めます。

+Title: <title>
+Author: <author's full name>
 Organization: <employer name>
+Created: YYYY/MM/DD
+Type: Feature | Research | Infrastructure | Process
 State: <see above>
+Exposure: Open | Closed
+Component: <area>/<component>
+Scope: SE | JDK | Implementation
 JSR: <number, if an active JSR>
 RFE: <number of primary RFE, if any> (<secondary RFE> ...)
+Discussion: <mailing-list address>
 Start: YYYY/QN
 Depends: <draft names or JEP numbers>
 Blocks: <draft names or JEP numbers>
 Effort: XS | S | M | L | XL
 Duration: XS | S | M | L | XL
+Template: 1.0

ReviewerがJEPに納得したとき、以下の行を追加もしくは修正します。

Reviewed-by: <reviewer's full name>, ...

GroupもしくはArea LeadがJEPを承認するとき、以下の行を追加もしくは修正します。

Endorsed-by: <endorser's full name>, ...

提案がポストされたとき、以下の行を追加もしくは修正します。

JEP: <number>

提案がFunded状態に移行するとき、GroupもしくはArea Leadが以下の行を追加もしくは修正します。

 Funded-by: <org or individual name(s)>

JDK Release Project向けの機能に関するfundedな提案が特定のリリースをターゲットとする時、OpenJDK Leadが以下の行を追加します。

Release: <number>

投稿システム Mechanics

JEPのアーカイブは http://openjdk.java.net/jeps です。投稿するためJEPをサブミットするには、テンプレートを完成させてtext/plainの添付ファイルとしてe-mailでjep dash submit at openjdk dot java dot netに送信します。人手によりJEPのセキュリティチェックが行われ、番号が割り当てられ、アーカイブに投稿されます。

JEPが投稿された後、投稿者自身でJEPリポジトリhttp://hg.openjdk.java.net/jep/jepsを更新可能になるので、ファイルを編集し、コミットし、プッシュします。既存のJEPに変更をコミットするとき、コミットメッセージの最初の行はJEP番号とコロンで始めてください。変更をプッシュするとき、サーバーサイドのリポジトリ・フックが対象のwebページを更新します。

例として、架空のJEP 42でtypeを修正したものを示します。

$ hg clone http://hg.openjdk.java.net/jep/jeps
destination directory: jeps
requesting all changes
adding changesets
adding manifests
adding file changes
added 54 changesets with 60 changes to 23 files
updating to branch default
23 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd jeps
$ emacs jep-42.md ...
$ hg ci -m "42: Fix typo"
$ hg push ssh://hg.openjdk.java.net/jep/jeps
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: snapshot taken
remote: changes published to http://openjdk.java.net/jeps
remote: notifying jep-changes@openjdk.java.net
$

謝辞 Acknowledgements

このドキュメントのドラフトに対するコメントを寄せて頂いた Brian Goetz, Paul Hohensee, Georges Saab, Dalibor Topic, Mikael Vidstedt に感謝致します。また、多くの有用なアイデアが採用されているPEP processを持つPythonコミュニティにも敬意を払います。

*1:fundedってなんぞ

*2:One may consider~てどゆ意味?

*3:socializationって何のことなんだろうか……