自由软件、开源软件、GPL、MIT、BSD…, 这些东西经常听到,却不明就里,本文对此做个简单区分和总结。

发展历史

自由软件运动

事情得从自由软件运动开始。从1983年起,Richard Stallman以维护计算机用户自由之名兴起了自由软件运动(GNU计划),并于1985年成立自由软件基金会(Free Software FoundationFSF)来推进该运动。
粗略的讲,一个软件如果是自由软件,意味着用户可以自由的运行、拷贝、分发、学习、修改并改进该软件。为推广实现自由软件,基金会提出Copyleft概念:

商业软件开发人员通过版权剥夺了用户的自由,我们使用版权来给予他它自由。这就是为什么我们把“版权(Copyright)”改称为“Copyleft”

Copyleft只是个抽象的概念,基金会继续推出GPL许可协议将Copyleft落地。GPL协议经过十多年发展,目前已更新到第三个版本(GPLv3)。该协议的核心内容是:如果一个软件使用(指类库引用,或者修改源码)了采用GPL协议的软件,该软件也必须是GPL协议,即代码的开源和免费。这就是著名的GPL”病毒式传播”特性。
按照这个协议,GPL软件基本与商业软件绝缘了,这也极大限制了它的发展。为此,比较宽松的LGPL协议出现,它允许商业软件以类库的方式引用LGPL协议软件,而不需要开源自己的代码。但如果想要修改代码,则修改部分也必须采用LGPL协议。

开源运动

自由软件倡导的是”自由”,是一种理想主义。1997年,埃里克·雷蒙 出版《大教堂与集市》,探讨了自由软件原则。受此启发,网景公司将其受欢迎的互联网套装释放为自由软件,引起极大热情。这些代码即为大家熟悉的Mozilla Firefox与Thunderbird。 网景公司的行动触动了雷蒙,他认为自由软件基金会的活动不如网景等公司的行动吸引人,因而雷蒙及其伙伴尝试将自由软件运动进行重新包装,强调分享与协作软件源代码的潜在商机。基于这个理念,很快开放源代码促进会(Open Source Initiative,缩写:OSI)于1998年成立。由此催生了Apache基金会等一系列开源组织及社区。OSI并陆续批准了BSD、MIT、Apache license等一系列开源许可协议。

  • BSD:BSD协议源自加州大学伯克利分校,协议比较宽松,代码使用者基本上可以“为所欲为”,条件是发布的源代码或者程序包中需包含原有的BSD协议,并且不允许使用原作者/公司的名号或产品进行商业推广。
  • MIT:MIT协议源自麻省理工学院,比BSD更为宽松,它只要求在发布的源代码或包中保留原来的MIT协议。
  • Apache License:Apache License 基于BSD,在BSD的基础上,如果修改了源代码,需要放置版权说明。

    自由与开源

    开源软件是自由软件运动发展出来的一个分支,但二者的本质不同。Richard Stallman认为开源软件跑偏了,与他的初衷想去甚远:

    开源软件和自由软件这两个词在很大程度上描述的是同一类软件,但是它们所基于的价值观却有着本质上的区别。对于自由软件运动而言,自由软件是一个道德底线,是对用户自由的基本尊重。开源软件则与此不同,开源哲学考虑的是怎么做把软件做得“更好”—仅仅从实用的角度。开源的哲学里,非自由软件之所以不好,是因为他们采用了一种劣等的开发方式。

开源软件和自由软件在代码开源这个动作上是一致的,然而他们的目标,或者说背后的价值观却不相同。 抛开意识形态上的不同不说,现实中,自由软件都是开源软件,反之则不然。

发展线: 自由软件、开源软件及相关许可协议 - 图1

分分类

BSD、MIT等都可以划分到宽松许可证范围内,另外还有GPL为代表的Copyleft许可证,他们之间的关系如下:
自由软件、开源软件及相关许可协议 - 图2

该怎么选?

上文只是介绍了几个比较常用的协议,实际上还有很多的协议类型。实际选择起来,需要搞清楚每个协议的类型,还是比较困难的。为此Github提供了一个很赞的网站可以参考,通过问自己几个问题来锁定协议,并且可以点进去查看协议的具体细节:
https://choosealicense.com/
另外网络上也流传着一个图,比较直观:
自由软件、开源软件及相关许可协议 - 图3

参考资料

什么是自由软件
GNU工程的哲学
为什么开源错失了自由软件的重点
自由与非自由软件的分类
如何选择开源许可证