微言码道 · 手记

趣谈自由软件与开源软件(五):自由与开源许可证

—— 今天繁荣的互联网生态,背后都离不开自由与开源许可证的保护与支持,除了知道能免费使用和开放源代码以外,我们对许可证究竟有多少了解?

软件一定是有许可证的。也就是License。

对于国内习惯了使用开源软件或框架,类库的程序员群体来说,最熟悉的License应该是开源许可证,也就是Open Source License。在开源许可证中,接触最多的可能是Apache License以及MIT这两个应用较为普遍的许可证了。

但实际上,关于许可证,范围就大很多。

本篇,继续趣谈自由软件与开源软件,这是第五篇。本系列其它文章为:

  1. 趣谈自由软件与开源软件(一):什么是自由软件
  2. 趣谈自由软件与开源软件(二):自由软件与开源软件的分歧
  3. 趣谈自由软件与开源软件(三):一个名称的争议,究竟是该叫Linux还是GNU/Linux
  4. 趣谈自由软件与开源软件(四):为什么主流的Linux版本不被认为是完全自由的操作系统

一)

什么是软件许可证?

软件许可证是一个在法律有约束的条款或合同。任何一个软件,一定是具有某种许可证的。

软件许可证主要是针对终端使用用户来说的,主要是用来约束用户如何使用及分发软件。

举例说明,我去年购买了Typora这个软件,获取了许可,但它的许可中明确约束我只能在三个设备上使用这个软件。这就是它这个软件许可证的对我这个用户的一种约束。

任何软件都应当是有许可证的。就算一个软件放在互联网上你可以下载到,又发现它没有任何明确的许可声明,这样的情况也不能说这个软件没有许可证,而是它是属于No License许可证。

二)

软件许可证有哪些分类?

总体说来,软件许可大致可以分为以下分类:

  1. 公有领域许可
  2. 自由与开源许可
  3. 专有许可
  4. No License

简单解释下不同分类:

公有领域许可

Public Domain许可

这是一个最纯粹的许可,简单点说属于Public Domain的软件意味着它完全放弃了版权保护。任何人,组织或机构可以在没有任何约束的限制下使用,修改以及分发软件。

它比自由与开源许可更纯粹,很多自由与开源许可带有类似修改要指明原作者等一些限制,在公有领域许可下,这是完全没有的事情。

自由与开源许可

这应该是我们程序员最熟悉的一种许可形式了。

我们使用的很多软件,框架,类库或工具集,都属于自由与开源许可。

正是因为自由与开源许可的保护,我们可以自由自在的基于它们开发出更丰富的软件生态或服务生态,以使得整个互联网越来越繁荣。

这也是我后面要重点讲的许可形式。

专有许可

商业软件中很大一部分属于专有许可。专有许可通常不会提供软件源代码,因为它主要是以谋取商业利益为核心的许可形式。

当然,专有许可有收费或免费的形式。并不一定都是收费的。

比如我花89元购买了Typora这个软件,就这是花钱的专有许可。但我下载了微信这个软件,虽然我没花钱,但微信这个软件是有明确的专有许可的,我在使用微信的过程中要遵守它的许可约束。

至于免费的商业软件怎么赚钱这种事,对于我们中国人来说绝不会陌生了吧。有一句话叫啥来着:

免费的才是最贵的

但我认为我们不应该对专有许可抱有敌意,我认为它是许可生态中或软件生态中不可或缺的一部分。我猜想也这也是原来一部分人不认同自由软件理念,而孵化出开源软件的理由之一吧。

No License

原则上任何一个软件都会申明自己的许可证。

但确实一部分软件你可能可以下载到它,甚至可以获取到它的源码,但它就是没有声明自己的许可形式。那这样的我们就称之为“No License”

No License也是许可的一种形式。

至于No License许可下的你能不能下载使用,修改或分发新的软件?这个就要看你所在环境或国家的版权法是如何规定的了。不同地方对待并不一致。

三)

接下来,再说下自由与开源许可。

我在前面的文章也说,自由软件与开源软件重叠性非常高,绝大部分开源或自由软件,是同时属于自由软件和开源软件的。

这一点,对自由许可证和开源许可证也是如此。

自由软件许可证与开源许可证之间其实并无非常明显的分界线,比如哪些许可证是属于开源许可证,哪些许可证是属于自由许可证。

并没有这么清晰的分类,现实情况下,大多数许可证同时满足自由许可证,又满足开源许可证的要求。

所以它们是非常类似的。因此通常我们会把这两种许可放在一起说,称之为自由与开源许可。

这一点从Copyleft这个理念上就可以得知。

自由许可和开源许可都有Copyleft的理念,其实这也是理所当然的,因为开源理念本来就是从自由理念中分化出来的。

四)

大致来说,自由与开源分为两个方向。

一个是有较严格约束的,它们称之为Copyleft,另一种是宽松的没有严格约束的,也就是Permissive license

Copyleft

无论是自由软件还是开源软件,它们背后都是有自己的理念的。都是认为自己的形态是优于专有软件的。

所以理所当然的,它们某种程度上不希望自己的努力或成果被专有软件无偿使用或利用,这就不符合它们的理念了。所以它们发明了Copyleft概念。

简单点说,在Copyleft理念上的许可证的软件,虽然你可以免费使用,修改或分发新的软件。但Copyleft对再分发是有限制,比如你只能将你的软件再分发为开源或自由软件,不能分发为专有软件。

一个最明显的对我们程序员都非常熟悉的就是Linux操作系统了

因为Linux操作系统中大量软件都是在Copyleft的理念保护下,这就是你会发现今天所有Linux发行版本都是开源的,没有闭源的Linux的原因所在了。

并不是没有商业公司不想搞闭源,而是因为Copyleft限制了只能再分发为开源或自由的软件。所以就算是红帽这样的,它也没法把Redhat Linux闭源。

除非你不用Linux内核,不用GCC等这些Copyleft保护下的软件。不用这些,这和从零开始搞一个系统也没什么差别了吧。

所以,Copyleft是对自由与开源理念的一种很好的保护的约束。

比如知名的Copyleft开源许可有GPL, AGPL等。

宽松许可(Permissive license)

虽然Copyleft很好,但它不一定适应所有情况,对吧。

比如一个开源的加密类库,你也是Copyleft,我就是用了你的类库加了个密,然后我的东西就不能专有或商业化了,这就有点过分了吧。

所以,考虑到这些情况,无论是自由许可还是开源许可,都有宽松许可,也就是Permissive license。

在宽松许可下的许可证,相对于有约束的Copyleft许可,是允许可以商业化或专有化的再分发的。

这也是非常正确的做法,没有宽松许可,那今天互联网上大多数专有软件不知道从何谈起了,哪个软件或服务没有使用开源的类库或框架?

比如MIT或Apache License就是最有名的宽松的许可了。

五)

好了,到这为止,相信你对软件许可证有了一定的了解了。在这个了解的基础上,再来看主流的开源或自由许可,你就知道是怎么一回事了。

至于有哪些许可证,我在这篇文章就不谈了,这种知识网上太多了。如我前面所述,除了非常少的一部分外,大部分开源或自由的License同时属于自由许可与开源许可。

比如著名的Apache License以及MIT是宽松的自由开源许可,也是开源与自由中比较主流的形式。而GPL,AGPL则是Copyleft许可,禁止分发为专有软件。它们都同时属于自由许可与开源许可。

下一篇:趣谈自由软件与开源软件(终):自由软件究竟错失了什么