用了十年开源软件,我才发现“免费”才是最贵的东西

🔑 关键词:开源许可证,开源商业模式,Redis许可证,开源陷阱,自定义协议

📖 摘要:从个人真实踩坑经历出发,深度对比不同开源许可证与商业模式的本质差异,揭示开源软件并非表面上的免费晚餐,云厂商与创始企业的博弈正在改变游戏规则。

之前公司要上一个数据缓存层,技术选型的时候大家一提到Redis眼睛都亮。开源、免费、性能强,文档全,社区活跃。我们当时的CTO拍板说就用这个,省得自己写缓存逻辑。没人反对,因为大家都默认开源软件是免费午餐,但谁也没仔细看它的许可证什么时候变了。后来我才知道,Redis 6.2.7开始就不再使用BSD 3-Clause,而是换成了RSAL和AGPL双许可模式。也就是说,如果你想通过它提供商业托管服务,不再像以前那样随意用了。你看看,这哪里是免费?明明是一把软刀子。

图片

我自己的理解,开源其实分几个阶段。早期的GPL是理想主义的,它要求你修改代码后也必须开源,像在公共领域里互帮互助。后来Apache、MIT这些宽松许可证出现,给商业公司留了后路——你可以用了我的代码,然后闭源去卖钱。但最微妙的场景发生在云服务兴起之后。AWS们直接把别人开源的东西包装成云服务卖,项目原作者一分钱拿不到。于是Elasticsearch改成了双许可,MongoDB发明了SSPL,Redis直接走了RSAL。你说他们不道德?可人家维护了多少年,烧了多少时间。我当年在自己插件项目里也遇到类似问题,有人拿我的代码做成了收费工具,一份钱没分给我,那种感受真的没法说。

图片

但这里有个新人常踩的坑:以为所有开源都是同样的规则。实际上GPL是传染性的,你引用了GPL的库,整个项目可能都得跟着用GPL。MIT和Apache则可以闭源商用,但Apache包含了明确的专利授权,MIT没有。你去看很多开源项目的FAQ,他们最喜欢说“我们使用MIT协议”,好像这样就永远无忧。我真的见过有人把AGPL的代码直接拖着跑,然后还在上面做了内部管理系统,以为不对外分发就没事——把AGPL研究透了你就知道,只要让外部用户通过网络访问,也算“分发”。这就不是一个“免费”能说清的事。建议任何使用开源的人,先用命令查一下当前版本的许可证,像是通过OSI官网搜索,或者用类如licensee这样的工具扫描一下整个依赖树,看看有多少隐藏的坑。

图片

更让我觉得讽刺的是那些动不动骂商业套壳很“脏”的人。我认识一个独立开发者,自己做了个开源监控组件,在一家独角兽内部被用得飞起。一次聊天他说,如果哪天他不更新了,估计对方要哭死。因为后面已经没有人能理解和维护那套代码了。这个例子说明什么?所谓免费的软件,其实积累的是巨额的隐形成本和风险。一旦维护者心力交瘁或者账号被禁用,你依赖的上游直接断粮。像OpenSSL就是个经典,全世界互联网的安全都压在那几个志愿者身上,直到Heartbleed漏洞爆发,大家才意识到,这哪是什么免费,这是全球规模的道德绑架。开源没有义务给你做售后,出了问题只能自己兜底。

图片

如果你真的想在这个生态里活下去,不要迷信“源代码在手,万事大吉”。先问清楚供应商是否支持某一种开源协议的商业化行为:比如组件作者是不是会把版本变成单点收费?支持窗口有多久?安全更新谁来发布?有没有commercial option?我看到Redis的Redis Stack模块有些是自己开的,但RedisInsight这种工具居然还要用户接受特别的条款。你说开源吗?代码在那儿,确实能看见。但仔细看定义,用的是“Fair Source”之类的非标准许可,甚至不属于OSI认可的开源协议。这简直就像挂羊头卖狗肉。我也不是全盘否定这些变化,但作为用户,别再用“免费”“开源”来麻痹自己了。每一个好用的库背后,都有账单在等待支付,只是不一定直接找你要钱罢了。

图片