< p > [csdn编者按]作为一名使用开源软件的开发者,你有没有想过开源软件是如何盈利的?它是如何工作的?本文作者给出了他从两个方面看到的案例和建议,并思考了让开源软件延续下去的方法。让我们一起来看看。作为一个软件开发人员,你可能没有意识到开源背后的商业逻辑对大多数人来说是完全不合理的。
例如,几天前我和一个“普通人”进行了如下对话:
我:“对不起,我迟到了今天的工作很忙。"朋友:“没什么。没什么。”你在工作中遇到什么问题了吗?我:“我们将在项目开发的三个不同的JavaScript框架中选择一个,这将是下周的最后期限,所以我们必须尽快做出选择。朋友:“哦,哦,我明白了。”哪个相框最便宜?我:“哦,他们都是免费的,没有钱。”“朋友:(())
在大多数行业中,你需要为能够帮助你完成工作的工具付费,但在软件世界中,我们大多数人都可以使用各种免费工具来构建应用程序。
,最流行的文本编辑器?Visual Studio代码,免费
,最流行的源代码控制提供商?免费Git
最流行的JavaScript库?React、Angular、Vue和其他竞争对手都是免费的。
付费软件并不罕见,但令人惊讶的是,仅在过去几年中,我们就将许多重要的基础设施转移到了自由开放源码软件上。将
转移到自由和开源工具对开发者和整个软件行业都有很大的好处,但是这种改变也带来了其他的后果。在这篇文章中,我将讨论其中一个后果:一个有问题的经济模式和我们可以采取的措施
让我们首先简要回顾一下今天我们是如何最终获得开源模型的。
开源是如何产生的?
为了让你意识到时代的变化有多伟大,让我们来看看微软高管在21世纪初所说的话:
开源是对知识产权的严重损害。我无法想象还有什么比开源对软件行业和知识产权行业更有害的了。“——前视窗主管吉姆·奥尔钦(Jim Allchin),“历史已经证明,尽管这种模式(开源)可能有一席之地,但它并没有成功地为消费者建立一个受欢迎的市场和功能强大且易于使用的软件。“——微软前高级副总裁克雷格·蒙迪
,从今天的角度来看,很容易嘲笑这些言论,但当时这种观点并不激进。到2000年,开源已经是一个已经确立并逐渐发展的概念,但是大多数公司仍然选择使用支付方案来构建应用程序。
我在软件行业的职业生涯始于21世纪初,当时我的第一份工作涉及一个基于IBM的编写Java代码的IDE,一个付费的源代码控制方案(我宁愿不记得),以及一个托管我们生产程序的IBM大型机。我在21世纪初使用的

IBM Rational Application Developer至今仍然存在。
所有这些工具都需要花钱,很多钱,但这种支出被认为是可以接受的,因为这些工具提供了足够的价值,可以保证成本是值得的
在接下来的十年里,这个行业慢慢转向开源公司越来越意识到,像MySQL和Apache这样的开源代码工具不仅是可行的,而且比花费大量金钱的商业产品还要好。
我转移到开源的经历是关于网络的。与今天的网络相比,2000年代中期的网络就像是一个荒凉的未开发的西部。网络开发人员的任务包括支持一系列令人眼花缭乱的浏览器,从最新的网络浏览器7到旧的IE6和火狐。开源浏览器开始挑战微软对浏览器市场的限制。由
开发人员构建的管理跨浏览器开发复杂性的工具包括Dojo、MooTools、jQuery和许多其他工具等

2年6月的jQuery主页
这些框架都采用了不同的方法和使用不同的API,但它们都有一个重要的共同特征:自由和开源
更成熟的开发生态系统,如Java,。NET,当时仍在与开源的好处作斗争,但网络从一开始就建立在自由和开源软件的基础上。
对于像我这样的网络开发新手来说是一件好事,因为这意味着我可以在家里马上使用Dojo和jQuery来做一些事情,并且我可以在公司里开始使用它们——我曾经为我需要的软件工具付费。
我不是唯一一个可以立即抓住机会使用这些新库的人。在2000年代后期,jQuery的使用率激增,催生了一个基于jQuery的庞大jQuery插件生态系统。这些插件中的大多数都是免费的和开源的,因为那时,免费的和开源已经成为人们对所有网络框架和插件的期望
新一代网络软件激励了许多开发者(包括我自己),并帮助网络成为了现在。“所有软件都必须是自由和开源的”的期望导致了当今开源社区的一个困境:在经济和资本结构方面存在问题。
开放源码和经济学
在开始时,开放源码项目是个人或小团体感兴趣的项目,后来与世界自由分享。这种现象在软件世界中非常普遍,是一件好事。
,但这并不意味着这些开发人员所做的全部工作都是为了无私的奉献。今天,人们参与开源项目的主要动机是为了他们自己的职业发展。例如,jQuery团队的许多前成员现在在大型技术公司中扮演着重要的角色。几个MooTools的贡献者现在正在脸谱网上做反应。我参加了两年的jQuery UI,这段经历帮助我获得了今天正在进行的工作。
最初认为职业发展是参与开源的主要驱动力,但当项目作者取得一定成功时,可能会出现问题。因为事实证明,一旦你得到了想要的宣传,你会突然觉得处理GitHub的随机问题不再是度过周六晚上的理想方式。
在这种情况下,许多开发人员会试图通过募集捐款来弥补自己的时间和精力。例如,如果您回顾2007年的jQuery网站,请注意屏幕左下方已经出现了一个捐赠按钮。大约从那时起,

Dojo项目也在网站上设置了捐赠选项。

如今,捐款通常是通过Patreon或某种形式的赞助来筹集的,如ESLint和Vue.js项目也许最臭名昭著的例子是流行的core-js库,它在每次安装时都会显示一个公共捐赠请求,这引起了一些争议。感谢您使用核心JS(https://github.com/zloirock/core-js)来聚合JavaScript的标准库!这个项目需要你的帮助!请考虑支持我们的开放集体或帕特森!> https://opencollective.com/core-js>,·https://www.patreon.com/zloirock,和《核心期刊》的作者目前正在找工作。-)比这更有争议的是,自去年以来,标准JavaScript项目开始在每次安装软件包时显示广告。
正如您所料,开发人员对广告并不十分满意,因此npm立即采取措施,禁止在运行时、安装期间或软件开发周期的其他阶段(如通过npm脚本)显示广告的任何软件包
无论你如何看待npm日志中的广告,有一个我们都能达成的共识:从经济角度来看,作者想从自己的作品中赚钱的想法是完全正常的。
在当今的开源世界中,核心js和标准等项目提供的价值与维权者获得的经济利益之间存在巨大差距。
考虑到这一背景,让我们来看看我认为可以用来尝试解决资金缺口的三种方法
解决方案
解决方案1:基础
开源项目资金问题最早的解决方案是以基础的形式其中最著名的是Linux基金会该基金会成立于2000年,现在拥有一个超大型的成员团体。该基金会支持几个最大的开源项目,从Linux本身到Node.js,到jQuery,以及几乎所有介于二者之间的项目。

Linux基金会支持大量项目的开发
尽管Linux基金会是最大的软件基金会,但还有许多其他基金会支持更专业的软件技术或领域。例如。NET基金会帮助支持。NET项目,而FINOS或Fintech开源基金会支持金融领域的开源项目。
这些基金会做了非常有用的事情。像Linux这样的大型开源项目之所以一直保持到今天,是因为它们不是万能的,不能完全解决开源资金的问题。也许
基金会最大的问题是它支持的项目的广度。如果你是一家公司,然后你花钱加入一个基金会(通常是一大笔钱),那么你只能期望基金会将这些资金恰当地分配给各种开源项目。当基金会支持的项目数量惊人时,不能保证你的钱会投资到你的公司会使用或关心的项目上。你的钱也可能流入你的竞争对手使用的开源项目。
因此,对于大型成熟项目(如Linux、Node.js和jQuery),我认为基础是一个很好的解决方案,但它对不太成熟的开源项目没有太大影响。但好消息是,对于这些较小的项目,另一种模式最近吸引了很多关注:订阅。
解决方案2:subscription
“subscription”长期以来一直是开源项目作者筹集资金支持其工作的一种流行方式。
在21世纪初,使用PayPal等服务进行一次性捐赠和重复支付非常流行。最近,Patreon推出了一种订阅模式来资助开源项目,现在许多不同的订阅平台都在竞相提供类似的订阅服务。
例如,2016年推出的开放集体平台提供了一个围绕公众捐赠的融资模式

现在,许多项目使用开放集体,包括引导和核心js因为公开集体的捐赠是公开的,它可以告诉你一些项目的实际收入。例如,下面是开放集体中给Bootstrap捐款最多的一些组织和个人。我最喜欢

模式的地方是,它可以鼓励组织向项目捐款——激励机制是,捐款最多的组织将出现在最大捐助者的名单上。例如,我不知道细分市场最初是什么,但在看到他们是Bootstrap的第二大捐助者后,我检查了细分市场提供的服务。
然而,开放集体并不是这一领域的唯一玩家GitHub去年推出了第一个GitHub赞助商——GitHub的内置开源赞助计划。GitHub在这个领域有相当大的自然竞争优势,因为GitHub本身在过去十年左右的时间里一直是托管开源项目的经典选择。
,然而,值得称赞的是,GitHub确实采取措施使其赞助计划与其竞争对手平行。例如,github上的任何项目现在都可以创建一个. github/FUNDING.yml文件,您可以在其中列出该仓库可以提供的所有赞助方法,无论该方法是否是GitHub赞助者。
如果您尝试,GitHub将在您的仓库上显示一个“赞助商”按钮,列出您的用户可以选择的所有赞助方法。例如,核心js的GitHub库中的过程如下:最后一个服务

在上面的截图中,即Tidelift,它具有非常独特的功能Tidelift是一个订阅产品,每月费用约为1500美元,提供他们所谓的“托管开源”在Tidelift的网站上,他们将服务分为三个部分:
工具我们提供工具来跟踪您使用的所有依赖关系,标记问题,并实施策略
管理。我们代表您管理核心、关键的包,包括研究和解决问题,因此您不必亲自为
维护者工作。为了维护许多重要的项目,我们将招募维护人员并支付费用,以便从根本上积极预防和解决问题
。我怀疑这种方法,因为它感觉像是一种支持开源维护者的间接方式,而且我认为公司没有足够的动机订阅它。尽管如此,我还是很高兴地看到,一些公司正试图用创新的方法创造一种不同的开源基金模式。另一点是Tidelift已经筹集了4000万美元,所以仍然有一些投资者认为Tidelift的模式有一些真正的潜力。
总体而言,或许对订阅服务的未来持乐观态度的最大依据是目前存在的竞争对手数量更多的竞争者意味着更多的想法。如果潜在的经济原则能够正常运作,最好的原则将带来越来越多的项目。通过GitHub的参与和在仓库上提供“赞助商”按钮,有助于确保这些赞助服务始终可见。
我对订阅服务感到悲观的原因是它们严重依赖慈善事业。说服公司捐款并不容易,即使这些订阅服务提供了一定的激励,比如出现在顶级捐赠者的名单上,我仍然认为他们需要向公司提供更多的东西来换取现金。
在结束我们关于开源基金解决方案的讨论之前,我想谈谈一个你可能想不到的终极选择。
解决方案3:花钱购买软件
为了写这篇文章,我在做研究的时候学到了很多关于如何解决开源的财务问题,但是没有一个包含最简单的经济解决方案:直接让公司为他们使用的软件付费。
我在自由软件和付费软件领域有着丰富的经验,因为我在职业生涯中已经涵盖了这两个领域,随着时间的推移,我的观点已经逐渐改变,从对开源的坚定信念转变为在面临何时支付软件费用的问题时更加务实——这主要是因为我个人经历过开源项目的资金困难。
我已经参与免费开源的jQuery UI项目两年了,我将自豪地看到我们的组件帮助世界各地的Web开发人员构建更好的应用程序。但与此同时,我也看到,当维权者失去兴趣,赞助商不再有足够的钱支付账单时,一个项目将很快消失。今天,jQuery UI理论上是Linux基础的一部分,但是这个项目最后一次发布是在2016年。
之后,我为免费开源的NativeScript项目工作了五年,我们的框架已经帮助许多JavaScript开发人员构建了iOS和安卓应用程序。然而,在维护NativeScript的同时,我理解在无法直接赚钱的情况下为框架筹集资金有多么困难,尤其是当你的框架不得不与Facebook的React Native和谷歌的Flutter等框架竞争时,这些框架似乎有着无尽的预算,可以接受零收入。
与我在jQuery UI和NativeScript中的工作形成了鲜明的对比。在过去的几个月里,我已经换到了肯德尔法团队工作,在那里我们向React开发人员销售高级用户界面组件。在jQuery UI和NativeScript的时候,我很难解释项目的财务状况,而KendoReact团队的情况非常简单:开发人员付钱给我们,作为回报,我们为他们提供了一套很好的UI组件。

kendo-reach用户界面组件示例程序:https://telerik . github . io/kendo-reach-finance-portfolio/#/stock
付费软件有许多好处与在GitHub上随机查找项目相比,付费可以为您提供更多保证——例如,保证更新、保证更一致的应用编程接口,以及保证您在不可避免地遇到问题时可以联系公司。
,但这并不意味着付费软件是完美的付费将使社区建设更加困难,因为你的付费用户永远不会像免费用户那样多。此外,该集合还要求您拥有一些公司基础设施,这对于小型项目来说可能过于复杂。
由于上述原因,我不建议所有或大部分软件采取收费措施开源软件给世界带来了很多好处,开源应该继续是我们开发大多数软件的方式。但我确实认为付费软件会有一席之地,不应该被视为原则上的错误,并立即被开发者拒绝。
除了基金会和捐赠两种渠道外,软件收费应被视为资助软件项目的另一种可行方式。
摘要
在当今的软件世界中,开源项目所能提供的价值和项目所能得到的补偿之间存在着巨大的差距。
在这种脱节的刺激下,许多服务应运而生,试图使开源的经济方面合理化基金会可以帮助确保大型开源项目能够继续运行,订阅服务可以帮助小型开源项目维护者支付账单。
我希望我们能鼓励公司为他们使用的软件支付更多的费用。这些支付可以以基金会成员、订阅开源项目等形式进行。,或者直接通过软件支付。理想的情况是,这一领域的持续创新将有助于简化支付流程,并鼓励更多公司支持那些对他们大有裨益的行业。如果公司愿意这样做,那么我们可以更简单地向朋友和家人解释什么是开源。