第 3 小节:认识开源许可证

大约 13 分钟

# 第 3 小节:认识开源许可证

# 什么是开源许可证(License)

开源许可证是一种法律许可。通过它,版权拥有人明确允许,用户可以免费地使用、修改、共享版权软件。

当你对你的产品使用开源许可证时,并不意味着你放弃了任何权利,你依然对其拥有原著作权。开源许可证只是授予他们于特定权利来使用你的产品。

版权法默认禁止共享,也就是说,没有许可证的软件,就等同于保留版权。虽然开源了,但用户只能查看源码,无法使用,否则就会侵犯版权。所以如果选择开源一款软件,必须明确地授予用户开源许可证。

# 开源许可证的种类

目前,国际公认的开源许可证共有 100 多种 (opens new window)。它们的共同特征是,都允许用户免费地使用、修改、共享源码,但是都有各自的使用条件。

根据使用条件的不同,开源许可证分为宽松式(permissive)许可证和 Copyleft(许可复制权) 许可证两大类,它们的区别主要在于版权强度。

如果一种开源许可证没有任何使用条件,连保留作者信息都不需要,那么就等同于放弃版权了。这时,软件可以直接声明进入「公共领域」(public domain)。

下表列出了主流开源许可证(版权强度由高到低):

宽松式(permissive)许可证 Copyleft(许可复制权) 许可证
BSD (Berkeley Software Distribution)
MIT
Apache 2
Affero GPL (AGPL)
GPL
Lesser GPL (LGPL)
Mozilla Public License (MPL)
Eclipse Public License (EPL)
Common Development and Distribution License (CDDL)

宽松式许可证(permissive license)则几乎对用户没有任何限制,包括商业使用。用户可以在修改源代码后选择闭源,主要有以下三个基本特点。

  • (1)没有使用限制:用户可以使用代码做任何想做的事情。
  • (2)没有担保:由用户自担风险。
  • (3)披露要求(notice requirement):用户必须披露原始作者/贡献者。

Copyleft 是 理查德·斯托曼 (opens new window) 发明的一个词,作为 Copyright(版权)的反义词。Copyright 直译是「复制权」,这是版权制度的核心,意为不经许可,用户无权复制。作为反义词,Copyleft 的含义是不经许可,用户可以随意复制。

Copyleft 比宽松式许可证要严格许多,通常有以下要求:

  • 如果分发二进制格式,必须提供源码。
  • 修改后的源码,必须与修改前保持许可证一致。
  • 不得在原始许可证以外,附加其他限制。

上面三个条件的核心就是:修改后的 Copyleft 代码不得闭源。

# 主流的开源许可证简介

# 宽松式许可证

常见的宽松式许可证有四种。它们都允许用户任意使用代码,区别在于要求用户遵守的条件不同。

# BSD(二条款版)

分发软件时,必须保留原始的许可证声明。

# BSD(三条款版)

BSD License 与其他自由软件 License 相比,如 GPL,限制更少。但是请注意到 BSD License 两种版本之间的差别:New BSD License/Modified BSD License 和 Simplified BSD License/FreeBSD License。它们两者都是与 GPL 兼容的自由软件 License。

New BSD License(三条款版)可以用于任何作为版权声明和保证许可的免责声明的目的,可以通过无限长的再分发来得以维持,也就是说如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的 BSD 协议。它还有一个特殊限制条款:不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

New BSD License 和 Simplified BSD License 的主要区别是,后者忽略了非认可条款。

# MIT

MIT 是和 BSD 一样宽松的许可协议,作者只想保留版权,而无任何其他限制。也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。

  • 你可以使用,复制和修改软件
  • 你可以免费使用软件或出售
  • 唯一的限制是,它是必须附有 MIT 授权协议

商业软件可以使用,也可以修改 MIT 协议的代码,甚至可以出售 MIT 协议的代码。

# Apache

Apache Licence 是著名的非盈利开源组织 Apache 采用的协议。该协议和 BSD 类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布 (作为开源或商业软件)。

需要满足的条件:

  • 需要给代码的用户一份 Apache License。
  • 如果你修改了代码,需要在被修改的文件中说明。
  • 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
  • 如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache License。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache License 构成更改。

Apache Licence 也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

商业软件可以使用,也可以修改使用 Apache 协议的代码。

# Copyleft 许可证

常见的 Copyleft 许可证也有四种(对用户的限制从最强到最弱排序)。

# Affero GPL (AGPL)

如果云服务(即 SAAS)用到的代码是该许可证,那么云服务的代码也必须开源。

# GPL

GNU General Public License(GPL)可能是开源项目最常用的许可证。GPL 赋予和保证了开源项目开发者广泛的权利。基本上,它允许用户合法复制,分发和修改软件。这意味着你可以:

  • 复制软件:复制软件到自己的服务器,客户端的服务器,你自己的电脑,几乎任何你想要的地方,而且没有数量限制。
  • 发布软件:发布你想要的软件,例如,在你的网站提供下载链接,刻成光盘,打印出来等等。
  • 收取费用:如果你想在向别人提供软件时收费,如设置在别人的网站上或者其他用途时。GPL 允许你这么做,但是你必须给客户提供一个 GPL 副本,告诉他们可以在其他地方得到免费版本。当然最好在此之前,告诉客户,你为什么收费。
  • 可以任意修改:如果你想添加或删除功能,没问题。如果想在其他项目中使用部分代码,也是可以的,但是唯一的限制是此项目也必须按 GPL 发布。

注意:闭源的商业软件不能使用 GPL 协议的代码。

# LGPL

GNU Lesser General Public License(LGPL)。比起 GPL 它授予的权限较少。一般来说,LGPL 比较适合链接到非 GPL 或者非开源文件的库文件。由于 GPL 的规定,使用到部分 GPL 代码的软件,必须也使用 GPL,开发人员不能使用 GPL 来开发收费软件或者专有软件。LGPL 则没有这方面的要求,不要求使用与部分代码相同的 License。

商业软件可以使用,但不能修改 LGPL 协议的代码。

如果项目采用动态链接调用该许可证的库,项目可以不用开源。比如一个产品,里面的有一部分功能使用了该许可证的库,则该产品可以将该许可证的库的产品封装成一个动态链接调用的接口,供外部调用,该封装的部分,必须开源。但是该产品的其他部分,仅仅是调用该封装而已,就不要求开源了。

# Mozilla(MPL)

MPL 协议允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,它要求基于这种软件得修改无偿贡献版权给该软件。这样,围绕该软件的所有代码的版权都集中在开发发起人的手中。但 MPL 是允许修改,无偿使用的。MPL 软件对链接没有要求。

商业软件可以使用,也可以修改 MPL 协议的代码,但修改后的代码版权归软件的发起者。

# EPL

一个与 CPL 相类似的许可证,任何扩展自 Eclipse 源码的代码也必须是开源的。

# CDDL

CDDL(Common Development and Distribution License,通用开发与销售许可)开源协议,是 MPL(Mozilla Public License)的扩展协议,它允许公共版权使用,无专利费,并提供专利保护,可集成于商业软件中,允许自行发布许可。

商业软件可以使用,也可以修改 CDDL 协议的代码。

# 其它的重要许可证

# Creative Commons

Creative Commons(CC)许可证一般不用于代码项目而用于设计项目/文档项目(例如本项目「开源指北」就使用 CC BY-SA 4.0 协议 (opens new window))。

CC 许可证不是一个单独的许可证,而是包含了多个可供选择的许可证。需要注意的是,部分 CC 许可证由于对衍生作品/商业用途的限制,不是开源许可证。

在一个 CC 许可证中,包含下面四个条款中的一个或多个:

  • 署名(BY):你必须给出适当的署名,提供指向本许可协议的链接,同时标明是否(对原始作品)作了修改。您可以用任何合理的方式来署名,但是不得以任何方式暗示许可人为您或您的使用背书。
  • 相同方式共享(SA):如果你再混合、转换或者基于本作品进行创作,你必须基于与原先许可协议相同的许可协议分发你贡献的作品。带有 SA 条款的 CC 许可证可以看作是一种 Copyleft 许可证
  • 非商业性使用(NC):你不得将本作品用于商业目的。带有 NC 条款的 CC 许可证不是开源许可证。条款中的「商业目的」指以获得商业优势或金钱回报为目的,可以参考 Does my use violate the NonCommercial clause of the licenses? (opens new window).
  • 禁止演绎(ND):如果你再混合、转换、或者基于该作品创作,你不可以分发修改作品。带有 ND 条款的 CC 许可证不是开源许可证,并且可能限制了他人参与协作:按照本条款,他人无法分发修改后的作品,而用于 Pull Request 的 fork 也可以看作一种「分发」。

以上四个条款有多种组合方式,包括:

除此之外,还有 CC0 1.0 (opens new window) 许可证,使用该许可证代表作者放弃了关于作品的一切权利:

在作品上适用该文本的人已经将作品贡献至公共领域,在法律允许的范围,放弃所有他在全世界范围内基于著作权法对作品享有的权利,包括所有相关权利和邻接权利。

你可以复制、修改、发行和表演本作品,甚至可用于商业性目的,都无需要求同意。

# Common Public License 1.0

CPL 是 IBM 提出的开源协议,主要用于 IBM 或跟 IBM 相关的开源软件/项目中(例如,Eclipse、Open Laszlo 等)。已被 EPL 替代。

Common 许可证有一些细节性的规定值得参考:

  • 明确了专利授权。一般的开源软件都明确源代码的版权人将自己的修改权、复制权等版权权利向公众许可,但保留署名权,而 Common 许可证在此基础上还明确假如源代码中含有专利权,源代码专利权人将复制、使用的专有权利向公众许可。
  • 规定可以将源代码及修改过的源代码与其他类型的不受本许可证约束的代码结合,以新产品的形式发布,只要其中经该许可证获得的源代码及修改过的源代码能按该许可证的要求发布即可。
  • 细化了该许可证终止的情形,包括发生专利侵权诉讼。
  • 明确了一个独立承担责任的原则,就是假如按该许可证使用源代码的使用者将获得的源代码应用于商业使用,那么他就要对在商业应用中出现的由于使用该源代码程序而产生的侵权诉讼承担完全责任。这一条规定是比较特殊的,绝大多数开源软件许可证都不这么要求。

商业软件可以使用,也可以修改 Common 协议的代码,但要承担代码产生的侵权责任。

# Mulan Permissive Software License v2 (MulanPSL - 2.0)

木兰宽松许可证是首个来自于中国的开源协议。其 v2 版通过开源促进会(OSI)认证,被批准为国际类别开源许可证,与 Apache 2.0 许可证兼容。

# 开源许可证的约束力

「许可证相当于开源社区的基本法,发展到今天,已经越来越有约束力了。」 -- 北京大学法学院教授张平

待补充

# 开源许可证的法律效力

中国第一个关涉 GPL 协议的诉讼案件宣判((2018)京民终 471 号《二审判决书》 (opens new window)),认可了 GPL 协议的法律效力,但对 GPL 协议约束的判断规则也存在争议。

待补充

# 怎么选择开源许可证?

可查看开源指北中 启动自己的开源项目/开源许可证的应用 部分

图源阮一峰:如何选择开源许可证:

img

# 参考资料

# 本部分内容贡献者

gmaso (opens new window)雪山凌狐 (opens new window)ORH (opens new window)麦健翔 (opens new window)ouuan (opens new window)阿基米东 (opens new window)

发现内容中的错误?还是想要补充更多符合主题的内容?《开源指北》欢迎你进行贡献,点击贡献指南了解贡献的具体步骤。

上次编辑于: 2024年4月15日 14:52