NumPy 项目管理和决策#

本文档的目的是规范 NumPy 项目在普通和特殊情况下使用的管理流程,并阐明如何做出决策以及我们社区的各个要素如何互动,包括开源协作开发与可能由营利性或非营利性实体资助的工作之间的关系.

总结#

NumPy 是一个社区所有和社区运营的项目.在最大程度上,关于项目方向的决策由社区共识做出(但请注意,此处的"共识"具有某种技术含义,可能与每个人的期望不符 – 请参阅下文).社区的一些成员还通过在 NumPy 指导委员会任职来做出贡献,他们在那里负责促进社区共识的建立,管理项目资源,以及 – 在极端情况下 – 如果正常的基于社区的流程崩溃,则负责做出项目决策.

项目#

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

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

项目社区由项目的所有贡献者和用户组成.贡献者代表更广泛的项目社区工作,并对项目社区负责,我们努力保持贡献者和用户之间的障碍尽可能低.

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

治理#

本节介绍该项目的治理和领导模式.

项目治理的基础是:

  • 开放性与透明性

  • 积极贡献

  • 机构中立性

社区基于共识的决策#

通常,所有项目决策将由所有感兴趣的贡献者协商一致做出.这种方法的主要目标是确保受任何给定更改影响最大和参与其中的人可以贡献他们的知识,并确信他们的声音将被听到,因为来自广泛社区的周到审查是我们所知的创建高质量软件的最佳机制.

对于那些不熟悉围绕自由/开源软件开发的文化规范的人来说,我们用来实现此目标的机制可能是不熟悉的.我们在此提供了一个摘要,并强烈建议所有贡献者另外阅读 Karl Fogel 的经典著作《生产开源软件》的 Chapter 4: Social and Political Infrastructure ,特别是关于 Consensus-based Democracy 的部分,以进行更详细的讨论.

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

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

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

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

对我们来说,共识意味着我们赋予每个人否决任何更改的权利,如果他们认为有必要.虽然这听起来像是阻挠和痛苦的根源,但事实并非如此.相反,我们发现大多数人都认真对待这一责任,并且只有在他们判断一个严重的问题被忽视,并且他们的否决对于保护项目是必要的时候才会采取否决权.实际上,事实证明这种否决几乎从未正式调用,因为它们存在的可能性确保了贡献者从一开始就有动力找到每个人都可以接受的解决方案–从而实现我们确保考虑到所有相关观点的目标.

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

如果确实需要行使正式否决权,那么它应该包括:

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

  • 解释为什么要行使否决权,以及

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

如果所有解决问题的提案都被否决,那么现状将默认获胜.

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

指导委员会#

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

在日常的项目活动中,委员会成员像其他贡献者和社区一样,以同等的身份参与所有讨论,代码审查和其他项目活动.在这些日常活动中,委员会成员不因其在委员会中的成员资格而拥有任何特殊的权力或特权.然而,期望由于他们的贡献的质量和数量以及他们对项目软件和服务的专业知识,委员会成员将为可能经验不足的贡献者提供有用的指导,无论是在技术方面还是在项目方向方面.

指导委员会及其成员在某些情况下发挥着特殊的作用. 特别是,如有必要,理事会可以:

  • 就项目的总体范围,愿景和方向做出决定.

  • 就与其他组织或个人的战略合作做出决定.

  • 就具体的技术问题,特性,错误和拉取请求做出决定. 它们是指导代码审查过程和合并拉取请求的主要机制.

  • 就项目运行的服务做出决定,并为了项目和社区的利益管理这些服务.

  • 更新诸如此类的政策文件.

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

然而,委员会的主要责任是促进上述基于社区的普通决策程序. 如果我们不得不介入并正式否决社区以维护项目的健康,那么我们会这样做,但我们会认为达到这一点表明我们的领导失败.

委员会决策#

如果指导委员会需要做出正式决定,那么他们将使用一种形式的 Apache Foundation voting process . 这是一种共识的正式版本,其中 +1 票表示同意,-1 票是否决(并且必须附带理由,如上所述),并且如果希望表达意见而不注册完全否决,也可以进行部分投票(例如 -0.5,+0.5). 这些数字投票也经常被非正式地用来了解人们对某些问题的一般看法,并且通常不应将其视为正式投票. 只有在明确声明的情况下才会进行正式投票,如果确实发生这种情况,那么投票应该保持开放足够长的时间,以便所有感兴趣的委员会成员都有机会做出回应–至少一周.

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

委员会成员资格#

当前指导委员会成员的列表维护在页面 About Us .

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

在考虑潜在的成员时,理事会将全面考虑候选人的贡献. 这将包括但不限于代码,代码审查,基础设施工作,邮件列表和聊天参与,社区帮助/建设,教育和推广,设计工作等. 我们特意不设置任意的定量指标(如"在这个 repo 中有 100 次提交"),以避免鼓励为了满足指标而牺牲项目整体福祉的行为. 我们希望鼓励团队中有多样化的背景,观点和才能,这就是为什么我们明确地不将代码定义为评估理事会成员的唯一指标.

如果理事会成员在项目中不活跃一年,他们将被考虑从理事会中移除. 在移除之前,将联系不活跃的成员,询问他们是否计划恢复积极参与. 如果没有,他们将在理事会投票后立即被移除. 如果他们计划很快恢复积极参与,将给予他们一年的宽限期. 如果他们在那段时间内没有恢复积极参与,他们将被理事会投票移除,不再有进一步的宽限期. 所有前理事会成员可以在未来的任何时间被再次考虑为成员,就像任何其他的项目贡献者一样. 退休的理事会成员将被列在项目网站上,以表彰他们在理事会中活跃的时期.

如果理事会现有成员被认为对项目的福祉构成积极危害,并且沟通和冲突解决的尝试已经失败,则理事会保留驱逐现有成员的权利. 这需要剩余成员的共识.

利益冲突#

理事会成员预计将在广泛的公司,大学和非营利组织中任职. 因此,成员可能存在利益冲突. 此类利益冲突包括但不限于:

  • 财务利益,例如在项目之外的投资,就业或承包工作,可能会影响他们在项目中的工作.

  • 可以潜在地泄露到他们在项目中的工作的雇主的专有信息的访问权限.

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

理事会的私人通信#

在最大可能的范围内,理事会的讨论和活动将是公开的,并与项目贡献者和社区进行协作和讨论. 理事会将有一个私人邮件列表,该列表将被谨慎使用,并且仅在特定事项需要隐私时使用. 当需要私人通信和决策时,理事会将尽最大努力向社区总结这些信息,同时省略不应发布到公共互联网的个人/私人/敏感信息.

小组委员会#

理事会可以创建小组委员会,为项目的特定方面提供领导和指导. 像整个理事会一样,小组委员会应以公开和公共的方式开展业务,除非明确要求隐私. 私人小组委员会的通信应在理事会的主要私人邮件列表上进行,除非明确要求.

NumFOCUS 小组委员会#

理事会将维护一个狭义的小组委员会来管理其与 NumFOCUS 的互动.

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

  • 该小组委员会不得对项目的方向,范围或技术方向做出决定.

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

NumFOCUS 子委员会的当前成员名单可在页面 About Us 上找到.

机构合作伙伴与资金#

指导委员会是项目的主要领导力量.除了作为贡献者和委员会成员参与项目外,任何外部机构,个人或法律实体都无法拥有,控制,篡夺或影响项目.然而,由于机构可以是项目的重要资金机制,因此正式承认机构参与项目非常重要.这些是机构合作伙伴.

机构贡献者是指作为机构合作伙伴的正式职责的一部分为项目做出贡献的任何个人项目贡献者. 同样,机构委员会成员是指作为机构合作伙伴的正式职责的一部分为项目做出贡献的任何项目指导委员会成员.

根据这些定义,机构合作伙伴是指在美国或其他地方被认可的法律实体,该实体至少雇用 1 名机构贡献者或机构委员会成员. 机构合作伙伴可以是营利性或非营利性实体.

机构通过雇用积极为项目做出贡献的个人(作为其正式职责的一部分)来获得成为机构合作伙伴的资格. 换句话说,合作伙伴影响项目的唯一方法是以与其他贡献者和委员会成员社区的任何其他成员相同的条件积极为项目的开放开发做出贡献. 仅在机构环境中使用项目软件并不能使实体成为机构合作伙伴. 财政捐赠不能使实体成为机构合作伙伴. 一旦机构有资格成为机构合作伙伴,指导委员会必须提名并批准该合作关系.

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

机构合作伙伴可以通过任何法律手段自由地为他们在项目上的工作寻求资金. 这可能涉及非营利组织从私人基金会和捐助者那里筹集资金,或者营利性公司构建利用项目软件和服务的专有产品和服务. 机构合作伙伴为从事项目工作而获得的资金称为机构资金. 但是,机构合作伙伴获得的任何资金都不能凌驾于指导委员会之上. 如果合作伙伴有资金来做 NumPy 工作,而委员会决定不将该工作作为项目进行,则合作伙伴可以自由地自行进行. 但是在这种情况下,合作伙伴的这部分工作将不属于 NumPy 的范畴,也不能以暗示正式关系的方式使用项目商标.

机构合作伙伴的优势:

  • 在 NumPy 网站,演讲和 T 恤上鸣谢.

  • 能够在 NumPy 网站,演讲和 T 恤上鸣谢他们自己的资金来源.

  • 能够通过其委员会成员的参与来影响项目.

  • 委员会成员受邀参加 NumPy 开发者会议.

当前机构合作伙伴列表维护在页面 About Us 上.

文档历史#

numpy/numpy

鸣谢#

本文档的很大一部分改编自 Jupyter/IPython project’s governance document

许可证#

在法律允许的范围内,作者已放弃 NumPy 项目治理和决策文档的所有版权以及相关或邻近的权利,根据 CC-0 public domain dedication / license .