NumPy 项目治理和决策#

本文档的目的是将 NumPy 项目在正常和非常规情况下使用的治理流程正式化,并阐明如何做出决策以及我们社区的各个组成部分如何互动,包括开源协作开发与可能由营利性或非营利性实体资助的工作之间的关系。

摘要#

NumPy 是一个社区拥有和社区运营的项目。在最大程度上,关于项目方向的决策由社区共识做出(但请注意,这里的“共识”具有一定的技术含义,可能与每个人的期望不符——请参见下文)。社区的一些成员还通过担任 NumPy 指导委员会成员来做出贡献,他们在该委员会中负责促进建立社区共识,管理项目资源,以及在极端情况下,如果正常的基于社区的流程出现故障,则做出项目决策。

项目#

NumPy 项目(项目)是一个与 501(c)3 NumFOCUS 基金会相关的开源软件项目。项目的目的是开发用于 Python 中基于数组的计算的开源软件,特别是numpy 包,以及相关的软件,如f2py 和 NumPy Sphinx 扩展。项目开发的软件在 BSD(或类似)开源许可证下发布,公开开发并在numpy GitHub 组织下的公共 GitHub 存储库中托管。

该项目由一个分布式开发人员团队开发,称为贡献者。贡献者是指为项目贡献代码、文档、设计或其他工作的人员。任何人都可以成为贡献者。贡献者可以隶属于任何法律实体或不隶属于任何实体。贡献者通过提交、审查和讨论 GitHub 拉取请求和问题以及参与 GitHub、邮件列表和其他渠道上的公开项目讨论来参与项目。项目参与的基础是开放性和透明性。

项目社区由所有贡献者和项目用户组成。贡献者代表并对更大的项目社区负责,我们努力尽可能降低贡献者和用户之间的障碍。

该项目正式隶属于 501(c)3 NumFOCUS 基金会(https://numfocus.org/),该基金会充当其财政赞助者,可能持有项目商标和其他知识产权,帮助管理项目捐款并充当母体法人实体。NumFOCUS 是唯一与该项目有正式关系的法律实体(请参见下面的机构合作伙伴部分)。

治理#

本节描述了项目的治理和领导模式。

项目治理的基础是

  • 开放与透明

  • 积极贡献

  • 机构中立

社区的基于共识的决策#

通常,所有项目决策都将由所有感兴趣的贡献者达成共识做出。这种方法的主要目标是确保受任何给定更改影响最大和参与其中的人员能够贡献他们的知识,并确信他们的声音会被听到,因为来自广泛社区的深思熟虑的审查是我们知道的创建高质量软件的最佳机制。

我们用来实现这一目标的机制对于那些不熟悉自由/开源软件开发周围文化规范的人来说可能并不熟悉。我们在此提供一个摘要,并强烈建议所有贡献者另外阅读 Karl Fogel 的经典著作《Producing Open Source Software》的第 4 章:社会和政治基础设施,特别是关于基于共识的民主的部分,以了解更多详细信息。

在这种情况下,共识**不**需要

  • 我们等待征求每个人对每个更改的意见,

  • 我们曾经对任何事情进行投票,

  • 或者每个人都对每个决定感到高兴或同意。

对我们来说,共识意味着我们赋予**每个人**否决任何更改的权利,如果他们认为有必要。虽然这听起来像是导致阻碍和痛苦的秘诀,但事实并非如此。相反,我们发现大多数人认真对待这一责任,并且仅在他们判断正在忽略一个严重问题并且他们的否决权对于保护项目至关重要时才会行使否决权。在实践中,事实证明此类否决权几乎从未正式行使,因为它们仅仅存在的可能性确保了贡献者从一开始就有动力找到一个每个人都能接受的解决方案——从而实现了我们确保考虑所有相关观点的目标。

我们如何知道何时达成共识?原则上,这相当困难,因为共识由否决权的缺席来定义,这要求我们以某种方式证明否定。在实践中,我们结合了我们最佳的判断(例如,在 GitHub 上发布的简单且无争议的错误修复并由核心开发人员审查可能没问题)和最大的努力(例如,所有实质性的 API 更改都必须发布到邮件列表中,以便让更广泛的社区有机会发现任何问题并提出改进建议;我们假设任何足够关心 NumPy 以行使否决权的人应该在邮件列表中)。如果几天后没有人费心在邮件列表中发表评论,那么可能没问题。最糟糕的情况是,如果某个更改比预期更具争议性,或者某个关键的批评由于某人休假而被延迟,那么这没什么大不了的:我们为错误判断情况而道歉,后退并解决问题

如果确实需要行使正式的否决权,则它应包括

  • 明确声明正在行使否决权,

  • 解释行使否决权的原因,以及

  • 描述什么条件(如果有)会说服否决者撤回他们的否决权。

如果所有解决某个问题的提案都被否决,则现状将默认获胜。

在最坏的情况下,如果贡献者确实以阻碍的方式滥用他们的否决权,损害了项目,那么他们可以被指导委员会达成共识逐出项目——请参见下文。

指导委员会#

该项目将设有一个指导委员会,该委员会由项目贡献者组成,这些贡献者做出的贡献在质量和数量上都很大,并且持续至少一年。委员会的总体作用是确保在社区的投入下,项目的长期福祉,无论是在技术上还是作为一个社区。

在日常项目活动期间,委员会成员作为与所有其他贡献者和社区同等地位的成员参与所有讨论、代码审查和其他项目活动。在这些日常活动中,委员会成员不会因其在委员会中的成员身份而拥有任何特殊权力或特权。但是,预计由于其贡献的质量和数量以及他们对项目软件和服务的专业知识,委员会成员将为潜在经验较少的贡献者提供有用的指导,无论是在技术上还是在项目方向方面。

指导委员会及其成员在某些情况下发挥着特殊作用。特别是,如果需要,委员会可以

  • 决定项目的总体范围、愿景和方向。

  • 决定与其他组织或个人的战略合作。

  • 决定具体的技术问题、功能、错误和拉取请求。它们是指导代码审查流程和合并拉取请求的主要机制。

  • 决定项目运行的服务,并管理这些服务以造福项目和社区。

  • 更新此类策略文档。

  • 在常规社区讨论在合理的时间范围内无法就某个问题达成共识时做出决定。

但是,委员会的主要责任是促进上述普通基于社区的决策程序。如果我们必须介入并正式推翻社区以维护项目的健康,我们将这样做,但我们会认为达到这一点表明我们领导层存在失败。

委员会决策#

如果指导委员会需要做出正式决定,则他们将使用Apache 基金会投票流程的一种形式。这是一种正式化的共识版本,其中 +1 票表示同意,-1 票表示否决(并且必须附带理由,如上所述),并且如果希望表达意见而不注册完整的否决权,也可以进行分数投票(例如 -0.5、+0.5)。这些数字投票也经常被非正式地用作了解人们对某个问题的普遍感受的一种方式,并且通常不应被视为正式投票。正式投票仅在明确声明的情况下才会发生,如果确实发生了,则投票应保持开放足够长的时间,以便所有感兴趣的委员会成员有机会做出回应——至少一周。

在实践中,我们预计对于大多数指导委员会决策(例如,投票选举新成员),更非正式的流程就足够了。

委员会成员资格#

当前指导委员会成员的名单在关于我们页面上维护。

要获得加入指导委员会的资格,个人必须是项目贡献者,并且做出的贡献在质量和数量上都很大,并且持续至少一年。潜在的委员会成员由现任委员会成员提名,并在现有委员会成员达成共识后成为成员,并确认潜在成员有兴趣并愿意担任该职位。委员会将最初由现有核心开发人员组成,截至 2015 年底,他们在过去一年中一直非常活跃。

在考虑潜在成员时,理事会将全面审视候选人的贡献。这将包括但不限于代码编写、代码审查、基础设施工作、邮件列表和聊天参与、社区帮助/建设、教育和推广、设计工作等。我们故意不设置武断的定量指标(例如“此仓库中提交 100 次代码”),以避免鼓励为指标而工作而非为项目整体福祉而工作的行为。我们希望在团队中鼓励多元化的背景、观点和才能,因此我们明确地不将代码作为评估理事会成员资格的唯一指标。

如果理事会成员在项目中不活跃一年,则将考虑将其从理事会中移除。在移除之前,将与不活跃的成员联系,了解他们是否计划恢复积极参与。如果他们不打算恢复参与,则将在理事会投票后立即将其移除。如果他们计划很快恢复积极参与,则将给予他们一年的宽限期。如果他们在该期限内未恢复积极参与,则将在理事会投票后将其移除,不再有宽限期。所有前任理事会成员都可以在未来任何时间再次被考虑为成员,就像任何其他项目贡献者一样。退休的理事会成员将被列在项目网站上,以确认他们担任理事会成员的期间。

如果理事会成员被认为对项目的福祉有害,并且沟通和冲突解决的尝试失败,则理事会保留将其移除的权利。这需要其余成员的一致同意。

利益冲突#

预计理事会成员将受雇于各种公司、大学和非营利组织。因此,成员可能会存在利益冲突。此类利益冲突包括但不限于

  • 财务利益,例如投资、雇佣或承包工作,这些利益可能影响他们在项目上的工作,并且这些利益并非来自该项目。

  • 访问其雇主的专有信息,这些信息可能会泄露到他们在项目上的工作中。

理事会的所有成员都应向理事会的其他成员披露他们可能存在的任何利益冲突。在特定问题上存在利益冲突的成员可以参与理事会关于该问题的讨论,但必须回避对该问题的投票。

理事会的私下沟通#

在最大程度上,理事会的讨论和活动将公开进行,并与项目贡献者和社区进行协作和讨论。理事会将拥有一个私人的邮件列表,该列表将谨慎使用,仅在特定事项需要保密时使用。当需要私下沟通和决策时,理事会将尽最大努力在删除不应发布到公共互联网的个人/私人/敏感信息后,将这些信息总结给社区。

小组委员会#

理事会可以创建小组委员会,为项目的特定方面提供领导和指导。与理事会整体一样,小组委员会应以公开和公开的方式开展业务,除非特别需要保密。小组委员会的私下沟通应在理事会的主要私人邮件列表中进行,除非特别需要。

NumFOCUS 小组委员会#

理事会将维护一个专注于管理其与 NumFOCUS 互动的小组委员会。

  • NumFOCUS 小组委员会由 5 人组成,他们管理通过 NumFOCUS 获得的项目资金。预计这些资金将以符合 NumFOCUS 非营利使命和理事会确定的项目方向的方式使用。

  • 此小组委员会不得对项目的走向、范围或技术方向做出决定。

  • 此小组委员会将有 5 名成员,其中 4 名为现任理事会成员,1 名为指导理事会外部成员。通过雇佣或承包工作,最多 2 名小组委员会成员可以向同一个人汇报(包括被汇报者,即被汇报者 + 1 为最大值)。这避免了有效多数依赖于一个人。

NumFOCUS 小组委员会的现任成员名单列在页面 关于我们 上。

机构合作伙伴和资金#

指导理事会是项目的首要领导。任何外部机构、个人或法律实体都无法拥有、控制、篡夺或影响项目,除非作为贡献者和理事会成员参与项目。但是,由于机构可以成为项目的重要资金来源,因此正式确认机构参与项目非常重要。这些是机构合作伙伴。

机构贡献者是指作为其在机构合作伙伴处履行职责的一部分而为项目做出贡献的任何个人项目贡献者。同样,机构理事会成员是指作为其在机构合作伙伴处履行职责的一部分而为项目做出贡献的任何项目指导理事会成员。

根据这些定义,机构合作伙伴是指在美国或其他地方注册的任何合法实体,其雇用了至少 1 名机构贡献者或机构理事会成员。机构合作伙伴可以是营利性或非营利性实体。

机构通过雇用积极为项目做出贡献的个人(作为其官方职责的一部分)而有资格成为机构合作伙伴。换句话说,合作伙伴影响项目的方式仅限于积极参与项目的开放式开发,与社区中的任何其他贡献者和理事会成员平等。仅仅在机构环境中使用项目软件并不能使实体成为机构合作伙伴。财务捐赠并不能使实体成为机构合作伙伴。一旦机构有资格成为机构合作伙伴,指导理事会必须提名并批准该合作伙伴关系。

如果某个现有的机构合作伙伴在某个时候停止拥有任何做出贡献的员工,则会开始一年的宽限期。如果在这段一年的期限结束时,他们仍然没有任何做出贡献的员工,那么他们的机构合作伙伴关系将失效,并且恢复该关系需要经历新合作伙伴关系的正常流程。

机构合作伙伴可以通过任何合法途径为其在项目上的工作寻求资金。这可能包括非营利组织从私人基金会和捐助者那里筹集资金,或者营利性公司构建利用项目软件和服务的专有产品和服务。机构合作伙伴为开展项目工作而获得的资金称为机构资金。但是,任何机构合作伙伴获得的资金都不能凌驾于指导理事会。如果合作伙伴有资金做 NumPy 工作,而理事会决定不将该工作作为项目进行,则合作伙伴可以自行进行。但是,在这种情况下,合作伙伴工作的这一部分将不在 NumPy 的范围内,并且不能以暗示正式关系的方式使用项目的商标。

机构合作伙伴的权益包括

  • 在 NumPy 网站、演讲和 T 恤上获得认可。

  • 能够在 NumPy 网站、演讲和 T 恤上确认其自身的资金来源。

  • 能够通过其理事会成员的参与来影响项目。

  • 理事会成员受邀参加 NumPy 开发者会议。

当前机构合作伙伴的列表维护在页面 关于我们 上。

文档历史#

numpy/numpy

致谢#

本文档的大部分内容改编自 Jupyter/IPython 项目的治理文档

许可证#

在法律允许的最大范围内,作者根据 CC-0 公共领域奉献/许可,放弃了 NumPy 项目治理和决策文档的所有版权以及相关或邻接权利。