プロジェクトはどう卒業し、決定は誰が下すのか
一言でいうと
CNCFのプロジェクトは、Sandbox → Incubating → Graduatedの3つの段階を経て、TOC(Technical Oversight Committee)が承認します。Kubernetesの中では、SIGがコードと意思決定を所有し、WGはSIGをまたぐテーマを扱い、大きな変更はKEPで提案します。貢献は、CLAへの署名と行動規範の遵守から始まり、OWNERSファイルのreviewerとapproverが/lgtmと/approveで承認すると、自動的にマージされます。
なぜ必要なのか
KCNAのCloud Native Architectureドメインは、ツールだけでなく、ツールを作る人々の構造を問います。理由は実務的です。どのプロジェクトを採用するか判断するには、それがSandboxなのかGraduatedなのかが成熟度の最初のシグナルであり、バグに遭遇したときにどのSIGにイシューを出すべきかを知っていてはじめて答えが得られ、機能がなぜそのように設計されたのかは、KEPに書かれています。コミュニティの構造を知らなければ、オープンソースを使っているのではなく、ダウンロードしているだけです。
どう動くのか
CNCFプロジェクトの成熟度とTOC
CNCF TOCリポジトリによると、TOCはCNCFの技術的な統治機関で、すべてのプロジェクトを受け入れて監督し、技術ビジョンと原則を定め、理事会(Governing Board)が定めた範囲内で新しいプロジェクトを承認し、プロジェクトの整理・削除・アーカイブを行い、エンドユーザー技術諮問委員会の意見をプロジェクトに反映します。メンバー一覧には、GBが任命した委員、TOCが任命した委員、エンドユーザーが任命した委員が、それぞれ2年の任期で記載されています。
プロジェクトの段階は、TOCプロセス文書が定義しています。
| 段階 | 文書の定義 |
|---|---|
| Sandbox | 初期段階の、実験的・革新的なプロジェクトです。失敗の可能性があり、大きな変更や互換性の破壊が予想され、初期採用者のフィードバックで磨かれている最中です |
| Incubating | 採用が増え、安定性が見えてきた中間段階です。変更の速度が遅くなり、バージョン付きのAPIが安定し、TOCが採用を積極的に評価し始める地点です |
| Graduated | 最も成熟した段階です。安定性・機能・市場での幅広い採用を示し、成熟した慣行・セキュリティ対策・活発なコミュニティ参加を備えています |
| Archived | 活動がない、または少なく、TOCがこれ以上サポートしない、または使用を勧めないプロジェクトです |
CNCFプロジェクトのページは、GraduatedとIncubatingのプロジェクトを「安定しており、運用環境で成功裏に使われていると見なされる」と紹介し、Sandboxのページは、Sandboxを、既存のCNCFプロジェクトを拡張する新しいプロジェクト、新しいアプローチを試みる独立したプロジェクト、CNCFが依頼した実験プロジェクトの居場所だと説明しています。採用の判断において、段階は「どれだけ検証されたか」のシグナルであって、「どれだけ優れているか」のシグナルではありません。Sandboxでも、一部の組織は運用で使っていると、文書は記しています。
KubernetesのSIG、WG、委員会
Kubernetesのガバナンス文書によると、プロジェクトは主にSIG(Special Interest Group)で組織されます。SIGは複数の企業や組織のメンバーで構成され、ネットワーキングやドキュメントのような特定のテーマについて、プロジェクトを前進させるという共通の目的を持ちます。目標は、分散した意思決定の構造とコードの所有権であり、プロジェクトの識別可能なすべての部分(GitHubのOrganization・リポジトリ・ディレクトリ・API・テスト・イシュー・PR)は、いずれかのSIGが所有することになっています。SIGの種類は、垂直(Network・Storage・Node・Scheduling)、水平(Scalability・Architecture)、プロジェクト支援(Testing・Release・Docs・Contributor Experience)に分かれます。SIGごとに最低1人、望ましくは2人の議長(chair)がおり、範囲・責任・権限・役割の選出方式・意思決定の方式・対立の解決方式を記した憲章(charter)が必要です。SIGのガバナンスは、SIGが少なくとも3週間ごとに30分以上の公開会議を行い、議事録と録画を公開し、年次報告書を出さなければならないと定めています。SIGの中にはサブプロジェクト(subproject)があり、SIGの一覧は、各SIGの議長・連絡先・会議の時間を記した場所です。
WG(Working Group)は、ガバナンス文書によると、Kubernetesの範囲内にあるがSIGの境界をまたぐテーマを議論するためのもので、SIGの一覧文書は、これを時間が区切られた(time bounded)グループと呼んでいます。委員会(Committee)は、セキュリティや行動規範のように慎重さが必要なテーマを扱い、SIGとは違って、オープンなメンバーシップ制ではなく、常に公開で運営されるわけでもありません。運営委員会(Steering Committee)が、必要に応じて委員会を作り、メンバーを決めます。
KEP: 変更を提案する方法
KEPの案内によると、KEP(Kubernetes Enhancement Proposal)は、Kubernetesに新しい作業を提案・共有・調整する方法です。始まりは、スポンサーとなるSIGにアイデアを知らせることです。メーリングリストに送るか、会議のアジェンダに載せて、ほかの人がその作業を価値があると見てレビューを手伝ってくれるかを確かめたあと、KEPのテンプレートに従います。文書は「おおむねKEPを書くべき」と答えています。議論になりうるもの、ごく小さなものを除くほとんどの新機能、既存機能の大きな変更、プロジェクトの大部分に影響する変更には、KEPが必要です。ほぼすべてのKEPはSIGのサブディレクトリに置かれ、その過程はIETF RFC・Python PEP・Rust RFCから着想を得ています。KEPの価値は、承認者とレビュアーのいる明確な手続きで意思決定が残り、その決定をあとから調べられることにあります。
行動規範
Kubernetesコミュニティの行動規範のページは、KubernetesがCNCFの行動規範(v1.3)に従うと記し、全文を転載しています。誓約の要点は、イシューの報告・機能の要望・ドキュメントの更新・PRの提出・イベントへの参加など、どのような方法で参加するとしても、すべての人を尊重し、年齢・障害・民族・経験レベル・性別・国籍・人種・宗教・性的指向など、どの側面でもハラスメントのない参加を保証するということです。適用範囲は、プロジェクトとコミュニティの場、そして参加者の言動がCNCFのプロジェクトや、ほかの参加者に向けられるときの、ほかの場までです。Linux Foundationが専門スタッフで運営するCNCFのイベントは、別途イベントの行動規範に従います。CNCFの行動規範のページには、規範の本文のほかに、FAQ、行動規範委員会とその憲章、事案の解決手続き、管轄とエスカレーションのポリシー、透明性レポート、オンブズパーソンが整理されています。
貢献: イシュー、PR、レビュー
コントリビューターガイドは、コードを出す前にすべきことを3つに定めています。GitHubアカウントの作成、CLA(Contributor License Agreement)への署名(練習用リポジトリkubernetes-sigs/contributor-playgroundにPRを開くのが最も簡単な方法)、行動規範とコミュニティの価値観を読むことです。この3つは、最初の提出時にボットが自動で確認します。開発環境の設定は、コードの変更を出すときだけ必要で、ドキュメントやイシューでも貢献できます。
PRの案内が説明するレビューは、2段階です。該当ディレクトリのOWNERSファイルにreviewerとして書かれた人が/lgtmを付けると、コードが信頼されたレビュアーの検討を通過したというシグナルで、approverとして書かれた人が/approveを付けると、最終審査を通過して自動マージの準備が整ったというシグナルです。マージはProwボットが行います。OWNERSファイルはディレクトリごとに置くことができ、サブディレクトリにも適用され、ChromiumのOWNERSファイルから着想を得ています。レビューの速度はレビューできる人の数に、レビューの品質はそのコードへの習熟度に左右されるので、OWNERSで責任を分けることが、この2つの問題を同時に解く方法です。
イベント
CNCFのイベントのページは、イベントを4つに分けています。KubeCon + CloudNativeConは、採用者と技術者を世界規模で集める代表的なカンファレンスで、Co-located Eventは、特定のプロジェクト・ランドスケープの階層・産業分野に集中してKubeConと併催されるCNCF主催のイベントで、Project Eventは、特定のプロジェクトを中心とした没入型の集まりで、KCD(Kubernetes Community Days)は、地域のコミュニティが主催しCNCFが支援するイベントで、初めて登壇する人やコミュニティに新しく来た人に、低い敷居を提供します。
現場での姿
「このプロジェクトを使ってもよいですか」: CNCFランドスケープで、まず段階を見ます。Graduatedなら、複数の組織が運用で検証したという意味で、Sandboxなら、互換性の破壊を覚悟して初期採用者として入ることです。段階はTOCの判断であって、ベンダーの広告ではありません。
バグを見つけたけれど、どこに出せばいいかわからない: Kubernetesリポジトリの該当ディレクトリでOWNERSファイルを開くと、そのコードを所有するSIGとレビュアーが見えます。SIGの一覧で会議の時間とSlackのチャンネルを探して、先に尋ねてみるのが、イシューを放置されないようにする方法です。
次のクイズで確認すること
クイズでは、成熟度の段階の定義とTOCの役割、SIGとWGの違い、KEPが必要な変更、貢献前の必須手続き、/lgtmと/approveの主体、そしてイベントの種類を問います。