【CSDN 编者按】3月21日,
宣布,从Redis 7.4开始,"内存数据存储"项目将采用非免费的源代码可用许可发布。虽然这不是一个好消息,但也并非完全出乎意料。其实Redis的替代方案有很多,对于希望继续使用免费软件的人来说,至少有四种选择,包括名为KeyDB的现有分支以及Linux基金会新宣布的Valkey项目。现在的问题是Linux发行版、用户和提供商将选择哪一个(或哪些)来取代Redis。
原文链接:https://lwn.net/SubscriberLink/966631/6bf2063136effa1e/
3月21日,Redis宣布,从Redis 7.4开始,"内存数据存储"项目将采用非免费的源代码可用许可发布。虽然这不是一个好消息,但也并非完全出乎意料。其实Redis的替代方案有很多,对于希望继续使用免费软件的人来说,至少有四种选择,包括名为KeyDB的现有分支以及Linux基金会新宣布的Valkey项目。现在的问题是Linux发行版、用户和提供商将选择哪一个(或哪些)来取代Redis。
Redis的背景故事很复杂。该项目的发起人是Salvatore Sanfilippo("antirez"),作为“一种不同类型的数据库”,可与名为LLOOGG的实时日志分析应用程序一起使用,因为MySQL不能满足他的需求。他没有创建关系型数据库,而是设计了一个简单的字典数据库,将键值对存储在内存中,Redis这个名字就是remote dictionary server的缩写。多年以来,该项目已发展成熟,并增加了许多其他功能。后来,Redis成为了NoSQL运动的一部分,2010年VMware聘请Salvatore Sanfilippo开发Redis。2013年,他转到了VMware的子公司Pivotal,并继续从事该项目的开发。
当时,Redis的人气越来越高,推特和Pinterest等知名公司都在使用,后来出现在Linux发行版中。Redis被打包到了Ubuntu 12.04(2012年4月)、Fedora 18(2013年1月)等发行版中。2013年9月,AWS的ElastiCache服务添加了对Redis的支持,Redis的受欢迎程度进一步增加。
2013年初,一家名为Garantia Data的初创公司开始提供Redis服务,并将自己定位为"开源Redis"的替代品。2013年11月,Garantia进行了第一轮融资,意欲将公司名改为RedisDB。在遭到Sanfilippo的反对之后,该公司最终于2014年初改名为Redis Labs。2015年,Sanfilippo加入Redis Labs,担任开源开发的负责人,之后他一直在Redis Labs任职,直到2020年辞职。
2018年,Redis Labs在核心数据库之上提供了一些附加模块,而这些模块采用了一种新的许可。他们选择使用改版的Apache许可2.0,其中添加了一条Commons Clause附加条款。此条款限制了软件或收费服务的出售。该公司选择这种转变的理由是,云服务提供商销售的服务使用了开源代码,但这些代码并非出自他们之手,开源社区白白为他们做嫁衣。当时,Redis Labs承诺Redis“是BSD,现在是,将来也是。”
其实,Redis Labs不是唯一尝试使用限制性许可的公司。尤其是风险投资支持的数据库公司纷纷开始朝着采用新许可的方向迈进,为的是他们能够独家销售使用自家软件的服务。2016年,MariaDB为一款名为MaxScale的产品创建了商业源代码许可(BSL)。2018年底,MongoDB推出了服务器端公共许可(SSPL)。最终,Redis Labs的模块采用了SSPL和自家的Redis源代码可用许可(RSAL)的双重许可方案。
2021年中期,Redis Labs剔除了名称中的"Labs",正式更名为Redis。在宣布新公司名时,Redis再次承诺开源,并表示公司的更名"不会影响开源Redis许可,他们将继续采用BSD许可证"。另外,他们还制定了一套治理模型,其中提到将涉及Redis"架构、设计或理念"的决策权交由社区的"核心团队"。大家都以为这个团队的任命包括Redis本身的许可。如今Redis的网站上已经看不到这套治理方案了,但Internet Archive的Wayback Machine上还有存档,该页面上列出了核心团队的五名成员,其中三名来自Redis(Yossi Gotlieb、Oran Agra和Itamar Haber),另外两名分别是来自阿里巴巴的Zhao Zhao和来自AWS的Madelyn Olson。
3月20日,Redis宣布"Redis未来的所有版本都将采用源代码可用许可",包括SSPL和RSAL。Redis首席执行官Rowan Trollope写道,如今维护BSD许可"与我们成功推动Redis未来发展的努力背道而驰"。此处,未来版本指的是Redis 7.4及之后的版本。声明中的常见问题答疑称,根据公司的安全政策,安全补丁将回溯到之前版本,使用原始的三条款BSD许可。
SSPL和Redis的RSAL等使用限制性许可的支持者认为,这是一场仅限于云服务巨头(如AWS)与开源之间的战斗,使用限制是唯一合乎逻辑的选择,而云服务提供商是唯一的输家。2019年,Redis Labs首席执行官Ofer Bengal表示:
有些人谴责“许可变更”。但在最初的喧嚣平息后,特别是其他一些公司也提出了类似的概念之后,社区明白了最初的开源概念必须被修正,因为如今这个时代各大云公司利用垄断力量白占开源项目的便宜,而不为开源做任何贡献。
Trollope在3月20日的声明中表示:“云服务提供商只有在与Redis、Redis代码的维护者达成许可协议后,才能提供Redis 7.4”,但"对于继续享受双重许可的Redis开发者社区来说,一切都不会改变"。
"宽松许可"是具有误导性的一个短语。Redis7.4及之后的版本能够采用非免费许可方案,是因为外部开发人员已经根据宽松的BSD许可授权了他们的贡献。SSPL和RSAL的条款与开源社区中"宽松"一词的常见用法不兼容。
另外,看看Redis存储库的提交就会发现,云服务提供商没有为开源做任何贡献的说法并不完全正确。我使用gitdm快速查看了7.0.0版本发布以来的提交,这段时间内共有967次提交:
其中,25%的提交来自腾讯的朱斌斌(Binbin Zhu)。一些贡献者可能没有明确的雇主,但显然是 Redis 的员工,并不是独自工作的。(注意,一些只有个位数贡献者被省略了。)
因此可以看出代码贡献并不是关键。Redis 是一家由风险投资支持的公司,自 2011 年以来已经进行了多轮融资,总额超过 3.5 亿美元。该公司及其投资者似乎已经计算出他们可以安全地远离开源,获取更多收入。
他们有理由相信这个方向是可行的,比如MongoDB就是一个很好的例子。2017 年,MongoDB上市,并在一年后转向了 SSPL。不久之后,Linux主发行版停止打包该数据库,因为不符合他们的许可标准。但在当时,MongoDB已经将目光投向了一种平台模式,鼓励开发人员(以及他们的雇主)使用MongoDB及其相关产品的服务模式,并支付相应的费用。MongoDB发布源代码可用版本可被视为一种吸引开发者的招徕策略,实际上该公司根本不在乎开源。
Redmonk 创始人 Stephen O'Grady 曾在 2017 年写道:
随着开发人员开始控制技术选择和方向,虽然专有替代方案更为优越,但开源软件的便于访问性带来了巨大的市场优势。方案A可自由下载,方案B可能更为优越但需要销售人员经手,实际上使用者别无选择。
但是,O'Grady 指出,一般来说开源不如基于服务的替代方案方便,如果便利性是最重要的因素,那么开源就存在问题。尤其是MongoDB这类的供应商从专有供应商那里学到了一个道理:“锁定客户对业务发展更有利”。
真的对业务发展更有利吗?MongoDB在不断发展壮大,客户在增加,上个财政年度收入达 16.8 亿美元,增长率超过30%,其 Atlas 数据库服务的收入增长也超过了30%,种种迹象表明许多公司更加倾向于使用花钱的服务,而不是尝试自行托管。尽管如此,MongoDB仍处于亏损,同一时期亏损超过 3.45 亿美元。
但是,投资者可能对股价更感兴趣,而不是实际利润。MongoDB上市时的股价为 33 美元,但现在已经超过 350 美元。如果Redis也能实现类似的战绩,投资者们肯定会很满意。
风险投资支持的供应商似乎已经达成了共识,他们可以摆脱开源。尤其是,他们不会被“其他商业利益、基金会以及其他感兴趣的行业参与者的竭力反对”。然而,Redis 可能误判了行业气息。
去年,Hashicorp项目采用 BSL,不出几日Terraform项目的分叉就出现了,并在Linux基金会的支持下化身为OpenTofu。3月28日,Linux基金会宣布支持 Valkey,该分支与Redis 7.2.4并无两样,AWS、谷歌云、甲骨文、爱立信和 Snap 都声称会支持该分支。
Valkey 分支是在 Redis 许可更改后的几天内建立的。Olson 写道,她和“各位前 Redis 贡献者”已经开始在使用原始的三条款 BSD 许可分叉上展开了工作,该分叉暂定名为“placeholderkv”。Olson、Zhao、Viktor Söderqvist 和 Ping Xie 都是维护者。根据 Olson 的说法,这不是Redis的 AWS 分叉,而是“我在努力保持与社区的联系”而已。也有人考虑过KeyDB,但这个分支“缺少了许多社区已习惯的东西”。
KeyDB分支是2019年由于技术原因而创建的,与许可无关。该项目自称是“更快的、即插即用的Redis替代品”,由 John Sully、Eric Blenkarn 和 Ben Schermel 创建,他们想要一个多线程版本,并未能说服 Redis 维护者朝这个方向发展。Sully 和 Schermel 成立了一家公司,也叫 KeyDB,提供专有企业版。2022年,KeyDB被Snap收购,整个代码库完全开源,采用了三条款 BSD 许可。
KeyDB 作为直接替代方案的问题在于,自从这个分叉建立以来就与Redis分道扬镳,没能跟上后者的发展,至今仍然缺少 Redis 7 的许多功能。Sully 表示,他几乎没有时间处理“与 Snap 没有直接关系的问题”,尽管该项目“非常欢迎外部帮助,如果社区有兴趣帮助的话,我们也可以指定其他的维护者”。3月22日,Sully 更新了另一个问题,并表示他正在讨论添加维护者,为的是让KeyDB跟上Redis 7。目前尚不清楚 Valkey 是否会取代 KeyDB,但鉴于Snap的介入,从长远看来这似乎很有可能。
SourceHut 的创始人兼首席执行官Drew DeVault 也创建了一个名为 Redict 的分支,基于 Redis 7.2.4,但选择使用 LGPLv3 许可。他在公告帖子中表示,选择许可是“一个深思熟虑的选择,平衡了许多问题”。DeVault 希望选择一个 Copyleft 许可,但“尽可能方便用户遵守”,并且便于集成 Redis 兼容模块或可在 Redis 内执行操作的 Lua 插件。他还指出,Redict 不会采用贡献者许可协议(CLA),但要求贡献者使用开发者溯源认证验证贡献。尽管他与 SourceHut 有联系,但 DeVault 选择将 Redict 托管在 Codeberg 上,为的是“为所有基于GitHub社区的人提供舒适和熟悉的用户体验”。
还有一个有力的竞争对手是微软的 Garnet,发布于3月18日。根据公告,这是2021年以来一直由微软研究部门开发的远程缓存存储系统,可以缓存和管理与 Redis 相同类型的数据,并且能够与 Redis 序列化协议兼容。Garnet 采用 MIT 许可证,用 .NET C# 编写,所以无法直接取代Redis。然而,其 API 兼容性页面声称,可以被视为一个“足够接近的起点”,可以“与许多 Redis 客户端结合,并且不需要修改”。许多,但并非所有。例如,一位用户尝试将一个 NodeJS 应用程序切换到 Garnet,但发现 Redis 的 FLUSHALL 命令目前不受支持。该项目的路线图上提到了添加对缺失 API 的支持。
Linux 发行版再一次陷入混乱。Neal Gompa 在 Fedora 开发列表上开了一个讨论帖,指出了许可变更以及需要从 Fedora 中移除 Redis 的必要性。Jonathan Wright 回答说,KeyDB 是潜在的替代方案,而且早在许可变更之前他就在“处理打包”问题了。后来,他又表示,对于寻找Redis替代方案的人来说,KeyDB 将是“一种倒退,令人头痛”。然而,3月23日,他又写道,他已经推出了构建,可在 Fedora 和 EPEL 8 和 9 中测试。
在 Valkey 公告发布后不久,Wright 写道,他已做好打包准备,只等标记版本发布。Wright 还表示,他“认为对于大多数场合,Valkey将成为Redis[事实上的]替代方案”。
Gompa 也在 openSUSE 的 Factory 讨论列表上提出了这个问题。Dominique Leuenberger在回复中提到了Tumbleweed中依赖于Redis包的18个软件包的列表。最初的讨论还提到了Redict和KeyDB作为可能的替代方案,但当时Valkey尚未宣布。
对于社区发行版来说,找到一个Redis的替代方案并不是唯一的问题。Jacob Michalskie指出了一些 openSUSE 项目中使用的服务,这些也需要一个Redis的替代方案,其中就包括code.opensuse.org以及Discourse论坛软件使用的Pagure代码托管软件(该软件由 Fedora 创建,Fedora也在使用)。
Debian 贡献者 Guillem Jover提交了一个包请求,指明将KeyDB作为Redis的潜在替代方案。Jover 表示,他不确定自己是否能够独自担任维护者,但很乐意伸出援手。Jover在电子邮件交流中表示,他的公司已经从 Redis 6 迁移到了 KeyDB,“整个过程很顺利”。根据 Jover 的说法,“与 Redis 7 相比,KeyDB 可能缺少一些功能,但我们既没有注意到缺少任何功能,也没有感觉到我们漏掉了任何东西。”
Jover 表示,现在还为时过早,无法判断新的分支是否会继续得到维护,而 Redict 的 LGPLv3 许可“也可能存在生态系统的问题”。在 Valkey 公告发布后,Jover在电子邮件中表示:“我认为我们可能会进一步推进在Debian中打包KeyDB,如果KeyDB停止维护,我们可以随时删除或作为过渡。”
当然,现在预测某个或多个分支是否会取得重大进展还为时过早,就目前而言,Valkey似乎有可能成为一个可靠的替代方案。Redis在短时间内出现许多分支,并得到了社区和行业的支持,这应该能让等着坐享其成的供应商们减缓脚步。