NumPy 项目治理和决策#

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

摘要#

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

项目#

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

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

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

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

治理#

本节描述了 The Project 的治理和领导模式.

Project 治理的基础是:

  • 开放性 & 透明性

  • 积极贡献

  • 机构中立性

社区基于共识的决策#

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

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

在此上下文中,共识并不要求:

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

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

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

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

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

如果确实需要发出正式否决,则应包括:

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

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

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

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

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

指导委员会#

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

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

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

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

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

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

  • 对由本项目运行的 Services 做出决定,并为了本项目和社区的利益管理这些 Services.

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

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

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

委员会决策#

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

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

委员会成员#

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

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

在考虑潜在成员时,理事会将全面考察候选人的贡献.这将包括但不限于代码,代码审查,基础设施工作,邮件列表和聊天参与,社区帮助/建设,教育和推广,设计工作等.我们特意不设置任意的定量指标(例如“在这个仓库中有 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 .