NumPy 项目治理和决策#
本文档的目的是规范 NumPy 项目在普通和特殊情况下使用的治理流程,并阐明如何做出决策以及我们社区的各个元素如何交互,包括开源协作开发和工作之间的关系可能由营利性或非营利性实体资助。
概括#
NumPy 是一个社区拥有和运营的项目。在最大程度上,有关项目方向的决定是由社区共识做出的(但请注意,这里的“共识”具有一定的技术含义,可能不符合每个人的期望 - 见下文)。社区的一些成员还通过在 NumPy 指导委员会任职来做出贡献,他们负责促进社区共识的建立、管理项目资源,以及在极端情况下在基于社区的正常流程中断时做出项目决策向下。
该项目#
NumPy 项目(简称“项目”)是一个隶属于 501(c)3 NumFOCUS 基金会的开源软件项目。该项目的目标是开发用于 Python 中基于数组的计算的开源软件,特别是软件包numpy
以及相关软件,例如f2py
NumPy Sphinx 扩展。该项目开发的软件是在 BSD(或类似)开源许可下发布的,公开开发并托管在numpy
GitHub 组织下的公共 GitHub 存储库上。
该项目是由称为贡献者的分布式开发人员团队开发的。贡献者是为项目贡献代码、文档、设计或其他工作的个人。任何人都可以成为贡献者。贡献者可以隶属于任何法人实体,也可以不隶属于任何法人实体。贡献者通过提交、审查和讨论 GitHub Pull 请求和问题以及参与 GitHub、邮件列表和其他渠道上的公开项目讨论来参与项目。项目参与的基础是公开和透明。
项目社区由项目的所有贡献者和用户组成。贡献者代表更大的项目社区工作并对更大的项目社区负责,我们努力使贡献者和用户之间的障碍尽可能低。
该项目正式隶属于 501(c)3 NumFOCUS 基金会 ( http://numfocus.org ),该基金会作为其财政赞助商,可能持有项目商标和其他知识产权,帮助管理项目捐赠并充当母公司法律实体。 NumFOCUS 是与该项目有正式关系的唯一法人实体(请参阅下面的“机构合作伙伴”部分)。
治理#
本节描述了该项目的治理和领导模型。
项目治理的基础是:
公开透明
积极贡献
制度中立
社区基于共识的决策#
通常,所有项目决策将由所有感兴趣的贡献者协商一致做出。这种方法的主要目标是确保受任何特定变革影响最大和参与其中的人们能够贡献自己的知识,并相信他们的声音会被听到,因为来自广泛社区的深思熟虑的审查是我们知道的最佳机制用于创建高质量的软件。
对于那些没有自由/开源软件开发文化规范经验的人来说,我们用来实现这一目标的机制可能会不熟悉。我们在此提供摘要,并强烈建议所有贡献者另外阅读Karl Fogel 经典著作《生产开源软件》 的第四章:社会和政治基础设施,特别是基于共识的民主部分,以进行更详细的讨论。
在这种情况下,达成共识并不需要:
我们等待征求每个人对每项变更的意见,
我们对任何事情都进行过投票,
或者每个人都高兴或同意每个决定。
对我们来说,共识意味着我们赋予每个人在认为有必要时否决任何变更的权利。虽然这听起来像是导致阻塞和疼痛的原因,但事实并非如此。相反,我们发现大多数人认真对待这一责任,只有当他们判断一个严重问题被忽视时才会援引他们的否决权,并且他们的否决权对于保护该项目是必要的。在实践中,事实证明,此类否决权几乎从未被正式援引,因为它们的可能性确保了贡献者从一开始就积极寻找每个人都可以接受的解决方案 - 从而实现了我们确保所有感兴趣的观点都得到采纳的目标考虑到。
我们如何知道何时达成共识?原则上,这是相当困难的,因为共识是由没有否决权来定义的,这需要我们以某种方式证明否定。在实践中,我们结合使用我们的最佳判断(例如,在 GitHub 上发布简单且无争议的错误修复并由核心开发人员审核可能没问题)和最大努力(例如,所有实质性 API 更改必须发布到邮件列表)为了让更广泛的社区有机会发现任何问题并提出改进建议;我们假设任何足够关心 NumPy 并调用其否决权的人都应该在邮件列表中)。如果几天后没有人愿意在邮件列表上发表评论,那么可能就没什么问题。最坏的情况是,如果某项更改比预期更具争议性,或者因为某人休假而推迟了关键的批评,那么这没什么大不了的:我们为误判情况而道歉,备份并解决问题。
如果确实需要动用正式否决权,那么它应该包括:
明确声明正在动用否决权,
解释为什么调用它,以及
描述什么条件(如果有)可以说服否决者撤回否决权。
如果解决某个问题的所有提案都被否决,则默认维持现状。
在最坏的情况下,如果贡献者确实以阻碍性的方式滥用否决权而损害了项目,那么他们可以通过指导委员会的一致同意被逐出项目 - 见下文。
指导委员会#
该项目将设立一个指导委员会,由项目贡献者组成,他们的贡献在质量和数量上都很高,并且持续至少一年。理事会的总体作用是根据社区的意见,确保项目在技术上和社区方面的长期福祉。
在日常项目活动中,理事会成员与所有其他贡献者和社区一起参与所有讨论、代码审查和其他项目活动。在这些日常活动中,理事会成员并不因其理事会成员资格而享有任何特殊权力或特权。然而,由于其贡献的质量和数量以及他们对项目软件和服务的专业知识,预计理事会成员将为可能经验不足的贡献者提供技术和项目方向方面的有用指导。
指导委员会及其成员在某些情况下发挥特殊作用。特别是,如有必要,理事会可以:
就项目的总体范围、愿景和方向做出决策。
做出与其他组织或个人的战略合作的决策。
针对特定的技术问题、功能、错误和拉取请求做出决策。它们是指导代码审查过程和合并拉取请求的主要机制。
就项目运行的服务做出决策,并为了项目和社区的利益而管理这些服务。
更新诸如此类的政策文件。
当定期社区讨论未能在合理的时间范围内就某个问题达成共识时做出决定。
然而,理事会的主要职责是促进上述基于社区的普通决策程序。如果为了项目的健康发展我们必须介入并正式凌驾于社区之上,那么我们会这样做,但我们会考虑达到这一点以表明我们领导力的失败。
理事会决策#
如果指导委员会有必要做出正式决定,那么他们将使用Apache 基金会投票流程的形式。这是共识的正式版本,其中 +1 票表示同意,-1 票表示否决(并且必须附有理由,如上所述),如果有人同意,也可以进行分数投票(例如 -0.5、+0.5)。希望表达意见但未获得完全否决权。这些数字投票也经常被非正式地用作了解人们对某些问题的总体感受的一种方式,通常不应被视为正式投票。只有在明确声明的情况下才会进行正式投票,如果确实发生,则投票应保持足够长的时间,以便所有感兴趣的理事会成员都有机会做出回应——至少一周。
在实践中,我们预计对于大多数指导委员会的决定(例如,对新成员进行投票),更非正式的流程就足够了。
理事会成员#
现任指导委员会成员名单保存在“关于我们”页面。
要获得加入指导委员会的资格,个人必须是项目贡献者,其贡献在质量和数量上都很高,并且持续至少一年。潜在的理事会成员由现有理事会成员提名,并在现有理事会成员达成共识并确认潜在成员有兴趣并愿意担任该职位后成为成员。该委员会最初将由一组现有的核心开发人员组成,截至 2015 年底,这些开发人员在过go一年中一直非常活跃。
在考虑潜在成员时,理事会将全面考虑候选人的贡献。这将包括但不限于代码、代码审查、基础设施工作、邮件列表和聊天参与、社区帮助/建设、教育和外展、设计工作等。我们故意不设置任意的定量指标(例如“100 次提交”)这个回购”)以避免鼓励只影响指标而不是项目整体福祉的行为。我们希望在我们的团队中鼓励多元化的背景、观点和人才,这就是为什么我们明确不将代码定义为评估理事会成员资格的唯一指标。
如果理事会成员在项目中不活跃一年,他们将被考虑从理事会中除名。在删除之前,我们将联系不活跃的会员,了解他们是否计划恢复活跃参与。如果没有,他们将在理事会投票后立即被删除。如果他们计划很快恢复积极参与,他们将获得一年的宽限期。如果他们在这段时间内没有恢复积极参与,他们将被理事会投票删除,没有进一步的宽限期。所有前理事会成员都可以在未来的任何时候再次被考虑成为成员,就像任何其他项目贡献者一样。退休的理事会成员将列在项目网站上,以确认他们在理事会中的活跃时期。
如果当前成员被认为对项目的福祉造成积极损害,并且沟通和解决冲突的尝试失败,理事会保留驱逐现任成员的权利。这需要其余成员的共识。
利益冲突#
预计理事会成员将受聘于广泛的公司、大学和非营利组织。因此,议员可能会产生利益冲突。此类利益冲突包括但不限于:
项目之外的经济利益,例如投资、就业或承包工作,可能会影响他们在项目中的工作。
获取雇主的专有信息,这些信息可能会泄露到他们的项目工作中。
理事会所有成员均应向理事会其他成员披露其可能存在的任何利益冲突。在某一特定问题上有利益冲突的成员可以参加安理会对该问题的讨论,但必须回避对该问题的投票。
理事会的私人通讯#
在最大程度上,理事会的讨论和活动将是公开的,并与项目贡献者和社区合作和讨论。委员会将有一个私人邮件列表,该列表将被谨慎使用,并且仅在特定事务需要隐私时使用。当需要私人沟通和决策时,理事会将在删除不应发布到公共互联网的个人/私人/敏感信息后,尽力向社区总结这些内容。
小组委员会#
理事会可以设立小组委员会,为项目的具体方面提供领导和指导。与整个理事会一样,小组委员会应以公开和公开的方式开展业务,除非特别要求隐私。除非特别要求,私人小组委员会的通信应在理事会的主要私人邮件列表上进行。
NumFOCUS 小组委员会#
理事会将维持一个职责范围狭窄的小组委员会来管理其与 NumFOCUS 的互动。
NumFOCUS 小组委员会由 5 名人员组成,负责管理通过 NumFOCUS 获得的项目资金。预计这些资金的使用方式将符合 NumFOCUS 的非营利使命以及全体理事会确定的项目方向。
该小组委员会不得就项目的方向、范围或技术方向做出决定。
该小组委员会将有 5 名成员,其中 4 名是现任理事会成员,其中 1 名是指导委员会外部成员。不得超过2名小组委员会委员通过受雇或承包的方式向1人报告(包括被报告人,即最多为被报告人+1)。这避免了有效多数集中在一个人身上。
NumFOCUS 小组委员会的当前成员名单列于“关于我们”页面。
机构合作伙伴和资金#
指导委员会是该项目的主要领导机构。除了作为贡献者和理事会成员参与该项目之外,任何外部机构、个人或法人实体都没有能力拥有、控制、篡夺或影响该项目。然而,由于机构可能是项目的重要融资机制,因此正式承认机构参与项目非常重要。这些是机构合作伙伴。
机构贡献者是指作为其在机构合作伙伴的官方职责的一部分而为项目做出贡献的任何个人项目贡献者。同样,机构理事会成员是指作为其在机构合作伙伴的官方职责的一部分而为项目做出贡献的任何项目指导委员会成员。
根据这些定义,机构合作伙伴是指在美国或其他地方雇用至少 1 名机构贡献者或机构理事会成员的任何公认的法人实体。机构合作伙伴可以是营利性或非营利性实体。
机构通过雇用积极为本项目做出贡献的个人作为其官方职责的一部分,就有资格成为机构合作伙伴。换句话说,合作伙伴影响项目的唯一方法是与贡献者社区的任何其他成员和理事会成员平等地积极为项目的开放开发做出贡献。仅在机构环境中使用项目软件不允许实体成为机构合作伙伴。财务礼物并不能使实体成为机构合作伙伴。一旦机构有资格成为机构合作伙伴,指导委员会必须提名并批准合作伙伴关系。
如果现有机构合作伙伴在某个时候不再拥有任何贡献员工,则一年的宽限期开始。如果在这一年结束时,他们仍然没有任何贡献的员工,那么他们的机构合作伙伴关系将失效,恢复伙伴关系将需要经历新合作伙伴关系的正常流程。
机构合作伙伴可以通过任何合法途径自由为其项目工作寻求资金。这可能涉及从私人基金会和捐助者筹集资金的非营利组织,或利用项目软件和服务构建专有产品和服务的营利性公司。机构合作伙伴为开展该项目而获得的资金称为机构资金。然而,机构合作伙伴获得的任何资金都不能凌驾于指导委员会之上。如果合作伙伴有资金开展 NumPy 工作,并且理事会决定不将该工作作为项目进行,则合作伙伴可以自由地自行开展该工作。然而在这种情况下,合作伙伴的这部分工作将不在 NumPy 的保护范围内,并且不能以暗示正式关系的方式使用项目商标。
机构合作伙伴的好处是:
在 NumPy 网站、演讲和 T 恤上致谢。
能够在 NumPy 网站、演讲和 T 恤上承认自己的资金来源。
能够通过理事会成员的参与影响项目。
理事会成员受邀参加 NumPy 开发者会议。
当前机构合作伙伴的列表保留在 “关于我们”页面。
文档历史#
https://github.com/numpy/numpy/commits/main/doc/source/dev/governance/governance.rst
致谢#
本文档的大部分内容改编自 Jupyter/IPython 项目的治理文档
执照#
在法律允许的范围内,根据CC-0 公共领域奉献/许可,作者已放弃 NumPy 项目治理和决策文件的所有版权以及相关或邻接权。