公众号旧文

为什么开源协议有那么多种?

作者:胖子阅读 —

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 → 控制传染到“文件级”

六、一眼判断的方法

以后再看到一个新协议,直接问三个问题:

  1. 能不能闭源?
  2. 改了要不要开源?
  3. 有没有额外法律条款?

答案一出来,它属于哪一类,你立刻就知道。

最后一句话总结

开源协议看起来五花八门,但本质不过是三种人:

什么都不管的人(MIT) 必须传下去的人(GPL) 既要又要的人(Apache)

剩下的,不过是在这三种人之间,来回调参数而已。