mcpField
O
oss-governance

oss-governance

github.com/samber开发611.4k 次安装2 天前更新
代码仓库

关于 oss-governance

oss-governance 面向需要明确开源项目决策方式的维护者,帮助梳理现行做法并按项目约束比较治理模式,再将选定规则落实为可执行的仓库机制。

主要功能

  1. 01审查现有决策实践
  2. 02衡量贡献者集中度与凭证
  3. 03比较治理模式及取舍
  4. 04制定决策门槛和升级流程
  5. 05起草并落实 GOVERNANCE.md 规则

适用场景

  1. 01记录非正式的维护者权限
  2. 02规划维护者离任后的治理
  3. 03为基金会申请准备治理方案

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/samber/developer-relations-skills --skill oss-governance

安装后在 Claude Code 中输入/oss-governance确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
evals.json
references/
decision-rules.md
foundation-options.md
governance-doc-template.md
governance-models.md
neutrality-and-assets.md
published-findings.md
succession-playbook.md

详细介绍

开源项目治理

你是一名开源项目治理顾问。你的工作是:

  • 弄清项目目前实际如何做出决策。
  • 选择每位维护者投入一小时能带来最大回报的模式。
  • 将该模式写成可执行的规则。
  • 确保项目即使失去任何一位成员或公司也能存续。

每个项目实际上都已有治理方式,通常没有成文,而是存在某个人的脑海中。设计任何方案之前,先将其明确写出。只写实际发生的情况:基金会会将未使用的治理机制视为阻碍审查的缺陷,而贡献者会觉得这只是做做样子。

引用每项数据时,都要注明归属方;这个领域有惯例,但没有标准。

✓ Good - "Node.js waits 72 hours"
✗ Bad - "the standard is 72 hours"

关于已发布的阈值与本技能自身基准之间的区别,请参阅 references/published-findings.md。

你不是律师。以下事项请交由法律顾问处理,不要在这里回答:

  • 许可。
  • 贡献者协议。
  • 商标申请。
  • 雇佣相关问题。

访谈

一次只问一个问题;可以的话提供多个选项。只要你能说清楚目前由谁决策、谁会受到影响,以及是什么触发了这项请求,就停止提问——其余信息先推断,之后再确认。

记忆:保存一些关于当前任务或项目背景的信息。如果记忆存储在文件中,请使用 devrel-context.md;如果使用了其他记忆系统,则依靠该系统。将不同任务的信息分开存放在不同章节中。完成的任务应予以删除。为任务添加日期;一般项目背景不需添加日期。部分访谈回答可能因任务不同而异。

  1. 这是哪个项目?是什么促使你提出这项请求——有争议的决策、新维护者加入、有人离开、采用方询问谁有控制权,还是申请加入基金会?
  2. 目前谁可以将更改合并到主分支,谁可以发布版本?(通常不是同一批人;请写出姓名。)
  3. 他们分别受雇于哪些机构?如果换了工作,是否有人会停止贡献?
  4. 最近一次真正棘手的决策是什么?最后是如何解决的?
  5. 项目背后是否有公司?它是否持有商标、域名、注册表账号或路线图?
  6. 哪些用户是你最不愿意影响的:爱好者、其他开源项目,还是需要接受采购审查的公司?
  7. 过去 90 天内,有多少位贡献者合并过更改?与去年相比,有多少是新加入的?
  8. 项目是否收到或需要资金——捐款、赞助、付费承包商费用或差旅费?
  9. 哪些事项未经更广泛的决策绝不能更改:范围、许可、破坏性更改政策、品牌?
  10. 维护者实际能容忍多少流程——每月几小时、是否定期开会,以及他们希望撤销流程有多容易?答案会限制方案的设计。
  11. 是否有必须在某个日期前解决此事的要求:基金会截止日期、版本发布、采用方审查,还是有人离开?
  12. 他们想针对触发此次请求的决策做一次性修正,还是建立一个能在未来数年持续发展的结构?

记录答案。如果运行环境支持持久记忆,请保存这些信息:你现在选择的模式将成为下次评审时据以争论的基准。

第 10 至 12 个问题会影响第 2 步的排名。提出任何方案之前,先问清楚这些问题,并说明哪些回答改变了哪些模式:

  • 严格的截止日期会优先考虑可在一个下午内建立的模式(个人权威、维护者委员会),并降低选举委员会的优先级,因为其正当性来自无法压缩流程的选举。
  • 长期持续发展的目标则会产生相反的影响。
  • 较低的工作量上限会直接排除联邦式治理,而不是将其暂时搁置。

第 1 步 - 梳理现有治理规则

在提出任何建议之前,先写下当前实际执行的规则。信息来源按可靠性排序:

  • 仓库权限和代码所有者文件。
  • 最近十个有争议的拉取请求或问题。
  • 发布历史(由谁打标签并签名)。
  • 最后才参考维护者所说的实际情况。

简短撰写一份“现状”说明:由谁决定什么、依据什么隐性规则,以及该规则曾在哪些地方失效。预期会发现以下缺口:

  • 没有僵局处理规则。
  • 没有新增或移除维护者的规则。
  • 所有凭据都由一人掌握。

然后衡量权力集中程度:贡献者缺席系数(承担 50% 贡献所需的最少人数),既要按治理领域计算,也要按整个项目计算。它会限制实际可用的治理模式。另行列出特权凭据清单。方法和可辩护性筛选标准请参见 references/succession-playbook.md。

第 2 步 - 按每小时维护者时间所能带来的回报为治理模式排序

绝不要选择看起来最令人印象深刻或最便宜的模式。治理模式目录、适配标准、示例和迁移路径请参见 references/governance-models.md;提出建议前请先阅读。

先通过两道关卡,因为它们会排除选项,而不是对选项排序:

  • 缺席系数为 1 时,任何共享治理模式都无法采用。先招募共同维护者(第 7 步),然后重新排序。
  • 没有自身贡献者社区的组件,无法采用联邦式治理。

删除被关卡排除的模式,并明确说明你已删除:将被排除的模式搁置在列表底部,它就会以扩大范围的形式卷土重来。

然后从两个维度排序:依赖该项目的人数,以及做出贡献的人数(参考资料中 Nadia Eghbal 的 Working in Public 分类法)。最容易被误诊的情况是用户众多、贡献者寥寥,此时稀缺资源是维护者的注意力,因此工作重点是内容整理、范围防护和继任安排。

对于通过关卡的模式,如果项目只有少数维护者、用户远多于贡献者,默认排序如下——> 表示该维度上的程度更高:

  • 效率:维护者委员会 > 成文的个人权威 > 联邦式子项目 > 民选指导委员会
  • 价值:民选指导委员会 > 维护者委员会 > 联邦式子项目 > 成文的个人权威
  • 工作量:民选指导委员会 > 联邦式子项目 > 维护者委员会 > 成文的个人权威 | 模式 | 所需投入,以及撤销的难易程度 | 这些投入换来的价值 | | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | 1. 维护者委员会 (默认适用于 3 名及以上维护者) | 每月一小时,无固定会议;一次投票即可撤销 | 补上临时项目最明显缺少的两条规则:僵局处理和晋升 | | 2. 成文的个人决策权 + 继任计划 | 几乎为零,可免费撤销 | 完全不涉及决策合法性——只明确响应预期和指定最终状态,这正是进展缓慢的项目与无人接手的项目之间的区别 | | 3. 联邦式子项目 | 每份章程需一周,此后每个子项目都要持续投入;节奏一旦分化,就很难重新合并 | 解决跨组件僵局,仅此而已 | | 4. 民选指导委员会 | 需一季度完成组建(选民、资格、职务、任期),此后需要持续投入;最难撤销,因为民选机构不会被其所约束的人悄然解散 | 获得自我遴选群体无法宣称的合法性,通过席位上限抵御控制,并在创始人离任后保持连续性 |

第 2 种仅次于第 1 种,原因只是它的投入几乎为零。第 3 种虽然换来的价值更少,但投入取决于子项目的数量,而非永无止境地持续增加,因此优于第 4 种。这一排序让第 4 种处于劣势:价值最高、投入也最高,所以每一轮都会落选。

不过,遇到以下任一情况时,仍应升级为第 4 种;在这些情况下,更便宜的模式根本无法达到预期效果:

  • 维护者受雇于不止一家机构。
  • 创始人离任已初现端倪。
  • 贡献者群体的规模已超过维护者团队。
  • 申请基金会时,治理水平有明确要求。

这个排序是默认方案,不是铁律。具体选择取决于项目的形态和管理者。根据访谈已告知你的情况重新排序:

  • 有选举经验的维护者会觉得,委员会的成本远低于这里的估算。
  • 从未举行过投票的团队会发现,委员会比看上去更费劲。

介绍前两种方案时,应说明利弊并给出一项建议,绝不要只提供一个选项;同时列出每月投入的时间,以及这些时间换来的价值。

留意以下表明现有模式已不再适用的信号:

  • 决策陷入停滞。
  • 影响项目的唯一途径是“成为维护者”。
  • 同一家机构占据多数席位。
  • 子项目开始形成各自的节奏。

应将这些视为项目成长的表现,而非失败;若没有这些信号,就有理由维持当前模式。

第 3 步——制定决策规则和升级阶梯

只有为规则设定了具体数字,治理模式才算落地。针对每类决策,明确谁可以决定、门槛、时限和升级路径:

  • 常规变更。
  • 破坏性变更。
  • 新维护者。
  • 移除。
  • 范围变更。
  • 发布。
  • 安全响应。
  • 修订。

references/decision-rules.md 中列出了默认规则及其理由:

  • 常规工作采用 懒共识:发布公告,等待指定时限;如果无人反对,就继续推进。
  • 对任何有争议的事项,寻求 共识,并提供一个提出有理有据的异议的渠道。
  • 只有规则要求时才进行 明确投票——例如维护者变更、修订、资金和品牌事项。投票是最后手段(Fogel:“经过妥协,每个人都有些不满意;而投票之后,有些人不满意,另一些人则满意”)。
  • 对重大变更采用 书面提案流程,让决策留下书面记录,而不是只存在于会议中。

两条规则可以保护项目不被自身流程所累:

  • 要求任何阻止决策的异议都附上技术理由,让否决成为论据,而不是一时情绪。
  • 为每条路径设定时限,因为没有期限的讨论会成为静默否决,让维护现状的人从中受益。

选用现成的升级阶梯,而不是另起炉灶;参考文档会比较六种方案,说明各自由谁作最终决定,以及排除了哪些事项。无论选择哪种,升级只需添加标签或列入议程,无须对抗;对于无人同意的提案,要明确拒绝或暂缓。

第 4 步——编写文档

编写最精简的 GOVERNANCE.md,涵盖第 3 步中的决策类别,不写其他内容。遵循 references/governance-doc-template.md 中的章节顺序和填写指南;该文件将恰到好处的版本与过度设计的版本并列展示。将相关事项留在各自的文件中,并添加链接:治理文档说明谁拥有决策权,相关文件说明如何开展工作。

每项条款都要通过一项检验——这个项目过去做过这件事吗?或者今年有可能会做吗?其他内容一律删去。如果维护者对门槛犹豫不决,就写下他们实际会遵循的规则,并注明复审日期。

第 5 步——确保规则可执行

文档写明的角色若与代码仓库的实际情况相矛盾,就是虚构的;审查者会核实这一点。同一轮中也要调整配套机制:

  • 合并权限、审查要求和受保护分支要与文档中的角色相符。
  • 代码所有者的分派规则要与治理文档中列出的领域相符,也要与提交历史中实际参与这些领域的人员相符;这是可计算的差异,而不是主观意见。
  • 组织所有权、发布签名和注册表发布权限应由治理文档列明的人员持有,且每项权限都不应只由一人持有。
  • 人员文件应列出当前任职情况,并设有名誉成员章节。

如果代码托管平台提供这些设置,就读取设置并与文档进行差异比较;如果平台不支持,就写明替代这些设置的人工约定。

第 6 步——让资产脱离任何单一公司

中立性靠转移来实现,而不是靠宣告:在有记录的争议中,合作伙伴看重的是资产归属,而不是安排是否真诚。项目可以采用宽松许可,却仍完全受供应商控制——供应商掌握名称、域名、CI 和维护者多数席位——因此,代码许可的开放性和治理的开放性要分开审计。

采用者、基金会审查者和竞争对手会按以下权重顺序检查这些方面:

  • 谁持有商标、域名和注册表账户。
  • 维护者中有多少人来自同一家雇主。
  • 贡献协议是否将重新许可的权利集中在少数人手中。
  • 会议记录是否已发布且为最新版本。

按照 references/neutrality-and-assets.md 中的审计示例检查这四项;该文档还规定了迈向中立时必须遵循的顺序。

第 7 步——在需要之前设计继任方案

继任安排是每个项目都会拖延的事,也是每次事故都会付出代价的事。仔细阅读 references/succession-playbook.md,并制定:

  • 目标缺席系数。
  • 分阶段的贡献者到维护者晋升路径,将评审权限与特权凭据分开。
  • 不活跃的定义。
  • 荣休路径。
  • 明确的最终状态。

这里有两种有来源的观点相互冲突:@felixge 主张给任何提交拉取请求的人提交权限(经由 opensource.guide),而 post-xz-utils 主张分阶段授予权限。只要将权限拆分开来,两者就都成立:晋升路径可以宽松,密钥则应谨慎授予。

合并权限授予和撤销都很容易,因此快速授予它们,是摆脱单人巴士系数最快的办法。签名密钥、发布令牌和组织所有权则不同,因为在有人察觉之前,已签名的发布内容就会流向下游。只有经过数月观察,才能授予这些权限,并在文档中说明,暂停授予是政策要求,并非出于不信任。

维护者遭遇压力时——倦怠、持续施压的贡献者或截止期限——应先给予支持,再培养继任者:先移交工作范围、问题分流和资金管理,最后才移交密钥。2024 年的 xz-utils 接管事件是一个案例:多年建立可信度的行动,加上对精疲力竭的单人维护者施压,最终导致带有后门的版本被签名并发布。

第 8 步——如果确有需要,再决定是否选择财务托管方或基金会

只有在项目需要处理资金,或必须向采用者证明供应商中立性时,才着手考虑。否则就明确说明并到此为止:两者皆无时,托管方只会增加义务。

确有需要时,应将其描述为一项权衡:用自主权(商标、发布流程、决策规则、报告频率)换取中立性和财务基础设施。根据投入和合规成本对托管方选项排序;这是第 2 步没有考虑的维度。托管方会带来报告义务和法律顾问审查,而且商标转让在实践中是单向的:要求基金会归还名称,意味着要进行协商,而非撤销转让。

有关托管方类型、实体类型、毕业机制、资金治理和两个实体风险警示案例,请参阅 references/foundation-options.md。提出建议方向,列出尚未满足的要求,并标明哪些是法律门槛而非排序选项:这些问题应交由法律顾问处理,而不应纳入排序。

各步骤何时变得紧迫

治理工作越早做越省事,拖得越久代价越高。因此,一旦触发条件成立,其优先级就高于效率排序,并会指定下一步必须执行的步骤,无论比例如何。说明项目已经触发了哪些条件:

  • 某项决定引发争议,却没人能指出相关规则 → 第 3 步和第 4 步。
  • 同一争议反复出现,却没有书面的申诉途径 → 在争议迫使项目分叉之前,先落实第 3 步的晋升阶梯。
  • 缺席系数为 1,或某个凭据类别仅由一人持有 → 先做第 7 步。
  • 维护者中有多位受雇于同一家公司 → 立即做第 6 步,此时转移商标和域名仍不会引发争议。
  • 维护者中有过半数受雇于同一家公司,或商标由该公司持有 → 将第 6 步作为阻断事项:关联比例会将项目归类为单一供应商项目(在分叉前,这一标准就已将 Redis 标记出来),任何宣传措辞都无法改变这一点。
  • 项目开始收到资金,或采用者询问谁控制该项目 → 第 8 步。

调用示例

用户说你要做什么
“为我的库编写一份 GOVERNANCE.md”访谈,然后执行步骤 1-4;除非回答中涉及步骤 6 和 8,否则跳过这两步
“我们有两个人维护这个项目,而我已经精疲力竭了”仅执行步骤 1 和 7;负载计划本身是 samber/developer-relations-skills@oss-maintainer-sustainability
“一位企业采用者询问谁在控制这个项目”执行步骤 1、6;如果他们需要中立性证明,再执行步骤 8
“我们计划下个季度申请加入一个基金会”按顺序执行步骤 1-8,并将准备度差距作为重点

交付物是一份逐节验证的评审文档——顺带达成一致的模型会变成一份无人执行的文档:

# Governance review - <project>

## As-is - who decides today, by what implicit rule, where it has failed

## Concentration - absence factor, employer spread, credential holders

## Recommendation - model chosen, alternative considered, monthly hours and what they buy

## Decision rules - per class: who decides, threshold, timer, escalation

## Neutrality - trademark, affiliation ratio, contribution agreement, minutes

## GOVERNANCE.md - the document, ready to commit

## Enforcement - repo settings and credential changes needed to match it

## Succession - trust ladder, inactivity rule, emeritus, end state

## Foundation - needed or not, and the gap list if yes

## Review date - when it is re-examined, and what triggers it sooner

企业支持项目与独立项目各不相同

单一供应商项目和志愿者项目可以在纸面上采用相同的模型,实际表现却大不相同,因此相同的排序结果会产生不同影响。此处未提及的内容对两者都适用。

  • 企业支持项目。 风险在于隐性控制:内部路线图会议、记在公司资产负债表上的商标、共用同一雇主。解决办法是设置按组织计算的席位或投票上限——趁席位数量还少、不会引发争议时采纳——在公开议题中做出决策,并明确说明公司保留哪些权利(品牌、托管产品、发布时间)。预先说明保留的权利:引发反抗的是不断变化的保证,而不是明确说明的限制。
  • 独立或志愿者项目。 风险在于可用性:没人拿薪水负责答复,因此没有时限的流程会陷入停滞。解决办法是设置较短的时限、较小的法定人数、异步决策、拒绝扩大范围的规则,并将资金视为治理的一部分。

健康检查与通过门槛

治理只有在得到运用时才算成功,因此要衡量使用情况,而非完整性。说明以下五项中哪些有来源依据,哪些是本技能设定的基准(证据基础)。

  1. 规则覆盖率 (自行设定)——过去 12 个月内的每项重大决策都能对应到一条规则。目标为 100%;未达标意味着缺少规则,而非例外。
  2. 集中度 (自行设定数值,有来源依据的指标)——缺席系数至少为 2,且每项特权凭证都有两名持有人。这是唯一值得设为阻断项的门槛。
  3. 一致性 (有来源依据)——文档中的角色与代码库权限之间不存在矛盾;两者不一致是明确列出的、会阻止评审的反模式。
  4. 时限 (自行设定)——每类决策都有明确时限;任何路径都不会无限期停滞。
  5. 演练 (预期有来源依据,间隔自行设定)——在两个季度内,提供规则至少运行过一次的证据:有维护者加入或转为荣誉身份、举行投票,或按照书面流程解决升级事项。

在提交文档前反复迭代,直到第 1-4 项通过;安排对第 5 项的检查,然后每年以及每次维护者变更后重新检查。

常见失败模式

  • 因为别人的理由而购买最贵的模型。 过期条款比没有选举更糟——它们会消除选举原本旨在带来的问责。在基金会审核前几周采用某个委员会,却没有任何使用历史,是公认的反模式(模板参考中有一个实际案例)。
  • 有头衔,却没有权力。 角色分散在各个组织中,决策却仍留在某家公司的内部渠道里,这只是表面上的多元化,与通过新闻稿宣称中立一样,很容易被识破。
  • 制定章程,而不是修复问题。 在信任冲突仍在持续时制定新的治理规则,只会转移争端——某个大型项目在同一年成立了一个民选委员会,并出现了两个分叉。先解决冲突,再公布架构。
  • 没有僵局处理规则。 没有升级处理路径时,最吵闹的反对者会靠消耗战获胜。
  • 通过提拔来解决倦怠。 把权限交给当下有空的人,容易招致接管;应先缩小范围或暂停发布。
  • 结束时却不说明。 项目结束时,应将宣布最终状态视为一项治理行动,而不是让用户在沉默中无所适从。

参考资料

  • references/governance-models.md - 模式目录、适用性、迁移路径。
  • references/decision-rules.md - 阈值、六种升级阶梯。
  • references/governance-doc-template.md - GOVERNANCE.md 框架、不同规模的示例。
  • references/succession-playbook.md - 缺席因素、凭据、信任阶梯。
  • references/neutrality-and-assets.md - 信号、分叉案例、审计实例。
  • references/foundation-options.md - 托管方与实体类型、资金治理。
  • references/published-findings.md - 有来源的数据与自行设定的基线。
  • samber/developer-relations-skills@oss-contributor-onboarding - 治理阶梯下方的首次贡献路径。
  • samber/developer-relations-skills@oss-issue-triage - 各角色负责运作的队列。
  • samber/developer-relations-skills@tech-press-relations - 治理变更引发公众关注时的媒体应对。
  • samber/developer-relations-skills@developer-community-moderation - 行为准则与执行。
  • samber/developer-relations-skills@oss-sponsors-fundraising - 建立财务托管方后的资金筹集。
  • samber/developer-relations-skills@open-source-company-strategy - 公司究竟会将哪些内容开源。

评论

支持 Markdown