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以至于行使否决权的人都应该在邮件列表中).如果几天后没有人费心在邮件列表上评论,那么可能就没问题.最坏的情况是,如果某个更改比预期的更具争议性,或者某个关键批评因某人休假而延迟,那么也没什么大不了的:我们为误判情况道歉,`回退,并解决问题 <https://producingoss.com/en/producingoss.html#version-control-relaxation>`_.

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

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

  • 对其调用原因的解释,以及

  • 撤回否决权的条件描述(如果有).

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

在最坏的情况下,如果一个贡献者确实滥用他们的否决权,以一种损害项目的方式进行阻碍,那么他们可以被指导委员会的共识从项目中驱逐——见下文.

指导委员会#

项目将有一个由项目贡献者组成的指导委员会,这些贡献者已经产生了质量高、数量多且至少持续一年的贡献.委员会的总体角色是确保,在社区的输入下,项目的长期健康发展,无论是技术上还是作为社区.

在日常项目活动中,理事会成员参与所有讨论、代码审查和其他项目活动,与其他所有贡献者和社区成员平等地参与.在这些日常活动中,理事会成员通过其在理事会的成员身份没有任何特殊权力或特权.然而,预期由于他们在贡献的质量和数量以及对项目软件和服务的专业知识,理事会成员将提供有用的指导,无论是技术上的还是项目方向上的,给可能经验较少的贡献者.

指导委员会及其成员在某些情况下扮演着特殊的角色.特别是,如果有必要,委员会可以:

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

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

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

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

  • 更新此类政策文件.

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

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

理事会决策#

如果指导委员会需要产生正式决定,他们将使用 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 开发者会议的理事会成员.

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

文档历史#

numpy/numpy

致谢#

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

许可证#

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