NumPy project governance and decision-making¶
本文档的目的是使NumPy项目在普通和非常情况下使用的治理流程正式化,并阐明如何做出决策以及我们社区的各种要素如何相互作用,包括开源协作开发与工作之间的关系可以由营利性或非营利性实体资助。
Summary¶
NumPy是一个社区拥有和社区运行的项目。在最大可能的情况下,关于项目方向的决策是由社区共识做出的(但是请注意,“协商一致”在这里具有一定的技术含义,可能不符合每个人的期望 - 见下文)。社区的一些成员另外通过在NumPy指导委员会服务,他们负责促进建立社区共识,管理项目资源,以及 - 在极端情况下 - 如果正常的基于社区的过程打破了项目决策下。
The Project¶
NumPy项目(项目)是一个附属于501(c)3 NumFOCUS基金会的开源软件项目。该项目的目标是开发基于Python的基于数组的计算的开源软件,特别是numpy
包以及相关软件如f2py
和NumPy Sphinx扩展。由The Project开发的软件是根据BSD(或类似)开放源代码许可证发布的,公开开发并托管在公共GitHub存储库的numpy
GitHub组织下。
该项目由一个分布式开发人员团队开发,称为贡献者。贡献者是向项目贡献代码,文档,设计或其他工作的个人。任何人都可以是贡献者。提供者可以隶属于任何法律实体,也可以没有。贡献者通过提交,审查和讨论GitHub Pull请求和问题并参与GitHub,邮件列表和其他渠道的公开和公共项目讨论,参与项目。项目参与的基础是开放和透明。
项目社区由项目的所有贡献者和用户组成。贡献者代表并且对更大的项目社区负责,我们努力保持贡献者和用户之间的障碍尽可能低。
该项目正式隶属于501(c)3 NumFOCUS基金会(http://numfocus.org),作为其财政担保人,可持有项目商标和其他知识产权,帮助管理项目捐款,并作为母公司的法律实体。NumFOCUS是与项目有正式关系的唯一法律实体(见下面的机构合作伙伴部分)。
Governance¶
本节描述了项目的治理和领导模式。
项目治理的基础是:
- 开放性和透明度
- 主动贡献
- 制度中立
Consensus-based decision making by the community¶
通常,所有项目决策都将通过所有感兴趣的贡献者的协商一致作出。这种方法的主要目标是确保受到最大影响和参与任何变化的人能够提供他们的知识,使他们的声音被听到的信心,因为来自广泛社区的周到的审查是我们知道的最好的机制的创建高质量软件。
我们用来实现这一目标的机制可能对那些没有经验的有关自由/开源软件开发的文化规范的人不熟悉。我们在此提供摘要,强烈建议所有撰稿人另外阅读Karl Fogel的经典生成开源软件的第4章:社会与政治基础设施,特别是基于共识的民主,以供进行更详细的讨论。
在这种情况下,不是需要:
- 我们等待征求每个人对每一个变化的意见,
- 我们曾经对任何事情进行投票,
- 或者每个人都高兴或同意每一个决定。
对我们来说,什么共识意味着我们委托每个人有权否决任何更改,如果他们觉得有必要。虽然这听起来像是阻塞和疼痛的食谱,但这不是发生的事情。相反,我们发现大多数人认真对待这一责任,只有在他们判断一个严重问题被忽视,并且他们的否决权是保护该项目的必要时才使用否决权。在实践中,事实证明,这种否决权几乎从未被正式援引,因为它们的可能性确保了捐助者从一开始就能够找到每个人都能够拥有的解决方案,从而实现我们的目标,即确保所有感兴趣的观点被采纳。
我们如何知道何时达成了共识?原则上,这是相当困难的,因为共识是由缺席否决而定的,这要求我们以某种方式证明是否定的。在实践中,我们使用我们最好的判断(例如,在GitHub上发布的一个简单的和无争议的错误修复,并由核心开发人员审核可能很好)和最好的努力(例如,所有实质性的API更改必须发布到邮件列表以便给更广泛的社群一个机会来抓住任何问题并提出改进建议;我们假设任何关心NumPy以便调用其否决权的人都应该在邮件列表上)。如果没有人麻烦在几天后对邮件列表发表评论,那么很可能很好。最糟糕的情况是,如果一个变化比预期的更有争议,或者一个关键的批判被推迟,因为有人在度假,那么这没什么大不了的:我们为错误判断情况道歉,备份, t0>。
如果需要援引正式否决权,则应包括:
- 一个明确的声明,否决权正在被援引,
- 解释为什么它被调用,和
- 描述什么条件(如果有的话)将说服否决者撤回其否决权。
如果解决某些问题的所有提案都被否决,那么默认情况下该状态将胜出。
在最糟糕的情况下,如果一个贡献者真正地以阻碍的方式滥用其否决权,从而损害了该项目,那么他们可以通过指导委员会的协商一致方式从项目中退出 - 见下文。
Steering Council¶
该项目将有一个指导委员会,由项目贡献者组成,其提供的质量和数量都相当丰富,并持续至少一年。理事会的总体作用是在共同体的投入下确保该项目在技术上和作为一个社区的长期福祉。
在日常项目活动期间,理事会成员参与所有讨论,代码审查和其他项目活动作为与所有其他贡献者和社区的同行。在这些日常活动中,理事会成员通过其在理事会的成员没有任何特殊的权力或特权。然而,预计由于其贡献的质量和数量以及他们对项目软件和服务的专业知识,理事会成员将在技术和项目方向方面向可能缺乏经验的贡献者提供有用的指导。
指导委员会及其成员在某些情况下发挥特殊作用。特别是,理事会可以在必要时:
- 决定项目的整体范围,愿景和方向。
- 做出与其他组织或个人的战略合作的决策。
- 做出关于特定技术问题,功能,错误和拉取请求的决定。它们是指导代码审查过程和合并pull请求的主要机制。
- 对项目运行的服务做出决策,并为项目和社区的利益管理这些服务。
- 更新策略文档,如这一个。
- 在常规社群讨论未能在合理时间范围内就问题达成共识时做出决策。
然而,理事会的主要职责是促进上述基于社区的普通决策程序。如果我们必须介入并正式凌驾于项目健康的社区,那么我们将这样做,但我们将考虑达到这一点,以表明我们的领导层失败。
Council decision making¶
如果指导委员会需要产生正式决定,那么他们将使用Apache基金会投票过程的形式。这是一个正式版的共识,其中+1票表示一致,-1票是否决票(并且必须伴有一个理由,如上),并且一个人也可以分数投票(例如-0.5,+0.5),如果一个希望表达意见而不登记全部否决权。这些数字投票也经常被非正式地用作获得人们对某些问题的一般感觉的方式,并且通常不应被视为正式投票。正式投票只有在明确宣布的情况下才会进行,如果确实发生了投票,那么投票应该持续公开足够长时间,让所有感兴趣的安理会成员有机会回应 - 至少一个星期。
实际上,我们预计,对于大多数指导委员会的决定(例如,对新成员投票),更加非正式的进程就足够了。
Council membership¶
当前指导委员会成员名单保留在Current steering council and institutional partners页面。
为了有资格加入指导委员会,个人必须是一个项目贡献者,他提供的质量和数量都相当丰富,并持续至少一年。潜在的理事会成员由现有理事会成员提名,并在现有理事会成员达成共识后成为成员,并确认潜在成员有兴趣并愿意以此身份服务。理事会最初将由一组现有的核心开发者组成,截至2015年底,这些核心开发者在过去一年中显着活跃。
在考虑可能成员时,理事会将审查候选人全面看待他们的贡献。这将包括但不限于代码,代码审查,基础设施工作,邮件列表和聊天参与,社区帮助/建设,教育和外联,设计工作等。我们故意不设置任意的定量指标(例如“本回购中的100个提交”),以避免鼓励衡量指标而不是项目整体健康的行为。我们希望鼓励团队中的多元化的背景,观点和才能,这就是为什么我们明确不将代码定义为评估委员会成员的唯一指标。
如果安理会成员在项目中失去活动一年,他们将被考虑从安理会中移除。在移除之前,将接近非活动成员,以查看他们是否计划返回到主动参与。如果不是,他们将在安理会表决后立即解散。如果他们计划很快恢复积极参与,他们将获得一年的宽限期。如果他们在这段时间内没有回到积极参与,他们将通过安理会的表决而不再有宽限期。所有前安理会成员都可以在任何时候再次被考虑成为会员,像任何其他项目提供者一样。退休的理事会成员将列入项目网站,承认他们在理事会的活动期间。
如果会员被认为对项目的幸福感有积极的危害,并且尝试沟通和解决冲突失败,理事会保留退出现有会员的权利。这需要剩余成员的共识。
Conflict of interest¶
预计理事会成员将在广泛的公司,大学和非营利组织工作。因此,议员可能会有利益冲突。此类利益冲突包括但不限于:
- 项目外的财务利益,如投资,就业或承包工程,可能影响他们对项目的工作。
- 访问他们的雇主的专有信息,可能泄漏到他们的项目工作。
理事会的所有成员均须向理事会的其余人士披露他们可能有的任何利益冲突。在特定问题上存在利益冲突的成员可以参与理事会关于该问题的讨论,但必须回避对该问题的表决。
Private communications of the Council¶
在最大限度内,理事会的讨论和活动将公开,并与项目参与者和社区合作和讨论。理事会将有一个私人邮件列表,将被谨慎使用,只有当某个具体问题需要隐私时。当需要私人通信和决定时,理事会将尽力在删除不应发布到公共互联网上的个人/私人/敏感信息后向社群总结这些信息。
Subcommittees¶
理事会可以设立小组委员会,为项目的具体方面提供领导和指导。像理事会一样,小组委员会应以公开和公开的方式开展业务,除非特别要求隐私。私人小组委员会的来文应在理事会的主要私营邮件名单上进行,除非特别要求。
NumFOCUS Subcommittee¶
理事会将保持一个狭隘的小组委员会来管理与NumFOCUS的互动。
- NumFOCUS小组委员会由通过NumFOCUS管理项目资金的5人组成。预计这些资金的使用方式将与NumFOCUS的非营利使命和由理事会全体会议决定的项目方向相一致。
- 本小组委员会不得就本项目的方向,范围或技术方向作出决定。
- 这个小组委员会将有5名成员,其中4名是现任理事会成员,其中1名将在指导委员会外。不超过2名子公司成员可以通过就业或签约工作向一个人报告(包括被举报人,即被举报人+ 1是最大值)。这避免了基于一个人的有效多数。
NumFOCUS小组委员会目前的成员名单列在Current steering council and institutional partners页面。
Institutional Partners and Funding¶
指导委员会是该项目的主要领导。除了通过作为贡献者和理事会成员参与项目之外,没有外部机构,个人或法律实体有能力拥有,控制,篡夺或影响项目。然而,由于机构可以是该项目的重要筹资机制,因此正式承认机构参与项目是很重要的。这些是机构合作伙伴。
机构贡献者是指作为机构合作伙伴的官方职责的一部分对该项目作出贡献的任何个人项目贡献者。同样,机构理事会成员是任何项目指导理事会成员,作为其在机构合作伙伴的官方职责的一部分,对该项目作出贡献。
根据这些定义,机构合作伙伴是在美国或其他地方雇用至少1个机构理事会成员的机构贡献者的任何公认的法律实体。机构合作伙伴可以是营利性或非营利性实体。
机构有资格成为机构合作伙伴,雇用积极为项目贡献的个人作为其公务的一部分。换句话说,合作伙伴影响项目的唯一途径是,与贡献者和理事会成员社区的任何其他成员平等地积极促进项目的开放发展。仅仅在机构环境中使用项目软件不允许实体成为机构合作伙伴。金融礼品不能使实体成为机构合作伙伴。一旦机构成为机构伙伴关系的资格,指导委员会必须提名和批准伙伴关系。
如果在某一时刻现有的机构合作伙伴停止有任何贡献的员工,则一年的宽限期开始。如果在这一年期间结束时,他们继续没有任何贡献的雇员,那么他们的机构伙伴关系将失效,恢复它将需要经历正常的新伙伴关系过程。
机构合作伙伴可以通过任何法律手段为项目的工作自由寻求资金。这可能涉及一个非营利组织从私人基金会和捐助者筹集资金,或者利用项目软件和服务建立专有产品和服务的盈利公司。机构合作伙伴获得的用于项目的资金称为机构资金。然而,机构合作伙伴获得的资金不能超越指导委员会。如果合作伙伴有资金进行NumPy工作,而理事会决定不将这项工作作为一个项目进行,合作伙伴可以自行进行。然而,在这种情况下,合作伙伴工作的那部分不会在NumPy伞下,不能以建议正式关系的方式使用项目商标。
机构合作伙伴的优势是:
- 在NumPy网站上,在会谈和T恤衫的确认。
- 能够在NumPy网站,会谈和T恤上认可自己的资金来源。
- 通过其理事会成员的参与影响项目的能力。
- 理事会成员邀请到NumPy开发者大会。
当前机构合作伙伴名单保留在Current steering council and institutional partners页面。
Document history¶
https://github.com/numpy/numpy/commits/master/doc/source/dev/governance/governance.rst
Acknowledgements¶
本文档的主要部分改编自Jupyter / IPython项目的治理文档。
License¶
在法律允许的范围内,作者根据CC-0公共领域奉献/许可,放弃了NumPy项目治理和决策文件的所有版权和相关权利。