Oracle MySQL开源许可种种争议的解惑

Posted bisal(Chen Liu)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle MySQL开源许可种种争议的解惑相关的知识,希望对你有一定的参考价值。

这两天国产数据库领域吵得很热的就是某自媒体提出万里数据库受mysql制裁或断供,然后作为当事方的万里数据库发出公告,指出公司数据库产品遵循相关开源协议约定,毋需购买所谓的“商业授权”,亦不存在任何由此带来的所谓“制裁或断供”风险。有兴趣的读者,可以扒一扒社交媒体上的信息,了解来龙去脉。

尤其是现在这种国际大环境,EW冲突已经给我们敲响了警钟,虽然倡导的是技术自由,但在某种程度上,还是会受到一些ZZ的影响,导致技术使用者、厂商、甚至国家层面,都会面临各种各样的风险。

我们只从技术层面探讨,曾经写过几篇关于开源协议的文章,
几种常见的软件开源协议介绍

开源软件许可

对于开源技术,特别是针对企业,并不是说不收费,就可以任意使用,任意推广,否则面临的就是各种侵权风险,例如这个案子《国内首个违反GPL的案件介绍》,就是一个典型。

针对Oracle的MySQL开源许可问题,爱可生开源社区的这篇文章《MySQL 开源许可研究》,就给出了很细致的解答,我们可以借此机会了解一下。

P.S. 文章版权为爱可生开源社区


1、Oracle为什么可以对MySQL采用双许可证模式(GPLv2开源许可证和商业许可证)发布?

在MySQL中引用的第三方源代码,全部都基于不具备许可证传染性的宽松开源许可证发布,或者基于双许可证发布,Oracle在其开源版MySQL中对此类双许可证的第三方代码选择使用GPLv2许可证,在闭源的商业版MySQL中对此类双许可证的第三方代码选择使用更为宽松的许可证。

例如MySQL在引用Memcached.pm的源代码时有如下声明(Artistic license 就是更为宽松且没有传染性的开源许可证,允许修改或引用其源代码后不开源):

Memcached.pm

  Memcached.pm
Memcached.pm is licensed under the Perl license.

Oracle may use, redistribute and/or modify this code under the terms of either:

a) the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or

b) the "Artistic License" which comes with the Expect/pr code.

Oracle elects to use the GPLv2 for version of MySQL that are licensed under the GPL.

Oracle elects to use the Artistic license for all other (commercial) versions of MySQL.

A copy of the GPLv2 and the Artistic License (Perl) 1.0 must be included with any distribution.

  This component is licensed under the GNU GPL license, version 2.0.

  This component is licensed under Artistic License (Perl) 1.0

基于以上事实,再加上当第三方向Oracle MySQL贡献源代码时,都必须签署Oracle公司的OCA协议(Oracle Contributor Agreement),声明放弃所贡献的源代码的知识产权, 这部分源代码的知识产权归Oracle公司所有,于是Oracle公司对MySQL源代码拥有了绝对的控制权与知识产权,Oracle公司有权决定MySQL基于何种许可证分发。很多人或许有些疑惑:为什么明明GNU的GPL规定代码必须在较少约束的条款下发布,而版权持有者还可以提供私有许可证。答案是GPL的条款是版权持有者为所有其他人设置的;而版权所有者可以自由的决定是否对其本身应用这些条款。对此,一个好的理解方法是想象版权所有者在桶里有无数份软件的拷贝。每次他从桶中取出一个发送到世界上时,他可以决定是采用GPL、私有或其他许可证。这并不是仅仅与GPL或其他任何开源许可证相关,他仅仅是版权法所赋予的权利


2、Oracle是否可以更改MySQL的开源协议或者干脆直接闭源?

基于问题1的结论,可以,但是仅限于后续新发布的版本。已经基于GPLv2许可证发布的老版本MySQL无法变更开源许可证或闭源。

3、为什么已经发布的老版本MySQL无法变更开源协议或闭源?

开源许可证是跟随软件拷贝分发的,每一份MySQL软件拷贝都带有一份开源许可证。当用户下载了一份MySQL软件拷贝的时候,就获得了这份软件拷贝想对应的许可证,作为软件拷贝发布方的Oracle公司无法回收已分发的软件拷贝和许可证,故也不可能变更该软件拷贝的许可证。可以作为上述结论佐证的,是在GUN官网上的一份FAQ,其中有如下解释:

http://www.gnu.org/licenses/gpl-faq.zh-cn.html#WhyMustIInclude

为什么 GPL 要求在每个软件拷贝里都要包含一份 GPL 拷贝?

在每个拷贝里都包含许可证是关键性的,这样每个获得拷贝的人都知道他们的权利是什么。

包含一个指向许可证的 URL 而非许可证本身也许看起来很不错。但是你无法保证该 URL 五年或十年之后的有效性。20年后,今天我们所用的 URL 可能不再存在了。

无论网络发生什么变化,唯一能够确保拥有拷贝的人们还能看到许可证的方法就是在程 序中包含许可证的拷贝。


4、Oracle变更MySQL开源许可证或闭源的可能性有多大?

尽管MySQL产品本身是开源的,使用GPLv2许可证,但是他的开发受到Oracle公司的控制,虽然也可能有人确实不满意Oracle公司把持着MySQL的开发而分叉这个项目(实际已经有人这么做了,例如Percona、MariaDB等)。一定程度上,这种威胁迫使Oracle公司需要慎重考虑变更许可证或闭源MySQL所带来的后果,这有可能导致Oracle主动放弃MySQL巨大的市场机会,而把这个机会拱手让人。在另一方面,一个完全闭源的MySQL是否有可能在目前的开源世界生态或之外的领域获得成功,也是Oracle需要考虑的。

我们无法揣测Oracle对于MySQL的想法,仅是从以上方面分析,我们认为Oracle更改目前MySQL商业策略的可能性不高


5、如果后续版本的MySQL变更为更不友好的开源许可证或直接闭源,我们应该如何应对?

可以基于业已发布的老版本MySQL源代码创建代码分支,继续发展基于GPLv2开源许可的MySQL分支版本,并基于此分支版本发布商业发行版(必须开源,可以售卖软件许可或对用户提供技术服务作为商业模式)。

我们认为即使Oracle后续没有针对MySQL变更开源许可证或闭源的打算,发展国内自主的、有权威部门组织领导的MySQL分支版本项目也是十分必要的。原因如下:

(1) 由于Oracle公司对MySQL项目的绝对控制,MySQL并没有真正平等的开发社区,Oracle只能从外部获得很小规模的BUG修复和补丁清理,并且需要投入大量公司内部资源支持MySQL项目的发展,一旦MySQL项目的收益过小,就有减小投入的可能性进而影响MySQL项目的发展。与此同时,不论是满足用户社区对新功能新特性的诉求还是BUG修复的响应速度,都不尽如人意,用户对于MySQL的期待和诉求无法得到及时的反馈与满足。

(2) 由于中美竞争升级,国家对于软硬件自主可控的要求,Oracle MySQL对于国产化软硬件的适配、国密算法、国内普遍业务量巨大的场景的支持等都是欠缺的,并且Oracle公司的MySQL需求评估部门,也不可能会为中国国情做适当的考虑。

基于以上两点,发展具有中国特色、符合中国国情、能充分响应国内用户需求的MySQL分支版本就显得十分急迫。


6、为什么MySQL在整个开源生态和在最终用户的考量中如此重要,我们可以不发展MySQL而转到其他路线上吗?

MySQL是目前世界上最流行的开源数据库软件,市场占有率巨大,这是不可否认的事实。在我国国内,各行各业的最终用户也大量使用了MySQL数据库,业已形成了巨大的资产投入。这些资产包括且不限于:基础软硬件设施、适配MySQL的应用软件开发、MySQL生态的人才培养。在此基础上,国内已形成了庞大的围绕MySQL的软件生态和人才生态,大量最终用户把MySQL作为首选数据库软件使用。要替换如此庞大的软件、人才生态,是需要天量投入和强势领导的,其中的风险也是不言自明,这个风险不亚于Oracle突然闭源MySQL导致的后果。我们认为,与其承担巨大风险彻底放弃MySQL并转换路线,还不如牵头各权威部门、联合国内数据库行业内厂商,建立国内自主可控的MySQL分支社区,通过强力、科学的领导,形成统一的MySQL分支社区生态,谨防MySQL在国内的社区分裂化、碎片化。通过这个统一的、强力的MySQL分支开源社区,服务好国内庞大的MySQL最终用户群


7、国内发展MySQL开源分支,是否会涉及知识产权侵权?

不会。要认清这个问题,首先需要了解GPLv2许可证遵循的最基本原则。

GPL许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并让自己作出的改进版本向社会发行传播的自由。

GPL还规定:只要这种修改在整体上或者某个部分来源于遵循GPL的程序,该修改的整体就必须按照GPL流通,不仅该修改的源码必须向社会公开,并且对于这种修改的流通不准许附带修改者自己所作出的限制。因此,一项遵循GPL流通的程序不能同非自由的软件合并。GPL所表达的这种流通规则称为Copyleft,表示于Copyright(版权)的概念相左。

GPL协议最主要的几个原则:

(1) 确保软件自始至终都以开放源代码形式发布,保护开发成果不被窃取用作商业发售。任何一套软件,只要其中使用了受GPL协议保护的第三方软件的源代码,并向非开发人员发布时,软件本身也就自动成为受GPL保护并且约束的实体。也就是说,此时他必须开放源代码。

(2) GPL是Copyleft,或译为“仅有著作权”的体现,除了著作权归原作者所有以外,其他一切权利均与任何人分享。GPL的精髓就是,使软件在完整开源的情况下,尽可能使用户得到自由发挥的空间,使软件得到更快更好的发展。

(3) 无论软件以何种形式发布,都必须同时附上源代码。例如在互联网上提供下载,就必须在二进制版本(如果有的话)下载的同一个页面,清楚地提供源代码下载的链接。如果以光盘形式发布,就必须同时附上源文件的光盘。

从以上描述可以看出,GPL是一个“自由”大于“版权”为原则的的许可证协议,在 “自由”传播面前,其他一切均需让路。用户可以获得著作权人通过GPL许可证放弃的权利,但也必须遵守许可证的规定才能行使权利,如果不遵守GPL规定,便是侵犯了开源软件著作权,其著作权人就有权要求对方停止相关行为及其他。Oracle一旦基于GPLv2许可证发布了一份MySQL软件拷贝,也既立刻放弃了其对这份MySQL软件拷贝所拥有的除了著作权之外的其他一切权利,由于GPL许可证的保护,这份MySQL软件拷贝立即成为了一份“自由”软件拷贝,可以被获得该软件拷贝的人或组织自由使用和修改、传播,并需要继续遵循GPL许可证的所有规定和约束。

综上所述,在发展国内MySQL开源分支时,只要遵循GPLv2的所有规定和约束,就不会触发知识产权层面的争议,我们可以合法的自由使用Oracle发布的MySQL源代码

关于GPL等开源协议的关系,再次引用之前文章中提到的几张图,有助理解,

通过以上的介绍,我们对Oracle控制的MySQL使用协议方面的理解可能更深入了,同时给我们未来的技术发展提供了指引和参考,或许可能出现ChinaSQL,或者CHNSQL这种大一统的MySQL分支,助力我们自己。

最重要的,还是了解清楚技术的根本原理,像上述的几种开源协议,从本质上究竟对我们的使用有什么影响,而不是道听途说,这才是技术人追求严谨的表现。

近期更新的文章:

从专家的角度,了解一些国产数据库优化的心得

什么是数据库的根技术?

最近碰到的一些问题

小白学习MySQL - 你碰到过这种无法登陆的场景?

当我们碰到MySQL的bug,怎么给官方提?

文章分类和索引:

公众号1000篇文章分类和索引

以上是关于Oracle MySQL开源许可种种争议的解惑的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 最后通牒:要 Java 8 更新先交钱!

小白学习MySQL - 大小写敏感问题解惑

Oracle发最后通牒:要用 Java 8 更新先交钱

GPL协议保障MySQL的自由免费开放

mysql主从复制

AWS 和 Oracle 被 MariaDB 点名吐槽