开源软件不等于免费软件(弄清开放源代码许可证很重要)

2020-04-09 · 树下魅狐 · · 本文共4,515个字,预计阅读需要22分钟。

似乎提到开源软件,往往给人一种错觉——我拿到了软件源代码,接下来我是不是可以大刀阔斧为所欲为?其实非也!开源软件不等于免费软件,开源也不等于免费。“Ctrl+C/V 撸起键盘就是干,开源协议要先看”,在你决定使用开源软件之前,请花几分钟,了解一下开源许可(Open Source License)的具体限制条件,对你将大有裨益。

通常,我们接触到的开源软件(Open Source Software简称OSS)都有对应的开源许可证(Open Source License)对软件的使用,复制,修改和再发布进行限制。开源协议是确定一个开源软件版权的法律合同,所以,在使用开源软件之前,了解各开源协议的特点对一名程序员来说尤为重要。

一、 Open Source License(OSL)

提到开源软件或开源协议,首先我们会想到大名鼎鼎的Linux操作系统。Linux是最著名的开源项目之一,它是在GUN操作系统之上构建的免费操作系统内核。虽说Linux操作系统是免费的,但Linux使用了GPL 2.0许可协议对其自身的源代码进行了限制。通常,所有的开源许可(准确描述是:开放源代码许可)都旨在控制软件的使用方式,例如:

  • 个人使用:出于非商业目的情况下使用和修改软件
  • 发行:用于商业或非商业行为用途的软件共享
  • 链接:链接到免费或专有资源
  • 专利授予:政府授予的知识产权权利
  • 分包许可:软件所有者允许其他人使用其软件进行二次创新的限制条件
  • 商标:对代表组织或产品的符号或文字的使用进行限制

二、许可证分类

在开源软件的世界里,协议分为两类:Copyleft和Permissive。在介绍Copyleft和Permissive之前,先了解一下Copyright这个词语。Copyright意为版权,我们在很多网站的页脚都能看到这个标识。Copyright(版权)是授予创作作品的所有者的专有权利,通常是指在有限时间内对作品进行复制。创作作品可以以文学,艺术,教育或音乐的形式出现。版权旨在以创意作品的形式保护思想的原始表达,而不是思想本身。

Copyright(版权)可以通过法律的形式授予,在这种情况下,版权因国家/地区的法律不同而有不同的限制条件;通常情况下,Copyright(版权)的公共法律期限在创作作品所有者去世后50年到100年内到期,具体取决于司法管辖区。

2.1 Copyleft

Copyleft(著作权或著佐权),源自自由软件运动,是一种利用现有Copyright(版权)体制来保障用户软件自用使用权利的许可方式,可以理解为允许他人使用,传播创作作品,但会附件一些限制条件。在自由软件许可中增加Copyleft条款后,该自由软件除了允许用户自由使用,修改,发布以外,Copyleft条款还要求作者所许可的人对修改后的派生作品要求使用相同的许可条件授予作者,以保障其后续所有派生作品都能被任何人自由使用,而不违背第一作者的初衷。

2.2 Permissive

Permissive free software licence (宽松自由软件许可协议),是一种对软件的使用,修改,传播等方式采用最低要求的自由软件许可协议条款类型。因此,这种类型的软件许可协议将不保证被使用软件的派生软件会继续保持原生作品的相关限制条件。怎么来理解这句话呢?你可以简单的理解为使用这种类型条款的软件,在你拿到源码后,基本上可以为所欲为。

Copyleft是在有限空间内的自由使用,修改和传播,且不得违背原始作品的限制条款;而Permissive则可以最大限度的使用,修改和传播软件,而不用严格按照原始软件所提出的条款执行。简单来理解就是:如果一款软件使用Copyleft类型许可协议规定软件不得用于商业性质的活动,且不得闭源,那么后续的衍生子软件也得遵循该条款,如果是采用Permissive类型的许可协议,则后续衍生的子软件可以用于商业用途,也可以闭源。

三、通用的开源协议

我们任何人都可以创建适合自己软件作品的开源许可协议,并附带在自己创作作品的源代码中,但这样会导致一个问题,因作者个人喜好和所在地区法律的不同,协议的种类和数量将变得庞大和难以维护;另外对于那些不熟悉法律并且未对开放源代码许可协议有过详细了解的人,面对格式各样的许可协议时,将是一件很头疼的事情。

面对这样的问题,最好的解决办法就是大家都遵循统一的且具有公信力的开放源代码许可协议,这样事情就变得简单得多。在接下来的内容中,我将整理并列举一些比较好且受欢迎的开放源代码许可协议。

受个人学习能力和经验的限制,在此仅列举一些常见的和使用最多的开放源代码许可协议。

3.1 GNU通用公共许可证(GPL)

GNU的通用公共许可证是最受欢迎的开放源代码许证可之一。该许可证由理查德·斯托曼(Richard Stallman)所创建,用于保护GUN软件的自由使用。GPL是Copyleft类型的许可协议,者意味着基于GPL组件编写的任何软件都必须以开源的方式进行发布。

GPL允许自由地“使用、复制、修改和发布”,但修改和发布后的软件也必须是可以自由“使用、复制、修改和发布”的。因此 GPL 大大限制了商业软件使用GPL授权的软件,如果非法使用,将面临起诉的风险。目前 GPL 授权的项目有:Linux、Gnome、KDE、Emacs、GCC。
GPL 的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售,即必须也是开源和免费,这就是所谓的”传染性”。

由于 GPL 严格要求使用了 GPL 类库的软件产品必须使用 GPL 协议,对于使用 GPL 协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

3.2 Apache 许可证

Apache许可证是由Apache软件基金会(ASF)发布的开源软件许可证。这是一个由强大社区支持的流行且广泛部署的许可证。Apache许可证允许您自由使用,修改和分发任何Apache许可产品。但是,在这样做时,您需要遵循Apache许可的条款。

Apache许可证和 BSD许可证类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和 BSD 许可证类似:
(1)需要给代码的用户一份 Apache Licence。
(2)如果你修改了代码,需要再被修改的文件中说明。
(3)在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
(4)如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache Licence。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache Licence 构成更改。
(5)Apache Licence 也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

3.3 BSD许可证

BSD(全称:Berkeley Software Distribution),1970年代由伯克利加州大学的学生比尔·乔伊创建。BSD许可证非常宽松,它允许无限制地重用全部或部分软件,以集成到自由软件或所有者中。

一般情况下,GPL的条款尊重BSD许可的所有政策,因此BSD许可的代码可以根据GPL许可发布,而无需原始作者授权许可。但反过来,未经原始作者许可,不得将GPL许可的代码发布到BSD许可的代码中,因为BSD许可证不完全遵循GPL施加的所有限制。

通常,BSD许可证将给使用者很大的自由度,基本上可以理解为”我可以为所欲为”。你可以自由使用源代码,尽情的修改并再次发布,或者作为专有软件再发布。但这种“为所欲为”的行为也是有前提条件的,当你发布使用了 BSD 协议的代码,或则以 BSD 协议代码为基础做二次开发自己的产品时,需要满足三个条件:
(1)如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的 BSD 协议。
(2)如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的 BSD 协议。
(3)不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD 由于允许使用者修改和重新发布代码,也允许使用或在 BSD 代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

3.4 MIT许可证

MIT是最宽松的自由软件许可证之一。基本上,只要您添加了原始MIT许可证和版权声明的副本,就可以和BSD许可证那样,对原始软件进行许可范围内的任何操作,也相当于可以”为所欲为”。如果你在开放源代码时,只想保留版权,而无需其他任何的限制,那么你可以选择MIT许可证。

3.5 CDDL许可证

CDDL(Common Development and Distribution License)通用开发和发行许可证,是由Sun Microsystems发布的开源许可证,用来替代Sun Public License(SPL)。Sun公司将CDDL视为SPL的第二个版本,CDDL受到Mozilla公共许可证(MPL)的启发,对SPL进行了修订,所有CDDL通常被成为MPL的简化版,旨在促进代码的可复用性。

你可以自由复制和分发CDDL许可的任何软件的任何原始或衍生作品。但是,你不得删除或更改软件中包含的任何版权,专利或商标声明。你还必须保留许可声明或任何描述性文字,以及任何贡献者或初始开发者的信息。

3.6 Eclipse公共许可证

EPL(Eclipse Public License)是由Eclipse Foundation开发的开源许可证。它源自通用公共许可证(CPL),EPL许可证是Copyleft类型的许可证,如果你修改了基于EPL许可证的组件并将其作为程序的一部分,然后发布程序源代码,则需要在EPL下公开所有修改过的源代码。如果公司或者组织在其产品中使用EPL许可证,则该协议可以保护作者免受可能的诉讼或损害,此外,EPL还提供了专利授权。

以上就是常见且比较流行的开源许可证介绍信息,通过上述的讲解我们可以了解到,并非所有的开源软件都是免费的,基本上所有开放源代码的软件作品都附带有软件在使用,修改和二次发布过程中需要履行的条款以及需要承担的责任。因此,万不可简单的将开源等同于免费,且开源的精神和目的也不是免费使用或者对作者源代码”为所欲为”。

开源的精神在于尊重用户的自由以及知识传播的自由,是为了让优秀的软件获得更大的进步和发展。可能Copyleft是一种非常理想化的思想,现实总会与其精神出现偏差,但这种理想主义思想是具有现实意义的,只有不断的提倡和传播这种思想,社会才会聚集更多的正能量。开源可以让人们自由享受软件所带来的便利以及思想的交流和创新,但在我们享受别人带来的福利时,也请尊重别人的劳动成果。自由传播和使用,不等于免费使用和无偿使用,在打破壁垒,敢于创新的同时,也要遵循基本的开源精神。

四、补充

如果你还想了解更多的许可协议内容,可以通过查找下方列表中的目录,点击对应的链接地址,查看更详细的内容:

名称 地址
Academic Free License https://opensource.org/licenses/AFL-3.0
Adaptive Public License https://opensource.org/licenses/APL-1.0
Apache Software License https://www.apache.org/licenses/LICENSE-1.0
Apache License 2.0 https://www.apache.org/licenses/LICENSE-2.0
Apache Public Source License https://opensource.org/licenses/APSL-2.0
Artistic License http://www.perlfoundation.org/artistic_license_2_0
Attribution Assurance License https://opensource.org/licenses/AAL
BSD License https://en.wikipedia.org/wiki/BSD_licenses
New BSD License http://self.gutenberg.org/articles/eng/New_BSD_license
CCO https://creativecommons.org/publicdomain/zero/1.0/
Computer Associates Trusted Open Source License https://opensource.org/licenses/CATOSL-1.1
Common Development and Distribution License https://en.wikipedia.org/wiki/Common_Development_and_Distribution_License
Common Public License https://www.ibm.com/developerworks/library/os-cplfaq/
Eclipse Public License https://www.eclipse.org/legal/epl-v10.html
Educational Community License https://en.wikipedia.org/wiki/Educational_Community_License
Eiffel Forum License V2 http://directory.fsf.org/wiki/License:EFLv2
EU DataGrid Software License http://openseal.sourceforge.net/epl/index.html
Fair License https://opensource.org/licenses/Fair
Frameworx License https://opensource.org/licenses/Frameworx-1.0
GNU Affero General Public License https://www.gnu.org/licenses/agpl-3.0.en.html
GNU General Public License https://www.gnu.org/licenses/old-licenses/old-licenses.html#GPL
GNU Library or ‘Lesser’ General Public License https://www.gnu.org/licenses/lgpl-3.0.en.html
IBM Public License http://www.opensource.org/licenses/ibmpl.php
Microsoft Public License https://opensource.org/licenses/MS-PL
MIT License https://opensource.org/licenses/MIT
Motosoto License https://opensource.org/licenses/motosoto.php
Mozilla Public License https://www.mozilla.org/en-US/MPL/2.0/
NASA Open Source Agreement https://fedoraproject.org/wiki/Licensing/NASA_Open_Source_Agreement
Naumen Public License https://opensource.org/licenses/naumen.php
NetHack General Public License http://www.nethack.org/common/license.html
Nokia Open Source License http://opensource.org/licenses/nokia.html
OCLC Research Public License 2.0 http://www.oclc.org/research/themes/data-science/license.html
OpenContent License http://www.ibiblio.org/fosphost/opl.htm
Open Group Test Suite License https://opensource.org/licenses/OGTSL
Open Software License https://opensource.org/licenses/OSL-3.0
PHP License http://php.net/license/3_01.txt
Python License https://www.python.org/download/releases/3.3.0/license/
Python Software Foundation License https://docs.python.org/3/license.html
Qt Public License http://doc.qt.io/qt-5/opensourcelicense.html
RealNetworks Public Source License https://opensource.org/licenses/RPSL-1.0
Reciprocal Public License https://opensource.org/licenses/RPL-1.5
Ruby License http://www.ruby-lang.org/en/LICENSE.txt
The Sleepycat License https://opensource.org/licenses/Sleepycat
Sun Industry Standards Source License http://www.openoffice.org/licenses/sissl_license.html
Sun Public License https://opensource.org/licenses/SPL-1.0
NCSA Open Source License https://opensource.org/licenses/NCSA
W3C License https://opensource.org/licenses/W3C