开源,二世而亡?

转载
2130 天前
15175
火星财经

来源:碳链价值    作者:Daniel Oberhaus     译者:弯月


在各大厂纷纷拥抱开源的当口,“开源代码面临可持续发展危机”的言论也甚嚣尘上。早期,技术爱好者们“用爱发电”,“他们知道在出问题前,没人会注意到他们,没人会重视他们”。但遗憾的是,很长一段时间里,很多从开源中谋取暴利的人,却“没有为开源社区做出过贡献,他们将开源当成礼物直接拿走”,留给开源贡献者无限的阵痛——从开发者到经济学家们不禁发问,开源,还能走多远?本文剖析了以开源软件为基础开发的复杂业务,讨论了建立在免费开源开发者之上的互联网能否可持续发展的问题。以下为译文:

Stephen Henson 审核通过了一个互联网漏洞的时候,正值 2011 年跨年夜的午夜。

这位 43 岁的英国软件开发人员接受了有关 OpenSSL 代码的一处很小的改动,OpenSSL 是一种开源加密协议,其可以保护网络上的很多内容。OpenSSL 是开源的,任何人都可以在线查看其代码,并自愿贡献项目代码,但这并不意味着真的有很多人做出了贡献。

Henson 在 OpenSSL 上花了十多年的心血,OpenSSL 有一个很小的团队,加上其他核心成员也从未超过 3-4 个开发人员。到 2011 年底,他与其他核心开发人员需要负责维护一个包含大约 50 万行代码的代码库,其中绝大部分是由 Henson 自己编写或批准的,这个责担子可不轻。 OpenSSL 保护了大量的 Web 服务器(互联网中三分之二的网站都用到了这些服务器),以及电子邮件服务器、聊天服务器、VPN 以及军事、政府和金融机构的网络基础设施。

12 月的那个晚上,Henson 批准的代码变更是由一位名叫 Robin Seggelmann 的德国开发人员提交的,他帮忙编写了 OpenSSL 的“心跳(heartbeat)”标准。在这项代码变更被批准之前,Henson 和 Seggelmann 已经在这段代码上工作了数周时间,但仍未能发现这个 bug:允许攻击者拦截传递给由 OpenSSL 保护的任何站点的信息。

后来, Seggelmann 承认了代码中的 bug——这就是著名的“心脏出血”(Heartbleed)漏洞,虽然这是一个“非常微不足道”的小改动,却成为了历史上最危险的软件漏洞之一。对于像 Henson 这样经验丰富的人来说,应该很容易发现并修复这个 bug——但是每个人都会犯错误。实际上,在 Google 的一位程序员后来于 2014 年发现并修复了这个 bug 之前,它已经在 OpenSSL 代码中存活了将近两年半的时间。尽管如此,如今这个漏洞依然存活于数十万台设备上,其中许多设备不太可能得到修复。

OpenSSL 只是成千上万开源软件程序中的一个,数百万人每天都依赖这些程序来浏览网页或观看视频,实时翻译或在智能手机上使用语音识别功能等。这些项目都是开源的,这意味着任何人都可以免费查看或使用这些代码。

自从开源创建以来,开源开发的最大卖点之一就是软件开发人员 Eric Raymond 提出的“林纳斯法则(Linus’s Law)”,还有人认为那么多的人查看这些代码,所以“所有的错误都会浮出水面”。因此,在心脏出血 bug 被修复后,每个人心中最大的疑问是:这么关键的一个漏洞为何会被忽视如此之久,而其他开源项目的代码中是否也存在类似的漏洞。

注:林纳斯法则即“足够多的眼睛,就可让所有问题浮现”。

正如 OpenSSL 基金会的前任首席执行官 Steve Marquess 在博客文章中指出的那样,心脏出血可以归因为开发人员的筋疲力竭以及资金的匮乏。据 Marquess 所言,该基金会的捐款预算不到 2 千美元,每年签署的合同收入不足 100 万美元,且无法承担更多合同,因为其开发人员(其中许多人有全职工作和家庭)根本没有时间。

Marquess 还表示,实际上 Henson 是唯一一个全职工作的 OpenSSL 开发人员,而且以他的技术实力如果换作其他地方他所得到的报酬远不止如此微薄。 “这些人并不是为了钱而在 OpenSSL 工作,他们也不是为了出名。他们这么做只是出于对技术的自豪感以及对他们所信仰事物的责任……他们知道在出问题前,没人会注意到他们,没人会重视他们。”


01 

开源恶疾:把开源当成天赐礼物“抢”走的人

很显然,全球互联网的安全性仅靠一位拿着微薄薪资的程序员呕心沥血的无私奉献来支撑着,这本身就是很大的问题,那么谁应该担负起责任呢?Marquess 认为应该由“广泛使用 OpenSSL,并将其视为理所当然的商业公司和政府”站出来。

Marquess 在文中写道:“我说的就是你,世界 1000 强公司,那些靠销售包含了 OpenSSL 产品赚取利润的人;那些弄不清楚如何使用 OpenSSL 就来缠着我们要免费咨询服务的人;那些从来没有为开源社区做出过贡献,却把 OpenSSL 当成礼物拿走的人。”

Marquess 和 Henson 都于 2017 年离开了 OpenSSL,但在临走前他们还为这个项目做好了近期的筹划。在他们离开后,OpenSSL 的核心开发团队已经发展到了 7 人,该项目的资金可以至少撑到 2021 年。这主要得益于 Linux 核心基础设施计划的大量资助——该计划致力于向对互联网安全至关重要的开源项目分配资源。该核心基础设施计划本身的资金来自亚马逊、Google、IBM、微软、Facebook 和英特尔等主要科技公司的捐款。这笔资助意味着 OpenSSL 是安全的——只要这些公司继续捐赠。

从表面上看,如今的开源软件社区非常繁荣。各家公司和政府正在以 20 年前难以想象的速度采用开源软件,而新一代程序员正在开发软件,并且可以随意使用。然而,深入观察你会发现问题已经开始显现。

开源的优势地位给流行软件的维护者带来了沉重的负担,如今他们需要处理比以往更多的 bug 报告、功能请求、代码审查和代码提交。与此同时,开源开发人员还必须处理不断涌入的不熟悉社区规范的企业用户生产和使用开源软件。这导致开发人员疲于应付,并对依赖免费劳力来生产软件的公司产生了不满情绪,这些公司利用开源软件打包成产品后卖给消费者以获取巨额利润。

从这个角度来看,心脏出血并不是唯一一个开发人员精疲力竭和资金匮乏的例子,而是多年以来在开源软件社区内逐渐恶化的系统性疾病的产物。确定这种疾病的症状和原因很容易,但想找到治疗方法却很难。

许多开发人员与 Marquess 一样认为开源发展的主要问题在于财务,如果大型科技公司能够为他们所依赖的开源软件项目贡献更多资源,那么这些问题就可以得到解决。从理论上讲,这可以让开发人员在开源项目上投入更多时间,并激励其他程序员为开源项目做贡献。

然而,仅靠在开源社区投入资金还远远不够。关于如何分配增加的资金以及如何回报提供资金的组织,这本身就是问题。事实上,资本的涌入有可能破坏社区驱动的基础,而近半个世纪这个基础一直支撑着开源的发展。


02 

免费提供啤酒:开源软件的经济基础

为了理解当前关于开源软件经济学的争论,我们有必要回顾一下其历史发展的背景。这可以追溯到 80 年代早期麻省理工学院的人工智能实验室。

那是一个 Marvin Minsky 等计算机科学先驱与 Richard Stallman 和 Guy Steele 等新一代黑客交锋的时代,后者凭借自己的实力从根本上改变了计算机编程世界。Steele 在编写和创建 Lisp 和 Scheme 等编程语言方面起到了重要的作用,而 Stallman 为自由软件运动奠定了基础——这是自 Luddism 以来对技术仲裁者的最大挑战。

在最近一次接受 New Left Review 的采访时,Stallman 描述了麻省理工学院的人工智能实验室培养了一种合作与激进开放的文化,以至于实验室的巨型计算机没有密码保护,实验室的大门始终处于无锁状态。可以肯定的是,Stallman 承认这些开放的文化是环境的产物:例如 Minsky 总是丢钥匙,而实验室里的研究人员不得不共享庞大的计算机,因为这是唯一的一台。尽管如此,该实验室的精神还是给 Stallman 留下了深刻的印象。

1983 年,他向 Usenet 小组(这基本上是一个论坛的原型)发布了一条消息,他宣布打算创建一个操作系统并“免费送给所有想要使用的人”。Stallman 称这个操作系统为 GNU(Gnus Not Unix),这是对当时主流专有操作系统(即 Unix,贝尔实验室内部使用的操作系统)的挑战,而它的名字也蕴含了这一点。

GNU 开启了自由软件运动。1985 年,Stallman 在 GNU 宣言中总结了这一原则:“我认为黄金法则的要求是:如果我喜欢一个程序,那么我必须与喜欢它的其他人分享。软件销售商希望分裂用户并征服他们,让每个用户都答应不与他人分享。我拒绝这种破坏用户团结的方式。”

Stallman 在讨论自由软件时使用“自由”这个词的方式并不是很明显。正如他喜欢的表达方式,自由软件的“自由”意味着“自由言论,而并不是免费的啤酒”。换句话说,自由软件的定义是道德要求,即将代码从对使用方式的限制中解放出来,但这并不一定意味着必然不收分文免费赠送软件。自由软件运动的基本原则于 1989 年正式编纂完成,而当时 Stallman 发布了 GNU 通用公共许可证(General Public License,简称 GPL)——即现在更广为人知的公共版权,它为自由软件开发的爆炸式增长奠定了基础。


Richard Stallman(右)正在展示“自由言论”与“免费的啤酒”之间的区别。图片来源:Wikimedia Commons

两年后,脾气暴躁的芬兰学生 Linus Torvalds 使用 GPL 发布了他的免费操作系统内核 Linux。其内核经常与 GNU 软件一起使用,自发布以来的三十年,GNU/Linux 已经成为世界上 Web 服务器和个人计算使用最广泛的操作系统之一。继 Linux 之后,许多其他有名的免费软件程序都在 GPL 或符合 GPL 标准的许可下发布,其中包括 Apache Web 服务器软件和 MySQL 数据库引擎,两者目前仍在广泛使用。

在狂热的互联网泡沫中,当名不经传的科技公司都获得了令人憎恶的估值时,Stallman 由道德驱动的自由软件运动提供了一种截然不同的视角来看待未来。与硅谷的风险资本家在办公室里大量炮制的空中数字城堡不同,自由软件发挥了作用。Stallman 和他的助手证明了,通过结合道德信念和技术,可以构建出优秀的软件,这些软件能够通过修改来满足用户的个性化需求。90 年代间曾有一个短暂的时期,软件的未来似乎就在于自由——真正的自由。

后来,在 1997 年,一位名叫 Eric Raymond 的程序员发表了《大教堂和市集》(The Cathedral and the Bazaar),这篇文章分析了开发自由软件的过程。Raymond 富有创意的文字和核心是他所谓的“林纳斯法则”(Linus’s Law),主要思想是说如果足够多的人共同开发一个软件程序,那么任何隐藏在代码中的 bug 就会被迅速捕获和修复。从本质上讲,Raymond 为自由软件开发的效率打好了基础。由于软件是公开开发的,所以任何人都可以看到自由软件程序的底层,这意味着任何代码中潜在的 bug 都会被迅速发现。林纳斯法则的必然结果是:自由软件可以更快地发展,因为任何人都可以针对软件提出自己的改进,并发送给项目的核心开发人员。

Raymond 的分析对自由软件运动的影响非常大。在他的文章发布之后,网络浏览器 Netscape(它曾是世界上最有价值的一个软件)公开了它的源代码,并引用 Raymond 的文章作为该决定的“基本灵感”。很明显,Raymond 的宣言引起了一些硅谷人的注意,他们意识到了自由软件的商业潜力。

但还有一个问题:自由软件运动背负着重要的道德问题,而道德对企业很不利。因此,1998 年在 Raymond 和崭露头角的媒体巨头以及“大骗子” Tim O’Reilly 的领导下,一群高调的自由软件传播者聚集在一起,探讨如何让自由软件对行业更具吸引力。正如 Raymond 后来描述的那样,会上的开发者们针对“重新塑造产品品牌,将其树立成企业界渴望购买的产品”为目标,开展了一场“营销活动”。

Raymond 在一篇名为《开源:开源革命的声音》的文章(https://www.oreilly.com/openbook/opensources/book/raymond2.html)中写道:“回想起来,很明显多年以来‘自由软件’一词对我们的运动造成了巨大的破坏”,“这与对知识产权的敌意和共产主义有着很强的联系。”他还指出,“Netscape 之后,[开源]的成功来自我们用积极的形象——更高的可靠性和更低的成本,以及更好的功能——取代了自由软件基金会的负面刻板印象——根据实践做事,取悦管理者和投资者。”

该小组的这个刻板印象被封装到了“开源”一词中,他们集中精力通过让软件源代码“开放”,来回避自由软件的道德维度。

回顾过去,这场营销活动取得了巨大的成功。现在开源软件成为了我们大多数人每天使用的技术平台和服务的核心,包括微软,其前首席执行官史蒂夫·鲍尔默曾将 Linux 和其他开源项目称为“毒瘤”。而如今,微软也将自己定位成开源开发的拥护者,Google、Facebook、亚马逊、IBM 甚至美国政府皆是如此。另外说一句,通常自由软件是指自由开源软件(Free and Open Source Software,简称 FOSS)。


03 

开源经济学

尽管很快很多硅谷的大科技公司都接受了开源软件,但经济学家们仍在努力解释这些项目适应了市场的惯例并取得了成功的原因。当时,自由软件人群兜售的标准解释是:自由软件的开发可以在自由和利他主义的道德要求的基础上持续发展。这似乎不足以解释 Linux 等项目的迅速出现和广泛采用。到目前为止,历史上没有任何一个其他行业能够仅靠贡献者的“善良”就催生出这种技术要求十分严格的项目。

这种显著的异常现象引发了 21 世纪初的一系列研究,人们设法解释开发人员如何通过他们对自由开源软件生态系统所做的贡献而“获利”。简而言之,这些经济学家试图解释开源开发,让这些程序员的行为符合经济学家的理性生产者/消费者的概念:即所谓的“理性经济人”。

2000 年,哈佛大学经济学家 Josh Lerner 和麻省理工学院的 Jean Tirole 发表了开源开发的经济学解释。Lerner 和 Tirole 的这篇论文标题为《开源的简单经济学》(https://www.nber.org/papers/w7600),找出了开源开发人员所获得的多项短期和长期的利益,开源开发中利他主义的作用被大大降低成了意外的副产品。简而言之,Lerner 和 Tirole 声称开源开发的主要推动因素是开发人员获得的经济利益,而不是给予世界自由软件的一些根深蒂固的愿景。

Tirole 和 Lerner 认为,就短期利益而言,开源程序员可以通过在开发该软件的公司工作而直接获得工作的报酬,他们也可以通过修复 bug 或添加功能让软件进一步体现自己的价值。至于长期利益,开源程序员可以通过开源开发来向未来的雇主或风险资本家展现他们的才能,从而推动他们的职业生涯发展,同时还提供了一种信号机制,即开发人员可以从开源的同行那里获得技术支持的认可。

在该论文发表后,其二者对开源开发经济激励的解释成为了新的“福音”。至今,开源经济学还在大量引用该论文。

大约在 2000年,Lerner 和 Tirole 所认定的开源社区是一个人人都是赢家的系统,但在这之前的 20 年中,自由开源软件生态系统在采用的规模和生产方式方面都发生了巨大的变化。这些变化很大程度上应该归功于 Git 的创立,Git 是 2005 年问世的一个开源工具,为软件开发提供了分布式协作。围绕 Git 构建的服务,尤其是 GitHub,大大加快了开源开发的步伐,并大大降低了新的开发人员进入市场的障碍。这是 Lerner 和 Tirole 所预见的一个问题,他们在 GitHub 出现大约 10 年之前就曾质疑“开源项目的管理是否能够容纳越来越多的贡献者”。

通常开源贡献者数量的迅速增加被认为是对其开发范式的验证。然而,在过去十年中,越来越多自由开源软件的开发人员开始谈论维护开源库时的不堪重负。许多开发人员指出,用户权利是这种不堪重负的主要来源。正如开发人员 William Gross 所描述的那样,依赖开源软件的公司不断增加,这意味着开源开发人员需要处理越来越多大量的功能请求和代码的问题,而且许多公司都认为他们的改进和问题应该得到优先考虑。换句话说,似乎开源社区中的许多热门项目都必将成为成功的受害者。

Lerner 和 Tirole 认为,许多自由开源软件的开发人员开始怀疑仅靠个人志愿者的善意而展开的软件开发模式是否可以大规模地持续发展。只不过我们很难确定这个问题。有些开发人员将其视为一种文化问题,他们认为可以通过一些措施来加以解决:向新手传授成为优秀用户的守则,并且要让维护人员知道拒绝贡献也无可厚非;还有人则认为,从根本上说,这是一个可以通过更多资金解决的经济问题;还有人则否认存在任何系统性的问题。


04 

开源的悲剧

2015 年,Nadia Eghbal 辞掉了她作为风险投资家的工作,并着手开始研究为什么许多开源项目很难通过他们的成果赚钱。Eghbal 告诉我们,在她反复听到自由开源项目的广泛使用后,开始对开源软件的经济学产生了兴趣,但却无法弄清楚如何为其开发提供资金。对于 Eghbal 来说,这里面似乎存在着矛盾。许多流行的开源项目都具有创业成功的所有特点:快速采用、庞大的用户群以及低成本的开发。然而,大多数这些项目都会成为风险资本的诅咒,投资者只关心软件是否会带来巨大的回报。那么,问题就在于我们需要确立一些可以持续为开源提供资金的机制。

为了找到解决方案,Eghbal 去采访了问题的源头:开源项目的维护者。在对数百名开源开发人员进行了长达一年的采访之后,Eghbal 发布了文章《道路与桥梁》(https://www.fordfoundation.org/about/library/reports-and-studies/roads-and-bridges-the-unseen-labor-behind-our-digital-infrastructure),这可以说是有史以来开源软件开发经济学方面最广泛的研究。

Eghbal 的报告将开源软件视为一种非排他性的公共产品。这是社会科学中的一个技术术语,意思是任何人都可以使用的资源,例如无论他们是否支付过道路和桥梁费。非排他性的公共产品是健康社区的基石,但它们也受到经济学家所谓的“搭便车问题”和“公地悲剧”的影响。

搭便车问题比喻的是一种情况:因为没有办法阻止那些没有付款却使用商品的人,从而导致商品过度消费或生产不足。根据定义,开源是一种非排他性的商品。例如,像 Google 这样的公司可能会花费大量资源来开发开源工具(例如机器学习平台 TensorFlow 等),但由于这些工具是开源的,所以 Google 也无法阻止其他公司的使用。如果出现太多使用 TensorFlow 却不对其维护做出同等贡献的公司,那么就可能会导致该软件生产力不足,因为维护人员无力承担过量的用户提交的功能请求或 bug 报告。

搭便车的问题与公地悲剧息息相关,公地悲剧描述的情况是:社区所有的成员都受益于对公共物品的无管制访问,但是没有人有动力承担维持该商品的成本。如果社区的每个成员都根据自己的利益使用公共物品,那么最终该物品会被耗尽,社区中的人都将无法再使用。对于自由开源软件来说,公共物品就是数十亿行的开源代码。虽然代码本身不能像食物或土地等其他经济商品一样被耗尽,但其耗尽的资源是负责开发和维护代码的程序员的注意力和精力。

公地的悲剧是经济学中一个经过充分研究的问题,但 Eghbal 意识到这个问题常见的解决方案(即将公地变成私有或受监管的商品)在开源软件开发方面并不适用。将软件变成私有产品会破坏开源开发的整个过程:高效开发的高质量软件,任何人都可以根据需要使用。

另一方面,规范化开源软件的生产(例如,建立类似于国家科学基金会的组织,将公共资助的资产分配给开源软件项目)会破坏开源软件开发的主要优势。监管所带来的稳定性是以效率为代价的,而在快节奏的软件开发领域,这根本就行不通。此外,监管也会破坏开源开发的精神,因为这可能导致设立门槛以决定哪些人可以贡献代码,而哪些人可以消费资源。

有些开源维护者试图按照过去使用他们的软件的方法来规范化开源软件,例如禁止与移民和海关执法部门合作的公司使用该软件。但这遭到了开源社区的强烈反对,最终被撤销,这证明了人们深信开源软件应该向所有人免费提供。另一方面,有关开源社区的访问规则已经浮出水面,这可能会成为开发人员不堪重负问题的解决方案。正如开发人员 William Gross 在文章中指出的那样,在这种“开源,封闭社区”的模式中,如果有人想访问开发人员工作的社区,则实质上需要支付费用。

“我们向用户传达的信息应该是:‘你可以随心所欲地利用代码做任何事情,但是如果你想影响项目的未来,那么请为我们的工作支付报酬’”,“这会导致出现一个更小规模的社区以及更多的分支吗?肯定会。但是,如果你坚持不懈地建立自己的愿景,并为其他人创造价值,那么如果他们想有所贡献就会付钱。”

对于那些不愿意守护开发社区的维护者而言,另一个最合乎逻辑的解决方案似乎是要求开源软件用户通过聘请该项目的开发人员来支持开发。这种方法通过计算来确立开源的资金,即找出谁是开源项目的受益者,并确保他们尽可能多地回馈生态系统。虽然我们没有中央数据库能够跟踪世界上所有的开源贡献者,但有一样东西已经非常接近了——那就是 GitHub。

GitHub 于 2008 年问世,虽然它不是唯一一个程序员用来存储、审查和讨论开源软件的地方,但它相当于自由开源软件社区的市政厅。如今,这个在线软件仓库拥有来自世界各地大约 2500 万名贡献者所创建的超过 1 亿个代码仓库。促使这 2500 万人为开源开发做出贡献的动机有多个方面,但根据开源 Web 开发框架 Ruby on Rails 的创建者 David Hansson 的说法,在过去的二十年里,开源贡献者的情况发生了根本性的转变。

“绝大多数开源软件(尤其是与网络相关的软件)的资助都是由公司出面赞助开发人员处理那些对他们很重要的问题”,“这是一种与 Richard Stallman 的自由软件不同的方式,Richard Stallman 的自由软件只谈论到了人们自行编写软件,而这个非常出色的模型可以为我们提供一系列开源软件。”


图片来源:Cathryn Virginia/Motherboard

这并不是说在闲暇时间推送代码的开源程序员在自由开源软件社区不是特别受欢迎。Hansson 特别赞扬了这些“热情的爱好者”,他们是自由开源软件生态系统的基石。仔细阅读 2017 年 GitHub 上的主要贡献者名单就会发现,Hansson 说得没错——Google、微软、亚马逊、IBM、Facebook、腾讯、百度、红帽和英特尔的员工都是最活跃的开源贡献者。所有这些公司都是营利性的,每年从基于开源代码的产品中可以获得数百亿美元的收入。我联系了其中几家公司,请求他们回应开发人员说他们没有回馈开源社区的指控。那些回应了我的请求的公司快速地捍卫了他们对开源开发做出的实质性贡献。

IBM 开放技术副总裁 Todd Moore 指出,自 90 年代中期以来,该公司一直在为开源项目做贡献,包括他们在 Linux 和 Apache 寻求立足之地时给予的资助。据 Moore 所说,1200 多名 IBM 的员工在工作和闲暇时间为 1000 个开源项目做出了贡献。Moore 表示“很多”IBM 员工在全职为Linux、Kubernetes、Java 和 Node.js 等开源项目工作,而且该公司每年都会向各个开源社区的顶级 IBM 开发人员提供奖励。(Moore 拒绝提供有关奖励性质或他们对开发者社区影响的更多信息。)

他强调,“在过去的 10 年里,我们通过资助每一个主要的开源基础帮助建立了如今的开源革命”,“IBM 鼓励员工为开源效力。”

IBM 还举行了一个年度认证计划,“帮助 IBM 员工了解与开源有关的价值和风险,并提醒他们内部治理的流程。”该教育研讨会还包括“成为某个项目或社区积极成员的最佳实践指南”。据 Moore 所述,有 72000 多名 IBM 员工已获得了该计划的认证。

Google 开源主管 Chris DiBona 也提供了类似的信息:

“自公司成立以来,自由和开源软件一直是 Google 技术和组织基础的一部分。”,“拉里·佩奇和谢尔盖·布林为 Linux 和商用硬件做了很多贡献,而且多年以来 Google 员工也在开源许可下发布了数百万行的代码。”

虽然 DiBona 拒绝提供在开源项目上全职工作的 Google 员工的确切数目,但他表示该公司在 GitHub 上拥有 2000 多个活跃的开源项目。特别是由 Google 创建并得到广泛使用的开源项目,而且每天都有员工为其效力的例子,DiBona 重点强调了编程语言 Go 和容器软件 Kubernetes。

“你几乎找不到一位没有为开源项目做出过贡献的 Google 技术员工。”

“Google 鼓励员工开展与他们的工作、兴趣或爱好相关的开源项目。”DiBona 还指出,据 2018 年的数据显示,Google 员工占 GitHub 所有活动的 1% 以上,这就是该公司及其员工致力于开源开发的证据。

Google 和 IBM 等公司通过要求或鼓励员工开发开源代码,直接为开源社区做出了贡献。许多公司还向 Linux 基金会、Apache 基金会或 Mozilla 基金会等非营利组织提供了捐款,现如今这些组织拥有数百万美元的捐赠基金。

然而,个别开发人员提出的问题不在于这些科技巨头是否为开源做出过贡献;而是这些公司做得贡献是否足够,以及这些贡献是否用到了正确的项目上?

开源 Web 开发框架 Django 的联合创始人 Jacob Kaplan-Moss 认为,这些价值数十亿美元的公司需要为开源社区做出更多贡献。  Kaplan-Moss 特别指出了 GitHub(最近微软以 75 亿美元的价格收购了 GitHub),并建议如果 GitHub 真关心开源,就应该把这笔交易的一半收益交给该软件的维护者和贡献者。

“开源软件不堪重负的根本原因是资金,”Kaplan-Moss 在推文中说,“解决这个问题的唯一方法就是金钱。那些依靠开源软件赚取数十亿美元的科技公司几乎没有给予任何回报。他们现在就可以解决这个问题,而且几乎不会影响他们的利益。如果这些公司真的关心开源软件,而不是为了彰显他们的美德,那么他们就应该把这些巨款变成对开源维护者和基金会的支持。”

Hansson 虽然不反对为开源项目提供更多的资金,但当涉及“开源与资金挂钩的风险”时,他采取了更为谨慎的立场:

“如果你有一个拥有几百个贡献者的项目,而且你开始为一些工作设定特定的金钱奖励,那么我觉得很快你就会进入非常危险的境地”,“对于那些只是为了社区、个人爱好、或创造力而为开源工作的人来说,他们并没有从经济学的角度来审视自己的工作,一旦出现金钱奖励,那么他们也要突然被迫从市场的角度考虑他们的时间投入了。我认为在很多情况下,这种做法都会造成很大的损害。”

有关这方面的损害,Hansson 以自己在 Ruby on Rails 做贡献时的故事为例子进行了说明——当他刚开始为 Rails 工作时,他被功能请求和 bug 报告等压得喘不过气来,而且大量的电子邮件都希望他能够解决所有的问题,就好像他是软件供应商一样。然而,由于完全不涉及市场价值,所以 Hansson 当时的心态是“去你妈的”,他说经证实这种心态是抵抗自由开源软件社区猖獗地压榨开发人员的“头号防御机制”。如果他因为拿了钱而工作,那么他就有义务满足客户的要求。然而,也正因为他自愿为社区项目做出的贡献,所以也没有人会对他表示感激。

Hansson 表示,“我免费提供了软件,所以如果你想帮忙把这个软件做得更好,那肯定非常好啊,我们可以一起加油”,“但如果你想站在一旁,叉着腰对我大吼大叫说这个软件很差劲,那么我会跟你说去你妈的,我又不是为你工作。”

开源社区中肯定不会有人觉得为自由开源软件提供更多资金是一个彻头彻尾的坏主意。即使是 Hansson 这样常常批评将金钱与开源混为一谈的人也提倡在某些情况下应该注入更多资金。总体来说,开源社区面临的难题不在于拥有更多的资金是不是一个好主意,而是这些资金应该如何分配。


05 

自由软件并非免费

Hansson 认为企业赞助是支持开源项目最有希望的方式。这其中有很多种形式。有些公司向为支持特定开源项目而创建的非营利基金会捐款。例如,IBM、英特尔、Google、微软都是 Linux 基金会的“白金捐助者”,他们聘请了全职开发人员为 Linux 内核工作。各个公司支持开源项目的另一种方式是聘请开发人员在公司全心全意为开源工作,或允许员工将部分工作时间用于编写开源项目。

然而,将支持开源项目的重任交给各大科技公司并非没有风险。从本质上讲,开源开发是分散的。然而,如果由一家公司负责支持某个项目大部分的核心开发工作,那么这种集中化将成为极大的风险,因为这家公司可以随时决定停止为该项目提供资金。

此外,向开源项目投入人力的公司显然会优先考虑按照对公司本身最有利的方式开发该项目。虽然这本身并不一定是坏事(例如对 Google 有利的事情可能对许多其他使用该软件的公司也有好处 ),但也可能会牺牲软件使用方式的多样性。

有关这方面的一个例子就是 Android 操作系统的开发,该系统在全球智能手机中占 86% 的份额。Android 是开源的,但几乎所有关于操作系统的开发工作都是在 Google 内部完成的。与此同时,Google 还出资让工程师开发一些专有的应用程序,通常这些应用(例如 Google 地图和 Gmail)被视为 Android 操作系统最大的卖点。

因此,虽然任何人都可以利用开源代码自由创建自己的 Android 操作系统,但 Google 有一项政策,禁止在任何非官方的 Android 操作系统上使用其应用程序。这项政策是合理的,因为这项政策有益于应用开发人员——他们的应用程序无需适应几十个略微不同的 Android 版本,但最显著的后果是开源 Android 操作系统已经与专有的 Google 产品融为了一体。别的公司也可以在手机上免费使用自定义版本的 Android 产品,但这会让他们承担很大的风险。2014 年亚马逊的 Fire 手机非常不明智地尝试使用自定义的 Android 产品,结果以 1.7 亿美元的损失惨淡收场。虽然缺乏 Google 的应用并不是这款手机失败的唯一原因,但也是导致其失势的主要原因。

然而,对于很多开源项目来说,即使想要接受企业的资助,也缺乏这方面的组织结构,软件自由保护协会(Software Freedom Conservancy,简称SFC)的通信主管 Deb Nicholson 表示,他们是一个为开源项目提供基础设施支持的非盈利组织。事实上,Nicholson 表示,自该组织成立十年以来,他们的主要工作就是作为一种联盟的组织,代表其成员的 50 个开源项目接受资金。这些项目包括只有寥寥几个贡献者的小型运营,也包括 PHP 和 Git 等从根本上改变了我们使用互联网方式的大型项目。

在众多为开源项目提供机构支持的非盈利机构中,软件自由保护协会只是其中之一。其他组织(例如公共利益软件和自由软件基金会)提供了各种其他服务,例如法律建议,或为开源项目成功运行提供所需的物理基础设施(服务器、办公空间等)。这些项目中的程序员都知道如何编写好的代码,但他们往往没有时间或资源来处理建立法人以及为项目建立管制组织的琐事。这些非营利组织的作用就在于帮助这些项目解决这方面的难题,保证自由开源软件项目能够获得所需的支持,而程序员则可以专注于他们最擅长的事情:编写软件。

从历史上看,支持自由开源软件的重任已经落到了这些非营利组织的肩上,然而一家名为 Tidelift 的新公司致力于通过市场的解决方案为开源社区解决资金的问题。这家由四名红帽公司前员工创立的公司通过销售 Linux 支持服务,最近成了科技史上排名第三的大笔收购的主角——IBM 以 340 亿美元收购了该公司,而 Tidelift 则希望通过开源软件的安全支持增加流向开源项目的资金。

Tidelift 的首席执行官 Donald Fischer 指出,采用开源项目的最大障碍(特别是在银行等受到严格监管的行业中)在于缺乏软件能够按照预期运行的保证。与专有软件不同,开源项目通常没有客户支持热线。如果有一家公司使用了开源代码,然后维护人员却停止了工作,或者没能及时解决 bug,那么这家公司也无可奈何。

正如 Hansson 指出的那样,从维护者的角度来看,这种选择性地与用户互动的能力在没有获利的开源项目中只是痴心妄想。Fischer 同意这一观点,他认为如果程序员不想因为获取了报酬,就将他们的开发时间花在为用户提供客户支持上,那也无可厚非;但是对于那些想为自己的劳动而获得报酬的人来说,我们也应该为他们提供机会——加入 Tidelift。

Tidelift 有点像 Red Hat 为 Linux 所做的努力,但对于所有其他自由开源软件项目来说:如果企业想获得与他们使用的开源项目相关的支持服务,那么他们就需要支付费用。正如 Fischer 向我描述的那样,类似于 AirBnb 带来了酒店业,Uber 带来了运输业,Tidelift 也想将相同的逻辑用在自由开源软件社区。

Tidelift 通过自己开发的程序跟踪了数百个开源库中的变动,并以此跟踪了代码的变更会对那些使用了这些服务的公司造成怎样的影响。如果其中一个库中的代码出现了安全性、许可或维护的问题,那么 Tidelift 登记在册的开发人员就会处理与该变更相关的任何问题。在这种模式下,各个公司需要向 Tidelift 支付固定的费用,Tidelift 抽取分成后会将剩下的分配给开发人员,而开发人员根据使用他们维护的代码的公司数量来获取相应的报酬。

Tidelift 的模型类似于开源中最古老的一个集资机制:Bug 赏金。这基本上相当于一种协议,即向发现和/或修复某些开源代码中已知 bug 的开发人员支付报酬。市场上涌现的很多服务都是为了满足这一需求,其中包括在区块链中支付赏金的 Gitcoin,欧盟于 12 月推出了面向 14 个开源项目的 Bug 赏金计划(https://www.zdnet.com/article/eu-to-fund-bug-bounty-programs-for-14-open-source-projects-starting-january-2019/)。2017 年,一家名为 Code Sponsor 的公司致力于通过将开源项目与想在开源项目的帮助文件中添加广告的公司联系起来,从而实现开源项目的获利。Code Source 后来改变了其业务模式,并重组为 CodeFund,它利用合乎道德的数字广告为开源项目提供资金。

流行的开源项目中,一些比较活跃的开发人员已经通过 Patreon 等众筹服务寻求支持,并自行筹集了资金。对于那些为知名开源项目工作的知名开发人员来说,这可能相当“有利可图”。例如 Vue.js(一个用于创建用户界面的开源 JavaScript 框架)的创立者 Evan You 每月可以通过 Patreon 获得 1 万 7 千多美元。

当然,Evan You 是开发人员中的一个例外。其他从事开源项目的程序员可以通过众多资源获得更多的报酬。Henry Zhu 最近辞职了,他开始全职为开源 JavaScript 编译器 Babel.js 工作,完全依赖众筹来支持他的收入,目前每个月他可以从 Patreon 上获得大约 1500 美元的收入。

今年 1 月,GitHub 的开源项目经理 Devon Zuegel 在网站上写了一篇名为《我们来谈一谈开源的可持续性发展》(https://github.blog/2019-01-17-lets-talk-about-open-source-sustainability/)的文章。该文章强调了开源社区中的一些问题,其中包括资源与治理不足、缺乏沟通、工作超负荷。Zuegel 恳请社区向服务于改善开源维护者和贡献者等领域的公司提供信息。

GitHub 产品管理高级主管 Kathy Simpson 告诉我,“我们所要做的事就是,倾听那些正在构建软件的开发人员的意见,给予他们大量支持,帮助他们建立对其将来有助益的工具。我们有义务保护这些项目和社区之间的结缔组织,并帮助他们成长。”

“维护可能是一项非常具有挑战性且吃力不讨好的工作,”Simpson 补充道,“我们非常清楚这一点,而且我们希望尽我们所能全面推进。”

尽管表面上 GitHub 非常认真地设法帮助开源维护者,但对于 GitHub 的建议请求却得到了不同的回应。有些开发人员欢迎 GitHub 尝试改善运行开源项目的经验,而有些人则对该公司所暗示的开源存在可持续性发展的问题表示不满。

“对于那些已经在开源努力了 20 年的人来说,可持续发展性的观点会非常令人感动。”Hansson 告诉我,“但如果你提出一个观点说开源存在可持续性发展的危机,那么你必须指出贡献或项目数减少了,而不仅仅是几个无关的事例。我认为有些项目确实陷入了一种奇怪的境况,这些项目中没有从事自由职业的核心维护者,而且也没有一家公司最终认为有必要直接资助这些项目,但我不觉得这可以代表普遍现象。”

开源代码中是否普遍存在可持续性发展的危机,这是一个有争议的问题,但这并不能否定我们需要找到一种解决方案,来解决难以找到资金和志愿者来支持开发开源项目的必要性。无论这些是个别现象还是不断上升的趋势,无论是否有存在这样的缺陷,开源开发人员继续致力于开源项目这一事实证明了他们更加愿意致力于项目和开源开发。然而,大多数开发人员都认为,如果有可持续性的方式为开源社区提供资金,那么肯定可以开发出更好的软件。

正如 Zhu 在去年参加 Eghbal 主持的一个播客系列“Hope in Source”(https://hopeinsource.com/)中所说的那样,开源社区很像一个宗教团体,特别是在金钱方面。人们可以自由地组织这样的宗教机构,以确保在那里工作的人可以继续进行组织的工作,而无需在外部寻找工作。这些有组织的宗教团体需要资金才能保证基层的运作,但他们最重要的资产不是金钱,而是人们聚集在一起让这个社区成为现实。即使拥有世界上所有的钱,也无人可以创立这样的宗教,或维持一个广泛使用的开源项目。

“我们希望鼓励人们参与进来”,“在开源社区中,时间重于金钱”。

尽管如此,科技公司和其他用户依靠资金不足和过度劳累的开发人员所维护的开源软件来为现代社会提供动力,这种现象仍然是不公平的。虽然从一定程度上来看这是一个值得研究的问题,但实际情况还没到这一步。正如 Eric Raymond 于二十多年前指出的那样,开源的最佳特性之一就是其开放性以及社区驱动的开发模型能够以更低的安全风险更高效地创建更好的软件。

对于消费者产品以及关键性的互联网安全基础设施而言,世界变得越来越依赖于开源软件,而且公司和用户不能因为“心脏出血”这样的灾难性漏洞就相信维持这种开放式基础设施需要付出代价。