iojs/io.js#978 で議論されている mikeal の和解プロポーザルを翻訳したものです。
node.js と io.js のプロジェクトをどんな風に統合するのかに関して、たくさんの質問が寄せられている。両方のプロジェクトに関わっている人は自分たちのやっていることが無駄になるのではないか、各プロジェクトのプラスの側面を保存できるのかといったことを知りたがっている。
この文書はドラフトであり、コミュニティからの意見によって随時更新され、編集されていくようにするつもりだ。 この文書は Joyent や Node.js Foundation への最終意思ではなく、むしろ統合のための提案書をこちらから提供することで io.js コミュニティにとっての協力できるポイントを明らかにする目的だ。
この文書では統合するより前のお互いのプロジェクトを指すために io.js と node.js という単語を使い、統合されたプロジェクトに関しては Node という単語を使う。
io.js は出発点と言われることがよくあるが、本ドキュメントではfoundation下に置かれる新プロジェクトを、node.js や io.js の延長としてだけでなく両プロジェクトの統合による新たな組織体として扱う。統合の最終目標はこれらのパーツを集めただけのものよりも大きいプロジェクトになるべきだと思う。
Node.js Foundation は Technical Governance Structure (foundation の運営組織からは切り離されており、独立している組織)を採用する。Technical Governance Structure はとてもシンプルで、下記の事を保証する:
- foundation や board から自律して意思決定をすること
- 自身の運用の所有権と投票システムを持つ
このような事を明記したのは、foundation の規定変更がかなり難しい事が挙げられているためだ。TC はその foundation の規定に対して、現在存在する全体の運用構造を壊し、間違いを見つけては繰り返しその組織構造を改善しようと望んできた。
初期の構造として、規定内にある、以下のドキュメントは io.js が採用したものである。
- GOVERNANCE.md(TC, 投票システムなど.)
- CONTRIBUTING.md(コラボレーターポリシー、コーディング規約、開発者起源証明書など)
- WORKING_GROUPS.md
- ROADMAP.md
CONTRIBUTING.mdに記述されている "collaborator" の項目にある、既存の io.js の collaborators のリストに下記のメンバーを加える。
- TC メンバーに追加:
- TJ Fontaine
- Alexis Campailla
- Julien Gilli
- Collaboratorに追加:
- James M Snell
- Stephen Loomis
- Michael Dawson
長期サポートに関する高次元に抽象化されたアイデアは io.js roadmap の中で触れられているが、具体性には欠ける、なぜなら io.js はこれまでのリリースの中で互換性を壊すリリースをしていないからだ。node.js プロジェクトは公式なドキュメントには明記されていない、非公式な長期サポートポリシーを持っている。以前の古いバージョンのパッチリリースをし続ける、そのためのいくつかのポリシーを決めることとした。
以下の文章は 長期サポートワーキンググループ(以下 LTS WG)のためのドラフトの宣言である。LTS WG については WORKING_GROUPS.md に記述されている。
LTS WG はメンテナンスと Node の古いバージョンのリリースに責任を持つ。
Node (node.js + io.js)は可能な限り長く、コミュニティのメンバーがメンテナンスを望むまで、昔のバージョンの patch リリースを生成することとする。特定のバージョンをサポートするためにコントリビュートをしなければならないわけではなく、LTS WG でその時まで責任をもつということだ。
LTS WGの責任範囲は:
- バグ修正を作成し、下位バージョンにバックポートすること、安定性を改善すること、さらに他の適した変更の前のリリースバージョンにも適用すること(現在のバージョンや Canary は除く)。
- 管理やバックポートへの変更を効率化し、自動化するためのツールの作成とメンテナンスを行うこと。
- 安定したパッチリリースを保証するためのポリシーの文書化、徹底を行うこと。
- 初期メンバーには下記の者を含む
Michael Dawson
ブランチの管理などの具体的な事はこの文書には含めないが最後の箇条書きに記述したメンバーの下で working group がその責任の一部を持つことに注意すること。
io.js と node.js でオーバーラップ(重複)しているバージョン(v0.12.0やv1.1.0など)は存在せず、実際には両プロジェクトの全てのバージョンを合わせて Node のバージョンとして捉えることができる。もしバージョンをオーバーラップさせていたら、これらのバージョンに依存してコミュニティの巨大な部分を不必要に壊していただろう。
以下のバージョンは "以前のリリース" として考慮し、 LTS WG の支配下で運用する >
- 0.8.x
- 0.10.x
- 0.12.x
1.0 より前のリリースは準拠していなかったが、1.0+ リリースからは semver バージョンに準拠すること。0.12.x や 0.10.x のパッチリリースで API 追加を行いたい場合は LTS WG の裁量のもとで行うこと。しかしながら、後方互換性を壊す変更は node.js や io.js の両方に存在するポリシーに準拠して、これらのリリース(0.8 - 0.12のバージョン)に対して変更させることはできないものとする。
- 1.x
現時点では2つの CURRENT 開発ラインがある。すなわち、node.js 0.12.x と io.js 1.x である。これらの開発ラインには別々にユーザーが存在する、そのため、両方の開発ライン共に継続する必要があるだろう。そうすると、"どちらのラインを LTS (長期サポート) にいれるのか?"という質問が生まれるだろう。
直近数ヶ月において、io.js は巨大な成果を得ている。現在の stable な開発ラインとその依存ライブラリの両方を同期させているという事実がこの巨大な成果につながっている。さらに高速なリリースサイクルのために、多くの npm モジュール作者達にコアの内部に関わってもらってきた。そしてさらにエコシステムがコアにあわせて現在の安定開発と同期し始めている。これは各種プロジェクトとさらに巨大なコミュニティ間の新しい時代のコラボレーションを築き始めている。Node (node.js + io.js) はこれを続けるべきだろう。
ただし、0.12.x は "死んだ" ということではない。それどころか、0.12.x や 0.10.x はたくさんのユーザーによって今でも使われているし、LTS WG の活動で 0.12.x や 0.10.x を使っているユーザーは安定してサポートされたプラットフォームを持つことが保証され続けるだろう。
CANARY ("次の" V8 といくつかの変更が major バージョンとして選択される)
現在の安定版の開発に伴って、未来版の開発をするべきである。この開発ラインは一つの branch (おそらく master?)として存在し、バージョン番号なしの test 用の nightly builds としても存在している。これは、Node (node.js + io.js) への変更のためのテストの場である。Node には V8 の CANARY バージョンのテストをする必要があるだけではなく、そのメジャーバージョンに上げる事も必要とする可能性がある。
現在の安定版にともなって実施されている通り、"次の" Node の開発ラインもその依存ライブラリと同調するべきである。こうすることで、アクティブな開発が行われる事になり、Node の安定バージョンが変更されるよりずっと前から、CANARY を使うことで依存ライブラリのプロジェクトとそのライブラリのユーザーには簡単にパフォーマンスの劣化や後方互換性が壊れている事が確認できるようになる。
nodejs.org のウェブサイトは Website WG に移管され、Working group の責任範囲の一つになるだろう。また、io.jsの言語コミュニティによってウェブサイトをローカライズができるように、iojs.org (gulp で構築されたサイト)に似たものへと再構築する。
ソーシャルメディアのアカウント(Twitter, Facebook, など)は Evangelism WG に移管。
io.js の Evangelism WG から Node に移管する予定である(Evangelism WG によって 投票中)。毎週の更新を生成し、 ソーシャルメディアでの拡散等は Node プロジェクトのために行う。
全ての io.js ローカライズコミュニティ WG (直近で32個のチームがある)は Node Project に移管して良いかどうかを投票すること。 これらローカライズコミュニティはプロジェクトリソースのローカライズをして、それぞれの言語内でお互いに協調するためのコミュニティメンバーにとってのエンドポイントであり続けることになるだろう。
io.js の Roadmap WG は Node に移管する予定である(Roadmap WG によって 投票中)。さらにユーザーからのフィードバックを引き出し続ける予定である。また、roadmap のドラフトになる材料は TC によって検討される事になる。
io.js の Streams WG はNode に移管する予定である(Streams WG によって 投票中)。readable-stream と一緒に Node の中で Streams の改善を継続する。
io.js の Tracing WG は Node に移管する予定である(Tracing WG によって 投票中)。Node アプリケーションの透明性の改善を継続する。
io.js の Build WG は Node に移管する予定である(Build WG によって 投票中)。Node のビルド生成とビルドのためのインフラの改善、メンテナンスを継続する。