作者:陈书俊
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
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 分支版本项目也是十分必要的。原因如下:
- 由于 Oracle 公司对 MySQL 项目的绝对控制,MySQL 并没有真正平等的开发社区,Oracle 只能从外部获得很小规模的 BUG 修复和补丁清理,并且需要投入大量公司内部资源 支持 MySQL 项目的发展,一旦 MySQL 项目的收益过小,就有减小投入的可能性进而影响 MySQL 项目的发展。与此同时,不论是满足用户社区对新功能新特性的诉求还是 BUG 修复的响应速度,都不尽如人意,用户对于 MySQL 的期待和诉求无法得到及时的反馈与满足。
- 由于中美竞争升级,国家对于软硬件自主可控的要求,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 源代码。