前言
大家都知道,Elasticsearch是大名鼎鼎的开源搜索引擎,但你知道吗,它现在已经不是开源软件了,这是怎么回事呢?
今年年初,Elastic公司把其主打产品Elasticsearch搜索引擎和Kibana可视化平台的许可证都改了,从Apache 2.0换成了SSPL(服务器端公共许可证),而SSPL是MongoDB在2018年推出的一种伪开源许可证。几天后,AWS宣布了分支(fork)作为回应,也就是说,AWS要自己另整一套了,而且,AWS还说,自己玩的才是真开源。1。
Elastic为什么要这么做?SSPL是个啥?为啥就不是开源的?
Elastic在官网上是这么解释的:2
在过去三年中,市场不断发展,社区逐渐认识到,开源公司只有更好地保护自己的软件,才能保持高水平的投资和创新。随着以 SaaS 作为交付模式的转变,一些云服务提供商利用了开源产品的优势,将其作为一项服务对外提供,而不向社区提供任何回馈。这种做法转移了本可以再投资到产品上的资金,损害了用户和社区的利益。
从即将发布的 Elastic 7.11 版开始,我们将把根据 Apache 2.0 许可授权的 Elasticsearch 和 Kibana 源代码变更为双重授权许可模式(即 SSPL + Elastic 许可),以便用户选择适合自己的许可。SSPL 是 MongoDB 原创的一个可获得源代码的许可,它既体现了开放原则,同时又起到了保护作用,防止公共云提供商在不向社区提供任何回馈的情况下将开源产品作为一项服务对外提供。SSPL 虽然允许免费随意地使用及修改产品源代码,但有一个基本要求,也就是,在 SSPL 协议下,如果您将产品作为服务对外提供,则必须同时公开发布任何修改以及您自己管理层的源代码。
简单地说,就是ELastic看见一些云厂商用Elasticsearch和Kibana赚了大钱,但没有给自己带来回馈,很不爽,决心改许可证。
因为按照Apache 2.0许可证,人家不回馈,也是合规合法的,所以必须要改许可证,强制要求云厂商回馈。
云厂商岂能就范?
SSPL是伪开源许可证?
在OSI的官网上3,明确说SSPL是伪开源许可证(fauxpen source license)。
OSI(Open Source Initiative)即开放源代码促进会,于1998年2月成立,创始人为大名鼎鼎的Bruce Perens和人称黑客长老的Eric S. Raymond。它维护着开源定义(OSD)以及其认可的开源许可证列表4。OSI的目标是促进和保护开源软件及开源社区。
OSI这个声明,其实就是对着Elastic来的,它说:
虽然那些切换到伪开源许可证的公司声称,他们的产品在新许可证下继续保持“开放”(open),但新许可证实际上剥夺了用户权利。
Elastic公司的这个举动,并不意味着开源许可模式的失败或不足,只能说明Elastic目前的商业模式和开源许可证的设计不一致,他们需要的是专有许可证(虽然也是源码可用的)。
OSI说,SSPL的管理方曾经提出申请,试图获得OSI认证,当他们发现这不太可能时,主动撤下了申请。
我专门找来SSPL看了看,其实和GPL差不多,就只有个别一两条有点区别,总体上,还是给人源码、让人修改、让人发布的。但在OSI看来,这是不够的。
那什么样的许可证,才能被称为开源许可证?
OSI是在官网上明确给出过开源定义(The Open Source Definition)的,也即OSD。所以看一个许可证是不是开源的,就看是否符合OSD了。
我以前介绍过的MIT、Apache 2.0(以下简称Apache)、GPL v2、v3,都是满足OSD的,也即都是开源许可证。
下面就学习一下OSD吧。
开源定义
一个软件,是不是开源软件,要看它的许可证有什么样的条款,只要许可证满足以下10条要求,它就是开源的。
以下,“该软件”、“该程序”、“该作品”,指的都是许可证所保护的软件。“被许可人”、“接收者”、“用户”指的都是使用该软件的人(包括法人)。“发行”、“发布”、“分发”都是一个意思。
OSD1. 分发自由
许可证不应限制任何人将该软件作为某软件发行版的一部分售出,或免费送出,不应该对这种销售收取版税或其他费用。
人话说:不应该限制别人卖你的软件,也不该限制别人免费送。如果人家卖了你的软件,你也不能向人家要钱。
1. Free Redistribution
The license shall not restrict any party from selling or giving away the software as a component of an aggregate software distribution containing programs from several different sources. The license shall not require a royalty or other fee for such sale.
点评:我只能说,不要钱,这一点还是挺高尚的,很多人做不到,比如改了许可证的那些。
说实话,这条乍一看还是有点费解的,什么component、aggregate、software distribution、several different sources,想说什么呢。后来我才想明白,OSD是来自The Debian Free Software Guidelines (DFSG)的,而Debian,是一个Linux发行版,在Linux发行版里面,天然会有很多的自由软件和开源软件。所以,在OSI看来,大凡一个开源软件,似乎或多或少都在某个发行版中,哪怕是原作者自己搞的发行版。
OSD1没有明说,对于单独一个开源软件,是否适用这条,但看那个意思,应该也是适用的。我咨询了若干业内人士的观点,他们都说,即便不是任何软件发行版的一部分,也是让人卖的。从这点看,OSD写得并不严谨。
现在看一下MIT、Apache、GPL是不是都符合这条:MIT在第一段,Apache在第3条,GPL v2第1条,GPL v3第4条,都明确写了可以卖源码或者目标码的。
此外,GPL v3在第4、5、6条里说(第5、6条引用了第4条),如果以源码形式分发,源码可以随意收费。但如果卖的是目标代码,源码就只能顶多收复制费,避免有些人卖目标时不想交出源码(目标代码收费尚可,源码收天价)。
OSD2. 源代码
软件必须附有源代码,并且必须允许以源码形式或目标码形式发布。如果发布时没有带源码,则必须要有一种广为宣传的方式,让人能够以不超过合理的复制费用获得源代码,最好是能通过互联网免费下载。故意混淆源代码是不允许的,所提供的源代码,必须是程序员在修改程序时最乐意使用的那种形式。基于同样的道理,预处理过的、或者翻译过的源码,都是不允许的。
人话说:程序必须附带源码,不带源码的不叫开源软件。如果发布时不带源码,那必须让人能免费或以很便宜价格得到源码。给源码,就要大大方方地给,不能抠抠索索。
- 2. Source Code
- The program must include source code, and must allow distribution in source code as well as compiled form. Where some form of a product is not distributed with source code, there must be a well-publicized means of obtaining the source code for no more than a reasonable reproduction cost, preferably downloading via the Internet without charge. The source code must be the preferred form in which a programmer would modify the program. Deliberately obfuscated source code is not allowed. Intermediate forms such as the output of a preprocessor or translator are not allowed.
点评:注意对于再次发布的要求,是必须允许以源码或目标码形式发布,而不是必须带源码,这就使得MIT、Apache这种许可证满足这条,因为这类宽松许可证,对别人再次分发时带不带源码,是不作要求的。(GPL则是强制要求的。)
OSD3. 衍生作品
要必须允许别人修改和衍生该作品,并且必须允许它们以相同的许可证分发。
人话说:要能让人改,还得让人能分发,如果你不想让别人以别的许可证分发,至少也得允许按你的许可证分发。
- 3. Derived Works
- The license must allow modifications and derived works, and must allow them to be distributed under the same terms as the license of the original software.
点评:不让人改,那不是开源。不要那么封闭吗。
MIT、Apache、GPL都允许修改和衍生,而且也都允许以相同的许可证再次发布。MIT在第一段中说允许sublicense,Apache在第2条允许sublicense,这就表明允许使用相同的许可证。GPL v2的第6条、GPL v3的第10条,则说下游自动获得GPL许可。
注意:sublicense,根据Black's Law Dictionary,是指“A license or contract granting to a third party a portion or all of the rights granted to the licensee under an original license。”也即sublicense是指被原始许可的人,可以向第三方进行再次许可,许可的内容是他获得的全部或部分权利。
OSD4. 原作者源码的完整性
可以要求“源码不可改动”,但只能在“源码+补丁”这种分发场合下。许可证必须明确允许分发修改后源码构建的软件。许可证可以要求衍生作品带有不同的软件名称或版本号。
人话说:可以要求修改的代码能和原作者的代码清晰划分出来;允许别人分发修改后的代码;可以要求他用别的名字或版本号(不做此要求当然更好)。
- 4. Integrity of The Author's Source Code
- The license may restrict source-code from being distributed in modified form only if the license allows the distribution of "patch files" with the source code for the purpose of modifying the program at build time. The license must explicitly permit distribution of software built from modified source code. The license may require derived works to carry a different name or version number from the original software.
点评:这条是一个妥协。OSI原本是鼓励“允许任意修改”的。但考虑到有些开源作者非常在意完整性,所以OSD允许在许可证中加一些这类要求,避免因别人低质量的修改,污染了原作者的名誉。
OSD5. 不歧视个人或团体
不得歧视任何个人或群体。
人话说:不能说只给什么人用,不能给什么人用。尤其不能说,不给中国人用,这是坚决不可以的。
考虑到法律问题,在OSD的注解(annotated OSD)5中,专门提到了出口限制的问题,注解说:“一些国家(包括美国)对某些类型的软件有出口限制。许可证可以做出警告,提醒被许可人有义务遵守法律,但许可证本身可以不包含这种限制。”
- 5. No Discrimination Against Persons or Groups
- The license must not discriminate against any person or group of persons.
点评:这是OSI人文主义精神的表现,对所有人一视同仁。只不过,不管在哪,法律还是要遵守的。
OSD6. 不歧视任何领域
不得限制说不让在某个领域使用该程序。例如,不能说不让商用,不能说不让用于基因研究。
人话说:不能只让这个行业用,不让那个行业用。尤其不能说,不让商用,不让云服务用。
- 6. No Discrimination Against Fields of Endeavor
- The license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.
点评:一个不让商用的软件,一定不是开源软件。因为OSI明白商业的价值。
下面举个例子,美国在2018年有一个Abolish ICE活动,在这个活动中,有人违反了OSD6。
ICE是美国911恐怖袭击之后成立的部门,主要用于移民相关的国内调查和执法和调查,有羁押和遣送非法移民的权力,ICE采取了一种被称作”亲子分离“的政策,就是一旦抓住非法移民,就把大人和孩子分开关押,很多孩子因此和父母完全失去联系,还有数百名儿童彻底和父母失联,流入美国儿童收养系统。这种政策激起了巨大的社会反感,Abolish ICE运动因此开始。
在Abolish ICE过程中,人们发现ICE科技水平颇高,而且一线互联网和软件公司都在为他们提供服务,从软件到AI,基本上各种高科技用全了,抓人效率前所未有的高。而这些软件,绝大多数是基于开源软件和自由软件开发的。所以除了抗议各大厂商之外,开源社区中开始有了“能不能想个办法不让ICE用我们写的程序”相关讨论。
javascript包管理工具lerna成为了第一个行动者,他们修改了自己的开源协议,把包括微软、亚马逊在内的一堆公司列入了“因协助ICE而禁止使用”范围。但这显然是不符合OSD6的,Eric Raymond为此发表文章:“非歧视条款是开源软件的核心价值”。一天之后,lerna恢复了原始的MIT许可证,并且为此道歉。
—以上摘自“围绕RMS、开源、自由软件的两场'战争'”6
OSD7. 许可的分发
软件重新分发时,所有接收者都获得许可证所描述的关于该软件的权利。任何接收者都不必执行额外的协议以获取这些权利。
人话说:开源软件是有一个传播过程的,原作者发布给第一批用户,第一批用户又发布给第二批用户,以此类推,可以不断流转下去。在这个再分发过程中,原作者给任何接收者的权利,中间人不能加码,不能要求被分发人执行额外协议才能获取。
- 7. Distribution of License
- The rights attached to the program must apply to all to whom the program is redistributed without the need for execution of an additional license by those parties.
点评:一个开源软件,原作者所赋予用户的权利,在传递过程中,不能附加额外要求。
从Annotated OSD来看,这条是用来确保自由传递的,防范有人把一个开源项目给闭源了。仔细看看GPL v2的第6条就知道,这条大概是从GPL中提炼出来的精神。
GPL v2第6条、GPL v3的第10条,都明确表达了这样的意思。
但对于MIT和Apache这种宽松许可证,如果再次分发时还用原协议,那是满足OSD7的,但如果再次分发时让人给闭源了或者换许可了(也即MIT和Apache是允许他人加码的),就不满足这条了,所以这两个许可证对OSD7的满足是很弱的。
所以我觉得,OSD7写得也不够严谨。
OSD8. 许可不能针对特定产品
许可证赋予接收者的权利,不应该和特定软件发布版绑定。不论该程序是从哪个软件发布版中得到,它的用户都拥有与原始软件发布版一样的权利。
人话说:比如,假设有个软件叫wu-ftpd,它的许可证不能说,“如果您从Kali Linux发行版中拿到本软件,您的权利是1、2、3,如果从Rcoky Linux中拿到,您的权利是3,4,5,只有在wu-ftpd网站下载的本软件,您才拥有所有的权利”。
- 8. License Must Not Be Specific to a Product
- The rights attached to the program must not depend on the program's being part of a particular software distribution. If the program is extracted from that distribution and used or distributed within the terms of the program's license, all parties to whom the program is redistributed should have the same rights as those that are granted in conjunction with the original software distribution.
点评:开源不和具体产品绑定,开源是傲然独立于世的。
OSD9. 许可证不能限制其他软件
许可证不得对一起分发的其他软件加以限制。例如,许可证不能要求在同一媒介上发布的所有其他程序都必须是开源软件。
人话说:比如,wu-ftpd不能对放在同一张光盘上的Li-httpd、mi-gui这些软件提出要求,因为那就不是你的软件,你没有权利提出这些要求。
- 9. License Must Not Restrict Other Software
- The license must not place restrictions on other software that is distributed along with the licensed software. For example, the license must not insist that all other programs distributed on the same medium must be open-source software.
点评:做好自己的事,不要要求别人。
OSD10. 不能以专门的技术或界面完成授权
许可证的任何条款都不能以任何专门的技术或界面风格为条件。
人话说:在进行许可时,不能要求用户必须点击一个“我同意”、“我接受”这样的方框,因为在传统上,软件的分发是通过ftp、cd、web镜像形式的,这些场合下,用户根本没有点击的地方,如果许可证必须要求人们点击,人们就不能用他们习惯和喜爱的方式发布软件了,这是很令人恼火的。
- 10. License Must Be Technology-Neutral
- No provision of the license may be predicated on any individual technology or style of interface.
点评:对用户好一点,不要搞形式主义。
总体评价
有朋友问,OSD为什么选这10条,而不是别的10条?
我回答,选这10条,体现了OSI初创人员(以及他们所代表的开源人)的道德优越感:我们就是要提供免费的源码,而且是无差别的提供,我们要把开源推进到每个国家、每个地区,推进到每个领域、每个行业,我们要让开源造福社会、造福人类,我们不歧视、不限制,我们推崇自由、平等,我们要的是全人类的繁荣和进步!
差不多就这个意思吧。
有人说开源和道德无关,我说,这10条显然反映了道德,至少是人文主义的道德。
有人说这背后有阴谋(商业阴谋,政治阴谋),我就不想说啥了。
为什么SSPL不是开源协议
现在仔细看看SSPL,全文在这里:
https://spdx.org/licenses/SSPL-1.0.html
我看了看,除了第13条,基本上GPL v3是一模一样的(但没有GPL阐述自由精神的那段“序言”)。
毕竟人人都愿意站在巨人肩上。
那么这个体现SSPL独特性的第13条是什么样的?
SSPL 13. Offering the Program as a Service
- SSPL 13. Offering the Program as a Service
- If you make the functionality of the Program or a modified version available to third parties as a service, you must make the Service Source Code available via network download to everyone at no charge, under the terms of this License. Making the functionality of the Program or modified version available to third parties as a service includes, without limitation, enabling third parties to interact with the functionality of the Program or modified version remotely through a computer network, offering a service the value of which entirely or primarily derives from the value of the Program or modified version, or offering a service that accomplishes for users the primary purpose of the Program or modified version.
- “Service Source Code” means the Corresponding Source for the Program or the modified version, and the Corresponding Source for all programs that you use to make the Program or modified version available as a service, including, without limitation, management software, user interfaces, application program interfaces, automation software, monitoring software, backup software, storage software and hosting software, all such that a user could run an instance of the service using the Service Source Code you make available.
这条的正经翻译:
如果您使用本程序或本程序的修改版本,以服务的形式提供给第三方,你就必须按照本许可相关条款,通过网络下载形式,免费向所有人提供“服务源代码”。本条款所说的“以服务形式提供给第三方”,是说第三方能够通过计算机网络与本程序或修改版本的功能进行远程交互,所提供服务的价值,全部或主要来自本程序或修改版本,或者,提供给用户的服务,来自于本程序或修订版本主要用途的履行。
所谓“服务源代码”,是指本程序或修改版本的源码,以及您用来使本程序或修订版本成为可用服务的所有相关程序的源码,包括但不限于管理软件,用户界面,应用程序接口,自动化软件,监视软件,备份软件,存储软件和宿主软件,也即所有你用来使用户获取服务实例的源码。
这条的人话翻译:
如果你不分发本程序(包括本程序的修改版本,下同),而是把它弄成一个服务,放到网上让人使用,那你必须把这个服务相关的源码免费让人下载。这里说的服务相关源码,不仅仅是本程序的源码,还包括能让这个服务很好跑起来的其他相关软件的源码,比如管理软件、用户界面、应用程序接口、自动化软件、监控软件、备份软件、存储软件和宿主软件。总之,这一整套软件的源码都要提供,因为它们联合起来才能为用户提供完整的服务。
本质要求:
你用了我的程序,让他跑成一个服务,那么,你要把所有能让本程序跑成服务的源码都贡献出来,这样,别人也能依此提供服务。
也就是说:
如果你把它弄成了服务,你就要大方地把整个配方(包括前后台)都交出来。
评价:
说实话,这个有点狠,“本程序”是提供了服务,但整个配套都要提供,是要的多了一点,因为那些配套的东西,要花费的工作成本也许要比“本程序”多得多!
这明显是违背了OSD9,你管好自己就行了,不应该要求别人太多!
当然,许可证这东西,就是一个愿打,一个愿挨,如果有人愿意接受SSPL,我们也乐见其成。
不过大多数情况下,厂商估计都不会接受的。所以,改SSPL,那就是告诉别人,你们要么交钱买商业版,要么自己建分支玩吧。
也即pay me or fork this!
此句来自faker.js的维护者 Marak,他伤透了心之后,在github项目下发帖子7,决定“我不再免费为世界500强公司工作了,要么给我一份年薪六位数的合同,要么 fork 这个项目然后自己维护去”。这个帖子的标题就叫做“No more free work from Marak - Pay Me or Fork This”。—摘自《开源社区的暗面》8
让我感到有趣的是,第一个回帖子的居然是asim,此人就是当年和华为叫板的go-micro维护者9,看来Marak也是说到他心坎上了。
我觉得,以前吧,大家玩开源,都是你弄个东西,我弄个东西,大家其乐融融就把一个完整的开源世界搭起来了,大家就觉得,这就是我们的理想社会,我们也没想着赚钱,我们就是不和那帮闭源的资本家玩,我们就是要弄一个人人平等、人人奉献、人人自由、自给自足的和谐世界。但现在可好,自己用共产主义精神做出来的东西,又让资本家给拿过去赚钱了,这心态上立刻就不是滋味了。
几句多余的话
有一次,我给人瞎出主意。
因为看到一些开源作者,发现自己的开源作品被商业使用,他们心里很不舒服,各种吐槽10。
我就说,你如果不舒服,可以改协议啊,比如你用的是MIT,你在MIT里加一句:
“凡是将本作品或本作品衍生品用于商业用途的,请主动将合理估值的10%,打到我的账号上来:1XXXXX”
这样,还是不是开源协议了,我当时还犹豫了一下。
后来一看OSD1,就知道这是在收版税(royalty)了,这当然不是开源协议了。
不过,这也没关系,你觉得怎么舒服怎么来,不是说非要道德绑架让你做开源的。
当然你要权衡一下,这样改,会不会产生你最愿意看到的效果。
说实话,这次Elastic改许可证,包括之前MongoDB、CockroachDB、RedisLabs、TimescaleDB、Graylog这些改许可证,我都没有什么太多感觉,毕竟他们都是公司,都是要盈利的嘛!先用免费获得用户,然后开始分情况适度收费,也属于一种常见套路吧。像极了我们曾经可以免费使用的互联网应用,后来纷纷收各种会员费一样。
这个世界不可能要求每个人都无私奉献,也不会是非黑即白,不会是只有开源和非开源,每个主体都有权利找到一种自己觉得合适的方法,让他觉得自己的付出值得。
我想,如果区块链发展到更成熟的阶段(NFT和DAO都是有益的尝试),作者能够根据源码使用情况自动获得回报,那一定会给开源带来革命性的变化。
非要OSI同意了才算开源软件吗?
是不是开源,只有OSI说了算?
这个怎么说呢,Open Source这两个单词的组合是他们提出的,他们曾经还试图把Open Source注册成商标呢。“开源”这个翻译,当然是从Open Source来的。
所以,OSI说一个东西是不是开源,显然更权威一些。
不过,你硬要说中文的“开源”,不是OSI的Open Source,我也拦不住你。
那就看大家认不认了,至少就我所见,整个业界,都还是认可OSD的。
BTW:我国的木兰宽松许可证就是获得了OSI的认证的,是正经八百的开源许可证11。
- https://mp.weixin.qq.com/s/_1Dbc6FyUQUvOqk6nFKMTw
- https://www.elastic.co/cn/blog/licensing-change
- https://opensource.org/node/1099
- https://opensource.org/licenses/category
- https://opensource.org/osd-annotated
- https://mp.weixin.qq.com/s/Kr0FzkpA-EHT51F7PVX76A
- https://github.com/Marak/faker.js/issues/1046
- https://mp.weixin.qq.com/s/2kYb93_V3TMdgKFAV3HG4Q
- https://mp.weixin.qq.com/s/y6rysKAifxefqfhSzcQcHg
- https://mp.weixin.qq.com/s/IiM63raAH38rEoSUScR-eQ
- https://opensource.org/licenses/MulanPSL-2.0
本文转载自微信公众号「微月人话」,可以通过以下二维码关注。转载本文请联系微月人话公众号。