So You Want To Earn Money With Open Source

Matthias Endler

所以你想靠开源赚钱

我维护开源软件多年,一分钱欧元都没赚到,我以为事情本来就是这样。去年我终于开始研究如何将我的项目变现,在这次演讲中我想分享到目前为止学到的东西。它还没让我发财(暂时!),但我用 analysis-tools.dev 建立了我的第一个可持续的副项目 ✨。

我会谈谈这个项目和其他项目,以及我在走向可持续之路的过程中犯下的错误。

相关链接和资源:

演讲全文记录见下方。(抱歉是一大段文字。)


这是我在 2020 年底于亚琛 Web Engineering Meetup 上发表的关于靠开源赚钱的演讲。组织者很乐意让我把它分享到我的 YouTube 频道上。我基本上是在尝试回答这个问题:“为什么我没能在 GitHub 上赚到 10 万?”我会谈到为自己寻找企业赞助商,以及通往开源维护可持续性的漫长道路。

你可能根本不想开始。这次演讲是为那些抱有这种心态的人准备的:如果需要那么久才能成功,那在开源上花这么多精力可能不值得。现在看来,这次演讲有点灰暗。我原本想做一个非常励志的演讲,但现实中,这很难,我说难,是指真的很难。

我只是想把这一点讲清楚,也许还能激励你去尝试,但首先:为什么我有资格谈这个?我做开源已经超过 10 年了。这个演讲献给我大约 15 年前的自己。我在 trivago 工作,这是一家总部位于杜塞尔多夫的酒店搜索公司。我的博客在 endler.dev。和所有人一样,我也有一个 YouTube 频道。它叫 Hello, Rust!,而且我极其活跃——每两年一个视频。因此,你绝对应该订阅以免错过任何更新。不过今天,我想谈的是开源,而且我有一个非常精心的提纲,只有两点:我的历程和收入模式。

让我们回到 2010 年。那时候的世界看起来确实有些不同。

2010年的Github
2010 年的 Github

这就是当时的 Github,而我入局有点晚。我是 2010 年 1 月加入的,那时 Github 已经两岁了,所以我的用户名被占了。我在各平台上通常用的 ID 是 mre,我发现这个 ID 没人用,于是我就给支持团队发了封邮件问能不能把它给我,然后我收到了这家伙的回复:“拿去吧。”他是 Chris Wanstrath(克里斯·万斯特拉斯),ID 是 defunct,Github 的前 CEO。从那一刻起,我就迷上了这个平台。我真的很喜欢它,喜欢他们以非常亲力亲为的方式对待开源。我用它托管了我的一些项目;你可以在截图里看到我上传了我的博客,因为他们免费提供托管。它是用 Jekyll 构建的,你只需推送到他们的网站,他们就会静态生成,就完成了。不用说,过去 10 年里什么都没变,因为我的博客大体上还是那个样子。它不再是用 jQuery 和 Jekyll 构建的了,而是用 zola 和 Cloudflare Worker Sites,但基本还是同一回事。为了准备这次演讲,我想退一步看看我从哪里来、现在在哪里,最好的办法大概就是查一些统计数据,看看仓库数量随时间的变化能否给我一些启示。于是我查询了 GitHub API。

你可以看到,从 2010 年到 2020 年,这几乎是一条直线。除了 2018 年——看来那年我达到了生产力巅峰,不过算了。总之,这差不多是一条直线,你可能会说投入一些工作就会得到一些反馈,但实际上并非如此。这里存在复利效应。如果我们看我的 star 数量随时间的变化,可以看到一开始增长很慢,而现在差不多呈指数级增长,目前所有项目加起来有 25,000 个 star。另一种视角是关注者数量。这对我来说是个比较新的指标,但我确实从 archive.org 查了一些统计数据(因为 GitHub 的 API 不提供这些信息),同样,也差不多是指数级增长。

你投入了一些工作,但你得到的是你的工作加上利息的复利效应。这不是运气,而是努力。这意味着你知道自己在做什么。与此同时,房间里有一头大象:这一切不过是拍拍你的背而已。直到现在我们赚到的钱是零美元。你可能会有一个问题:如何将这些努力变现。

首先,这算是一种努力吗?

嗯,我不知道你怎么想,但我平均每天大概花两三个小时在开源上:思考开源和创建新项目,也包括维护和代码审查,所以这确实是工作,而且是大量的工作,而你基本上是在免费做这些。

免费做事、把它当爱好做并没有什么不对,但在这种情况下,你本应只做自己喜欢的事。开源不是这样;有时你有义务,你会觉得自己有责任去帮助别人,而这是其中很大的一部分。你在本职工作之外做这些,所以它真的可能成为一种负担。如果你到现在还不知道的话:让这件事变得有价值是很难的,真的很难。我想谈谈从开源建立合理收入模式的一些方式。不言而喻,如果你看过前面的图表,这可能不应该成为你的首要目标,但一旦你到了想要获得一些收入的阶段,你有几个选择。我不想谈把开源作为你业务的一部分,也不想谈大公司和更大规模的支持。我想聚焦于每个人都能做的几件事。赞助 [GitHub 上的] 是其一。在你的常规文档之上提供付费学习材料。例如,你可能有一个视频系列并为此收费。像 Mozilla 那样卖周边商品。咨询也是在你开源业务之外的一种选择。服务和插件——比如编写 ADFS 插件或高可用功能——是面向企业的付费功能的常见例子。

但我们先从基础开始。从第一点开始:赞助。赞助有两种类型:第一种是个人捐赠。个人赞助就是 GitHub Sponsors 的全部内容。如果你想通过这种模式赚钱,你必须考虑漏斗,考虑如何吸引人们的注意力以及如何将其变现。它始于一个产品,可以是任何东西。由此产生兴趣,这种兴趣形成受众,而这个受众最终可能会为你的服务付费,而这实际上就是全部的秘密。任何产品都是这样赚钱的,而在开源领域,如果你想吸引赞助者,你就打造一个人们想要的产品。

如果把这一点映射到开源上,构建一个项目也许就是一个仓库,star 表示受众的兴趣。受众本身由关注者组成(个人关注者或公司关注者),而这些关注者最终可能会也可能不会成为赞助者。我知道 star 是衡量流行度的一个糟糕指标,因为有些人使用 star 的方式和别人不一样。例如,有些人把它当作书签以便以后查看项目,另一些人则是想感谢开发者付出的努力等等,但它是一个不错的初步估计。

现在想想下面这件事。想想我的 star 数量、关注者数量和赞助者数量。想想我现在的“漏斗”。我告诉过你们我有 25,000 个 star 和大约 1000 个关注者,而其中我有三个赞助者,所以 star 与赞助者的比例是 0.01。这看起来相当惨淡。这意味着你需要大约 8,000 个 star 才能吸引到一位支持者。我曾想:“也许只是我这样?”也许 GitHub 前 1000 名维护者没有这个问题。结果发现,情况完全一样。如果你取 GitHub 前 1000 名维护者看他们的赞助者,又是一幅相当惨淡的画面。例如,看中位数,每人 3421 个关注者,赞助者的中位数是零。如果我数学没错的话,那就是百分之零;再看平均值,甚至有 5430 个关注者(因为 Linus Torvalds 把这个数字拉高了)。平均有 2.8 个赞助者,即 0.5%,比我略高一点,但大致在同一水平。现在想想:GitHub 有 4000 万用户,也就是说前 1000 名维护者只占整个社区的 0.0025%。这些维护者在 GitHub 上的收入中位数基本上是零。

这本身也许还不是最大的问题,但要记住 GitHub 2019 年的收入是 3 亿美元。昨天我读到了 Hacker News 上的这条评论

我在 GitHub 上有赞助者,每月稳稳地进账两美元。税后显然更少,所以我还得有份全职工作。

所以这显然行不通。你必须想出不同的开源变现方式,或者干脆等 GitHub Sponsors 变得更流行——看哪个先发生。有一种方式我想快速提一下,就是 sponsorware 的概念。这是个比较新的概念,有些人以前没听说过。说实话我很喜欢它。一般来说,你创建一个项目并保持私有。不过你会在 Twitter 或其他平台上谈论它,说:“嘿,我在做这个东西,但如果你想提前体验,就得成为赞助者。”一旦达到一定的赞助者数量或收入门槛,你就把项目公开。我之前给你看的那个例子——有人在开源上赚到 10 万——正是这么干的。他构建产品和服务,宣传它们,最后把它们向所有人开放。

这有一些优点:首先,你能从真正相信你使命的人那里获得早期反馈。其次,你不必一直无偿工作。第三,你还可能从项目中积累受众和热度。缺点是,如果你是一个坚定的开源或自由软件信仰者,这违背了你的伦理。你希望软件从一开始就是开放的,没有任何附加条件。所以你必须自己做出决定。我试过,我有一个早期访问计划,只与赞助者分享。[我的第一个 sponsorware 是] 一个获取 GitHub 统计数据的工具。[本次演讲中的统计数据就是] 用那个工具生成的。我认为你需要庞大的受众才能做到这一点。问题是你是否愿意投入那么多精力,还是干脆一开始就开放,再考虑其他收入模式。不过,我认为这仍然是一个非常有意思的概念,未来我们可能会[更多地]看到它,所以你现在知道它长什么样了,也知道它的名字了。

另一种是企业赞助。这是一把双刃剑,因为企业赞助意味着一家公司给你钱,有时还想要点什么。他们可能想要额外的支持,或者想让你修某个 bug,多多少少会让你感觉开始为他们打工了。尽管如此,如今这些公司向开源投入的资金相当可观。看看两家大公司 Facebook 和 Google,它们在 Open Collective——一个收集这类捐赠的平台——上的历史累计投入分别是 17.7 万和 84.5 万美元。这真的很棒。我们需要更多公司这样做,但作为一点题外话,或者说小小的抱怨,我认为这些公司做得远远不够。

Facebook 去年的收入是 700 亿,Google 是 1600 亿,这没什么可羞愧的,所以我真想知道这是不是他们能做到的最大程度。当然,比如 Google 也向 Mozilla 等其他项目捐赠过,他们也组织聚会等等。但你真觉得如果没有当年的 Python、Web 服务器或 Linux,当两个斯坦福学生试图构建搜索引擎时,Facebook 和 Google 今天还会存在吗?有时我觉得财富 500 强公司真的不明白他们有多依赖开源,有多少人依赖少数几个维护着我们关键基础设施的人。

我认为他们对开源的投入远远不够。很多人以为开源就像左边的画面那样:一屋子工程师一起想办法构建项目,而现实中,这更像是某个人深夜修 bug,纯粹出于信念在做这件事。公众的认知很可能是错的,真正维护关键基础设施的是一小群人。有时这会导致非常棘手的局面。我的两位童年偶像曾公开谈论过此事:Kenneth Reitz(肯尼斯·赖茨)是 Python requests 库的核心维护者,antirez 是 Redis——一种键值存储——的创造者。一个来自前端开发,另一个来自后端。他们都谈到倦怠,因为大规模承担开源维护者的重担很容易并且很快导致倦怠。互联网永不眠,你也无法入睡。你总会收到工单、功能请求、pull request、issue。你总有事要做,除此之外你还得履行所有其他职责,所以很快就会倦怠。还有一位我深深敬佩的人,名叫 Mark Pilgrim(马克·皮尔格里姆)。他是 Dive Into Python(《深入 Python》)的作者,他曾返回 410 状态码,删除了自己在互联网上的一切。这其实有个术语:infocide,即“信息自杀”。他对生态系统感到厌倦了。如果你了解 Ruby 社区,你可能记得 _why,《Ruby Poignant Guide》的作者。他也做了类似的事。聚焦 antirez 说过的:“一旦我开始收钱为 Redis 工作,我的伦理就不允许我再保持过去的模式,所以我开始强迫自己按正常作息工作。对我来说,这是多年来的巨大挣扎。此外,在这一点上,我确信自己做得比我能做到的要少,但事情就是这样运作的。”感觉他对自己被迫进入那种工作节奏、也许表现不够好而感到内疚。在我看来,这里面有一些倦怠的迹象,这就是开源与金钱之间那种爱恨交织的关系。如果你接受钱,它就变成了一份工作,但你大部分时间并不是在写代码。你在写演讲稿、审查 pull request、查看 issue、在 StackOverflow 上回答问题、在 Discord 上讨论、在 YouTube 或会议上做营销。当你在开源界变得受欢迎时,你会觉得自己面临两个选项:一个是抑郁,另一个是倦怠。如果你的项目不成功,你会突然觉得自己是个失败者、是个错误。零个 star,没人喜欢它。但如果它成功了,所有人都喜欢它,你就会被“拥抱致死”。这是一种非常不幸的处境,你想摆脱被这些责任压垮的状态。你必须设定清晰的界限,并选择你的毒药。接受公司作为赞助者时必须小心。我想给你们展示一个它能如何运作的例子,并[指出]一些风险。今年早些时候,我开始着手一个我拖延了很多年的真正的项目。

你看,2015 年 12 月,我在 GitHub 上开始了一个静态分析工具列表。静态分析工具就是帮助你改进代码的工具,事实证明这类工具有很多。光是开始收集它们就是第一步。我当时没多想,但随着时间推移,它变得非常受欢迎。你可以看到这张图上 star 随时间差不多呈线性增长。2018 年,我开始认真思考,这是否不仅仅是一个 GitHub 项目。我和许多人聊过我从中构建更多东西的想法。真的需要有人把我推过终点线,说服我这是值得的,那个人就是 Jakub。他说:“为什么不据此建一个网站呢?”在大约两个周末的时间里,我们建了一个网站。它是用 Gatsby 构建的,但这其实不重要。我们就这么做了,然后看看会发生什么。我们现在渲染 500 个工具,最初的反馈非常好。人们似乎真的很喜欢它。第一天我们就获得了整整 72 万次请求,接下来一周左右达到了约 150 万次。这很棒,因为突然间人们开始对这个项目产生兴趣。于是我们开始寻找一些赞助者。这些公司很特别,因为他们相信你的使命,同时也懂得开源是如何运作的。他们并不指望你为他们的工具打广告。他们想把东西卖给开发者,所以他们想留在开发者的脑海里,说:“嘿!你是开发者。我们做了一个很棒的工具,你可以去看看!”同时他们也被视为一家支持开源的公司。我认为这是双赢。我得说事情并不总是这么顺利。有时公司只是指望你能提供廉价的广告位,一旦发现点击量不高就立刻跳船,但也有些公司明白他们投资的是一两年后才可能有回报的东西。所以我真的很感激那些理解这一使命的公司。然而,公司想要的和个人想要的不一样。公司要发票。公司要可以抵税的东西。公司要有人维持运转并通过邮件及时响应,所以你确实会有这些义务,而 Open Collective 就是一个能帮上忙的平台。他们有一个面向开源项目的 501c6 计划,充当财务托管方,也就是说他们会处理所有开票事宜并在名义上成为维护者。如果你作为开源维护者或项目贡献者想为自己的工作[获得报销],你得给 Open Collective 开发票。

我认为这是两全其美。再说一次,因为流程非常透明,公司全程知情且不必处理所有财务事务。但这也意味着你必须认真打磨你的公众形象。公司非常想知道赞助你能得到什么,你必须把这说清楚。可能最重要的页面不是你的网站,而是你在 GitHub 上的赞助者页面,在那里你描述不同的档位及其含义。我们有三个档位:第一个面向较小的公司和自由职业者。他们获得的只是曝光,并被视为一家对开源友好的科技公司。每月一百美元。中间档位是企业赞助者,可能是更大的公司。他们也获得徽章,但还会获得一篇关于他们想推广的静态分析工具的博客文章,我们会明确标注这是赞助内容。最后,如果你想更进一步,就是完整的内容创作,可能是视频工作坊,但我们还没有视频工作坊的赞助者,所以我还不能谈这个。我得说我真的很想试试,而且相对于你所得到的来说真的很便宜。

总之,这些是你今天就能做的事。无需改变你在开源上的工作方式,你就可以搭建起来,然后看看效果如何。也许没人回应,那也没关系。清单上的其他事项都算进阶内容。你需要受众,所以你应该从这里开始。

付费学习材料是我们将来会通过 analysis tools 用视频课程来做的事情。有像 tailwind 这样的公司在这方面做得非常出色,你可以向他们学习。至于周边商品,你必须有一个品牌。因此这不是我能做的事,但像 Mozilla 或 YouTube 上的 Coding Train 这样的一方肯定可以做类似的事。咨询始终是一个选项,但它的工作量大得多,而且很可能让你远离你真正热爱的事情,所以它真的变成了一份工作。你得想清楚要不要走这条路。企业服务非常[高级且有趣],适合那百分之一左右可以在商业环境中运行、且有特殊需求的项目。我得说,从顶端开始,逐级往下。先创建受众。在 Twitter 上建立受众再引流回 GitHub,可能比反过来更容易。哦对了,我说过这很难吗?我真的不想以低沉的调子结束。我真的想强调,如果今天重新开始,我还是会把这一切再做一遍。我认为没有比今天更好的贡献开源的时机了。明天可能甚至是更好的时机,因为突然间会有更多的人感兴趣,搭建项目容易得多,你有 VSCode 和 GitHub Actions 这些免费工具,还有免费托管。只用很少的钱就能做成这么多事,真是不可思议。所以你可以试试。最坏的情况是什么?没人在乎?好吧,那你也和我一样了。但如果你想今天就起步,我有一些小建议。第一条建议是:“做好功课。”很多人从学习开始,然后构建东西,然后闭环,但这里缺了一个关键环节。有些人讨厌这个词,但你最终会爱上它。它叫营销。营销对不同的人意味着很多不同的东西,但对我而言,它的意思是把消息传出去,因为如果你不说,别人会说,而你很棒,你只需要意识到这一点。也许不是每个人马上就知道[你的项目],所以你应该更多地谈论它。也许在会议上,也许在 Twitter 上,也许你可以告诉朋友。也许你可以请人们来贡献和支持你。社区里不知怎么有种偏见,认为搞营销就不是真心做开源,但我认为这不是真的。我认为如果聪明、耐心又有热情的人去做营销,世界会更美好;因为我敢肯定那些坏家伙们都在做营销。所以做好功课,但请记住,做一个开源维护者就意味着经营一门生意,而你就是产品。你必须想清楚为什么有人愿意赞助你,因为如果你自己都想不出答案,他们怎么会知道。还要想想漏斗。比如,人们怎么找到你?让人们找到你的最好方式大概是开一个 YouTube 频道。

不过也有更容易的方式。

[首先,]你随时可以在别的项目里帮忙,而且你甚至不必会写代码。如果你擅长设计,那我告诉你,有太多开源项目需要设计师了。简直不可思议。也许可以从为一个小项目设计 logo 开始,慢慢获得一些曝光。另一件事是玩得开心。如果你知道在开源里赚钱很难,这反而可以是一种解脱,因为这意味着你可以实验、可以发挥创造力,而且,我觉得开心才是最重要的。

第二,构建你热爱的东西,因为这终究是你的空闲时间。有人发现这个项目的概率很低,所以最好是你真正感兴趣的东西。如果你不再相信它,就直接转向下一件事。放弃一个你不再相信的项目没关系。没人会为此追究你,除非他们是混蛋,而你也不想让混蛋围着你转。

第三,寻找友善的人,因为你真的会和你的社区一起成长。你需要支持你的项目、最终可能成为维护者来分担重担的人,而这需要很长时间,有时要几年才能找到一位维护者,所以要始终保持友善,试着站在对方的角度想问题。如果可以,多走一步。例如,替他们把 master 分支重新整合进他们的 pull request。直接替他们做了就好。拿不准的时候就说两次谢谢。

第四是培养受众。
激进的营销是一种方式,但平易近人和包容是另一种方式。你要成为人们在遇到棘手问题时想去请教的那个人,或者想知道如何入门开源时会去找的那个人。你要成为在他们第一个 pull request 上帮助他们的人。他们会千倍回报。迄今为止我遇到的最令人兴奋的那些人都乐于解答问题,而且不求回报。你会把他们珍藏在心里。时机到来时,你会想起这些人。我们会说:“这是一个非常棒的合作伙伴,我强烈推荐”,这就叫线索。

最后,做好长期作战的准备。好事多磨。你看,我花了 10 年。也许你只需要五年,甚至更短,但这大概率不是一夜之间的成功。这真的是一项长期投资。

原文由 Matthias Endler 发布

本文章由 stealth/ox-alpha 进行翻译