公众号旧文
为什么开源协议有那么多种?
MIT、BSD、GPL、LGPL、Apache、MPL
逛GitHub,每次都能在readme.md下面看到这些开源协议的名字。
这一大堆,就好像在背单词。
但这些协议,其实用一个方法,就能全部看懂。
一、别看名字,看性格
开源协议的本质,不是法律条文。
而是作者对代码应该被怎么用的态度。
你只要抓住这一点,就会发现:
所有开源协议,本质只分三类。
二、第一类:宽松型 —— 爱咋用咋用
代表:
- MIT License
- BSD License
这类协议的核心思想只有一句话:
我把代码给你,剩下的,你随意。
你可以商用、修改、闭源,甚至拿去卖钱。
唯一要求通常就是:
别删我的名字。
这就像你把一辆车借给别人,然后对他说:
你随便开,别说是你造的就行。
三、第二类:传染型 —— 你用了,就得开源
代表:
- GNU General Public License
它的核心思想是:
自由不能被截断。
GPL 最怕的事情,不是别人赚钱。
而是别人把自由拿走。
它允许任何人使用代码,但不允许有人把开源重新变回私有。
你可以用、可以改、可以卖,但你必须开源你的修改。
这就是开源协议所谓的传染性。
这就像你吃了我的饭,就必须继续做饭给别人吃。
你不能拿去改一改,然后自己吃独食,这样不行。
四、第三类:折中型 —— 可以用,但我要设规则
代表:
- Apache License 2.0
- Mozilla Public License 2.0
这一类,是现实主义者。
因为现实世界里,光有自由还不够。
企业真正担心的,往往不是代码,而是专利、责任、商业风险。
因此这些开源协议的想法是:
既要传播,也要保护自己。
特点是,允许商用、允许闭源,但增加额外规则。
比如:
- 专利授权(Apache)比如 Apache 2.0,就专门增加了专利授权。意味着,我不仅把代码给你,相关专利也默认允许你使用,这样企业才敢放心使用。
- 修改部分必须开源(MPL)MPL 允许你闭源,但你修改过的那部分代码,还是要继续开源。它不像 GPL 那样整片感染,而是只感染修改过的文件。这就是所谓的文件级传染。
五、为什么世界只需要这三类?
现在再回头看:为什么开源协议那么多?
答案很简单:
开源协议都是在这三种性格上做微调。
比如:
- MIT → 更自由一点
- BSD → 加点限制版本
- GPLv2 / GPLv3 → 调整“传染范围”
- MPL → 控制传染到“文件级”
六、一眼判断的方法
以后再看到一个新协议,直接问三个问题:
- 能不能闭源?
- 改了要不要开源?
- 有没有额外法律条款?
答案一出来,它属于哪一类,你立刻就知道。
最后一句话总结
开源协议看起来五花八门,但本质不过是三种人:
什么都不管的人(MIT) 必须传下去的人(GPL) 既要又要的人(Apache)
剩下的,不过是在这三种人之间,来回调参数而已。