开源软件到底还能不能信?从Elasticsearch和Redis的许可证翻脸,聊聊我看到的那些坑

🔑 关键词:开源许可证,Elasticsearch,Redis,开源商业化,维护者困境

📖 摘要:当一个个明星开源项目宣布改许可证,你还会放心用吗?这篇文章从一个业余维护者的视角,拿 Elasticsearch 和 Redis 的具体变更细节做对比,聊聊开源世界里“白嫖”和“反白嫖”的拉锯战,以及普通开发者该怎么选型。

先说个我自己的经历吧。前几年我搞了一个小的命令行工具,也就三千多 star,本来挺开心。结果有一天某大厂(这里不点名了)把我的核心逻辑直接抄进了他们的一款商业产品里,连LICENSE头都没保留。我去发了个issue,人家技术员回了句“我们用的是你自己写的精简版,改了架构”。那一刻我确实有点心寒。正因为这样,这几年看Elasticsearch和Redis这两大支柱项目接连改许可证,我居然没有太多道德上的愤怒,反而有种“早就该这样了”的爽感。但转过头来,作为用着这些开源库的普通开发者,我又忍不住想:以后选型到底还能不能信它们?

图片

先回忆下Elasticsearch这个事。2021年1月,Elastic公司在他们的博客里宣布,要把Elasticsearch和Kibana从Apache License 2.0改成双许可证方案:SSPL(Server Side Public License)和Elastic License。当时官方给的措辞是“云服务商没有提供互惠贡献,我们需要保护社区”。真实原因谁都知道——就是针对AWS。AWS早在2017年就把Elasticsearch的一个fork做成了自己的托管服务叫Amazon Elasticsearch Service,还是那个名字,但是代码是从原版分离出来自己维护的,Elastic公司一分钱拿不到也管不着。改许可证之后,AWS反手在2021年4月fork了最后一个Apache 2.0版本的Elasticsearch,搞出了OpenSearch,还顺手把所有相关的客户端库都换名了。到今天,你如果去GitHub上看,OpenSearch的社区活跃度实际上并不低,但搜索领域的新插件、新生态还是优先适配Elastic原版——这种分裂的局面,两家都有责任。

图片

Redis的情况就更讽刺了。2024年3月,Redis的创始人antirez早就退了,新东家Redis Inc.(之前叫Redis Labs)突然宣布Redis本身从BSD 3-Clause改成RSALv2和SSPLv1的双许可。重点在于,Redis还叫Redis,服务端和客户端组件都保留名字,跟前几年的各种模块不一样,这次是核心。当时很多人都懵了,因为连Debian和Fedora这些Linux发行版都不得不把Redis包从主仓库里摘掉,因为不满足“自由使用”的定义。我记得Valkey这个fork就是在那时候由Linux基金会接管的,我去试了一把,基本上API兼容,可有些模块比如RedisSearch、RedisBloom这些官方插件并没有跟着迁移,用起来总像缺了条胳膊。你说Redis这招算对不对?从商业上看,他们确实撑不住了。我猜他们数过账:全球几百万台服务器上跑着Redis,可绝大多数人用的是免费版或者用云厂商提供的托管Redis,Redis Inc.只有一个Redis Cloud在赚钱。但这不等于用户可以接受,大家反感的是不确定性,而不是花钱本身。

图片

把这两个案例放在一块对比,你会发现一个真相:开源许可证从来不是科技圈圣洁的“道德协议”,它只是商业竞争的防御工具。Elastic选择直接跟云巨头翻脸,因为AWS占了他们七成以上的托管搜索市场;Redis却是在和更微妙的生态竞争——云厂商、fork项目、内存数据库新品如Garnet、KeyDB,都在蚕食它的地盘。两者的共同点是,他们都默认了一个前提:用户会因为信任一个开源项目的名字而继续使用它。但这恰恰是最大的风险。我见过太多中小团队,一边骂着牧羊人(指MongoDB)一边却还是用了MongoDB Atlas。为什么?因为切换到另一个兼容项目不是改配置那么简单,你得搞定监控、备份、调优还有团队的知识积累。锁定的本质不是协议,而是你业务代码里最深处那个CONFIG SET命令、那个mapping结构。

图片

说到这,我想聊聊我自己的看法:开源这个词早就变了味。现在真正“开放”的不只是源代码,而是生态的制空权。一个项目是死是活,并不取决于它用了BSD、MIT还是SSPL,而取决于有没有一个能持续投入的组织和一群利益一致的维护者。我记得去年我拿一个小项目去面试某家公司,面试官问我:“你看这个项目用的是MIT,我们直接用没问题吧?”我说:“代码确实没问题,但等你们改了需求想提PR时,发现维护者已经三个月没合并了,那问题就大了。” 选型时,你不能只看许可证右下角的那个徽章,得看这个项目的commit频率、issue响应速度,还有它的商业模式是不是已经和自己的业务方向撞了车。如果都用OpenSearch/Redis fork这样的替代品,你反而要小心:旧版永远停留在那个时间点,安全漏洞自己扛,新玩法永远跟你无关。

图片

最后,我其实不是想劝你“别用开源”,而是希望你对它有一个清醒的期待。像我自己,现在给项目加许可证时,我会故意选一个类似 Elastic License 的可变协议,而不是傻白甜地放一个MIT上去。看起来不酷,但能拦住一部分不想付钱还不想署名的大族。也许你会觉得这是开源的倒退,但我不这么认为。真正的倒退是维护者花了几万小时写代码,最后被云厂商一个按钮打包成托管服务,连一句感谢都拿不到。如果哪天你在一个全AWS/Azure托管的架构里,底层的寻址、缓存、搜索全变成了商业服务,请别惊讶:这就是开源世界反噬之后的结果。我们普通开发者能做的,就是每次执行 curl -fsSL https://xxx 之前,多看两眼那串冗长的许可证文本——那不是法律废话,那是一个个维护者在用脚投票。

图片