之前看过白鳝老师的《国产数据库拥抱开源没毛病》一文,勾起了我对数据库开源、商业化这块的思考,此前也听到过不少“XX 数据库是根据 PG/MySQL 改的”之类的话语,那么所谓“自主”数据库和“套壳”数据库有什么区别呢?他们各自的优缺点是什么、又会如何发展?本文是我的观点。
先说一下闭源套壳
在数据库领域没有人会使用商业的闭源产品做套壳产品或服务,然后售卖,因为这违法。但就在十几年前,在操作系统领域,存在这种情况。番茄花园是 2000 年左右火起来的盗版 Windows,它是基于微软的闭源 Windows 系统进行破解、修改并添加了一些额外功能,如激活、优化等。尽管番茄花园 Windows 版本在外观和使用体验上与正版 Windows 非常相似,但其侵犯了微软的知识产权。在 2009 年,微软起诉了番茄花园,并获得了胜诉。此后,番茄花园的官方网站被关闭,创始人入狱,其盗版 Windows 操作系统的传播也受到了打压。
数据库领域没有闭源套壳的例子,但存在闭源改造的例子,也就是先把别人的闭源产品的源码花重金买下来,在这基础上发展国产数据库,以下是例子:
2015 年以来,IBM 对中国公司销售 Informix 源代码,与 IBM 签订源代码授权的公司有华胜天成、南大通用(Gbase 8t)和星瑞格。这三个公司成为以引进 Informix 源代码发展国产数据库的代表。
聊聊完全自主可控的国产数据库
毫无疑问,没有基于其他商业或开源数据库做二次开发的数据库产品,就是完全自主可控的数据库了,其中 OceanBase、TiDB、达梦、openGauss 是国产数据库之光,长期登顶墨天轮的国产数据库排行榜 top 4 的位置。
其中,达梦是闭源的,其他三款产品都是开源的,可见开源更受欢迎,拥抱开源没毛病。脱胎于互联网业务的 TiDB、OceanBase,为了和国际接轨,选择在美国的 github 上开源,而脱胎于传统行业的 openGauss,选择在国内的 gitee 上开源。
不基于“开源套壳”的国产数据库登顶国产数据库排行榜 top 4,是否意味着“自主”数据库是更优的选择呢?请先等“开源套壳”数据库们登场后,再回来讨论。
国际上的“开源套壳”数据库案例
首先我要解释一下,在国际上“开源套壳”意味着什么,其实就是分支的意思,举个我们熟悉的例子,我们知道开源数据库 MySQL 是有两大分支的,其关系如下图:
这两个分支是 —— Percona 和 MariaDB。
根据 GPLv2 协议的特点,Percona 和 MariaDB 他们可以自由地修改 GPL 许可的 MySQL 源代码,并在遵循相同许可证的前提下分发了修改后的版本,所以他们套壳后会继续开源。遵循了 GPL 许可条款的情况下,他们可以将 Percona 和 MariaDB 用于商业和非商业用途。
其中,MariaDB 在分发了开源的社区版产品的同时,还分发了闭源的 MariaDB Enterprise Server 企业版。看起来他好像没有遵循 GPL 协议,实际上不然,MariaDB Enterprise Server 的核心仍然是开源的,并遵循 GPL 协议。然而,企业版可能会包含一些专有的插件、工具或其他组件,这些组件可以在遵循其他许可协议的情况下提供。这种做法通常被称为 “开源核心”或“开放核心”模型。
在这种模型下,企业版的用户支付许可费,以获得附加功能、性能优化、专业支持等服务。这些附加组件并不需要遵循 GPL 协议,但核心数据库功能仍然是开源的。
我不是法律专家或开源协议的专家,但我个人认为现有的国际案例,可以打消一些企业的担忧——到底 MySQL 是否可以用于商业化,用 MySQL 套壳数据库是否有法律风险。
如果依然担心受到 GPL 开源协议的影响,不想开放数据库内核代码,那么企业可以选择另外一款受欢迎的数据库做套壳——PostgreSQL,他遵循的是商业更友好的 BSD 协议,他允许套壳开源数据库做二次开发的厂商,修改数据库内核代码后可以不开源。
国产数据库“开源套壳”分为哪几种
我们把上述关系模型套用到国产数据库里,我们会发现“开源套壳”里,还有一种非分支的关系。下文将为大家逐一介绍这几类分支。
不承认套壳
有一些公司其实可能是拿 MySQL 或 PostgreSQL 魔改然后闭源了,他们不承认套壳。
套壳后继续开源
承认套壳了,那就是分支,套壳后继续走开源路线,适合一些做技术服务的公司,例如国外的 Percona、国内的 GreatSQL,他们紧跟着上游 Oracle 公司的 MySQL,具有两大优势。第一个优势是,可以低成本地获得新版本新特性,并且可以获得 Oracle 公司强大的漏洞补丁修复能力。就在今年第一季度,Oracle 公司给 MySQL 修复了三十多个 CVE 漏洞,非常给力。这主要是因为 Oracle 官方有很强的安全漏洞修复团队,且 MySQL 于全球拥有众多用户,在社区用户多、漏洞发现得多的同时,也出现了专门研究 MySQL 的第三方安全团队。而国产数据库在这方面相对欠缺。第二个优势是,避免社区的分裂,如果大家都基于开源,修改内核增加不兼容的特性,并闭源了,各自为战,其实社区是分裂的,不利于推广。
套壳后继续开源,并且走兼容上游的路线是绝大多数情况,完全脱离上游,独立发展的话,那为何不闭源?
套壳后闭源
套壳开源数据库后能否闭源取决于其遵循的协议。在墨天轮国产数据库排行榜前 23 名里,我好像没有找到“套壳后闭源并且不兼容上游走独立发展”的例子,因为我觉得既然已闭源了,又决定走独立发展路线了,为啥要承认“套壳”的事实呢?
所以,套壳后闭源的国产数据库,大多数会走兼容上游的路线。下面我将对图中 4 个具体案例进行解释,他们情况各不相同。
GreatDB,分支于 MySQL 或 Percona。他的 data node 节点用的 innodb 存储引擎,需要遵循 GPL 协议,其他组件是自主研发的是可以闭源,万里开源公司已经把其中修改过源码的部分以 GreatSQL 的方式开源出去了,遵守 GPL,走的类似于 MariaDB 公司的 MariaDB Enterprise Server 的玩法。闭源的部分主要是做分布式和 Oracle 用法兼容上。
TDSQL,分支于 MySQL。说实话我没有见过其开源版本,有几个可能,一是 TDSQL 没有修改过 innodb 源码,还有一种可能是他们不卖数据库产品 lisence,只卖服务,这种玩法是国内大多数云厂商的玩法,强调只卖服务,不是卖产品。
MogDB,分支于 openGauss。openGauss 主旨是共建国产数据库根社区,打造开源数据库核心竞争力,任何厂商都可以在遵循木兰协议的情况下发行自己的闭源的商业产品,恩墨的 MogDB、海量数据的 Vastbase、南大通用的 GBase 8c、中国移动的磐维等等。使用 openGauss 的公司更重视安全合规性,为自己的商业产品添加更多的安全特性。
KingBase,分支于 PostgreSQL。BSD 协议下,做“开源套壳”后闭源完全合规。并且人大金仓做数据库做得早,互联网还没有兴起,早年最好的二开选择是 PostgreSQL,而不是 MySQL。
“开源套壳”的优缺点
前面,我们列举了众多实例以证明套壳并无不妥,事实上许多厂商都在采用这种策略。套壳的优势颇为显著,具体如下:
快速上市:国产数据库市场广阔,许多企业都想尽快参与其中,因此迅速推出产品至关重要。
降低开发成本:利用现有技术基础,减少试错过程,降低成本。
高兼容性:确保原有系统的迁移成本较低,便于用户接受。
吸引现有用户:无需从零开始培养用户,借助原产品的用户基础快速扩大市场份额。
强大的技术支持:利用原产品的技术资源和支持,解决可能遇到的技术问题。
降低风险:相较于从零开始的新产品,套壳产品具有更为成熟的技术基础,风险更低。
提升品牌知名度:借助原产品的品牌影响力,提高套壳产品在市场中的知名度和认可度。
持续维护与升级:跟随原产品的技术发展,确保套壳产品始终保持最新技术水平。
然而,套壳产品也需关注以下潜在风险:
法律风险:若未遵循原产品的许可协议,可能面临法律纠纷和版权问题。如在商业用途中修改了使用 GPL 协议的产品源代码,必须遵循开源规定。
技术依赖:套壳产品在很大程度上依赖原产品,若原产品出现问题或停止维护,可能影响套壳产品的稳定性和持续发展。例如,MySQL 5.7 将于 2023 年 10 月结束支持,套壳厂商是否能维持官方的 CVE 漏洞修复能力。
创新受限:套壳产品的创新受原产品限制,可能无法充分发挥其创新能力。
客户满意度:套壳产品或许无法满足所有客户的特定需求,从而导致客户满意度降低。如某功能客户需求较大,但由于产品架构限制无法实现,或实现该功能会导致与上游冲突,进而无法合并,最终功能无法实现或推迟实现。
市场竞争:由于套壳产品与原产品相似度高,可能面临同质化市场的激烈竞争,难以在市场中脱颖而出。例如,用户可能会质疑:“既然我能用 MySQL,为什么要选择你的产品?”仅凭信创说辞可能难以说服客户。
套壳并非问题,缺乏开源精神才是关键
前面,我列举了很多条“开源套壳”的优缺点,优点非常多,我来说说缺点。对于法律风险,我们只要不违反相关开源协议,我们是可以继续使用并可以商业化的。对于技术依赖,中国有大量的优秀的 MySQL、PostgreSQL 的内核研发人才,每次 MySQL 发版的感谢名录里都有大量的中国人名字,技术完全不是问题。既然技术不是问题,那么如果美国 Oracle 公司真的制裁我们了(实际上合规使用开源软件是很难制裁的),就有点像是之前 CentOS8 停止更新的契机一样,这是一个大机遇,原本的 MySQLer 会寻找 MySQL 的其他开源分支使用,例如 MariaDB 或者国内的 MySQL 套壳分支。这些分支被迫脱离了 MySQL 上游,走独立发展路线,那么“创新受限”、“客户满意度”、“市场竞争”的缺点终将解决。
所以大家应该知道我的观点是——合规地基于开源数据库套壳二次开发,是完全可取的。
为什么要有开源精神?
在文章的最后,我不谈那些“开源套壳”的案例,只想谈谈开源精神。在二十年前,我购买过 Windows 操作系统的盗版盘,那是因为正版太贵了,近 2000 元人民币。在那个不重视知识产权的年代,大多数人都是这么干。如果没有开源操作系统 Unix,就没有家用领域的苹果 MacOS 和服务器领域广泛流行的 Linux 的诞生,我们就得付给微软昂贵的授权费。这里总结一下我心中开源的几大优点:
开源有利于打破垄断
上面,我举了个微软的例子。最近我们有一些新的例子,例如 OpenAI 发布了强大的 GPT-4 引擎,但他是没有开源的。现在全球不断地有人提交自己的开源 AI 训练模型,目的就是为了打破 OpenAI 的垄断。只有打破垄断,大家才能用上便宜的东西。
开源促进创新
开源软件鼓励社区成员共同解决问题,发现新方法,提高技术水平。这种协作方式使得开源项目往往能够更快地实现技术创新和改进,推动整个行业向前发展。首当其首的就是 Linux 开源社区。
开源提高软件质量
由于源代码对所有人开放,社区成员可以找出软件中的漏洞和错误,并提供修复方案。这样的协作模式有助于提高软件的质量,使其更加稳定可靠。而闭源产品的软件质量完全取决于公司的硬实力。
当然了,也有一种声音是,认为闭源更安全,因为源代码不公开就无法从源码级别直接发现和利用漏洞。
开源降低使用成本
许多开源软件是免费的,用户可以在不支付许可费用的情况下使用。即使有些开源软件需要付费购买,它们的价格通常也低于同类专有软件。这降低了企业和个人使用软件的成本,扩大了软件的应用范围。
需要注意的是,开源产品大多数意味着免费使用,我们使用开源产品的绝大多数原因之一就是因为其免费。但开源和免费不等价,例如 RHEL 是开源的,但不是完全免费的。微信是免费使用的,但他不开源。
开源培养技能和人才
开源项目为开发者提供了一个实践和学习的平台。通过参与开源项目,开发者可以提高自己的技能,了解最新的技术趋势。同时,企业也可以从开源社区中发现和招聘具有实际经验的技术人才。
开源支持可持续发展
开源软件的开放性使得其拥有更长的生命周期。即使原始开发者放弃项目,其他社区成员仍可以继续维护和更新软件。这样的模式有助于软件的可持续发展,降低了对资源的浪费。
开源增强用户控制权
开源软件使用户能够查看和修改源代码,使他们可以根据自己的需求定制软件。这增强了用户对软件的控制权,有助于提高工作效率和满意度。“开源套壳”厂商就是这条的受益方。
缺乏开源精神的情况
开源软件项目大多数都是有企业级的参与的,他们要不是主要参与公司,要不就是拥有控制权的公司。缺乏开源精神有哪些情况呢?
1. 对于公司来说,他们开源后修改开源协议。
典型的例子就是 MongoDB。MongoDB 是一个开源产品。它的源代码可以在 GitHub 上找到。不过,MongoDB 的许可证在 2018 年 10 月 16 日之后发生了变化,从 AGPL 变为了 Server Side Public License (SSPL) v1。这种变化可能会影响一些公司对 MongoDB 是否属于开源产品的看法,以下是一些例子:
Red Hat 在 2018 年 11 月宣布,将不会在 RHEL 8.0 系统中提供对 MongoDB 的支持,原因是 MongoDB 更改了许可协议为 Server Side Public License (SSPL)。
亚马逊 Web 服务 (AWS) 选择开发自家的 NoSQL 数据库 Amazon DocumentDB,而不是继续支持 MongoDB。这部分原因可能是因为 MongoDB 更改为 SSPL,导致许可问题。
尽管 MongoDB 仍然认为自己是开源软件,但开源计划(OSI)一直坚定不移,重申其声明其“SSPL 不是开源许可证”(见:《The SSPL is Not an Open Source License》)。
MySQL 的重要分支厂商 Percona 公司指出 MongoDB 并非开源软件,鼓励大家使用他的 MongoDB percona 版开源分支。
2. 对于公司和个人来说,就是白嫖主义,利用开源产品赚钱了但不做贡献。
白嫖主义是一种消费心态,指的是在不付出任何努力或成本的情况下,希望从他人或某种资源中获得利益。在开源软件领域,白嫖主义的表现主要包括以下几点:
在使用开源软件时,不遵守许可协议,例如未遵循 GPL 协议要求开源自己的修改。
在遇到问题时,过度依赖开源社区的支持,但从未为社区做过任何贡献。这可能包括频繁提问但从未尝试自己解决问题,或者索取他人的解决方案而不是自己进行研究。
仅关注开源软件的免费使用,而忽略对其开发和维护所需的人力和资源的尊重。这种心态会导致对开源项目的长期可持续发展产生负面影响。可能包括无理地抱怨软件质量、对即时响应的过高要求等,却忽视了开源项目的作者和维护者往往是志愿者,或者来自投入大量资金的企业。他们都在为开源项目的发展付出辛勤努力,但他们并非慈善机构。
为了避免白嫖主义,作为用户,我们应该珍惜开源项目所提供的资源,并以积极的态度参与到开源社区中,为项目的发展和进步贡献自己的力量。
参与开源的方式多种多样,如提 issue、报告 bug、提出功能需求等,都能让开源软件不断优化和进步。此外,我们还可以提交 pull request(PR),不仅可以贡献代码,还可以修复文档中的错误。除了这些,参加开源社区的各类活动也是一种贡献方式,例如加入特定兴趣小组(SIG)、参加开源数据库大会,作为听众或演讲嘉宾,分享和交流经验。
总之,为开源项目做贡献并不难,只要我们愿意投入时间和精力,就能为开源生态贡献自己的一份力量。
“开源套壳”后闭源算不算没有开源精神?
不算!相反地,这可能就是一种开源精神。例如,openGauss 主旨是共建国产数据库根社区,打造开源数据库核心竞争力,任何厂商都可以在遵循木兰协议的情况下发行自己的闭源的商业产品。只要你遵循协议,哪怕只修改了版本号发布了闭源商业产品,实际上已经是在公司内部使用和推广openGauss ,是在支持国产数据库openGauss了。恩墨、海量数据等厂商使用了openGauss,之后无论发布的产品是开源或闭源,都符合开源精神,因为他们都遵循了开源协议,并且他们给上游贡献了代码。
合规使用,不白嫖,就是一种开源精神。
总结
我认为,对于国产数据库的开发,不论套壳不套壳,都可以。你如果选择了走开源路线,就得有开源的精神,这包括了企业和个人。