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 名为指导理事会外部成员。通过就业或承包工作(包括被汇报者,即被汇报者 + 1 为最大值),最多只有 2 名小组委员会成员向同一人汇报。这样可以避免有效多数依赖于同一人。
NumFOCUS 小组委员会的现任成员名单列在 关于我们 页面。
机构合作伙伴和资金#
指导理事会是项目的核心领导层。任何外部机构、个人或法律实体都不能拥有、控制、篡夺或影响项目,除非作为贡献者和理事会成员参与项目。但是,由于机构可以成为项目的重要资金机制,因此正式承认机构对项目的参与非常重要。这些机构是机构合作伙伴。
机构贡献者是指作为其在机构合作伙伴的官方职责一部分而为项目做出贡献的任何个人项目贡献者。同样,机构理事会成员是指作为其在机构合作伙伴的官方职责一部分而为项目做出贡献的任何项目指导理事会成员。
根据这些定义,机构合作伙伴是指在美国或其他地方注册的任何合法实体,其至少雇佣 1 名机构贡献者或机构理事会成员。机构合作伙伴可以是非营利实体或营利实体。
机构通过雇佣作为其官方职责一部分积极为项目做出贡献的个人,从而有资格成为机构合作伙伴。换句话说,合作伙伴影响项目的方式只能是积极参与项目的开放式开发,与社区中的任何其他贡献者和理事会成员平等。仅仅在机构环境中使用项目软件并不能使实体成为机构合作伙伴。捐赠资金并不能使实体成为机构合作伙伴。一旦机构有资格成为机构合作伙伴,指导理事会必须提名并批准该合作伙伴关系。
如果现有机构合作伙伴在某个时间点不再拥有任何贡献员工,则会开始一年的宽限期。如果在这个一年的宽限期结束后,他们仍然没有任何贡献员工,那么他们的机构合作伙伴关系将失效,恢复该关系需要经过新的合作伙伴关系的正常流程。
机构合作伙伴可以通过任何合法途径寻求其在项目上工作的资金。这可能涉及非营利组织从私人基金会和捐赠者那里筹集资金,或者营利公司构建利用项目软件和服务的专有产品和服务。机构合作伙伴为项目工作而获得的资金称为机构资金。但是,任何机构合作伙伴获得的资金都不能凌驾于指导理事会之上。如果合作伙伴有资金从事 NumPy 工作,而理事会决定不将这项工作作为项目进行,则合作伙伴可以自行进行。但是,在这种情况下,合作伙伴工作的这一部分将不在 NumPy 的范围内,不能使用项目商标来暗示正式关系。
机构合作伙伴的权益包括:
在 NumPy 网站、演讲和 T 恤上得到认可。
能够在 NumPy 网站、演讲和 T 恤上认可他们自己的资金来源。
能够通过其理事会成员的参与来影响项目。
理事会成员被邀请参加 NumPy 开发者会议。
当前机构合作伙伴的列表维护在 关于我们 页面。
文档历史#
致谢#
本文档的大部分内容改编自 Jupyter/IPython 项目的治理文档
许可证#
根据 CC-0 公共领域奉献/许可,在法律允许的最大范围内,作者已放弃 NumPy 项目治理和决策文档的所有版权及相关或邻接权利。