开源许可证保姆级入门手册

简介: 还在为开源许可证头秃?快收下这份保姆级入门手册~

开源许可证是个相当庞杂的范畴,仅OSI (Open Source Initiative, 开放源代码促进会)批准的许可证就有80多种;此外,还有数百种在开源生态中流传的其他许可证。

虽然有些开源许可证相对简洁明了,适合只想简单发布开源项目的人使用;但还有一些许可证非常冗长复杂,甚至需要专业的法务团队介入。

本文将以对比形式分析开源许可证相关的一些要素,以便读者快速清晰地掌握这一领域的基础知识。(省流版许可证选择建议见文末~)

01 宽松式许可证和Copyleft 许可证

开源许可证通常可以分为两大类:宽松式许可证及Copyleft许可证(也称著佐权)。二者的差别主要在于宽松度以及与使用开源软件组件相关的要求和许可权限的多少。

当一个开源组件采用Copyleft 许可证时,开发人员有权使用、修改和共享该作品,前提是要履行对应的义务。一旦代码中使用了许可证为Copyleft类的开源组件,就需要向他人开放你的代码。GPL许可证族是这类许可证中最早出现也是最流行一种,包含许多版本和变种。

与之相对,宽松式许可证是另一个极端。它保证了使用、修改和重新分发的自由,同时也允许创建专有的派生作品。宽松式许可证对于采用它的组件的使用几乎没有限制,并且几乎不需要回报。这类许可证中,最简洁明了和最受欢迎的是MIT许可证。

02 许可证的限制、条件和权限

除去这两大类别的差异,每一类下许可证和许可证族也会因为一些附加参数而产生具体差异。

例如,同属宽松式许可证的MIT许可证和Apache许可证迥然不同,同属Copyleft类的Eclipse许可证和GPLv3许可证也并没有共用相同的条款和条件。

每个开源许可证都有自己独特的限制、条件和权限。GitHub的choosealicense.com旨在帮助开发人员找到合适的开源许可证;上面提供了一个附录,用于比较不同许可证,并根据许可证授权和限制的内容对比它们的差异性。

根据这个附录,开源许可证授予项目在版权或其他知识产权法律下可能不被允许的行为许可;这些许可通常需要遵守特定条件。大多数开源许可证还具有免除担保和责任的限制,有时还明确排除了专利或商标的许可授权。

03 开源许可证中的权限

在开源许可证中,最常被授予权限的行为涉及商业使用、分发、修改和私人使用。

其中,一个重要区别是专利使用的许可。许多开源许可证在特定条件下明确授予贡献者的专利权,例如GPLv3、Apache license 2.0、Eclipse公共许可证1.0和2.0等。还有一些许可证明确声明不授予贡献者专利权,包括BSD 3-Clause Clear、Creative Commons Attribution 4.0 International、Creative Commons Attribution Share Alike 4.0 International、Creative Commons Zero v1.0 Universal和ODC Open Database License v1.0等。

虽然所有开源许可证都会授予商业使用、分发、修改和私人使用的权限,但这些权限受特定条件的约束;不同许可证的条件各不相同。这些条件可能包括在通过网络或其他渠道分发软件时提供源代码,使用开源项目时纳入许可证信息和版权声明,在同一许可证下发布代码修改,记录对代码进行的所有更改等。

04 开源许可证中的条件

通常情况下, Copyleft许可证比宽松式许可证附带更多条件。随着开源的使用愈发普遍,前者在商业组织中的的流行度也在逐渐下降

最典型的例子是GPL许可证族对网络分发的限制。虽然GPL 2.0和3.0的条件并未明确规定网络使用属于分发,但作为公认最强Copyleft许可证,AGPL v3.0要求使用修改后的版本提供网络服务时,必须提供该版本的完整源代码。

05 开源许可证的限制

比较开源许可证的另一种方法是看它们的限制。开源许可证的限制涉及责任、明确声明不授予商标权和不提供担保。

对商标使用的限制可以看作一个分野。大多数GPL族许可证并没有明确规定不授予商标权,而Creative Commons和Apache v2.0则明确包含这一限制。值得注意的是,GitHub的choosealicense.com指出,没有这种声明的许可证可能不授予任何隐含的商标权利。

06 Copyleft许可证:GNU GPL vs Eclipse开源许可证

虽然Eclipse开源许可证(EPL)和GNU GPL许可证族都被认为是Copyleft许可证,二者宽松程度不同。GNU GPL许可证族有强制性的Copyleft条款,无论用户代码中包含多少GPL代码,都要公开其软件的完整源代码。

EPL算是一种较弱的 Copyleft 许可证。它不要求用户共享其整个软件项目,而只需在以源代码形式分发时开源任何包含EPL 组件的源码,并在以对象形式分发时按需提供源代码。

此外,EPL只要求用户在源码形式分发时中披露部分源代码,对二进制文件形式没有要求;而GPL族则要求在源代码和二进制文件的复制或衍生版本中都继续使用同一许可证。

07 宽松式许可证:Apache 2.0 vs BSD开源许可证

BSD许可证是一种高度宽松的许可证,允许用户以任何方式修改和重新分发使用了BSD许可证的软件。早期版本的Apache许可证与BSD许可证类似,但Apache 2.0增加了一些关键的差异,使得这两种许可证区别开来。

明确授予专利权。Apache许可证2.0明确规定了在使用、修改或分发该许可证许可的软件时授予的专利权,并列举了撤销此类授权的情况。

对使用的概念进行清晰定义。Apache许可证2.0明确定义了所有使用的术语和概念,减少了歧义的空间。

Apache许可证2.0无需重新措辞即可重复使用。其他项目可以轻松使用Apache许可证2.0而无需修改许可证文档本身的任何内容,大大节省了处理许可证问题的时间;它也因此成为开发人员最喜欢的许可证之一。

结语

无论您是正在开发一个软件项目并需要附加开源许可证以便共享,还是希望确保所使用的软件组件所附带的开源许可证与您自己的项目和需求兼容,了解每个许可证意味的不同限制、条件和权限都非常重要。有些细节看起来微不足道,但会对开源组件的使用和分发方式有决定性的影响,进而影响对开源的使用及软件制品的合规性。

2.png

图:许可证选择指南省流版

感谢每一位开源社区成员对OpenSCA的支持和贡献。我们鼓励更多伙伴参与到OpenSCA开源项目的建设中来,成为开源贡献者,有任何建议都可以发在评论区或者Gitee、GitHub上OpenSCA项目的Issues中。让我们一起拥抱开源,共筑开源安全生态,促进开源产业健康发展。

OpenSCA的代码会在GitHub和Gitee持续迭代,欢迎Star和PR,成为我们的开源贡献者,也可提交问题或建议至Issues。我们会参考大家的建议不断完善OpenSCA开源项目,敬请期待更多功能的支持。

GitHub:
https://github.com/XmirrorSecurity/OpenSCA-cli/releases

Gitee:
https://gitee.com/XmirrorSecurity/OpenSCA-cli/releases

OpenSCA官网:
https://opensca.xmirror.cn/

相关文章
|
6月前
|
监控 安全 数据可视化
情报搜集神器:Spiderfoot 保姆级教程
情报搜集神器:Spiderfoot 保姆级教程
|
安全 Linux 数据安全/隐私保护
AWVS多平台安装(保姆级)教程
AWVS多平台安装(保姆级)教程
1278 0
|
搜索推荐 数据可视化 数据安全/隐私保护
免费、强大的开源笔记软件Joplin综合评测 —印象笔记的开源替代
Joplin 介绍 绝大部分开源工具都是免费的。如果寻找免费的笔记应用,自然需要考虑开源笔记软件。 在我的视野范围内,常见开源笔记软件包括Boostnote、GitNote、Joplin. 其中,前两者都是面向开发人员,全平台、支持中文、支持浏览器插件和扩展。而 Joplin 则面向一般用户。下面主要介绍 Joplin.
1868 0
免费、强大的开源笔记软件Joplin综合评测 —印象笔记的开源替代
爆赞!GitHub首本Python开发实战背记手册,标星果然百万名不虚传
Python (发音:[ 'paiθ(ə) n; (US) 'paiθɔn ] n. 蟒蛇,巨蛇 ),是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。 Python 语言的特点:
|
6月前
|
存储 Cloud Native Java
Anolis安装Jdk保姆级教学
Anolis安装Jdk保姆级教学
200 0
|
6月前
|
存储 编译器 程序员
【C++入门篇】保姆级教程篇【中】
【C++入门篇】保姆级教程篇【中】
|
6月前
|
安全 编译器 程序员
【C++入门篇】保姆级教程篇【上】
【C++入门篇】保姆级教程篇【上】
|
11月前
|
编译器 C语言 C++
【C++入门篇】保姆级教程篇【下】
【C++入门篇】保姆级教程篇【下】
|
关系型数据库 Java 数据库连接
MyBatus-Plus保姆级快速上手教程
MyBatus-Plus保姆级快速上手教程
79 0
|
SQL 数据采集 JSON
保姆级教程!玩转 ChunJun 详细指南
「chunJun 新手入门」系列的第三篇,本文将为大家介绍如何配置一个 ChunJun 任务,获取 ChunJun 以及通过 ChunJun Client 端提交任务的流程等内容,教会大家更好地玩转 ChunJun。 ChunJun 是一款稳定、易用、高效、批流一体的数据集成框架,⽀持海量数据的同步与计算,对ChunJun 感兴趣的小伙伴不要错过~
784 0