2019年多家开源公司改变了方向,这是正确的举动吗?

2019 年 10 月 28 日

2019年多家开源公司改变了方向,这是正确的举动吗?

本文从2019年多家著名开源公司因为云服务对其业务的威胁而更改代码许可的事件出发,分析了正反两方意见和心理,再通过开源发展中的历史教训举例,强调了开源的核心是慷概,并呼吁企业必须在开源和利用开源赚钱的权利之间划一条线。



站在 2019 年,自由软件和开源软件让我们当下所熟知的世界成为现实。从 Web 服务器到互动式咨询服务站,再到挖掘 Facebook 社交媒体消息的大数据算法,现在几乎所有与我们交互的计算机系统,至少都部分地使用了自由软件。而在更广阔的科技行业中,自由软件不仅催生了一大批创业公司,还促成了世界历史上最大的软件收购——IBM收购红帽(Red Hat)。


自由软件是一份让我们当前所熟知的世界成为可能的礼物。一开始,自由软件的出现让世界上的很多大企业产生抵触心理,以至于最初让那些不习惯这种模式的众多企业深感不安。这些公司并不是不愿意使用开源软件,只是这个概念太激进,于是就延伸出浓重的政治化色彩。它必须重新换一个名字,于是,它被命名为“开源”。


这一旦发生,开源软件就如洪水猛兽般占领了世界。


然而,最近在这些开源力量中出现了一种骚动。在过去的一年中,像 Redis Labs、MongoDB 和 Confluent 这样的公司都更改了软件许可证,从原来的开源许可证转向更严格的条款,限制了软件的功能,使其不再属于开源软件。


Redis Labs、MongoDB 和其他公司对此的辩解是,这些变动的主要原因来自于一个更现代的技术趋势——托管软件服务。也就是众所周知的“云”。而在很多真实的应用场景下,这又专指亚马逊公司的 AWS。


在这种骚动下,针对 Elastic(Elastic Search 背后的公司)的许可变更,亚马逊公司在今年春天发布了自己的 Elastic Search 代码版本。除了针对亚马逊的版本命名而状告亚马逊注册商标侵权以外,Elastic 公司对此的回应与 MongoDB 和 Redis 非常不同,这家公司甚至都没有表示任何抗议。


“云”的爆发


MongoDB 公司因其“NoSQL”的数据库产品 MongoDB 而创立。MongoDB 的数据库对于存储非结构化数据(例如图像)非常有用,它可以像处理那些传统的数据类型一样处理图像。数据存储在类似 JSON 格式的文档中,而不是存储为关系数据库中传统的列和行。由于 MongoDB 中没有结构化的表,就没有所谓的“结构化查询语言(SQL)”来处理数据,因此产生了术语“NoSQL”数据库。


MongoDB 并不是唯一的 NoSQL 数据库,但它是其中使用最广泛的数据库之一。根据 DB Engines 的行业汇总报告,当前 MongoDB 已经是全世界第五大最受欢迎的数据库产品,从谷歌、Code Academy 到 Foursquare,现在很多公司都在使用 MongoDB。


而且,MongoDB 还引领潮流地创建了一种新的开源许可,这家公司的 CTO Eliot Horowitz 认为,随着计算机技术进入云的新世界,有必要采取一些措施对开源软件业务进行保护。


Horowitz 和其他人对此的解释是,在当前的云环境下,开源社区需要重新思考并有可能更新原来的开源许可,以“应对新环境中的新挑战”。从本质上来说,这些挑战来自于 AWS、Google Cloud 和微软 Azure 这些巨头,因为他们都有足够的能力将开源软件打包成自己的服务,然后转售出去。AWS 或 Azure 打包 MongoDB 并将其作为基于云的 SaaS 服务(Software as a service)的一部分进行售卖,这样的问题在于,这些服务直接与 MongoDB 自己基于云的 SaaS 服务——MongoDB Atlas 形成了竞争。这种情况下,受到威胁的不是 MongoDB 的源代码,而是 MongoDB 自己的 SaaS 服务,而这恰恰是该公司的主要收入来源。


为了应对这种挑战其底线的潜在威胁,MongoDB 就试图将自己的许可证从 GNU 通用公共许可证(GPL)更改为所谓的服务器端公共许可证(SSPL)。SSPL 许可证中写道,本质上,你可以用这个软件做任何想做的事情,除了用它来构建一些与 MongoDB Atlas 形成商业竞争的东西。


一开始,MongoDB 将该 SSPL 许可证提交给开放源代码促进会(OSI), OSI 负责监督和批准新的开源许可证。但是,经过 OSI 来来回回的一系列邮件讨论后,再加上该许可证本身的措辞问题,使得 SSPL 不太可能被 OSI 批准,所以MongoDB今年早些时候已经取消了对SSPL许可的申请。于是,SSPL 并不是开源许可,而且将来也不可能成为正式许可。


如果要究其原因,可以首先了解一下情况,MongoDB 并不是第一个遇到这种情况的开源企业。事实上,这个问题的一部分其实是,许多公司随意使用这些开源软件,但又对开源社区毫无回馈贡献,而来自多方的回馈和完善原本应该是开源软件存在的全部意义。


各类开源许可虽然各有不同,但其普遍适用的核心要旨自 1998 年成立 OSI 起便被定义如下:你可以使用这段代码,做任意你想做的事情,但是你不能拥有这段代码的专有所有权,如果你在另一个项目中使用了这些代码,那么这个项目也不能成为专有的。这些许可使用这样的字眼就是为了防止有些公司把开源代码放在自己的代码中使用,但又不把任何工作成果共享回原始的开源项目。


但是 SaaS 的概念在 20 年前并不存在。而到了今天,Horowitz 认为,在 SaaS 产品中夹带一段代码其实就等同于在应用程序中使用它。


这是一个新颖的论点,但这其实是在为一个非常古老的问题做出辩护,而该问题已经远远超出了许可证的范畴。这是一个可以追溯到很久以前还未成立 OSI,在自由软件诞生之时的问题——如果你免费提供软件,你该如何从软件中赚钱呢?


这个问题的一个传统的答案是,你可以围绕你的开源软件进行服务销售。但对 Horowitz 来说,这个答案还不够好。他告诉 Ars Technica 技术新闻资讯网站:“通过服务支持性合同来为开源软件赚钱从来都不是一个好的商业模式。” 红帽公司可能不会同意这点,但 Horowitz 坚信,更多的保护性许可将带来更多的风险资本投资,并在 MongoDB 使用的开放模式的基础上催生更多的软件业务。“我们很独特,” 他说,“但我希望这成为开源软件的风潮,让我们变得不那么独特。”


他可能是对的。保护性更强的许可证可能会吸引更多的风险资本投资,因为(当然也有待证明)这让他们的投资有更大的回报可能性。但是,如果这些资金真的向此处投资,这已经不算是投资于开源开发了,因为这种加在软件上的限制已经意味着它不再符合开源软件的定义。


反对的意见


然而,还有相当多的开源倡导者已经对 MongoDB 其 CTO Horowitz 的观点提出了反对意见。这些人认为,目前的这一套开源许可证的定义并没有问题,需要改进的是商业模式。


Bruce Perens,最初开源定义(OSD)的联合作者之一,他认为 SSPL 与 OSI 的开源定义第九条是不兼容的,第九条说“许可证不能限制其他软件”。由于 SSPL 强制地让任何包含了该软件的整个 SaaS 软件,即使其中有些代码并不是该软件的衍生部分,统统都成为开源软件,因此和开源定义的第九条是相斥的。“当初我把第九条写进了 OSD,就是为了禁止这种行为,” Perens 说,“我认为 OSD 中该部分文本的意思清楚无误。”


而且,MongoDB 也绝对不是唯一一个抱怨云计算正在侵蚀其利润的公司。另一家数据存储公司 Redis Labs,是第一个针对云提供商对自身业务的威胁发出警告的公司,而 Redis Labs 最终可能会比 MongoDB 有更好的解决方案。一开始 Redis Labs 改变了它的许可证,加入了一种叫做“通用条款子许可证”(Common Clause sub-license)的东西,它禁止任何人出售包含这些代码的任何软件。当然,不管依照何种定义而言,带有这种通用条款许可的软件都不能算是开源的,而 Redis Labs 也认同这一点。它也从未将这些更改了许可的部分描述为开源性质的软件。


但是到了今年春天,Redis Labs 又做出了另一项许可变更,从本质上放弃了其所有关于开源软件的伪装,对其中部分模块采用了自主开发的专有许可。说得更清楚一些就是,虽然大多数 Redis 代码是由三句 BSD 许可所监管的,但有些模块不是,具体而言即指 RedisJSON、RedisSearch、RedisGraph、RedisML 和 RedisBloom 这些模块。


根据 Redis Labs 加于这些模块的许可证,虽然用户可以查看和修改代码,或在其应用程序中使用这些代码,但该许可限制了用户可以构建的应用程序类型。有了 Redis Labs 的新许可证,你就不能用这些代码自由地构建任何你想要的东西。比如,你不能构建数据库产品、缓存引擎、处理引擎、搜索引擎、索引引擎或任何 ML 或 AI 衍生服务引擎。换句话说,你不能使用 Redis Labs 的代码来与 Redis Labs 竞争。这样的许可当然违背了开源许可的核心原则之一——对衍生软件没有限制。


遗憾的是,对于 Redis Labs 和 MongoDB 来说,不能一方面说自己是开源的,一方面又嚷嚷自己应该从开源软件中获利,这在道理上讲不通。而在另一个商业模式中,道理上是行得通的,那就是带专有所有权的软件。


这也正是 Elastic 所选择的一条道路,而且这条路已经开凿有一阵时间了。虽然这里面还有部分问题没有形成板上钉钉的规则,但不可否认的是,一些公司已经通过他们的开源代码和私有代码成功地蓬勃发展起来。Elastic 公司就是这样一个例子,虽然它面临着来自 AWS 的激烈竞争,但还是顽强地坚持下去。


亚马逊公司不仅多年来一直在 AWS 上提供 Elastic search,表面上已与 Elastic 自己的产品形成了竞争,最近亚马逊还打包了自己版本的 Elastic search 代码库,并将其扩展为免费提供的好几项服务,而 Elastic 公司尚未在这些服务方向上发布其开源服务。面对这样的挑战,Elastic 公司我自岿然不动,其反应不过是潇洒地耸耸肩罢了。


历史的教训


为什么 MongoDB 还是想要让自己归类于开源呢?毕竟,专有商业软件非常成功的例子也比比皆是。为什么 MongoDB 并不愿意选择拥抱这条大道继续前进呢?


Horowitz 告诉 Ars Technica,他坚信“开源会产生更好的系统软件,尤其是在数据库方面”,他还强调了,继续让代码保持开源的性质就能拥有安全和社区两大优势。这两方面的优势他确实说得很对,只要保持开源,对该软件更多的关注就意味着更少的 bug,更好的安全性。


但是让我们再回头看一看最初的开源定义,很明显,Horowitz 忽略了深深地嵌入每种开源许可中的另一个关键要素——慷慨。


真正意义的开源永远不会限制你对软件的使用。绝对不会。这可能是开源这一概念能取得巨大成功的主要原因,这当然也是让这些开源产品成为大企业首选软件的原因。


这种慷慨是推动软件社区发展的方式,它是所有成功的开源项目的基石。通过允许尽可能多的用户使用你的软件,就可以为之获得尽可能大的软件社区。这意味着会有更多的人关注 bug,有更多的人修复 bug。这样的开源社区才有蓬勃发展的势头。而这种发展势头会变成产品的市场份额。有时市场份额会转化成为利润,但并不总是这样,开源产品并不能保证你最终一定能获取商业利润。


正如 Perens 所说,“我们必须在‘开源’和利用开源赚钱的权利之间划一条线。虽然开源定义允许你赚钱,但开源的本质并不支持你赚钱的权利。而且我们不会改变这条规则,因为你可以通过他种方式更好地赚钱。”


值得赞扬的是,Horowitz 和 MongoDB 公司如今似乎已经接受了这一观点,或者至少说,在他们撤回 SSPL 作为 OSI 许可证的申请时已经接受了这一不可避免的事实。不会仅仅因为你创造了开源产品,产品问世了,这些产品就非得为你带来巨大的商业利润。


事实上,如果你创造了一个开源产品,他们问世了并传播了,然后此时你把它从市场上拿走了,这种状况可能比你从来没有创造过这款产品更糟糕。


Redis Labs 从开源中收割了所有开源所能带来的好处,其中最主要的好处有社区支持、广泛传播和来自广泛来源的代码贡献,然后,Redis Labs 选择背弃了开源。坦率地说,Redis Labs 此举激怒了整个开源社区。


当自由软件开发者开始抓狂时,他们就会选择为代码拉出分支,而事实上,针对 Redis 变更许可问题,已经拉出一个名为GoodFORM的分支。GoodFORM 分支为重新授权的 Redis 模块保留了许可变更之前的版本,这个项目将为 Debian、Fedora 和其他 Redis 不再发布专有软件的 Linux 版本一直维护这些模块。


于是 Redis Labs 的新许可证带来了一个意想不到的后果,那就是任何想要使用完整的、开源的 Redis 代码的人都必须使用 GoodFORM 分支版本,而不是 Redis 自己发布的版本。


或许个体开发人员不会太在意这其中的区别,但是希望使用开源软件的大公司就不会那么无所谓了。对他们来说,这通常会归结于一个选择——要么使用带有 OSI 许可的开源软件,要么打电话给律师咨询相关法律法规。没有人愿意仅仅为了安装一个软件而打电话给律师。


Perens 告诉 Ars Technica,这正是他们写下最初的开源定义(最初是为 Debian 项目编写的)背后的主要动机之一。“开源的定义意味着你不会仅仅为了成为一个软件的用户而需要一个律师,” Perns 说。“而我们做到这一点的方法之一,就是最小化法律负担。”


然而 Redis Labs 的新许可证却将自己的公司用户置于需要律师的位置,因此 GoodFORM 成为了更合乎情理的选择。这也暗示了为什么 MongoDB 最终仍然想要保持其开源的特性。


从历史上看,其他从开源转为闭源许可证的项目进展并不算一帆风顺。在 20 世纪 90 年代的大部分时间里,Xfree86 项目是运行 X Windows 的事实标准,这一直持续到 21 世纪初。从 2004 年起,Xfree86 发布的代码,被自由软件基金会认定违背了 GPL 许可。那些使用 Xfree86 的下游操作系统认为这种状况是不可接受的,于是一个分支 X.org 诞生了。到了今天,X.org 完全替代了 Xfree86 曾经占据的地位,而 Xfree86 则已经被历史所抛弃了。


其他不难找到的类似例子还包括:从 OpenOffice 中分离出来的 LibreOffice 分支,从 MySQL 的许可变更中分离出来的 MariaDB 分支,从 Ethereal 中分离出来的 Wireshark 分支,这样的例子简直举不胜举。在所有这些情况下,需要注意的关键点不仅仅是诞生了分叉,随之而生的还包括新项目带来的开发人员、社区和长期支持开源软件的发展动力。如果失去了来自开源社区的善意,那么它相应的报复就可能造成灭顶之灾。而报复的反扑常常也是非常高效的:Xfree86 实际上在 X.org 启动六个月后就迅速死亡了,而 OpenOffice 也同样很快地就变得无足轻重。


因此,开源的历史带给我们的最重要的教训是,一旦你成为了开源集体中的一员,你就不太可能中途改道并依然生存下来。


开源的核心是贡献


如果开源的历史告诉我们,在开源这条路上没有回头路,那么值得思索一下,一开始为什么要选择开源。


Beanbooks是由 Linux 计算机制造商 System76 所派生出来的一个小项目,它也是 Perens 所认为的,开源软件理想场景的一个完美示例。在“新兴的开源经济范式”这篇文章中,Perens 认为公司的非差异化软件是使用开源软件的最佳场景。也就是说,开源软件能提供公司业务的基础架构,但不是核心业务部分。


换句话说,Beanbooks 并不是 System76 的利润中心,但它为 System76 的利润中心提供了一种支撑性技术,该公司的利润中心仍然是构建基于 linux 的计算机。


然而,尽管 Beanbooks 是开源许可证的最佳候选项目,但事实上它却并不是开源的。为什么呢?


System76 的实际选择是出售一个托管的 Beanbooks 版本,即一个 SaaS,当时公司担心之后会出现一个更大的公司,采用 GPL 许可监管的代码,但产品内容本质上是对 Beanbooks 的克隆,并从 System76 的投资中夺走所有的利润。所以 System76 的创始人 Carl Richell 说,他对 MongoDB 和 Redis Labs 这些公司的担忧表示感同身受,但是他之前就做出了选择,已经走在了“担心有人为了竞争而窃取你的代码而出售闭源 SaaS 软件”的非开源道路上,并为之深感后悔。


Richell 对 Ars Technica 说:“我们担心有人会把这样的软件打包,那样的话我们会失去所有的投资。” 他说,System76 在想要用一些类似专利保护的东西来保护这些软件几年,但那“最终伤害了我们,伤害了平台,我们本不应该抱有那些顾虑。”


虽然 Beanbooks 的 SaaS 版本看上去不错,但是这些可用的代码不会得到更新,而从自由软件的角度来看,没有更新的代码其实就毫无用处。这些代码的 Github 页面就像是是一个死寂的无人镇一样。没有人来推动代码的发展,没有交流的社区。尽管 Beanbooks 的服务还在继续,但伴随这种服务的并没有一个社区去贡献各种想法、代码、以及其他活跃的开源项目所拥有的一切公共社区资源。Richell 认为,如果 Beanbooks 从一开始就拥有 GPL 或类似的开源许可证,它可能会避免自己现在的命运。


“如果有人想要使用这些软件,单就这一点来讲就已经足够好了,” Richell 这样说。对他而言,成功的关键不是软件开源本身,而是随之而来的创新动力。“这其中的差异不是去看你今天的成就,而是你能以多快的速度进步,” 他有感而发地说。作为软件开发者,你有一个良好的开端,单就这一点并不够,你还希望对自己的长远目标有一个规划。用 Peren 的术语来说,这些才是在竞争中真正体现差异的地方。


“取得成功的唯一途径就是始终保持领先,” Richell 补充说道,“我并不认为这和软件许可证有任何关系。”


多种软件自动化和部署工具的制造商 Chef 公司似乎对这一点深表同意。基于这一精神,又开辟了与 MongoDB 和 Redis 截然相反的一条道路。在今年春天,Chef宣布将之软件许可更改为在 Apache 2.0 许可下的完全开源。Chef 首席执行官 Barry Crist 写道:“我们欢迎任何人使用我们的软件,并根据自由软件的四项基本自由原则对其进行扩展开发。” 虽然 Crist 发表的言论中并没有提及其他任何公司,但仔细揣摩,还是能看出“四项基本自由原则”这里的措辞正是针对 Redis 和 MongoDB 的一种回应。


展望未来


人人都喜欢听受压迫的弱者奋起反抗的故事,Redis Labs 和 MongoDB 也想要把自己粉饰成一个开源的受压迫者,揭竿而起英勇反抗以 AWS 为代表的邪恶势力。而他们真的是受压迫的弱者吗?


至少目前看起来,Redis Labs 和 MongoDB 仍然是非常健康发展的公司。今年早些时候,Redis Labs 还筹到了6000万美元的资金,而且根据提供资金的公司而言,Redis 已经为一次成功的 IPO 做好万全准备。而从各方面而言,MongoDB在2017年的IPO都算得上是一个巨大的成功。该公司股票首次公开发行价格为 24 美元,此后一直稳步攀升。如今,它的股价已经在每股 100 美元以上。在 2019 年早些时候,虽然 MongoDB 最大的用户之一 Lyft 确实转用了亚马逊,但在股价小幅下跌之后,MongoDB 的股价又回到了 Lyft 变节之前的水平。


由此可见,两家公司其实都没有受到太大影响。或者说,至少现在还没有。他们许可证变更的影响还有待观察,但是考虑到之前 MongoDB 的大部分开发贡献本就来自于自家员工,所以无论是否开源,MongoDB 很可能都能够一直保持不错的状态。


其实,这两家公司的业务都不会直接影响更大范围的整个开源生态。开源生态环境从来就不是适合每家企业的。正如 Perens 在今年早些时候的一次对话中所说的那样,“只要你不将之称为开源,你可以使用任何你想要的软件许可,那是你的自由。但如果选择开源,就得服从于某些权利,为了保护自己的商业模式而放弃这些权利在道理上是讲不通的。”


事实上,在我与开发人员和创始人的所有对话中,有一句话总是浮现在我的脑海中。System76 的创始人 Carl Richell 说得再明确不过:“如果没有把‘奉献’嵌入到开源中,开源就无法工作。”


所以,在这种情况下,无论你报以什么目的来使用开源软件,奉献都是使用开源软件的基本权利。


这一直以来都是对所有新的开源许可的基本定性测试,即该许可是否限制了软件的慷慨程度?开源之所以能发展到今天,是因为它可以在任何地方、任何东西上使用。想要把开源软件和专有软件结合起来吗?可以。想要重新编写开源代码库,以便它可以与你的专有代码进行接口吗?也可以。想要把那个开源代码库拿过来,把它包装成一种服务,然后卖掉它吗?仍然可以。因为最终,这就是开源的定义:通过奉献而获得自由。正如 Perens 所指出的那样,即使这种模式对某些特定的企业不奏效,开源就是开源,本该如此。


英文原文:


In 2019, multiple open source companies changed course—is it the right move?


2019 年 10 月 28 日 10:543724

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论 3 条评论

发布
用户头像
cloud -- eat --> opensource -- eat --> software
2020 年 05 月 07 日 17:45
回复
食物链出来了
2020 年 05 月 08 日 10:57
回复
用户头像
国内的开源还有很长的路要走。
2019 年 10 月 31 日 18:31
回复
没有更多评论了
发现更多内容

Redis学习笔记(散列类型)

编程随想曲

redis

牛排等级之美国篇

地藏@易果18916037281

最好的汇报是不需要汇报

伯薇

团队管理 领导力 沟通 汇报 可视化

开源一个自研的基于Netty的高性能网络通信框架

Geek_373e87

TCP dubbo Netty

MyBatis 3 解析Mapper映射配置

杨家昌

mybatis 配置 Mapper XMLMapperBuilder

算法篇之数组右移

月夜

算法 数组右移

在 TypeScript 处理空值异常

寇云

typescript 前端开发

spring boot 集成 elasticsearch 7.x (一)

wd

elasticsearch high level client

关于架构的几件小事:架构是什么

北风

架构 企业架构

关于 DeepL 机器翻译能力

梁帅

产品 互联网 机器翻译 谷歌Google DeepL

深入理解Java中的Lambda表达式和函数式编程的关系

jerry

Lambda java8 函数编程

hive 建表语句迁移

杨飞

小米手机广告在日本「炸」了,背后的教训是什么?

葛仲君

产品 本地化 小米 日本 文化

这样理解Java中的函数式编程就对了

jerry

java8 函数编程

iTerm2使用小技巧-密码管理器

小菜与老鸟

iTerm

性能优化第一课:性能指标

kimmking

性能优化

专题:快速开发那点事儿 | 轮子怎么选

HPioneer

Java 敏捷开发 Ruoyi 快速开发

央行:取消境外机构投资者额度限制,推动金融市场进一步开放

kimmking

讨论:应不应该用存储过程?

kimmking

Java并发编程基础--Synchronized

Java收录阁

线程

回"疫"录(9):守住我们自己的净土

小天同学

疫情 回忆录 现实纪录 纪实

自助设备系列——自助设备的春天

孙苏勇

产品

没有业务规则的技术实现

wd

吐槽

第一篇InfoQ的博客

程序员小岑

写作 体验

jenkins集成maven获取远程项目

kcnf

测试驱动开发英制单位转换

escray

学习 CSD 认证实战营

一种消息消费失败的处理方案

redis kafka

地址收录

gogogo

Ubuntu 20.04 装机手册

小柒

Linux #Ubuntu #geek

为什么很多技术都觉得前端很简单?

极客时间

前端 前端开发 前端工程

我为什么不买Mac

Winann

效率 效率工具 Mac apple

2019年多家开源公司改变了方向,这是正确的举动吗?-InfoQ