NumPy 项目治理和决策#
本文件的目的是将 NumPy 项目在常规和特殊情况下使用的治理过程正式化,并阐明决策是如何做出的,以及社区的各个要素如何互动,包括开源协作开发与营利性或非营利性实体资助的工作之间的关系。
概述#
NumPy 是一个社区所有、社区运营的项目。在最大程度上,项目方向的决策通过社区共识做出(但请注意,这里的“共识”具有一定的技术含义,可能不符合每个人的期望——详见下文)。社区中的一些成员还通过担任 NumPy 指导委员会成员来做出贡献,他们负责促进社区共识的建立、管理项目资源,并在极端情况下,如果正常的社区流程中断,则负责做出项目决策。
项目#
NumPy 项目(简称“项目”)是一个开源软件项目,隶属于 501(c)3 NumFOCUS 基金会。该项目的目标是开发用于 Python 中基于数组计算的开源软件,特别是 numpy
包,以及 f2py
和 NumPy Sphinx 扩展等相关软件。项目开发的软件在 BSD(或类似)开源许可下发布,并以开放方式开发,托管在 numpy
GitHub 组织下的公共 GitHub 仓库中。
项目由一个分布式开发团队开发,他们被称为贡献者(Contributors)。贡献者是为项目贡献代码、文档、设计或其他工作的个人。任何人都可以成为贡献者。贡献者可以隶属于任何法律实体,也可以不隶属。贡献者通过提交、审阅和讨论 GitHub 拉取请求(Pull Requests)和议题(Issues),以及参与 GitHub、邮件列表和其他渠道上的公开项目讨论来参与项目。项目参与的基础是开放和透明。
项目社区由项目的所有贡献者和用户组成。贡献者代表更广泛的项目社区工作,并对其负责,我们努力将贡献者和用户之间的障碍降到最低。
项目正式隶属于 501(c)3 NumFOCUS 基金会(https://numfocus.org/),该基金会是项目的财政赞助商,可能持有项目商标和其他知识产权,协助管理项目捐赠,并作为上级法律实体。NumFOCUS 是唯一与项目有正式关系的法律实体(参见下文的“机构合作伙伴”部分)。
治理#
本节描述了项目的治理和领导模式。
项目治理的基础是
开放与透明
积极贡献
机构中立
社区基于共识的决策#
通常,所有项目决策将由所有感兴趣的贡献者达成共识。这种方法的主要目标是确保受任何给定更改影响最大并参与其中的人可以贡献他们的知识,并相信他们的声音将被听到,因为来自广泛社区的深思熟虑的审查是我们所知的创建高质量软件的最佳机制。
我们用于实现此目标的机制对于不熟悉自由/开源软件开发文化规范的人来说可能不熟悉。我们在此提供一份摘要,并强烈建议所有贡献者额外阅读 Karl Fogel 经典著作《生产开源软件》的第 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 小组委员会的当前成员名单列在关于我们页面上。
机构合作伙伴和资金#
指导委员会是项目的主要领导机构。除通过作为贡献者和委员会成员参与项目外,任何外部机构、个人或法律实体均无权拥有、控制、篡夺或影响项目。然而,由于机构可以成为项目重要的资金来源,正式承认机构在项目中的参与非常重要。这些机构即为机构合作伙伴。
机构贡献者是指任何在机构合作伙伴处作为其正式职责一部分为项目做出贡献的个人项目贡献者。同样,机构委员会成员是指任何在机构合作伙伴处作为其正式职责一部分为项目做出贡献的项目指导委员会成员。
根据这些定义,机构合作伙伴是指在美国或其他地方雇佣至少一名机构贡献者或机构委员会成员的任何经认可的法律实体。机构合作伙伴可以是营利性或非营利性实体。
机构通过雇佣积极为项目做出贡献的个人作为其正式职责的一部分,从而获得成为机构合作伙伴的资格。换句话说,合作伙伴影响项目的唯一方式是积极参与项目的开放开发,其贡献程度与社区中的其他贡献者和委员会成员相等。仅仅在机构环境中使用项目软件并不能使实体成为机构合作伙伴。财务捐赠也不能使实体成为机构合作伙伴。一旦机构符合机构合作伙伴的资格,指导委员会必须提名并批准该合作伙伴关系。
如果在某个时候,现有机构合作伙伴不再有任何贡献员工,则开始为期一年的宽限期。如果在此一年期结束时他们仍然没有任何贡献员工,则其机构合作伙伴关系将失效,并且恢复该关系将需要通过新的合作伙伴关系的正常流程。
机构合作伙伴可以自由通过任何合法手段为其在项目上的工作寻求资金。这可能涉及非营利组织从私人基金会和捐助者那里筹集资金,或者营利性公司构建利用项目软件和服务的专有产品和服务。机构合作伙伴为在项目上工作而获得的资金称为机构资金。然而,机构合作伙伴获得的任何资金都不能凌驾于指导委员会之上。如果合作伙伴有资金进行 NumPy 相关工作而委员会决定不将该工作作为项目进行,则合作伙伴可以自行开展该工作。但在这种情况下,合作伙伴的该部分工作将不属于 NumPy 范畴,并且不能以暗示正式关系的方式使用项目商标。
机构合作伙伴的权益包括
在 NumPy 网站、讲座和 T 恤上获得鸣谢。
能够在 NumPy 网站、讲座和 T 恤上鸣谢其自身的资金来源。
通过其委员会成员的参与来影响项目的能力。
委员会成员受邀参加 NumPy 开发者会议。
当前机构合作伙伴列表可在关于我们页面查看。
文档历史#
致谢#
本文档的很大一部分内容改编自 Jupyter/IPython 项目的治理文档
许可证#
在法律允许的最大范围内,作者已根据 CC-0 公共领域贡献/许可证,放弃了 NumPy 项目治理和决策文档的所有版权及相关或邻近权利。