本文档的目的是使numpy项目在普通和特殊情况下使用的治理过程正式化,并澄清如何做出决策以及社区的各种元素如何交互,包括开源协作开发与可能由营利组织资助的工作之间的关系。或非营利实体。
Numpy是一个社区拥有和社区运行的项目。在最大程度上,关于项目方向的决定是由社区共识做出的(但请注意,这里的“共识”具有某种技术意义,可能不符合每个人的期望——见下文)。社区的一些成员还通过在Numpy指导委员会任职作出贡献,在那里他们负责促进建立社区共识,管理项目资源,以及在极端情况下,在正常的基于社区的过程崩溃时做出项目决策。
NUMPY项目(项目)是一个开源软件项目,隶属于501(C)3 NuMnFrimy基金会。该项目的目标是开发用于Python中基于阵列的计算的开源软件,特别是 numpy 软件包,以及相关软件,如 f2py 还有 NumPy 的 Sphinx 扩展。项目开发的软件是根据BSD(或类似的)开放源代码许可证发布的,在公共Github存储库中公开开发并托管在 numpy Github组织。
numpy
f2py
这个项目是由一个称为贡献者的分布式开发团队开发的。贡献者是为项目贡献代码、文档、设计或其他工作的个人。任何人都可以成为贡献者。出资人可以与任何法人实体有关联,也可以不与任何法人实体有关联。参与者通过提交、审查和讨论Github Pull请求和问题以及参与Github、邮件列表和其他渠道上的公开和公开项目讨论来参与项目。项目参与的基础是开放性和透明性。
项目社区由项目的所有参与者和用户组成。贡献者代表更大的项目社区工作并对其负责,我们力求尽可能降低贡献者和用户之间的障碍。
该项目正式隶属于501(C)3 NuMnForm基金会(http://NoMeNor.org),该项目作为其财政赞助商,可以持有项目商标和其他知识产权,帮助管理项目捐赠并充当母公司法人实体。NumFocus是唯一与项目有正式关系的法律实体(见下文机构合作伙伴部分)。
本节描述项目的治理和领导模式。
项目治理的基础是:
开放性和透明度
积极贡献
制度中立
通常,所有项目决策都将由所有感兴趣的贡献者协商一致做出。这种方法的主要目标是确保最受任何给定变化影响和参与任何给定变化的人能够自信地贡献他们的知识,他们的声音会被听到,因为我们所知道的创建高质量软件的最佳机制是来自广泛社区的深思熟虑的审查。
我们用来实现这一目标的机制对于那些不熟悉自由/开源软件开发的文化规范的人来说可能是不熟悉的。我们在此提供一个总结,并强烈建议所有参与者另外阅读 Chapter 4: Social and Political Infrastructure 卡尔·福格尔的经典之作 开发开源软件 尤其是关于 Consensus-based Democracy ,进行更详细的讨论。
在这种情况下,共识是 not 要求:
我们等着征求大家对每一个变化的意见,
我们曾经就任何事情投票,
或者每个人都很高兴或同意每一个决定。
对我们来说,共识的意思是我们委托 每个人 如果他们认为有必要,有权否决任何变更。虽然这听起来像是治疗梗阻和疼痛的良方,但事实并非如此。相反,我们发现大多数人认真对待这一责任,只有当他们判断一个严重的问题正在被忽视,并且他们的否决对于保护项目是必要的时,才会行使他们的否决权。在实践中,事实证明,这些否决几乎从未被正式援引,因为它们的唯一可能性确保了贡献者从一开始就有动力找到每个人都能接受的解决方案,从而实现了我们确保所有感兴趣的观点都被考虑在内的目标。
我们如何知道何时达成共识?原则上,这是相当困难的,因为共识的定义是没有否决权,这要求我们以某种方式证明一个否定。在实践中,我们结合了我们的最佳判断(例如,在Github上发布并由核心开发人员审查的简单且无争议的错误修复可能很好)和最佳努力(例如,所有实质性的API更改都必须发布到邮件列表中,以便让更广泛的社区有机会发现任何问题并提出改进建议;我们假设任何关心numpy以调用其否决权的人都应该在邮件列表中)。如果几天后没人费心在邮件列表上发表评论,那么可能没问题。最坏的情况是,如果一个变化比预期的更具争议性,或者一个关键的批评因为某人休假而被推迟,那就没什么大不了的了:我们为错误的判断道歉, back up, and sort things out .
如果一个人确实需要调用正式否决权,那么它应该包括:
一个明确的声明,即正在调用否决权,
解释其被调用的原因,以及
说明什么条件(如果有的话)可以说服否决者撤回他们的否决权。
如果所有解决某个问题的建议都被否决,那么现状就是默认的。
在最坏的情况下,如果一个贡献者真的以一种妨碍性的方式滥用他们的否决权而损害了项目,那么他们可以通过指导委员会的共识被逐出项目——见下文。
该项目将有一个指导委员会,该委员会由项目贡献者组成,这些贡献者在质量和数量上都做出了巨大贡献,并且持续了至少一年。理事会的总体作用是在社区的投入下,确保项目在技术上和作为一个社区的长期福祉。
在日常项目活动中,理事会成员与所有其他捐助者和社区一起参与所有讨论、代码审查和其他项目活动。在这些日常活动中,理事会成员不通过其在理事会的成员而享有任何特殊的权力或特权。然而,预计由于其贡献的质量和数量以及对项目软件和服务的专业知识,理事会成员将向经验不足的潜在贡献者提供有用的技术和项目方向指导。
指导委员会及其成员在某些情况下发挥着特殊作用。特别是,如有必要,理事会可:
决定项目的总体范围、远景和方向。
决定与其他组织或个人的战略合作。
决定具体的技术问题、特性、错误和请求。它们是指导代码评审过程和合并请求的主要机制。
对项目运行的服务做出决策,并为项目和社区的利益管理这些服务。
更新政策文档,如此文档。
当定期的社区讨论不能在合理的时间内就某个问题达成共识时,做出决定。
然而,理事会的主要职责是促进上述以社区为基础的一般决策程序。如果为了项目的健康,我们必须介入并正式推翻社区,那么我们将这样做,但我们将考虑达到这一点,以表明我们领导层的失败。
如果指导委员会有必要作出正式决定,那么他们将使用 Apache Foundation voting process . 这是一个正式的共识版本,其中+1票表示同意,-1票表示否决(必须附带一个理由,如上所述),如果一个人希望表达意见而不登记完全否决权,也可以分部分投票(例如-0.5,+0.5)。这些数字投票通常也被非正式地用作获得人们对某些问题的一般感觉的一种方式,通常不应被视为正式投票。正式投票只在明确宣布的情况下进行,如果确实如此,那么投票应持续足够长的时间,以给所有感兴趣的理事会成员一个回应的机会——至少一周。
在实践中,我们预计,对于大多数指导委员会的决定(例如,在新成员中投票),一个更为非正式的过程就足够了。
该页保存了当前指导委员会成员的名单。 现任指导委员会和机构伙伴 .
为了有资格加入指导委员会,个人必须是项目贡献者,其贡献在质量和数量上都是巨大的,并且持续了至少一年。潜在理事会成员由现有理事会成员提名,并在现有理事会成员达成一致意见后成为成员,并确认潜在成员有兴趣并愿意担任该职务。该委员会最初将由现有核心开发商组成,截至2015年底,这些开发商在过去一年中一直非常活跃。
在考虑潜在成员时,理事会将综合考虑候选人的贡献。这将包括但不限于代码、代码审查、基础设施工作、邮件列表和聊天参与、社区帮助/建设、教育和推广、设计工作等。我们故意不设置任意量化指标(如“本报告中的100个承诺”),以避免鼓励对指标起作用的行为,而不是韩寒项目的整体福祉。我们希望在团队中鼓励各种背景、观点和人才,这就是为什么我们明确不将代码定义为评估理事会成员资格的唯一指标。
如果一名理事会成员在项目中闲置一年,他们将被考虑从理事会撤职。在撤职之前,将联系不活跃的成员,看看他们是否计划恢复积极参与。如果没有,将在理事会投票后立即删除。如果他们计划尽快恢复积极参与,他们将获得一年的宽限期。如果他们在这段时间内不恢复积极参与,他们将被理事会投票取消,无需进一步宽限期。所有前理事会成员都可以像其他项目贡献者一样,在将来的任何时候再次考虑成为成员。退休的理事会成员将在项目网站上列出,确认他们在理事会中的活跃期。
理事会保留驱逐当前成员的权利,如果他们被视为对项目的福祉有积极危害,并且沟通和冲突解决的尝试失败了。这需要其余成员的一致同意。
预计理事会成员将受雇于各种公司、大学和非营利组织。因此,成员国可能会有利益冲突。此类利益冲突包括但不限于:
项目外的经济利益,如投资、就业或承包工作,可能影响其对项目的工作。
获取雇主的专有信息,这些信息可能会泄露到他们与项目的工作中。
理事会所有成员均须向理事会其余成员披露他们可能存在的任何利益冲突。在某一特定问题上有利益冲突的成员可以参加理事会关于该问题的讨论,但必须回避对该问题的表决。
委员会的讨论和活动将尽可能公开,并与项目出资人和社区进行合作和讨论。该委员会将有一个私人邮件列表,只有在特定事项需要隐私时,才会谨慎使用。当需要私人交流和决策时,理事会将尽其最大努力在删除不应发布到公共互联网上的个人/私人/敏感信息后,向社区总结这些信息。
理事会可设立小组委员会,为项目的具体方面提供领导和指导。与理事会作为一个整体一样,小组委员会应以公开和公开的方式开展业务,除非特别要求隐私。除非特别要求,私人小组委员会的通讯应在理事会的主要私人通讯清单上进行。
理事会将维持一个专注度较低的小组委员会,以管理其与NumFocus的互动。
NumFocus小组委员会由5人组成,负责管理通过NumFocus获得的项目资金。预计这些资金的使用方式将与NumFocus的非盈利使命和全体委员会确定的项目方向一致。
小组委员会不得就项目的方向、范围或技术方向作出决定。
该小组委员会将有5名成员,其中4名为现任理事会成员,1名为指导理事会外部成员。不超过2名小组委员会成员可以通过雇佣或承包工作向一个人报告(包括被报告人,即被报告人+1为最大值)。这就避免了有效的多数取决于一个人。
该页列出了NumFocus小组委员会的当前成员。 现任指导委员会和机构伙伴 .
指导委员会是该项目的主要领导。除作为出资人和理事会成员参与本项目外,任何外部机构、个人或法人均不得拥有、控制、篡夺或影响本项目。然而,由于机构可以是项目的一个重要筹资机制,因此正式承认机构参与项目是很重要的。这些是机构合作伙伴。
机构捐助人是作为其在机构合作伙伴的正式职责的一部分对项目作出贡献的任何个人项目捐助人。同样,机构理事会成员是作为其在机构合作伙伴的正式职责的一部分对项目作出贡献的任何项目指导理事会成员。
根据这些定义,机构合作伙伴是在美国或其他地方雇用至少1名机构理事会成员机构捐助人的任何公认的法律实体。机构合作伙伴可以是营利或非营利实体。
机构通过雇佣积极参与项目的个人作为其正式职责的一部分,有资格成为机构合作伙伴。另一种说法是,合作伙伴影响项目的唯一途径是积极促进项目的开放发展,与捐助者团体的任何其他成员和理事会成员同等。仅在机构环境中使用项目软件不允许实体成为机构合作伙伴。金融馈赠不能使实体成为机构合作伙伴。一旦机构有资格成为机构伙伴关系,指导委员会必须提名和批准该伙伴关系。
如果在某个时候,现有的机构合作伙伴停止雇佣任何有贡献的员工,则一年的宽限期开始。如果在这一年结束时,他们仍然没有任何贡献的员工,那么他们的机构合作关系将失效,恢复这种合作关系将需要对新的合作关系进行正常的处理。
机构合作伙伴可以通过任何法律手段为其在项目上的工作寻求资金。这可能涉及到一个非营利组织从私人基金会和捐助者那里筹集资金,或者一个营利公司建立利用项目软件和服务的专有产品和服务。机构合作伙伴为项目工作而获得的资金称为机构资金。然而,机构合作伙伴获得的资金不能凌驾于指导委员会之上。如果一个合作伙伴有资金做一些无聊的工作,而理事会决定不把这项工作作为一个项目来做,那么这个合作伙伴可以自由地自己去做。然而,在这种情况下,合作伙伴的部分工作将不会处于 NumPy 保护伞下,并且不能以表明正式关系的方式使用项目商标。
机构合作伙伴的利益包括:
在 NumPy 网站上,在谈话和T恤上确认。
能够在 NumPy 网站上,通过谈话和T恤衫来确认自己的资金来源。
能够通过其理事会成员的参与影响项目。
理事会成员被邀请参加无聊的开发者会议。
页面上保存了当前机构合作伙伴的列表。 现任指导委员会和机构伙伴 .
https://github.com/numpy/numpy/commits/master/doc/source/dev/governance/governance.rst
本文件的大部分内容改编自 Jupyter/IPython project's governance document
在法律允许的范围内,作者放弃了numpy项目治理和决策文件的所有版权和相关或相邻权利,根据 CC-0 public domain dedication / license .