之前写过一篇文章(那些年用过的开源项目(一)),列出了很多当年用过的开源项目。现在有这么多的开源项目可供我们选择,这要得益于当前非常积极的开源氛围,然而,尽管开源项目很多,我们在项目中选择的时候,一定要注意它的开源许可协议,否则可能会引起一些法律的问题。

之前看过一幅图,非常清楚的给出了几个常见的开源许可协议(GPL、BSD、MIT、Mozilla、Apache和LGPL)的区别,如下:

扒一扒常见的开源许可协议

图片来源

https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html

关于各个许可协议的具体定义,大家都可以网上查阅。关于如何选择,根据我的经验,对于商业软件开发,一般来说,BSD、MIT、Apache这三个许可协议比较安全;其它三个需要仔细考虑。

下面具体扒一扒各个许可协议:

Apache

Apache许可协议,现在是2.0版本,具体协议的定义参考https://www.apache.org/licenses/LICENSE-2.0。

扒一扒常见的开源许可协议

对于Java开发人员来说,这个license应该不陌生,Apache和Spring下面的开源项目都是基于这个开源许可协议。

BSD

BSD的全称是Berkeley Software Distribution,从名字可以看出它跟美国的伯克利大学有关。这个许可协议出现的历史背景跟unix操作系统有很大关系,后面会提到的GPL许可协议也跟unix操作系统有关系,可见一个东西的出现都有它历史的相关性。当时,unix操作系统是一个受版本保护的商业操作系统,其所有权归AT&T贝尔实验室所有,为了推广unix系统,贝尔实验室免费把unix操作系统的源码分发给各个大学和研究机构使用研究,后来在伯克利大学,就出现了一个unix系统的BSD发行版本,这就是BSD的来源。很多人提到BSD,都会想到Bill Joy这个元老级程序员,这里有一篇关于他的文章(那些神一样的程序员),大家可以查阅。

之前用过的antlr和NSubstitute,都是BSD许可协议。

MIT

MIT的全称是Massachusetts Institute of Technology,美国的

麻省理工学院,又一个跟美国大学有关的开源许可协议,所以可以看出美国大学早些年代在计算机领域的影响力有多大。

之前用过的autofac和Newtonsoft.Json,都是MIT许可协议。

GPL

GPL的全称是GNU General Public License,它是早期出现比较严格的开源许可协议,但是它的出现有很重大的历史意义。正如上面有提到过,unix操作系统是受版权保护的,正是如此,贝尔实验室还和很多机构打过官司,其中就包括伯克利大学。BSD unix的出现,对操作系统是否开源产生了巨大的影响,一部分人拥护闭源,代表人物就是Bill Gates,后来创建了Windows系统;另外一部分人拥护开源,代表人物是Richard Stallman,后来创建了GNU工程。GNU创建的初衷就是反版权,因此就出现了GPL开源许可协议。

GNU(GNU's Not Unix!)工程本来是想开发一个自由的操作系统,但是后来由于操作系统内核开发速度较慢,同时Linux内核发布了,于是GNU工程就决定复用Linux内核加上自己的一些工具类库,发布了GNU/Linux操作系统,这也是现在各种linux操作系统发行版(比如:Debian、RHEL、CentOS等)的原型。

所以这些平常用到的Linux操作系统就是大家用过的基于GPL许可协议的开源软件。

LGPL

LGPL的全称是Lesser General Public License,轻量级通用公共许可证,顾名思义,它就是GPL的宽松版。

之前用过一个library:flying saucer,就是这个许可协议,这个许可协议用于商业软件开发的话,需要仔细评估。

Mozilla

我想大家对Mozilla很熟悉的地方就是MDN和firefox浏览器,起初firefox是网景Netscape公司的一个产品,Mozilla是网景公司设立的一个组织,用于支持Firefox的开发。后来,网景被收购之后,Mozilla基金会成立用于继续支持firefox开发,Firefox以Mozilla开源许可协议开源。

除了上面提到的,Java开发人员肯定还熟悉另外一个开源许可协议Eclipse,之前用过的eclipselink就是这个许可协议,它也是属于风险比较小的一个协议。

更多的开源许可协议,大家可以查看下面官方网址:

https://opensource.org/licenses/alphabetical

References