如何为自己的开源项目选择合适的开源许可证?
之前我们介绍过很多款开源软件/项目,在文章的最后面总有代码仓库的License:MIT/Apache/GPL:
- 这些都代表些什么?
- 是否可以直接使用在自己的项目中,有没有版权问题?
- 为自己的开源项目如何选择合适的开源许可证?
针对以上问题,为大家介绍下开源软件许可证是怎么回事,相信看完这篇文章会解决大家心中的疑虑。
什么是开源许可证(License)
开源许可证是一种法律许可;是开源项目的Owner(拥有者)明确是否允许免费地使用、修改、共享版权软件。
但使用开源许可证时,并不意味着放弃了任何权利,Owner依然对其拥有原著作权。开源许可证只是授予他们于特定权利来使用你的产品。
版权法默认禁止共享,也就是说,没有许可证的软件,就等同于保留版权。
有些项目虽然开源了,但用户只能查看源码,无法使用,否则就会侵犯版权。所以需要了解清楚开源项目的许可证,防止在项目使用过程中引起的法律风险。
我们通过一张表来简单了解一下常见开源许可证之间的区别:
开源许可证的种类
目前,开源许可证共有 100 多种。它们的共同特征是,都允许用户免费地使用、修改、共享和查看源码,但是也都有各自的使用条件。
根据使用条件的不同,开源许可证分为宽松式(Permissive)许可证和许可复制(Copyleft)许可证两大类,它们的区别主要在于版权强度。
宽松式许可证(Permissive license)则几乎对用户没有任何限制,包括商业使用。用户可以在修改源代码后选择闭源,主要有以下三个基本特点。
- 没有使用限制:用户可以使用代码做任何想做的事情。
- 没有担保:由用户自担风险。
- 披露要求(notice requirement):用户必须披露原始作者/贡献者。
Copyleft 是理查德·斯托曼提出的,作为 Copyright(版权)的反义词。Copyright 直译是「复制权」,这是版权制度的核心,意为不经许可,用户无权复制。作为反义词,Copyleft 的含义是不经许可,用户可以随意复制。
Copyleft 比宽松式许可证要严格许多,通常有以下要求:
- 如果分发二进制格式,必须提供源码。
- 修改后的源码,必须与修改前保持许可证一致。
- 不得在原始许可证以外,附加其他限制。
上面三个条件的核心就是:修改后的 Copyleft 代码不得闭源。
如果一种开源许可证没有任何使用条件,连保留作者信息都不需要,那么就等同于放弃版权了。这时,软件可以直接声明进入「公共领域」(Public Domain)。
下表列出了主流开源许可证(版权强度由高到低):
宽松式(Permissive)许可证 | 许可复制权(Copyleft) 许可证 |
---|---|
BSD (Berkeley Software Distribution)MITApache 2 | GPL Lesser GPL (LGPL) Mozilla Public License (MPL) SSPLElastic License |
主流的开源许可证简介
宽松式许可证
常见的宽松式许可证有四种。它们都允许用户任意使用代码,区别在于要求用户遵守的条件不同。
1. BSD
BSD 许可协议( Berkeley Software Distribution license )是自由软件中使用广泛的许可协议之一。BSD 就是遵照这个许可证来发布,也因此而得名 BSD 许可协议。BSD 包最初所有者是加州大学的董事会,这是由于 BSD 源自加州大学伯克利分校。BSD 开始后,BSD 许可协议得以修正,使得以后许多 BSD 变种,都采用类似风格的条款。跟其他条款相比,从 GNU 通用公共许可证(GPL)到限制重重的著作权(Copyright),BSD 许可证比较宽松,甚至跟公有领域(Public Domain)更为接近。事实上,BSD 许可证被认为是 copycenter(中间著作权),介乎标准的 copyright 与 GPL 的 copyleft 之间。"Take it down to the copy center and make as many copies as you want"。可以说,GPL 强迫后续版本必须一样是自由软件,BSD 的后续版本可以选择要继续是 BSD 或其他自由软件条款或闭源软件等等。
2. MIT
MIT 是和 BSD 一样宽松的许可协议,作者只想保留版权,而无任何其他限制。也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。
- 你可以使用,复制和修改软件
- 你可以免费使用软件或出售
- 唯一的限制是,它是必须附有 MIT 授权协议
商业软件可以使用,也可以修改 MIT 协议的代码,甚至可以出售 MIT 协议的代码。
3. Apache
Apache Licence 是著名的非盈利开源组织 Apache 采用的协议。该协议和 BSD 类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布 (作为开源或商业软件)。
需要满足的条件:
- 需要给代码的用户一份 Apache License。
- 如果你修改了代码,需要在被修改的文件中说明。
- 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
- 如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache License。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache License 构成更改。
Apache Licence 也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
商业软件可以使用,也可以修改使用 Apache 协议的代码。
Copyleft 许可证
常见的 Copyleft 许可证也有五种:
1. GPL
GNU General Public License(GPL)可能是开源项目最常用的许可证。GPL 赋予和保证了开源项目开发者广泛的权利。基本上,它允许用户合法复制,分发和修改软件。这意味着你可以:
- 复制软件:复制软件到自己的服务器,客户端的服务器,你自己的电脑,几乎任何你想要的地方,而且没有数量限制。
- 发布软件:发布你想要的软件,例如,在你的网站提供下载链接,刻成光盘,打印出来等等。
- 收取费用:如果你想在向别人提供软件时收费,如设置在别人的网站上或者其他用途时。GPL 允许你这么做,但是你必须给客户提供一个 GPL 副本,告诉他们可以在其他地方得到免费版本。当然最好在此之前,告诉客户,你为什么收费。
- 可以任意修改:如果你想添加或删除功能,没问题。如果想在其他项目中使用部分代码,也是可以的,但是唯一的限制是此项目也必须按 GPL 发布。
注意:闭源的商业软件不能使用 GPL 协议的代码。
2. LGPL
GNU Lesser General Public License(LGPL)。比起 GPL 它授予的权限较少。一般来说,LGPL 比较适合链接到非 GPL 或者非开源文件的库文件。由于 GPL 的规定,使用到部分 GPL 代码的软件,必须也使用 GPL,开发人员不能使用 GPL 来开发收费软件或者专有软件。LGPL 则没有这方面的要求,不要求使用与部分代码相同的 License。
商业软件可以使用,但不能修改 LGPL 协议的代码。
如果项目采用动态链接调用该许可证的库,项目可以不用开源。比如一个产品,里面的有一部分功能使用了该许可证的库,则该产品可以将该许可证的库的产品封装成一个动态链接调用的接口,供外部调用,该封装的部分,必须开源。但是该产品的其他部分,仅仅是调用该封装而已,就不要求开源了。
3. Mozilla(MPL)
MPL 协议允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,它要求基于这种软件得修改无偿贡献版权给该软件。这样,围绕该软件的所有代码的版权都集中在开发发起人的手中。但 MPL 是允许修改,无偿使用的。MPL 软件对链接没有要求。
商业软件可以使用,也可以修改 MPL 协议的代码,但修改后的代码版权归软件的发起者。
4. SSPL
SSPL 是 MongoDB 创建的一个源码可用的许可证,以体现开源的原则,同时提供保护,防止公有云供应商将开源作品作为服务提供而不回馈此开源作品。SSPL 允许自由和不受限制的使用和修改开源作品,但如果你把此开源作品作为服务提供给别人,你也必须在 SSPL 下公开发布任何修改以及管理层的源代码。开放源代码促进会 OSI 对 SSPL 颇有微词,它认为 SSPL 不是开源许可协议,实际上是一个源代码可用的许可证。
5. Elastic License
Elastic License 是非商业许可证,核心条款是如果将产品作为 SaaS 使用则需要获得商业授权。
其它的重要许可证
1. Creative Commons
Creative Commons(CC)许可证一般不用于代码项目而用于设计项目/文档项目。
CC 许可证不是一个单独的许可证,而是包含了多个可供选择的许可证。需要注意的是,部分 CC 许可证由于对衍生作品/商业用途的限制,不是开源许可证。
在一个 CC 许可证中,包含下面四个条款中的一个或多个:
- 署名(BY):你必须给出适当的署名,提供指向本许可协议的链接,同时标明是否(对原始作品)作了修改。您可以用任何合理的方式来署名,但是不得以任何方式暗示许可人为您或您的使用背书。
- 相同方式共享(SA):如果你再混合、转换或者基于本作品进行创作,你必须基于与原先许可协议相同的许可协议分发你贡献的作品。带有 SA 条款的 CC 许可证可以看作是一种 Copyleft 许可证。
- 非商业性使用(NC):你不得将本作品用于商业目的。带有 NC 条款的 CC 许可证不是开源许可证。条款中的「商业目的」指以获得商业优势或金钱回报为目的。
- 禁止演绎(ND):如果你再混合、转换、或者基于该作品创作,你不可以分发修改作品。带有 ND 条款的 CC 许可证不是开源许可证,并且可能限制了他人参与协作:按照本条款,他人无法分发修改后的作品,而用于 Pull Request 的 fork 也可以看作一种「分发」。
以上四个条款有多种组合方式,包括:
除此之外,还有 CC0 1.0 许可证,使用该许可证代表作者放弃了关于作品的一切权利:
在作品上适用该文本的人已经将作品贡献至公共领域,在法律允许的范围,放弃所有他在全世界范围内基于著作权法对作品享有的权利,包括所有相关权利和邻接权利。 你可以复制、修改、发行和表演本作品,甚至可用于商业性目的,都无需要求同意。
例如,之前介绍过Patterns.dev这个项目,他们的文档就是 CC BY-NC 4.0,你可以不以盈利为目的进行复制、修改。
2. Mulan Permissive Software License v2 (MulanPSL - 2.0)
木兰宽松许可证是首个来自于我国的开源协议。其 v2 版通过开源促进会(OSI)认证,被批准为国际类别开源许可证。
著名的香山开源处理器就采用了MulanPSL - 2.0GitHub - OpenXiangShan/XiangShan: Open-source high-performance RISC-V processor
想快速为自己的开源项目选择一个开源许可证可以参考:Choose an open source license
开源许可证的法律效力
中国第一个关涉 GPL 协议的诉讼案件宣判 (2018)京民终 471 号《二审判决书》 ,认可了 GPL 协议的法律效力,但对 GPL 协议约束的判断规则也存在争议。
开源许可证相当于开源社区的基本法,发展到今天,已经越来越有约束力了。 -- 北京大学法学院教授张平
转载自:https://juejin.cn/post/7366972839780368434