MongoDB开源吗?一文说清它到底算不算“真开源”
哎,这个问题我真的被问过太多次了,每次有人问我“MongoDB开源吗”,我都得先叹口气,然后说:这事儿吧,真不是一句“是”或“不是”能打发的,你要是刚接触数据库,或者正准备技术选型,听到别人说“MongoDB不开源了”或者“MongoDB是开源的”,估计脑袋都大了,别急,今天我就用大白话给你掰扯清楚。

先说结论哈:MongoDB曾经是开源的,但现在不能简单说它“完全开源”了。 它走的是一条“源码可见”但带限制的路子,啥意思呢?咱们慢慢聊。
早期的MongoDB,那叫一个“真香开源”
最早的时候,MongoDB用的是AGPL许可证,这个许可证是啥?简单说,就是你可以自由用、自由改、自由分发,但如果你把它做成网络服务提供给别人的话,你也得把你的修改开源,很多公司一开始就是冲着这个“免费又自由”去的,毕竟谁不喜欢白嫖呢?对吧?
那时候大家都说“MongoDB开源吗?当然开啊!”社区版随便下,文档也全,生态长得飞快,我记得当时身边做Node.js的朋友,十个里有八个都在用MongoDB,那叫一个热闹。
但后来,画风变了……
到了2018年,MongoDB突然宣布:我们把许可证换成SSPL(Server Side Public License)了,哎哟,这一下炸锅了,为啥?因为SSPL明确规定:如果你把MongoDB作为服务提供给其他人,那你必须把整个服务栈的源码都开源——注意,是“整个服务栈”,不只是MongoDB本身的修改。
这可就狠了,像AWS这种云厂商,本来可以拿开源的MongoDB做个托管服务赚钱,现在要么开源自己的一大堆代码,要么就别用,结果呢?AWS转头就去搞了个DocumentDB(兼容MongoDB API),还嘴硬说“我们没用MongoDB代码”,你说气不气人?
所以从那时候起,你要是再问“MongoDB开源吗”,就得加个限定词了:对普通开发者来说,源码你能看、能改、能自己用,但你不能拿它做成商业托管服务去卖。 这还能叫“开源”吗?开源促进会(OSI)说:不算,SSPL不是开源许可证,但MongoDB自己嘴硬,说“我们这叫源码可用”。
那现在到底该怎么回答“MongoDB开源吗”?
我这么跟你说吧:
- 如果你是自己学习、做小项目、公司内部用,那MongoDB的社区版你随便用,不要钱,源码也能下,从这个角度说,它“开源”的部分够你用了。
- 如果你想做个云服务卖给别的公司,那对不起,SSPL的限制卡得死死的,你得好好看看许可证,或者干脆买商业许可证。
- 如果你问的是“它符合OSI定义的开源吗”,答案是不符合,所以很多Linux发行版(比如Debian)已经把MongoDB从官方仓库里踢出去了。
说白了,MongoDB现在是个“披着开源外衣的商业软件”,它把最核心的社区版放出来让你免费用,但一旦你威胁到它的商业利益(比如做托管服务),它就用许可证把你拦住。
我个人的一点小情绪
说实话,我挺理解MongoDB这么做的,毕竟公司要赚钱嘛,云厂商白嫖确实太狠了,但是吧,作为开发者,我心里还是有点别扭,以前说“开源”就是真开源,现在还得区分“OSI开源”和“源码可用”,累不累啊?
而且你发现没有,自从MongoDB改了许可证之后,好多开源项目都跟着学坏了,Redis、Elasticsearch、HashiCorp……一个个都开始改许可证,搞到现在,我每次跟别人介绍一个数据库,都得先问一句:“你介意它不算真开源吗?” 哎,世风日下啊。
总结一下
回到最初那个问题:MongoDB开源吗?
我的答案是:它曾经是开源的,现在只能算“源码可见”+“有限使用”。 对于绝大多数普通开发者来说,你该用还是用,别太纠结,但你要是想拿它做商业托管服务,或者你是个“开源原教旨主义者”,那你就得掂量掂量了。
行了,今天就唠到这儿,如果你还有啥疑问,或者想跟我掰扯掰扯SSPL到底合不合理,欢迎在评论区跟我吵一架,我反正已经准备好小板凳了。😄
相关阅读: