NEP 48 — NumPy 项目资金使用#

作者:

Ralf Gommers <ralf.gommers@gmail.com>

作者:

Inessa Pawson <inessa@albuscode.org>

作者:

Stefan van der Walt <stefanv@berkeley.edu>

状态:

活跃

类型:

信息性

创建日期:

2021-02-07

决议:

摘要#

NumPy 项目在历史上从未获得过大量的**非限制性**资金。然而,这种情况正在开始改变。本 NEP 旨在通过制定一套关于资助什么以及资助的原则,为 NumPy 项目非限制性资金的使用提供指导。它还将涉及如何做出资金使用决策、如何管理资金以及这些方面的透明度。

动机和范围#

NumPy 是 NumFOCUS(一家总部位于德克萨斯州奥斯汀的 501(c)(3) 非营利组织)财政赞助的项目。因此,在所有法律和会计事务上,NumPy 项目必须遵循美国非营利组织的规章制度。所有非营利捐款分为两类:**非限制性资金**,可用于组织内任何合法目的;以及**限制性资金**,专为特定目的(例如项目、教育计划等)而预留的资金。

有关 NumPy 资金的详细时间表,请参阅NumPy 资金——历史和现状

自成立以来直至 2020 年,NumPy 项目仅花费了大约 10,000 美元的非特定限制性资金。此类项目收入一直依赖于个人捐款,并从 2019 年年中开始获得 Tidelift 的每月定期捐款。到 2020 年底,Tidelift 的捐款增加到每月 3,000 美元,并且直接流向项目的捐款和资助也有增加的潜力。制定一套明确的资金使用原则将有助于公平有效地使用这些资金。此外,这将使募集捐款和其他捐助变得更加容易。

本 NEP 的一个关键假设是 NumPy 仍然是一个主要由志愿者驱动的项目,并且项目资金不足以全职雇佣维护人员。如果资金增加到不再满足该假设的程度,则应更新本 NEP。

本 NEP 的范围包括

  • 项目资金使用原则:资助什么,资助谁。

  • 描述 NumPy 资金如何管理。

  • 描述资金使用决策如何提议和制定。

本 NEP 的范围不包括

  • 对在特定项目或活动上使用项目资金做出任何决定。

  • 针对用于 NumPy 开发但不属于 NumPy 非限制性资金类别的资金的使用原则。这包括大部分资助资金,这些资金通常专用于某些活动/可交付成果,并流向机构合作伙伴而不是直接流向 NumPy 项目,以及公司或机构资助特定功能。理由:作为一个项目,我们无法直接控制这项工作如何执行(至少在正式层面上,直到出现问题或拉取请求)。在某些情况下,我们甚至可能不知道这些贡献是否获得了资助,或者是否由员工在工作时间完成。(无论是否如此,都不应改变我们对待贡献的方式)。然而,对于资助,我们确实期望研究/项目负责人和受资助团队将其工作与 NumPy 的需求保持一致,并乐于接受其他 NumPy 维护者和贡献者的反馈。

项目资金使用原则#

NumPy 很可能永远是一个志愿者贡献者数量远多于受资助人员的项目。因此,让这些受资助人员以吸引更多志愿者并提升其参与体验的方式进行运作至关重要。这一关键原则促成了下面关于资助什么以及资助谁的许多更详细的原则。

资金使用方法将是

  • 首先确定我们想要资助什么,

  • 然后寻找合适的候选人,

  • 确定后,再确定一个公平的薪酬水平。

以下各节将详细阐述这三点。

资助什么#

  1. 资助重要否则无法完成的事情。理由:要做的事情远比可用于完成所有这些事情的资金多得多。因此,很多事情要依靠有兴趣的志愿者或外部赞助的工作来完成。

  2. 规划可持续性。不要指望资金永远充足。

  3. 考虑对 NumPy 维护者和贡献者、其他项目维护者、最终用户以及包维护者和教育工作者等其他利益相关者的潜在积极益处。

  4. 广阔思考。项目不仅仅是代码:网站、文档、社区建设、治理——所有这些都很重要。

  5. 对于提议的资助工作,如果预期审查需要大量精力,则应包括他人审查您工作的付费时间——不要仅仅增加志愿者维护者的负担。理由:我们希望资金的使用对每个人都是积极的,而不仅仅是对获得报酬的人。这也是公平问题。

在考虑开发工作时,原则 (1) 意味着应优先考虑 (a) 那些没人愿意做的最枯燥/痛苦的任务,以及 (b) 代码库中规模过大、志愿者无法在合理时间内完成的必要结构性更改。

除了开发工作之外,还有许多重要且可以增强项目或社区的任务、活动和项目——例如,用户调查、翻译、推广、专门指导新成员、社区组织、网站改进和行政任务。

人员执行任务的时间也并非资金唯一用途:面对面开发者会议或冲刺活动的费用、用于基准测试或开发工作的托管硬件,以及 CI 或其他软件服务都可能是资金支出的良好选择。

资助谁#

  1. 在其他条件相同的情况下,优先考虑现有维护者/贡献者。

  2. 在现有团队之外寻找时,应将其视为使项目更加多元化的机会。

  3. 考虑支付某人报酬时,请注意以下几点

    • 执行任务所需的技术或领域特定技能,

    • 沟通和自我管理技能,

    • 参与和从事开源项目的经验。

是否在 NumPy 团队内部已有明确的最佳候选人,或者是否需要寻找新的人员参与,这很可能取决于项目/任务。在做出任何决定之前,决策者(根据 NumPy 治理文件——目前是指导委员会)应考虑是否应发布公告,以给更广泛的人群提供申请机会。

公平补偿#

注意

即使本 NEP 整体获得通过,本节关于公平补偿的内容仍将被视为草案。一旦我们至少 2-3 次应用此处概述的方法并对此感到满意,我们将删除此说明并将本节视为已接受

公平支付报酬是一个难题,尤其对于分布式团队而言。因此,我们在此仅提供一些指导。最终决定将始终由承担此责任的群体(根据当前的 NumPy 治理结构,这将是 NumPy 指导委员会)审议和批准。

关于远程员工薪酬的讨论往往由两种叙事主导:“按当地市场价格支付”和“同工同酬”。

我们认为两者都过于极端

  • “同工同酬”对生活成本较高地区的人不公平。例如,独栋公寓的平均租金可能相差很大(从每月几百美元到几千美元不等)。

  • “按当地市场价格支付”固化了国家间现有的不平等,并使得在市场价格较低的地区,购买开发机器或出国度假等固定成本项目相对更难负担。

我们力求在这两个极端之间找到一个中间地带。

有用的参考点包括 GitLab 和 Buffer 等在薪酬政策上透明的公司([3], [4]),Google Summer of Code 津贴([5]),其他以透明方式管理预算的开源项目(例如 Open Collective 上的 Babel 和 Webpack([6], [7])),以及标准的薪资比较网站。

鉴于 NumPy 是一个非营利项目,我们也借鉴了非营利部门关于薪酬政策和补偿水平的指导方针。我们的调查结果显示,大多数小型非营利组织倾向于支付中位数工资/薪酬。我们认可这种方法的优点:申请人很可能对开源有真正的兴趣,而不是纯粹受经济利益驱动。

综上所述,我们将采用以下准则来确定薪酬

  1. 目标是适当补偿人员,最高可达高级工程师或其他适用专业人员的预期水平。

  2. 设定 125,000 美元的薪酬上限,即使对于来自最昂贵/竞争激烈地区的人员,也无法超过此上限([8])。

  3. 对于同等工作和资历,不同地点之间的薪资差异不应超过 2 倍。例如,如果我们向纽约的一名高级开发人员支付 110,000 美元,那么对于同等工作,来自东南亚的一名高级开发人员应至少获得 55,000 美元。为了比较地点,我们将使用 Numbeo 生活成本计算器(或其等效工具)。

其他考虑事项

  • 通常,有偿工作提供有限的小时数或固定期限。在这种情况下,应考虑相当于永久雇佣薪酬待遇的补偿(例如,一个月的工作最多应获得全年薪资的 1/12 加上福利)。

  • 在比较费率时,个体承包商的收入通常应比受雇人员高 20%,因为他们必须自行承担福利和会计事务。

  • 有些人可能乐于接受针对特定可交付成果的一次性付款(例如,“为标签 X 的所有开放问题进行分类,报酬为 $x,xxx”)。与个体承包商相比,这应以较低的费率进行补偿。或者他们可能因其他原因要求较低的金额(例如,“我希望获得 $x,xxx 来雇佣清洁工或支付育儿费用,以便腾出时间进行开源工作”)。

  • 通过雇主资助某人的时间时,该雇主可能希望根据其内部规定(例如管理费用率)设定薪酬水平。在这种情况下,可能需要对本 NEP 中的准则进行少量偏离,但这些偏离应在合理范围内。

  • 完全有可能,除了为人们在特定任务上花费的时间支付报酬之外,另一种策略可能会更有效。任何有助于项目和社区发展和改进的事情都值得考虑。

  • 透明度有所帮助。如果所有参与者都乐于与团队其他成员(或最好公开)分享他们的薪酬水平,那么在公平性方面出现偏差的可能性最小。

我们强烈建议参与招聘和薪酬决策的个人仔细阅读本 NEP 的“参考文献”部分。该部分提供了大量关于此主题的有用建议。

定义可资助的活动和项目#

我们希望拥有更广泛的可资助想法,我们将根据 NumPy 团队成员和更广泛社区的意见进行优先排序。所有想法都将记录在一个 wiki 页面上。任何人都可以提出想法。只有 NumPy 团队成员才能编辑 wiki 页面。

每个列出的想法都必须满足以下要求

  1. 范围必须明确:其描述必须解释对项目的重要性,如果可能的话,引用 NumPy 路线图,列出需要资助的项目或活动和可交付成果,以及为什么它应该是一项资助活动(参见资助什么)。

  2. 它必须包含以下元数据:标题、成本、持续时间或工作量估算,以及(如果已知)执行或协调的团队成员姓名。

  3. 它必须有一个分配的优先级(低、中或高)。这个讨论可以始于 NumPy 社区会议或邮件列表。然而,它必须在邮件列表上最终确定,以便每个人都能发表意见。

如果提议的想法被分配了高优先级,则关于为其分配资金的决定将在私有的 NumPy 指导委员会邮件列表上做出。理由:这些通常涉及关于个人的决定,这通常难以公开进行。这是目前看来运作良好的实践。

有时,临时做出单一资助决定可能很实用(例如,“这是一个绝佳机会,而且现在就有合适的人选来执行”)。然而,这种决策方法应很少使用。

资金使用/节省策略#

NumPy 个人、企业和机构捐助者期望资金将用于项目和社区的利益。因此,我们应该在资金到位时,深思熟虑、战略性地、公平地使用可用资金。对于紧急情况,我们应保留 10,000 - 15,000 美元的储备金,例如,这可以支付一年的 CI 和托管服务费用、1-2 个月的全职维护工作,或者聘请顾问以满足特定需求。

项目资金如何管理#

我们将首先总结目前资金管理的方式,然后讨论如何使这一过程更高效和透明。

目前,项目资金由 NumFOCUS 保管在一个专用账户中。NumFOCUS 有一个小型会计团队,每月以电子表格的形式提供账户概览。这些文件通常会延迟约一个月(例如,二月份的余额和交易在三月底可用)进入共享驱动器,供少数 NumPy 团队成员访问。费用报销和发票通过 NumFOCUS 网站提交。这些然后出现在另一个电子表格中,NumPy 团队成员必须在付款前审查并批准其中每一项。根据 NumPy 章程,由五人组成的 NumFOCUS 财务小组委员会每六个月开会一次,审查所有与项目相关的交易。(实际上,由于交易量很少,我们跳过了一些会议。)

现有流程耗时且容易出错。更透明和自动化是可取的。

项目资金和决策的透明度#

讨论:我们希望通过公开账户实现完全透明,还是对 NumPy 团队的每个人透明,或达到其他级别?

Ralf:我个人希望它能完全透明,比如通过 Open Collective,这样整个社区可以随时查看当前余额、收入和支出。然而,迁移到 Open Collective 并非易事,但如果愿意,我们目前可以在其他地方发布数据。注意:今年的 Google Season of Docs 要求拥有 Open Collective 账户,因此这很可能很快就会实现。

Stefan/Inessa:至少应全面公开一份概况,所有交易应向指导委员会可见。所有交易的完全透明度可能没问题,但并非必需。

此处的选项可能取决于会计系统和所需的工作量。

NumPy 资金——历史和现状#

NumPy 项目在 2017 年获得了第一笔重大资金。要了解 NumPy(和 SciPy)的早期历史,包括一些机构资助其员工或承包商在 NumPy 上工作的时间,请参阅[1][2]。迄今为止,NumPy 已获得四笔资助

  • 分别来自 Alfred P. Sloan 基金会和 Gordon and Betty Moore 基金会的两笔资助,合计约 130 万美元,资助对象为伯克利数据科学研究所。工作执行期间为 2017-2020 年;首席研究员为 Stéfan van der Walt。

  • 来自 Chan Zuckerberg 基金会向 NumFOCUS 提供的两笔资助,总金额为 33.5 万美元。工作执行期间为 2020-2021 年;首席研究员为 Ralf Gommers(第一笔资助)和 Melissa Mendonça(第二笔资助)。

自 2012 年以来,NumPy 一直是 NumFOCUS 财政赞助的项目。请注意,财政赞助并不意味着 NumPy 获得资金,而是指它可以在非营利组织的框架下接受资金。有关更多详细信息,请参阅NumFOCUS 项目支持

NumPy 网站直到 2017 年才显示“捐赠”按钮,而 NumPy 仓库自 2019 年才拥有 GitHub Sponsors 按钮。在此之前,可以在 NumFOCUS 网站上向 NumPy 捐款。2017-2020 年间个人对 NumPy 的捐款总额约为 6,100 美元。

从 2019 年 5 月起,Tidelift 作为其“托管开源”商业模式的一部分,在财务上支持 NumPy。从 2019 年 5 月到 2020 年 7 月,每月支持 1,000 美元,此后稳步增长到每月约 3,000 美元(截至 2021 年 2 月)。

最后,还有其他附带的项目收入,例如,Packt Publishing 的一些图书版税,Google 的 GSoC 指导费,以及通过 NumFOCUS 网上商店的商品销售收入。所有这些金额都很小(两位数或三位数)。

这使得尚未有明确支出目标的项目收入总额达到约 35,000 美元。其中大部分是最近的,来自 Tidelift。在过去 1.5 年中,我们花费了约 10,000 美元用于新的 NumPy 网站和 Sphinx 主题的工作。这些支出决定是由 NumPy 指导委员会做出的,并在邮件列表上公布。

截至撰写本文时,可用资金约为 25,000 美元,并且该金额目前正以每月约 3,000 美元的速度增长。

替代方案#

替代支出策略:不保留现金储备。理由是 NumPy 足够重要,在真正紧急情况下,某个人或实体可能会伸出援手。然而,这并非项目财务管理的负责任方法。因此,我们决定不采用此策略。

讨论#

参考文献和脚注#

GitHub 赞助者