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 开发者会议的委员会成员。
当前机构合作伙伴的名单保存在“关于我们”页面上。
文档历史#
致谢#
本文档的很大一部分内容改编自 Jupyter/IPython 项目的治理文档
许可证#
在法律允许的最大范围内,作者已根据 CC-0 公共领域贡献/许可证放弃了 NumPy 项目治理和决策文档的所有版权及相关或邻接权利。