欢迎来到Unix的世界
很多人都用了很多年的Unix(其实更熟悉的是叫Linux),也接触到Unix世界中的各种概念,比如GCC、GNU、BSD、POSIX、GPL等等,也大都知道一些传奇的如雷贯耳的人物,比如Ken Thompson、Dennis Ritchie、Linus Torvalds、Richard Stallman等。但是这些概念是怎么发展和相互关联的,以及这些人物是怎么书写历史传奇的,相信能说清楚的人并不多。这里就专门汇总一下这些信息,供大家参考。
另外,了解这些历史本身也是非常有趣的。看起来各种杂乱无章、琐碎纷繁的点点滴滴,最后还是挡不住历史的潮流,演化出了如今精彩纷呈的现实世界(包括有名的Mac OS、IOS、Android等),而这和人类历史的发展竟如此相像~
Unix
下图是对Unit的历史的一个简单汇总,参考了coolshell上的一篇文章UNIX 40年:UNIX年鉴。如果对其详细历史有兴趣的话,可以去这里看看Unix History(那个白色的横条是一个很残暴的PDF文件,作者牛逼到爆)
上图中有几个重要信息:
- BSD诞生于1978年,是基于其在1974年收到的Unit的源码拷贝,后面很多重要的发布版本都是源于BSD
- 1988年为了统一Unit的标准乱象,IEEE提出了POSIX标准
- 1991年,Linux诞生,但其本身只是一个操作系统的内核,不包含任何的配套软件
- 1992年,Linux内核被整合近了GNU,GNU+Linux内核,这才是大家常用的Linux系统,实际上应该叫GNU/Linux
- 2001年,Mac OS诞生,其基于Mach操作系统,Mach系统又是基于BSD,但是替换了其中的Unix内核
Linux
下面分别简单介绍上面几种许可证的特点:
-
GPL,GNU General Public License,其主要特点在于其“传染性”,只要软件中有使用了GPL协议的产品,包括直接引用源代码或者引用修改后的衍生代码,则该软件也必须采用GPL协议,开源和免费,不允许衍生代码作为商业软件发布和销售。Linux和大部分GNU产品都是采用的GPL协议。
-
LGPL,GNU Library or “Lesser” General Public License,允许商业软件通过引用类库的方式使用LGPL产品,而不需要公开软件的源代码。新增的代码不需要采用LGPL协议,但是修改的代码则必须采用LGPL协议。LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。使用LGPL协议的比较有名的产品有JBoss、Hibernate、FCKeditor等
-
BSD,Berkeley Software Distribution,BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
当使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:
- 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议
- 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议
- 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广
很多公司企业在选择开源软件的时候都首选BSD协议,因为可以完全控制这些第三方的代码,而且在必要的时候可以进行修改或者二次开发。使用BSD协议的比较有名的产品有nginx、CruiseControl、Redis等
-
MIT,MIT License,是最为宽松的协议,这个协议唯一的条件就是在修改后的代码或者发行包包含原作者的许可信息,比较适用商业软件。使用MIT协议的产品如jquery、Node.js等
-
Apache License,是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:
- 需要给代码的用户一份Apache Licence
- 如果你修改了代码,需要在被修改的文件中说明
- 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明
- 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改
-
MPL,Mozilla Public License,允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,它要求基于这种软件的修改无偿贡献版权给该软件。这样,围绕该软件的所有代码的版权都集中在发起开发人的手中。但MPL允许修改和无偿使用,对链接没有要求。
还有其它形形色色的开源协议,详情可以参考Various Licenses and Comments about Them