在开源项目scikit-learn中,决策制定是一个涉及社区所有成员反馈、寻求共识并避免僵局的过程。本文旨在阐明决策是如何形成的,以及社区中的各个元素是如何相互作用的。
scikit-learn是一个基于功绩和共识的社区项目。任何对项目感兴趣的人都可以加入社区,参与项目设计并参与决策过程。本文描述了如何参与以及如何在项目社区中获得功绩。
区分了贡献者、核心贡献者和技术委员会成员。他们之间的一个关键区别在于他们的投票权:贡献者没有投票权,而其他两组都有投票权,并且有权访问与他们角色相关的工具。
贡献者是为项目做出具体贡献的社区成员。任何人都可以成为贡献者,贡献可以采取多种形式——不仅仅是代码——如contributors guide
中详细说明的那样。成为贡献者没有过程:一旦有人以任何方式为项目做出贡献,他们就是贡献者。
所有核心贡献者成员都有相同的投票权,并有权提名新成员担任以下任何角色。他们的成员身份在scikit-learn GitHub组织中被表示为组织成员。他们还被邀请参加每月的核心贡献者会议。
新成员可以由任何现有成员提名。一旦被提名,将由当前的核心贡献者进行投票。新成员的投票是项目私有邮件列表上进行的少数活动之一。虽然预计大多数投票将是一致的,但投出的票数的三分之二多数就足够了。投票需要至少开放1周。
在过去12个月内没有为项目做出贡献的核心贡献者,将被询问他们是否愿意成为名誉成员并放弃他们的权利,直到他们再次活跃。成员名单,包括活跃和名誉成员(以及他们变得活跃的日期)在scikit-learn网站上是公开的。
技术委员会(TC)成员是承担额外责任以确保项目顺利进行的维护者。TC成员预计要参与战略规划,并批准对治理模型的更改。TC的目的是确保从大局角度顺利进展。实际上,影响整个项目的变化需要综合分析和明确且知情的共识。
如果核心贡献者社区(包括TC成员)未能在规定时间内达成这样的共识,TC是解决问题的实体。TC的成员资格是通过核心贡献者的提名。提名将导致讨论,讨论不能超过一个月,然后由核心贡献者进行投票,投票将开放一周。TC成员资格的投票受到所有投出的票数的三分之二多数以及所有当前TC成员的简单多数批准的约束。不积极参与TC职责的TC成员预计将辞职。
关于项目未来的决策是通过与社区所有成员的讨论做出的。所有非敏感项目管理讨论都在项目贡献者的邮件列表和问题跟踪器上进行。偶尔,敏感讨论会在私有列表上进行。
Scikit-learn使用“寻求共识”的过程来做出决策。该组试图找到一个在核心贡献者中没有公开反对的解决方案。在讨论的任何时候,任何核心贡献者都可以要求进行投票,投票将在要求投票后一个月结束。大多数投票必须得到SLEP的支持。如果没有选项能够获得投出的票数的三分之二,决策将升级到TC,TC将使用共识寻求,如果在一个月内找不到共识,则使用简单多数投票作为后备选项。
治理模型变更通过增强提案或GitHub拉取请求进行。增强提案将经历上一节描述的“决策制定过程”。或者,可以直接通过GitHub拉取请求提出对治理模型的更改。从逻辑上讲,可以打开一个草稿拉取请求以获取反馈,然后跟进一个新的修订拉取请求进行投票。一旦对拉取请求的状态感到满意,他们可以在公共邮件列表上要求投票。在为期一个月的投票期间,拉取请求不能更改。拉取请求的批准将计为赞成票,而“请求更改”的审查将计为反对票。如果投出的票数中有三分之二是积极的,那么治理模型变更就被接受了。
对于所有投票,提案必须在投票前公开并讨论。这样的提案必须是一份综合文件,以“Scikit-Learn增强提案”(SLEP)的形式,而不是在问题上的长篇讨论。SLEP必须作为拉取请求提交到增强提案,使用SLEP模板。SLEP000更详细地描述了这个过程。