Project Governance
Governance models, roles, governance documents, CLA vs DCO, releases, security policy, forks.
Project Governance
Governance answers "who decides?" — who can merge a patch, who can cut a release, who owns the trademark, and what happens when the project outgrows its founder.
1. Governance models
| Model | How decisions are made | Examples | Strength / weakness |
|---|---|---|---|
| BDFL | One founder has final say | Linux (Torvalds), Python (until 2018) | Fast and coherent / succession risk |
| Meritocratic committer model | Contributors earn commit access; PMC votes | ASF, Eclipse | Clear path, strong legal hygiene / slow onboarding |
| Elected technical steering committee | TSC/TOC elected from contributors; SIGs own domains | Kubernetes, CNCF projects, Node.js | Vendor-neutral, scalable / elections are politics |
| Foundation-backed stewardship | Neutral entity holds IP and trademark; project self-governs | LF, ASF, Eclipse, CNCF | Trust, legal cover / overhead, slower legal moves |
| Single-vendor / corporate-led | Company owns code, roadmap and trademark | Terraform (post-2023), Elasticsearch | Well-funded / licence and roadmap risk |
| Consensus / do-ocracy | Rough consensus among those who do the work | Debian, IETF, Arch | Resilient, hard to capture / can deadlock |
| Cooperative / membership | Members vote on budgets and direction | GNOME, KDE e.V., Debian (via SPI) | Democratic legitimacy / scale problems |
Most real projects are hybrids. Python moved from BDFL (Guido van Rossum stepped down July 2018) to an elected five-person Steering Council with PEPs as the design process. Rust has teams plus a Council plus an RFC process.
2. Roles and the contributor ladder
| Stage | Activity | What unlocks |
|---|---|---|
| User | Reports issues, asks questions | Reputation and context |
| Contributor | Opens PRs, fixes docs, triages | Review requests, discussion channels |
| Reviewer | Reviews others' changes reliably | Triage permissions |
| Committer | Write access to the repository | Responsibility for release quality |
| Maintainer | Owns a subsystem; merges, cuts releases | Seat on TSC/PMC |
| PMC / TSC member | Budget, governance, legal decisions | Representing the project publicly |
Publish the criteria for each step. "N merged non-trivial PRs over M months, plus consistent review of others' work" is enough. Ambiguity reads as favouritism.
3. The documents that make it real
| File | Contains | Why it matters |
|---|---|---|
README.md | What it is, install, quick start | Drives adoption |
LICENSE | Full licence text | Without it, nobody may use the code |
GOVERNANCE.md | Roles, decision process, how to become a maintainer, removal | What corporate backers read first |
CONTRIBUTING.md | Setup, style, tests, sign-off, PR expectations | Reduces review churn |
CODE_OF_CONDUCT.md | Behavioural standards, reporting, enforcement | Retention and legal defensibility |
MAINTAINERS / OWNERS | Who owns what, per module | Makes review routing and CODEOWNERS work |
SECURITY.md | Private reporting channel, disclosure policy, supported versions | What to do when a CVE lands |
SUPPORT.md, CHANGELOG.md, ROADMAP.md | Expectation setting | Cuts down "any ETA?" issues |
CHARTER.md (foundation projects) | Scope, IP policy, voting rules | Binds foundation and project |
4. Decision processes
- Lazy consensus — propose on the list with a deadline; silence means consent (Apache's default).
- RFC / PEP / KEP / DEP — design documents reviewed in public before implementation. Heavy, but the written rationale survives personnel turnover.
- Quorum voting — binding votes for releases and legal matters (ASF: at least three +1s, no veto).
- Veto — ASF committers may veto code commits, but it must be justified and can be overridden by vote.
- SIG ownership — divide by subsystem so most decisions never reach the centre.
Write the removal process too. Governance that can only promote cannot handle an inactive or abusive maintainer.
5. CLA vs DCO
| DCO (Developer Certificate of Origin) | CLA (Contributor License Agreement) | |
|---|---|---|
| Mechanism | git commit -s adds Signed-off-by:; no paperwork | Signed agreement, often via a bot; entities sign a CCLA |
| Rights granted | Certifies the contributor may submit under the project licence | Licence to the project, sometimes including relicensing |
| Relicensing | Requires asking every contributor | Possible without further consent |
| Enforcement standing | Stays with individual copyright holders | Can centralise in the foundation |
| Friction | Minimal | Higher; corporate contributors need legal sign-off |
| Used by | Linux kernel, Git, Kubernetes/CNCF, OpenStack | ASF, Eclipse, Google, Microsoft |
Corporate contributors need employer permission either way — an employment agreement assigning IP to your employer means your hobby commits may not be yours to give.
6. Releases, versioning and EOL
- Semantic Versioning (
MAJOR.MINOR.PATCH) is the expected default. Say explicitly if you are pre-1.0. - LTS policy: which versions get backports, for how long. Kubernetes ~12 months; Ubuntu LTS 5 years (10 with ESM); Node.js 30 months.
- Deprecation ladder: announce → warn at runtime → remove in next major. Never silently break.
- CHANGELOG generated from conventional commits, hand-curated at release time.
- Reproducible builds and signed tags so downstream can verify what you shipped.
- Deprecating a project: archive the repo, say so in the README, nominate successors.
7. Security policy
- Publish
SECURITY.mdwith a private reporting channel and a GPG key. - Register as a CVE Numbering Authority, or route through your foundation / GitHub's CNA.
- State your disclosure timeline. Coordinated disclosure with a fix-and-ship window is the norm; Project Zero historically used 90 days; CERT/CC uses 45.
- Announce via a security advisory; publish the CVE and a VEX statement where possible.
- Backport to supported branches in one release so downstream can ship without cherry-picking.
8. Forking: the escape hatch
| Fork | Year | Trigger | Where it landed |
|---|---|---|---|
| LibreOffice | 2010 | Oracle's stewardship of OpenOffice.org | The Document Foundation |
| MariaDB | 2009 | MySQL's acquisition by Sun/Oracle | MariaDB Foundation; distro default for a decade |
| io.js → Node.js | 2014–15 | Joyent's control of Node releases | Re-merged; Node moved to a foundation and TSC |
| OpenSearch | 2021 | Elastic License 2.0 | AWS-led; Apache-2.0 |
| Valkey | 2024 | Redis moved to RSAL/SSPL | Linux Foundation; adopted by distros within months |
| OpenTofu | 2023 | Terraform → BUSL 1.1 | LF → CNCF sandbox (April 2025); MPL-2.0 |
Forking is expensive — it splits maintainers and duplicates CI. It is also the threat that keeps single-vendor stewardship honest.
9. Antipatterns
- Bus factor 1 with no documented release process — the condition that enabled the xz backdoor.
- Governance by press release: announcing a foundation without transferring the trademark.
- Undocumented power: maintainers who merge by fiat while advertising a community process.
- No CODEOWNERS — PRs sit for weeks because nobody knows whose job review is.
- Endless RFCs with no decider — process as a substitute for decisions.
- Unfunded maintainers expected to meet SLAs — the path to burnout.
See also: Foundations · Contributing · Licenses · Business models