Jujutsu(jj)开源治理指南:项目角色、决策投票流程与单一公司影响限制
2026/9/11 7:37:35 网站建设 项目流程

Jujutsu(jj)开源治理指南:项目角色、决策投票流程与单一公司影响限制

【免费下载链接】jjA Git-compatible VCS that is both simple and powerful项目地址: https://gitcode.com/GitHub_Trending/jj/jj

Jujutsu(命令行工具为jj)是一个面向全球社区的开源版本控制系统,其治理模型定义了 Maintainer 与 Contributor 两类角色、一套基于投票的决策机制,以及防止单一公司控制项目方向的制度约束。本文以仓库中的治理文档(GOVERNANCE.md)为骨架,结合配套的临时投票流程、贡献指南等仓库资料,完整解读 jj 项目的治理体系——读完本文,你将了解项目的权力结构、提案如何被批准、Maintainer 如何进出、以及社区如何制衡商业资本的影响,无论你是想深度参与 jj 的贡献者,还是想研究开源项目治理模式的开发者,都能从中获得可直接对照的参考。

治理概述:面向全球社区的开源项目

Jujutsu 是一个开源项目,由一个面向全球社区的团队领导、维护和设计。任何感兴趣的人都可以加入、贡献并参与决策过程。治理文档的存在,正是为了帮助社区成员理解"如何参与决策"。

这一治理框架在仓库中有多个副本,服务于不同的文档站点与目录结构:

  • 官方文档站点的治理页:web/docs/src/content/docs/governance/GOVERNANCE.md(由 Astro Starlight 构建,通过 web/docs/src/content.config.ts 中的docsLoader加载发布);
  • 通用 Markdown 文档:docs/governance/GOVERNANCE.md;
  • 仓库根目录的同步副本:GOVERNANCE.md。

值得注意的是,治理文档本身也处于治理流程的管辖之下——本文档自身的修改,同样要遵循下文所述的决策流程,由现任 Maintainer 集体投票决定。这是一个"元治理"设计:规则本身也必须按规则修改,避免了少数人单方面改写制度。

项目角色体系:Maintainers 与 Contributors

项目参与者被划分为两个特殊角色:Maintainers(维护者)Contributors(贡献者)

其中 Maintainer 的角色是正式定义的,他们被授权就项目的大多数方面集体做出最终决策,并需要认真对待社区意见、以整个社区的利益为出发点。Contributor 的角色则相对非正式——当意见众多且存在争议时,Maintainer 可以给予更资深的 Contributors 更多话语权。

Maintainers:项目的对外守护者

Maintainers是那些贡献、评审、引导并集体决定项目方向与范围的人。他们并非仅靠"提交过大型补丁"获得资格,而是展现了对项目及其社区的持续承诺。文档列出的预期职责包括(并非穷尽列举,也非要求每位 Maintainer 均摊承担):

  • 展现高度承诺并成为榜样:对项目与社区保持高投入,为他人树立行为标杆;
  • 大量撰写补丁:尤其是"胶水代码""体力活"和日常"家务"——修复 bug、保证文档质量、一致的 UX 设计、改进流程、评估依赖、处理安全漏洞等;
  • 评审他人代码:以可维护性、性能、代码质量和"风格"(与项目契合)为评审视角;
  • 参与设计讨论:特别是架构与长期愿景层面的讨论;
  • 维护社区氛围:确保社区对新老成员都保持温暖、欢迎的态度;
  • 践行透明度:适时沟通决策及其背后的理由。

文档特别强调,这不是一份要求每位 Maintainer 平均完成所有任务的清单,而是一份概念性的行为指引。简而言之:Maintainers 是项目对外可见的守护者(stewards)

现任 Maintainers 名单

依据治理文档,当前 Maintainers 名单如下:

  • Austin Seipp(@thoughtpolice)
  • Benjamin Tan(@bnjmnt4n)
  • Ilya Grigoriev(@ilyagr)
  • Martin von Zweigbergk(@martinvonz)
  • Waleed Khan(@arxanas)
  • Yuya Nishihara(@yuja)

(注:名单会随投票结果动态变化,具体以最新治理文档为准。)

Contributors:何为"活跃参与"

Contributors 被定义为积极参与项目与社区、但并非 Maintainer 的人。典型的贡献者行为包括:

  • 帮助用户解答问题;
  • 参与各渠道积极且相互尊重的讨论;
  • 提交高质量的 bug 报告、复现他人报告的 bug、验证修复;
  • 提交补丁或 Pull Request;
  • 为他人 PR 提供评审意见与输入;
  • 协助测试与质量保障;
  • 就规划中的功能、使用场景或 bug 提交反馈。

文档同时明确列出了哪些行为不算"贡献者"

  • 提交过一次 bug 报告后便不再出现;
  • 撰写博客文章或其他宣传行为;
  • 在生产环境中使用该软件;
  • Fork 项目并维护自己的版本;
  • 编写第三方工具或插件。

这些行为虽然通常很有价值,但文档明确它们不构成对代码库或项目本身的持续贡献,单凭这些行为不被视为"活跃参与"。

决策流程(Decision-Making)

治理文档为跨项目的决策定义了明确流程:

  1. 提案与期限:提出决策的人(无论是技术决策还是项目方向决策)提交提案,并附带2 至 4 周的讨论截止期限。
  2. 投票选项:讨论期间,Maintainers 可以投出三种票之一:
    • A)支持(Support)
    • B)反对(Reject)
    • C)弃权(Abstain)
  3. 计票规则:每位 Maintainer 拥有一票;"参与投票数"等于非弃权票的总数;当支持票超过参与投票数的一半时,提案获得通过。
  4. 提前达成:若在设定时间线之前即达成决策,提案可以立即推进并被接受。
  5. 未达共识:若未达成共识,提案可以在之后重新提交。

这一机制是典型的"简单多数 + 弃权不计入分母"设计:弃权既不影响通过门槛,也避免了少数反对票因分母计算而放大权重。同时,"提案可稍后重新提交"为争议较大的决策保留了迭代空间。

Maintainer 的加入与移除机制

治理文档对 Maintainer 的增删给出了明确且可操作的规定。

加入(提名与选举)

  • 任何活跃的 Contributor 都可以随时提名自己或另一位 Contributor成为 Maintainer;
  • 该过程纯属自愿,无人被强制要求参与;但文档鼓励活跃参与者自我提名
  • 最终结果由现任 Maintainers 投票与讨论决定。

文档同时给出了两个重要的现实提示:

  • 成为 Maintainer 需要持续参与的高标准,且 Maintainer 数量上限在实际上是有界的,因此被拒绝是真实可能发生的结果
  • 随着项目范围变化,该上限可以增加,但本质上是动态流动的。如果你不确定当前是否有空缺,可以先私下询问现任 Maintainers。

退出(主动卸任与被动移除)

  • 主动卸任:Maintainer 可以随时放弃职责并退出,无需投票
  • 被动移除:其他 Maintainers 可以通过投票移除某位 Maintainer,要求是现任 Maintainer 群体中至少 2/3 多数同意(不含被移除者本人的票)。原因包括缺乏参与、行为违规等。

文档特别强调:Maintainers 被要求遵循比普通贡献者或参与者更高的行为与沟通标准。这与 docs/code-of-conduct.md 中社区领袖负有"澄清与执行行为标准"责任的定位相互呼应。

单一公司影响限制:防止资本垄断方向

治理文档中一项极具特色的制度是单一公司影响限制(Single-Company Influence)

  • 至多 1/3 的 Maintainer 可以由同一家公司付费贡献,以降低单一公司控制项目方向的风险;
  • 若因"现有 Maintainer 被同一家公司雇用"而导致 1/3 上限被超出,Maintainers 必须协商决定如何解决该局面;
  • 例外条款:被雇用的当事 Maintainer 仍有权投票,只要这不意味着该公司掌握半数票(通常意味着 Maintainer 总数至少为 5 人)。

这一制度与仓库中的 docs/paid_contributors.md 形成配套:该文件公开列出了为 jj 贡献付费的公司及其雇员名单(如 East River Source Control、Alphabet/Google、IMC Trading 等),其目的正是便于识别利益冲突——例如同一公司员工互相批准对方 PR 的情况。贡献指南 docs/contributing.md 也要求:如果你的雇主付费(无论是否直接付给你)让你贡献 Jujutsu,请确保你的 GitHub 用户名被记录在该列表中;同时不要合并仅由同一组织的人批准的 PR

配套治理机制:临时投票流程(temporary-voting)

在正式治理文档之外,仓库还提供了一份配套的临时投票流程,用于在永久治理政策落地之前,为"社区如何批准治理政策"提供过渡性办法。

背景与目标

治理工作组(由 Martin von Zweigbergk 推荐任命,成员包括 Austin Seipp、Waleed Khan、Martin von Zweigbergk、Emily Shaffer)由 jj 原作者任命,并未经社区广泛推荐。为避免被社区视为过度控制,工作组需要先获得社区批准再为整个项目制定政策。该流程的要点:

  • 用于批准governance.md、技术设计审批流程、代码审查流程等永久性制度
  • 临时流程,永久政策落地后即停止使用;
  • 是普通社区成员影响治理政策的主要途径,投票面向"投入型社区成员"(代码提交者、评审者、提供用户支持者、提供文档者、jj 兼容工具/插件开发者、提供设计反馈者等);
  • 目标不是全员一致,而是广泛认可;社区成员可在 GitHub 与 Discord 上参与。

四阶段流程

阶段名称关键时限核心动作
Stage 1提前告知(Advance Notice of Effort)至少提前 1 周(进入 Stage 3 之前)工作组说明政策必要性、目标、拟议实现细节,创建 GitHub 讨论帖作为全程规范讨论帖
Stage 2提案评审期(Proposal Review Period)发布后至少72 小时才可开始投票;通常至少 1 周以 GitHub PR 形式公开提案全文,链接到讨论帖,说明如何满足 Stage 1 目标;社区给出建设性修改建议或"致命关切"
Stage 3提案投票期(Proposal Voting Period)至少 1 周,最长 2 周在 GitHub 用 poll 功能投票,Discord 广泛宣传;支持/反对;2/3 及以上支持票即通过
Stage 4实施(Implementation)合并政策文档进代码库并在后续讨论中遵循;必要时提名个人进入小组或委员会

Stage 3 的细节值得展开:

  • 无法使用 GitHub 的社区成员可联系指定工作组唯一成员代为计入投票,只列一人以避免重复计票
  • 投反对票的成员应在帖子下评论说明原因,以及"需要怎样修改才会改投弃权或支持";
  • 投票结果可能公开或被后续公开,参与者应默认如此;
  • 投票截止日期必须在投票开始时公布,一旦开始不可更改
  • 工作组可延长投票期以覆盖两个周末(利于工作日参与)、应对不紧急或更复杂的提案、或覆盖节假日。

投票结束后有三种走向:通过则实施;被拒则可能修订后回到 Stage 2直接放弃。是否修订或放弃由工作组酌情决定,且工作组被期望在提案被拒后重新审视"提案要达成的目标本身是否值得追求"。

Stage 4 强调:若实施中发现政策实际行不通(可能性低),工作组应对社区保持透明,并可复用本流程的部分或全部来寻找前进方案。

治理如何落地到日常协作

治理文档之外,仓库的配套文档共同构成了 jj 社区的协作规范:

贡献规范(docs/contributing.md)

  • CLA:贡献必须伴随贡献者许可协议(Contributor License Agreement),版权归贡献者或其雇主所有,协议仅授权项目使用与再分发;Google CLA 一次签署、跨项目通用;
  • 提交规范:相比 PR 的整体内容,项目更关注每个 commit 的内容——逐 commit 评审、不做 squash-merge;每个 commit 尽量只做一件事,可用jj split拆分;commit message 以<topic>:开头(如next/prev: ...conflicts: ...),不用 Conventional Commits 风格的chore:/feat:/fix:
  • 代码审查:所有提交(包括项目成员)都需评审;项目存在评审者短缺问题,文档建议贡献者通过评审他人 PR、为评审者提供充分上下文(功能为何有用、用户视角如何工作、设计如何、局限是什么)来加速评审;
  • 废弃与移除策略:删除或重命名命令/配置项时,应先实现弃用警告并保留到jj v<current> + 6(月更节奏下约 6 个月);仓库格式(.jj/内)变更需保持至少一年(12 个发布)向后兼容
  • 付费贡献者透明化:如前文所述,见 docs/paid_contributors.md。

行为准则(docs/code-of-conduct.md)

治理文档中"遵循 Community Guidelines"的要求,对应到仓库的 Contributor Covenant 2.1 行为准则,定义了社区行为标准与四级处理阶梯(纠正、警告、临时封禁、永久封禁)。治理文档中"Maintainers 被要求遵循更高行为标准"的条款与行为准则中"社区领袖负责澄清和执行标准"的规定互为表里。

设计文档流程(docs/design_docs.md)

大型功能需要先写设计文档(Design Doc)并经过多方利益相关者的架构评审,才能开始接受功能 PR。仓库提供了设计文档蓝图模板(含 Summary、State of the Feature、Prior work、Goals and non-goals、Overview/Detailed Design、Alternatives、Issues addressed、Related Work、Future Possibilities 等章节),并已在 docs/design 目录沉淀了如 copy-tracking.md、git-submodules.md、jj-converge-command.md、sparse-v2.md 等实际设计文档。这正是治理文档所述"参与设计讨论"职责的落地载体。

社区渠道

项目通过 Discord、Libera Chat IRC(#jujutsu,与 Discord 桥接)和 GitHub Discussion 开展日常开发与支持讨论(参见 README.md 的相关说明)。治理文档所依赖的"社区参与"正是建立在这些渠道之上。

治理与代码库的对应关系

从仓库结构可以进一步印证治理机制的落地方式:

  • 文档与代码同步演进:治理文档同时在传统docs/目录与 Astro Starlight 驱动的web/docs/站点源码中维护,前者面向通用阅读,后者通过 web/docs/src/content.config.ts 的docsLoader作为正式文档集合发布,体现了治理信息的公开透明原则;
  • 治理文档版本化:网站支持版本切换(prerelease / latest / 历史版本),治理规则也随文档版本一同留档,便于追溯制度沿革;
  • "仓库即真相"的组织原则:docs/core_tenets.md 列出的核心宗旨(如"仓库是真相来源""Git 互操作""难以丢失工作")为治理讨论提供了技术方向上的共同语言,设计决策投票并非凭空进行,而是围绕这些宗旨展开。

结语

Jujutsu 的治理体系在开源项目中颇具代表性:它用正式的 Maintainer 角色 + 非正式的 Contributor 角色区分参与深度,用**"支持/反对/弃权"一票制与简单多数解决日常决策,用2/3 多数约束 Maintainer 的加入与移除,并用"单一公司付费 Maintainer 不超过 1/3"** 的硬性比例防范资本对项目方向的垄断——再辅以付费贡献者公开名单、行为准则、设计文档评审与临时投票流程,构成了一套环环相扣、可审计、可迭代的社区自治框架。

对想要参与 jj 的开发者而言,这份治理文档就是你的"入场须知":从活跃贡献到自我提名,从参与设计文档评审到在投票中表达意见,每一步都有明确的规则可循。而对研究开源治理的读者而言,jj 的案例提供了"如何在不牺牲开放性的前提下建立有效决策结构"的完整样本。

【免费下载链接】jjA Git-compatible VCS that is both simple and powerful项目地址: https://gitcode.com/GitHub_Trending/jj/jj

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询