支付贡献者、赞助项目等:ESLint 2022 年支出计划

当 ESLint 首次开始接受捐款时,我们不太确定如何公平地分配收益。现在,在接受捐款三年后,我们已经确定了一个计划,说明如何将我们的资金用于改进 ESLint 项目和生态系统。

在我们上次关于支付贡献者更新中,我们注意到团队取得的一些成功和面临的挑战。当时,我们仍在尝试弄清楚 ESLint 的可持续发展模式。有钱花是一回事,但知道如何最好地使用这笔钱是另一回事。因为我们没有足够的钱支付任何人的全职工资,所以我们尝试支付一位维护者的兼职工资,但没有奏效。在那次实验之后,我们决定重新集结并重新评估,最终决定对团队成员采用按小时付费系统。

一旦我们适应了按小时付费系统,这也让我们了解了每个人每月在项目上花费了多少时间。反过来,这向我们展示了我们每个月实际需要多少钱才能继续维护 ESLint。根据这些信息,我们已经建立了一个我们非常满意的系统。

指导原则

在解释 ESLint 现在如何使用其收取的资金之前,有必要退后一步,了解这种方法所依据的指导原则。每个项目都有不同的筹款目标以及资金应如何使用。对于许多项目来说,目标是让维护者能够全职从事该项目。如果维护者实际上想全职从事该项目,这是一个有价值的目标。这是一种狭隘的资金分配方法,因为大部分或全部资金都流向一个人或几个人。

在 ESLint 上,我们发现没有任何团队成员对全职从事该项目感兴趣。所以我们想:如果我们朝着完全相反的方向发展会怎样?鉴于我们知道人们只会兼职工作,而且可能只是在业余时间工作,我们如何才能尽可能广泛地分配资金以获得最大的积极影响?

当我们问自己这个问题时,我们意识到我们正在围绕一个共同的主题打转:任何有益于 ESLint 生态系统的事情都值得在经济上支持。首先也是最明显的有益于生态系统的事情是有人维护 ESLint,因此我们显然需要确保人们为他们花在项目上的时间得到公平的报酬。但是还有什么有益于生态系统呢?好吧,ESLint 是建立在许多依赖项之上的,我们想支持这些项目,那么如果我们将我们的一些资金捐赠给这些项目会怎样?还有各种各样的插件、解析器和扩展程序,有助于推动 ESLint 的使用,那么如果我们也开始赞助其中一些项目会怎样?而且我们还收到了来自外部贡献者的大量贡献……如果我们付钱给他们会怎样?

因此,通过围绕“任何有益于 ESLint 生态系统的事情都值得资助”的想法,我们找到了更广泛地分配我们收取的资金的方法,我们很高兴分享结果。

我们现在如何使用我们的资金

一般来说,我们定期将资金用于以下事项。

按小时支付团队成员工资

每个月,所有 ESLint 团队成员都可以提交他们在项目上工作的小时数发票。他们在项目上做的任何事情都算数,无论是编写代码、编写文档、分类问题、参与我们的 Discord 服务器、代表 ESLint 参加会议、为我们的上游依赖项做出贡献等等。对开源项目的所有贡献都是有价值的,我们认为为团队成员在项目上花费的任何时间进行补偿是正确的做法。

目前,技术指导委员会 (TSC) 成员和审核员的每小时费率为 80 美元/小时;提交者的每小时费率为 50 美元/小时。

贡献者池

我们遇到的难题之一是如何公平地支付外部贡献者为 ESLint 工作的报酬。我们认为标准的每小时费率没有多大意义,因为 1) 人们可能会在不知道要提前跟踪他们的小时数的情况下做出贡献,以及 2) 信任你不认识的人准确报告他们花费的小时数是一个太容易被利用的系统。尽管如此,我们仍然觉得为团队成员的贡献付费而不是为外部贡献付费是不公平的,因此我们创建了贡献者池。

每个月,我们都会专门预留 1,000 美元,用于奖励对 ESLint 做出任何贡献的外部贡献者。TSC 在每个月底审核外部贡献,并向每位对 ESLint 做出非微不足道贡献的外部贡献者奖励至少 100 美元。再次强调,这些贡献不仅限于编码,还可以是任何对项目产生积极影响的事情。贡献者无需提前申请或请求许可;如果您做出重大贡献,您将收到 TSC 的电子邮件,告知您如何领取报酬。

2021 年,我们向外部贡献者奖励了超过 6,000 美元,我们期待在 2022 年奖励更多。这里的底线是:如果您对 ESLint 做出任何非微不足道的贡献,您将获得报酬。

支持我们的依赖项

正如我们在 2020 年宣布的那样,我们积极寻找并捐赠给我们的依赖项。一般来说,我们直接依赖的任何拥有 Open Collective 帐户的项目都将被考虑接受 ESLint 的捐赠。我们目前每月向我们的五个依赖项捐赠 150 美元

  • Ajv 是一个 JSON 模式验证器,ESLint 使用它来验证配置。
  • Eleventy 是一个基于 Node.js 的静态站点生成器,我们使用它来创建 eslint.org
  • Sindre Sorhus 是一位多产的开源开发人员,ESLint 使用了他的几个模块,包括 chalkglobalsimport-freshstrip-ansistrip-json-comments
  • debug 是一个小工具,当您使用 --debug 标志时,ESLint 使用它来输出调试消息。
  • lint-staged 是一个简单的预提交钩子管理器,可以轻松地在您的开发流程中设置 linting。

我们认为,对于收到大量捐款的开源项目来说,照顾好他们的依赖项非常重要。毕竟,如果您的项目没有这些依赖项就无法存在,那么它们就应该得到您的支持。

您始终可以在我们的 Open Collective 页面上查看 ESLint 正在支持哪些项目。

支持社区

一旦我们开始支持我们的上游依赖项,我们就想,下游依赖项呢?有很多与 ESLint 相关的项目丰富了 ESLint 生态系统,无论是不同的规则集、自定义解析器,还是任何使 ESLint 更好用的东西。我们目前每月向这些项目捐赠 150 美元

展望未来,我们希望继续支持像这样的社区项目。ESLint 的优势在于您构建的生态系统,我们希望尽可能多地支持该生态系统。

大型项目

我们决定花钱的最后一种方式是用于我们戏称为“大型项目”的项目。这些项目需要大量的时间和精力,团队没有时间、兴趣或专业知识来独自完成。每个项目都有一个似乎永远无法完成的任务积压,我们意识到我们可以通过聘请专业人士来完成这项工作,开始逐步完成该列表。

我们的第一个大型项目是重新设计 ESLint 网站的雄心勃勃的项目。我们多年来一直想重新设计我们的网站,并至少尝试过三次以开源精神来做这件事,依靠志愿者和共识设计。每次努力都失败了,所以我们决定是时候聘请一些人来帮助我们了。

该项目的整个范围相当大,包括

  1. 品牌设计,包括徽标更新
  2. 新的网站设计,更详细地解释 ESLint 是什么以及人们如何使用它
  3. 将文档分成单独的网站,以便更易于导航
  4. 将演示分成单独的单页应用程序,以便更易于维护和部署
  5. 重写和更新我们的文档(从头开始)
  6. 将我们的文档翻译成不同的语言

到目前为止,我们已经完成了第 1 步,并且即将完成第 2 步。为此,我们聘请了

这项工作的总成本约为 46,000 美元,我们对一切进展顺利感到非常高兴。这是一个完美的例子,说明聘请专业人士来完成这项工作使我们能够更快地行动,并(很快!)改善所有 ESLint 用户的网站体验。

总结

我们花了一段时间才弄清楚使用赞助资金的正确方法,但现在我们做到了,我们认为我们已经找到了维持 ESLint 未来发展的最佳方法。确保每个人都为非微不足道的贡献获得报酬是我们从一开始就有的目标,我们很高兴我们最终找到了实现这一目标的方法。

此外,转向一种模式,将我们的一些资金与我们的依赖项和其他生态系统项目共享,感觉更符合开源精神。我们是一个相互关联的生态系统,项目相互混合和重用其他项目,以创建更有趣的项目。正如我们会考虑为帮助我们的项目贡献代码一样,我们也需要考虑向这些项目捐款。ESLint 团队对我们收到的资金表示感谢,并对我们的依赖项表示同样的感谢,没有这些依赖项,ESLint 就无法存在。我们希望这种模式也能推广到其他开源项目。

最后,我们打算继续聘请专业人士从事大型项目。运营开源项目有很多不同的方面,期望志愿者处理所有这些方面是不现实的。我们在网站项目上获得了非常棒的体验(该项目应在未来几个月内完成),我们将寻找其他方法来为 ESLint 社区创造更多价值。

最新的 ESLint 新闻、案例研究、教程和资源。

Evolving flat config with extends
5 分钟阅读

使用 extends 演进扁平配置

您的 eslint.config.js 文件现在可以使用 extends 来简化您的配置。

ESLint v9.22.0 released
1 分钟阅读

ESLint v9.22.0 发布

我们刚刚推送了 ESLint v9.22.0,这是一个 ESLint 的小版本升级。此版本添加了一些新功能,并修复了之前版本中发现的几个错误。

ESLint v9.21.0 released
2 分钟阅读

ESLint v9.21.0 发布

我们刚刚推送了 ESLint v9.21.0,这是一个 ESLint 的小版本升级。此版本添加了一些新功能,并修复了之前版本中发现的几个错误。