禅道博客

分享专业技术知识,文章内容干货满满

开源许可证的王者玩家你知道是谁吗?

2023-10-08 09:54:59
春哥
原创 722
摘要:你知道开源圈子里面许可证最高阶的玩家是谁吗?他的名字你也许不知道,但他们团队的产品我们天天在用。一起来了解一下吧。

你知道开源圈子里面许可证最高阶的玩家是谁吗?

他的名字你也许不知道,但他们团队的产品我们天天在用。他和他的搭档一同开发了世界上使用范围最广的基础软件之一,并成立了公司。2008年他将公司卖给了一家软件行业的巨头公司,并因此获得了1660万欧元的资本收益,成为2008年芬兰收入最高的10人之一。后来他又创办了一个公司,并成功地将公司IPO上市。他有三个孩子,名字分别是My、Max和Maria,大家猜到他是谁了吗?


这样的经历放在商界也是很传奇的了,更何况是在开源圈子。这位老先生就是MySQL和MariaDB的创始人Ulf Michael Widenius,大家都称呼他Monty。和他的经历相比,他对开源许可证的理解那是炉火纯青,硬是把开源许可证玩到了王者段位。我们今天就来分析下MySQL和MariaDB的玩法。

BTW,这是我正在写的关于开源商业化系列文章的第三部分:开源软件的商业模式分析。前面用了四篇文章分别讲述了关于开源软件的错误认知上篇、中篇和下篇,然后我又分析了为什么开源软件一定要做商业化的考虑。接下来会通过几篇文章来跟大家分析下开源软件常见的商业模式,希望能够给到大家一些参考。郭炜郭大侠也有一个开源项目对常见的商业模式做过系统梳理,大家可以参考。

项目地址为: https://gitee.com/William-GuoWei/OpenSource_BusinessModel/


通过开源以及例外许可的方式获取海量用户

MySQL诞生时,巨头公司的商业数据库占据主导地位。MySQL要和这些巨头公司的数据库进行竞争,开源是一个非常好的方式。所以MySQL选择的授权协议是GPLv2。开源先解决了大家可以免费使用的问题,但GPL协议带来的新问题是它具有传染性。不可能大家用到了MySQL就要把代码全部开源,所以MySQL必须要解决这个问题,让大家能够放心使用MySQL作为自己的应用后端数据库。MySQL是如何解决这个问题的呢?通过授权例外的方式。

MySQL起草了一个FOSS(Free & Open Source software,也有叫FLOSS的,是Free/Libre and Open Source Software)License Exception。许可各种自由软件和开源软件通过MySQL客户端的连接库跟MySQL Server进行通讯可以不受MySQL客户端代码GPL协议的约束。这个许可例外协议最早的版本是把常见的开源协议都列举了一下,2018年之后就统一成了所有由OSI和FSF认证或者整理的协议列表。具体的许可协议大家可以看下面两个网址:


2018年1月30日之前: https://www.mysql.com/about/legal/licensing/foss-exception/
2018年1月30日之后: https://oss.oracle.com/licenses/universal-foss-exception/

这些协议是如何工作的呢?我们先来了解下MySQL软件的组成。MySQL是天然的C/S架构的模式,所以会分为两个部分:MySQL的客户端连接库和MySQL Server。其中MySQL客户端连接库通常被称之为MySQL Drivers或者MySQL Connectors。Monty有专门写过一个关于MySQL和MariaDB授权协议的FAQ,对第三方软件厂商使用MySQL的场景做了细致的划分。共分为了下面的三大类、七个具体场景(下面的这几种情况同样适用于MariaDB)

1. 内部使用

因为GPL协议约束的是对外进行分发,所以内部使用,无论是使用MySQL客户端还是服务器端,都是可以免费使用的,也不需要开源自己的代码。这其实就有了一个伏笔,为什么后来有了AGPL以及有了BSL、SSPL之类的协议出现。这个我们后面再讲。

2. 要分发程序里面包含MySQL的客户端

如果你要分发的程序里面包含MySQL的客户端,主要来看要分发的程序是否是自由软件或者开源软件,共分为两种情况:

2.1 分发的程序是自由软件或者开源软件

如果要分发的程序里面包含了MySQL的客户端,并且分发的程序是自由软件或者开源软件。这里面又分为两种情况。

2.1.1 分发程序使用的协议符合FOSS例外许可

如果是自由软件或者开源软件的话,而且采用的许可协议又恰恰在MySQL的例外许可协议列表内,那么你要分发的程序该用什么协议,就用什么协议,不受GPL协议的约束。

2.1.2 分发程序使用的协议不符合FOSS的例外许可

如果要分发的程序使用的协议不在例外许可范围列表内,可以采用LGPL协议版本的MySQL客户端。LGPL协议不强制开源,这个问题也就解决了。

2.2 要分发的程序不是自由软件,也不是开源软件

如果要分发的程序不是自由软件,也不是开源软件,那么就看你是如何链接到MySQL服务器的。这里面分成了如下三种情况。

2.2.1 使用原生连接器直接链接数据库服务器

第一种情况是通过非GPL协议授权的连接器来通讯,比如mysqlnd。这种链接方式是直接跟MySQL服务器进行通讯。因为这些连接器的协议不是GPL协议的,一般都允许免费使用,所以你要分发的程序也不需要强制开源。

2.2.2 使用框架进行链接数据库服务器

第二种情况是使用框架跟数据库进行通讯,比如使用ODBC、PDO等。这些框架本身都是和数据库无关的,所以在这种情况下面,无论是MySQL还是MariaDB都是可选项,所以这些框架本身就可以不用受GPL协议的约束,而采用比较宽松的协议。比如PDO是PHP授权协议的。所以要分发的程序也不用受GPL协议的约束。

2.2.3 使用MySQL的C客户端

第三种情况是直接使用MySQL的C客户端代码。可以像上面说的一样,使用LGPL版本的客户端类库,就可以规避GPL协议的约束。

3. 要分发程序里面包含MySQL服务器端

如果要分发的程序里面需要包含MySQL的服务器端,一般也不需要受GPL协议的限制。但如果要分发的程序里面使用到了MySQL Server相关的代码,或者要分发的程序依赖于MySQL,就要受GPL协议的约束。如果MySQL只是可选项,就不用受GPL协议的约束。

总结一下,Monty和他的搭档灵活地运用开源许可证的规则以及法律相关的条例,精心设计了一套游戏规则,吸引了海量的用户来使用MySQL。LAMP(Linux + Apache + MySQL + PHP)组合起来形成了绝配,互联网1.0的浪潮奔涌发展,MySQL公司的价值也自然水涨船高。


通过商业授权实现盈利模式

前面这一部分解决了吸引用户的问题。接下来就是要解决盈利模式的问题。前面分析到在分发程序里面集成MySQL的客户端,基本上是不需要考虑收费的。但如果要分发的程序里面链接使用了MySQL的GPL协议的代码,或者这个程序是跟MySQL绑定的,比如一些嵌入式的场景,按照GPL协议的要求,就需要开放源代码。厂商如果不想开放源代码的话,就需要购买商业授权了。

MySQL公司为了促进销售,还提供了增强功能的收费版本,这样让企业客户在采购的时候觉得更有价值:我不单纯是购买了一个授权许可,同时还购买了专业的服务和更高阶的功能。MySQL的盈利模式就这样建立起来了。

由于历史原因,我现在没有办法考证MySQL被Sun收购之前的收费版本组合,我从网络上找到了2017年时候的版本组合,大家可以参考:

图片来源:https://www.techtarget.com/searchoracle/tip/MySQL-Community-Server-vs-Oracle-MySQL-databases


2008年,MySQL被Sun公司以10亿美金的价格收购。根据当时披露的信息,MySQL的收入达到了6000万美金到7000万美金的规模。MySQL历经13年取得了这样一个辉煌的成就,让人惊叹。


另起炉灶,MariaDB重整上线

故事很快就进入了另外一个阶段。Sun公司在收购MySQL后不久就被Oracle收购。由于开源圈子对Oracle普遍不太感冒,Monty他们还发起了请愿,试图来阻止这场收购。但最终欧盟还是批准了这场并购案。Monty于2009年Fork了MySQL的分支,发起了MariaDB项目,并于2022年12月19上市,又是一个13年。也是神了。

Monty二次创业的故事我们就不多讲了。大家应该会比较关心两个问题:第一是为什么Monty能够Fork MySQL的分支,明着跟Oracle对着干。第二是MariaDB的商业模式是什么?

先来回答第一个问题。首先还是要感谢Richard Stallman,他拟定的GPL协议还是非常严谨完善的。虽然GPL协议比较严格,但它保证了代码的开放性。正是因为GPL协议,所以任何人都可以Fork MySQL开分支。但同时GPL又约束了Fork出来的分支也需要同样遵守GPL协议,所以MariaDB需要同样遵守GPL协议。这还是要归功于GPL协议的设计,最大程度上保证了源代码的开放性。所以站在最终用户角度来看,并不是许可协议越宽松越好。

那第二个问题,这位老先生神奇的地方是推出了Business Source License(BSL)协议,算是走出了另外一条路。所以我说Monty绝对是开源许可证王者级别的玩家,既遵守游戏规则,又能有商业的创新。BSL协议大概的内容是你可以在非生产环境使用通过BSL协议发布的软件。你同样可以获得源代码,可以进行修改,也可以有限度的在生产环境进行使用。通过BSL协议发布的软件,会在一个指定的日期,或者这个版本发布四年后按照另外一个协议,通常是GPLV2或者以后版本的GPL协议发布。

可能有点抽象,我们以给MariaDB公司授权MaxScale软件给其他主体为例,看下这个授权协议:

MaxScale(软件的名称)
Licensor: MariaDB(授权公司)

Licensed Work(授权的版本)
MariaDB MaxScale™ v.2.0 (until v.2.0.4 as BSL 1.0) and MariaDB MaxScale™ v.2.1. 
The Licensed Work is © 2023 MariaDB(版权所有声明)

Additional Use Grant(额外的授权)
You may use the Licensed Work when your application uses the Licensed Work with a total of less than three server instances in production.(生产环境少于3个实例,是可以允许使用的。)

Change Date(授权变更日期)
For MaxScale versions 2.0.4-2.4.2, change date is two years from release date. 
For MaxScale versions 2.4.3 and above, change date is four years from release date. 
Please reference MariaDB KB for version release notes.

Change License(要变更的授权协议)
Version 2 or later of the GNU General Public License as published by the Free Software Foundation.

通过上面的这个例子大家应该更容易理解一些了。也就是说我也把源代码给到用户了,用户可以有限度地在生产环境使用。这样MariaDB公司就可以通过社区获得反馈,优化产品。同时MariaDB可以保持商业上的领先优势,通过这个两到四年的时间差来做自己的商业化。如果一个软件厂商不想受这个BSL协议的约束,就可以采购他们的收费版本,这样商业模式就跑起来了。


总结

MySQL和MariaDB能够这样各种操作,有几个大前提,我们来分别看一下:

首先,开源软件的作者拥有对代码的所有权。

如果代码的Copyright没有完全掌握在自己手里面,就没有办法通过双重许可证的方式来进行发布。因为你不是代码的版权所有者,你只能遵守开源协议的约束。所以如果第三方的贡献者向MySQL提交代码,是需要签署Oracle公司的OCA协议(Oracle Contributor Agreement),声明放弃所贡献的源代码的知识产权的。这样Oracle公司才可以想用什么协议发布,就可以用什么协议发布。

额外说一下,为什么Linux一直是用GPLv2协议发布,没有用GPLv3,除了Linus不喜欢GPLv3协议之外,Linux内核代码的所有者太过于分散,要联系这些人一一同意变更许可协议,是一件几乎不可能完成的事情。

其次,这个软件使用了比较严格的授权协议。

MySQL和MariaDB这种商业模式之所以能够跑通,GPL协议起到了至关重要的作用。如果采用BSD、MIT这些比较宽松的协议,是没有办法走这种模式的。

第三,这个软件必须有独特价值,不可替代。

这个就不多说了,一般只有基础软件才可以用这种双重许可证的方式来操作,也就是这个产品对软件厂商的软件来讲是不可或缺的部分,不可被替代。所以才有可能使用GPL这样的协议来开源。应用类的软件、开发框架类的软件、前端框架类的软件,这条路基本上跑不通,这类的软件基本上都是比较宽松的许可协议。其实也很简单,我就是用你一个框架,就要传染我的代码,不能接受。

最后,知识产权保护比较好。

这个我就不展开说了,直接说我的结论,在中国这条路也不太容易跑通。说到最后,大家知道Monty这几个产品和他孩子的关系了吧。MySQL,MaxScale和MariaDB,开篇我有讲到他有三个孩子,分别叫My、Max和Maria。这,就是程序员的浪漫。

再说到最后,论竞业禁止协议的重要性。

参考:

[1] 郭大侠的开源商业模式分析
https://gitee.com/William-GuoWei/OpenSource_BusinessModel/


[2] MariaDB 授权使用FAQ:

https://mariadb.com/kb/zh-cn/licensing-faq/


[3] BSL协议使用FAQ:
https://mariadb.com/bsl-faq-mariadb/

[4] Monty介绍:
https://en.wikipedia.org/wiki/Michael_Widenius

[5] MySQL FOSS exception: 
https://www.mysql.com/about/legal/licensing/foss-exception/

[6] MySQL Universal FOSS exception:
https://oss.oracle.com/licenses/universal-foss-exception/

[7] MySQL授权指南: 
https://redresscompliance.com/mysql-license-a-complete-guide-to-licensing/

[8] MySQL社区版和收费版区别:
https://www.techtarget.com/searchoracle/tip/MySQL-Community-Server-vs-Oracle-MySQL-databases

[9] Sun收购MySQL:
https://www.cnet.com/culture/sun-to-fork-out-1-billion-for-open-source-firm-mysql/

[10] Oracle MySQL开源许可种种争议的解惑:
https://www.modb.pro/db/411112
暂时没有记录
评论通过审核后显示。