开源软件 | 一文彻底搞懂许可证的定义、起源、分类及八大主流许可证,让你选型不再头疼

为什么开源软件会存在许可证,许可证的起源与产生目的是为了解决什么问题?许可证的定义又是怎样的?什么是Copyleft,与Copyright有何区别?开源软件常见的许可证有哪些?这些许可证都有什么特点?接下来博主就逐一介绍。

1. 开源许可证的定义

开源许可证是一种法律协议,它规定了软件代码可以被如何使用、修改和分发。其中,著作权是指对于软件代码的创作者所拥有的法律权利,包括复制、发布、演绎等权利。分发是指分发指软件作者向他人提供软件源代码或二进制代码或二者的副本。

著作权法默认禁止共享,没有许可证的软件就不能免费地使用、修改、共享。

在开源许可证中,通常会涉及到著作权许可授权的问题。这些许可协议可以分为两大类:强制性许可证和非强制性许可证。强制性许可证要求使用该软件的用户必须遵守特定的协议,否则将面临诉讼风险。而非强制性许可证则允许用户根据自己的需要使用、修改和分发软件。

开源许可证存在的法律特性:合同性质和知识产权性质(著作权、专利权、商标权)

常见的开源许可证包括GNU通用公共许可证(GPL)、MIT许可证、Apache许可证等。每种许可证都有自己的特点和适用范围,使用者需要根据自己的需求选择合适的许可证。

2. 开源许可证的起源

开源许可证的起源可以追溯到20世纪90年代早期,当时自由软件运动和Linux系统的兴起促进了开源软件的发展。1991年,GNU通用公共许可证(GPL)首次发布,这是第一个被广泛采用的开源许可证之一。GPL被设计为保障软件自由和开放性,它要求任何使用或修改受保护软件的人必须在其发布时公开代码,并且不得限制代码的再分发。

1998年,开源软件运动的领袖Eric Raymond和Bruce Perens共同创立了Open Source Initiative(OSI),以推广和支持开源软件的发展。OSI创建了一个开源定义(Open Source Definition),并认证了符合该定义的许可证。这些许可证包括GPL、BSD、MIT、Apache等。

在自由软件运动之后,出现了大量优秀的开源软件,而商业软件开发商无情的窃取着革命的果实,商业软件在开源软件的基础上开发新的软件,实际上基于著作权法其开发的软件属于衍生作品,该作品依然为著作权法所保护,不同的是,商业软件开发商所开发的衍生软件一般不会再以开源软件的形式出现。于是就产生了接下来的著佐权

3. 著佐权(Copyleft)

著佐权是一个由自由软件运动所发展的概念,是一种利用现有著作权体制来保护所有用户和二次开发者的自由的授权方式。在自由软件授权方式中增加著佐权条款之后,该自由软件除了允许使用者自由使用、散布、修改之外,著佐权许可证更要求使用者修改后的衍生作品必须要以同等的授权方式释出以回馈社会。

著佐权(Copyleft)机制与著作权(Copyright)相对应

著佐权,是弥补著作权(Copyright,复制传播的权利)不足的版权授权。它的授权方式与常用的版权授权方式并不相同。另有译为反版权”、版权属左”、左版”、版权所无”、版权左派”,或版责”,这些译名可能有其意义上的偏差,比较贴切的翻译应该是版责”或者左版”,使用版责”(即:传播的责任)因为 Copyleft 虽然与常见的著作权模式不同,但不反对著作权的基本体制。

4. 开源许可证两大目的

  • 保护开源软件贡献者: 规范受著作权保护的软件的使用或者分发行为;
  • 保护开源软件使用者:使用者按照许可证条款使用开源软件,避免因侵犯贡献者的利益产生纠纷。

5. 开源许可证认证机构及分类

5.1. 认证机构

  • OSI: OSI(Open Source Initiative,开放源代码促进会)是一个旨在推广开源软件的非营利组织,它制定了一套开源软件的定义和准则,像BSD、MIT和Apache协议就被OSI收录。

    OSI根据OSD(开放源代码定义)对开源许可证进行审核。

  • FSF:FSF(Free Software Foundation)也是一个非营利组织,致力于推广自由软件理念,并维护用户权益;

    FSF根据FSD(自由软件定义)对开源许可证进行审核

  • SPDX:SPDX(Software Package Data Exchange)是一个旨在标准化软件组件和许可证信息的组织。

5.2. 分类

  • 著佐权型许可证:著佐权许可证更要求使用者修改后的衍生作品必须要以同等的授权方式(除非许可证或者版权声明里面例外条款所规定的外)释出以回馈社会。

    • 强著佐权型许可证:GPL(General Public License)衍生作品也需要以GPL许可证发布,不允许修改后和衍生的代码作为闭源商业软件发布和销售
    • 弱著佐权型许可证:LGPL(Lesser General Public License)比GPL许可证宽松,允许商业软件通过类库引用方式使用LGPL类库而不需要开源商业软件的代码,但是如果修改LGPL许可证的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL许可证。

    一般将使用著佐权型许可证的开源软件称之为Copyleft软件

  • 宽松型许可证:宽松型许可证是一种保证使用、修改、再分发的自由,同时授权将衍生软件专有化的许可证。

    宽松型许可证限制较少,通常仅要求开源软件使用者保留指定的声明信息。Apache许可证和BSD许可证就是宽松型许可证,允许使用者在开源代码基础上进行二次开发并闭源销售,对商业十分友好。

6. 八大主流开源许可证

6.1. 强著佐权型许可证 GPL 2.0(GNU General Public License 2.0)

  • 分发GPLv2软件或其衍生作品时,必须提供源代码或者提供获取源代码的途径;
  • 任何基于GPLv2软件的衍生作品必须在GPLv2下发布,确保衍生作品也保持开源;
  • GPLv2具有较强的copyleft特性,与其他许可证的兼容性有限。例如,它与后来的GPLv3在某些条款上不兼容,除非明确指出“GPLv2或任何后来的版本”。

涉及侵权GPL 2.0许可证的案件

6.2. 强著佐权型许可证 GPL 3.0(GNU General Public License 3.0)

  • 在分发GPLv3许可的软件时,必须提供源代码或者提供获取源代码的途径;
  • GPLv3明确禁止任何尝试使用软件专利来限制其他用户运行和分发软件的行为;
  • GPLv3包含特定的条款来防止“数字版权管理”(DRM)技术限制GPLv3软件的使用。要求分发有硬件限制的GPL软件时,必须提供必要的“安装信息”,以便用户能够运行软件的修改版本。

6.3. 著佐权型许可证 AGPL 3.0(Affero General Public License 3.0)

  • 为了Copyleft条款能应用于在网络上运行的应用程式(如Web应用),从而避免有人以应用服务提供商方式逃避GNU通用公众特许条款;
  • 如果软件通过网络作为服务提供给用户,服务提供者必须提供软件的源代码。

6.4. 弱著佐权型许可证 LGPL 3.0(Lesser General Public License LGPL 3.0)

  • 是GNU为了得到更多的甚至是商用软件开发商的支持而提出的;
  • 允许商业软件通过类库引用方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售;
  • 但是如果修改LGPL下的软件代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL许可证。

6.5. 弱著佐权型许可证 MPL(The Mozilla Public License)

Netscape公司认为GPL许可证没有很好地平衡开发者对源代码的需求和他们利用源代码获得的利益,于是申请了MPL许可证:

  • MPL允许免费重发布、免费修改,但要求修改后的代码著作权权归软件的创建者;
  • 对于经MPL许可证发布的源代码的修改也要以MPL许可证的方式再许可出来,以保证其他人可以在MPL的条款下共享源代码。

6.6. 宽松型型许可证 Apache License

由Apache软件基金会发布,主要特点如下:

  • 复制或发布衍生作品时,需要提供许可证副本,修改声明,先前作品的著作权、专利、商标的权属声明等文件。对修改过的文件进行声明;
  • 使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

6.7. 宽松型型许可证 BSD(Berkly Software Distribution)

  • BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售;
  • 二次发布时需要保留原来代码的著作权声明和许可证原文以及免责声明;
  • 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

6.8. 宽松型型许可证 MIT(Massachusetts Institute of Technology)

  • 作者只想保留著作权,无其他任何限制。
  • 必须在你的发行版里包含原许可证的声明,无论你是以二进制发布的还是以源代码发布的。

见到使用了 Apache、BSD、MIT协议类型的开源软件,闭上眼选就对了!(哈哈,当然是开玩笑了:也要考虑下软件的活跃度,以及有无公开高危漏洞因素)

7. 参考

[1] 迈向开源世界:如何正确看待开源软件,避免六大误区
[2] 最高人民法院知识产权法庭裁判要旨摘要(2023)


推荐阅读:

  • 迈向开源世界:如何正确看待开源软件,避免六大误区
  • 供应链安全项目in-toto开源框架详解
  • 从SLSA看软件供应链面临哪些威胁及对应解决方案
  • 解读 | Synopsys发布2024年开源安全和风险分析报告OSSRA
  • 剖析Google SLSA供应链完整性框架
  • 「 网络安全常用术语解读 」软件物料清单SBOM详解
  • 「 网络安全常用术语解读 」SBOM主流格式CycloneDX详解
  • 「 网络安全常用术语解读 」SBOM主流格式SPDX详解
  • 「 网络安全常用术语解读 」SBOM主流格式CycloneDX详解
  • 「 网络安全常用术语解读 」软件物料清单SBOM详解
  • 「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到技术原理再到业界常用检测工具推荐

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[c++] 小游戏 能量1.0.1 版本 zty出品

大家好 紧急修改&#xff0c;发现判断游戏是否结束部分有问题&#xff0c;紧急修改bug&#xff0c;对大家造成的不便我深感歉意&#xff0c;对不起 先赞后看 养成习惯 code&#xff1a; #include<bits/stdc.h> #include<windows.h> using namespace std; int rg…

Zabbix实现7x24小时架构监控

上篇&#xff1a;https://blog.csdn.net/Lzcsfg/article/details/138774511 文章目录 Zabbix功能介绍Zabbix平台选择安装Zabbix监控端部署MySQL数据库Zabbix参数介绍登录Zabbix WEBWEB界面概览修改WEB界面语言添加被控主机导入监控模板主机绑定模板查看主机状态查看监控数据解…

6.封装读写游戏数据的功能

前置知识&#xff1a;5.模仿CheatEngine实现锁血无敌功能&#xff08;封装它的代码&#xff09; 封装功能.cpp文件 #include "封装功能.h"GAMECheat::GAMECheat(unsigned pid, unsigned _baseAdr, unsigned _readTime) {readTime _readTime;baseAdr _baseAdr;hPr…

代码随想录算法训练营第三十四天 | 理论基础、455.分发饼干、376、摆动序列、53.最大子序和

目录 理论基础 455.分发饼干 思路 代码 376.摆动序列 思路 代码 53.最大子序和 思路 代码 理论基础 代码随想录 455.分发饼干 代码随想录 思路 可以是大饼干优先满足大胃口&#xff0c;也可以是小饼干优先满足小胃口。 代码 class Solution:def findContentChildre…

ArkUI-X开发指南:【SDK配置和构建说明】

ArkUI-X SDK配置和构建说明 ArkUI-X SDK是ArkUI-X开源项目的编译产物&#xff0c;可将ArkUI-X SDK集成到现有Android和iOS应用工程中&#xff0c;使开发者基于一套ArkTS主代码&#xff0c;就可以构建支持多平台的精美、高性能应用。SDK内容包含ArkUI跨平台运行时&#xff0c;组…

安装SSL证书能提高网站访客吗?

在当今互联网时代&#xff0c;网站的安全性和用户体验至关重要。随着网络攻击和数据泄露事件的不断增加&#xff0c;用户对网站的信任也变得越来越重要。SSL证书是一种数字证书&#xff0c;可以在Web服务器和网页浏览器之间建立加密链接&#xff0c;确保网站传输的数据安全&…

【HarmonyOS尝鲜课】- 前言

面向人群 本课程适用于HarmonyOS应用开发的初学者。 有无经验的开发者都可以轻松掌握ArkTS语言声明式开发范式&#xff0c;体验更简洁、更友好的HarmonyOS应用开发旅程。 什么是HarmonyOS HarmonyOS&#xff08;鸿蒙操作系统&#xff09;是由华为技术有限公司开发的全场景分…

B站自动回复插件_无需千粉,轻松适配引流拉新资源分享

项目介绍 B站关键词自动回复插件&#xff0c;无需千粉&#xff0c; 很适合做流量做引流做私欲的朋友&#xff0c; 前期没有千粉是无法开启官方自动回复的&#xff0c; 适当的情况下可以用这个插件顶一下&#xff0c; 三联好评领取资源的打法真的超级涨粉&#xff0c; 感谢插件…

【OceanBase诊断调优】—— KVCache 排查手册

原文链接&#xff1a;OceanBase分布式数据库-海量数据 笔笔算数 本文介绍 KVcache 相关问题的排查方法。 KVCache 相关概念 在进行排查前&#xff0c;需要了解几个概念。 pin 一个 cache 块 ( memblock ) 被 pin 住&#xff0c;表示它正在被引用。 cache 的由多个定长的块组成…

HAL库点LED灯

文章目录 一、创建CubeMX项目操作步骤1.STM32CubeMX创建工程2.选择芯片3.Pinout & Configuration配置4.Clock Configuration配置5.Project Manager配置 二、实验&#xff08;一&#xff09;LED流水灯1.Keil修改代码2.实验现象3.keil波形仿真 &#xff08;二&#xff09;2只…

代码随想录(栈和队列)

用栈实现队列&#xff08;Leetcode232&#xff09; package 栈和队列;import java.util.ArrayList; import java.util.Stack; 思路&#xff1a;1、用一个栈stack2来存压入的数&#xff0c;当要pop或peek操作时再压入stack中&#xff0c;实现队列顺序2、不是每次pop都从stack2中…

没有CAN硬件,在Linux下模拟使用Socket CAN

即使没有实际的CAN硬件,我们仍然可以在Linux下使用socketcan进行模拟。这可以通过使用虚拟的CAN接口(vcan)来实现。vcan接口是Linux内核提供的虚拟CAN总线接口,适用于开发和测试socketcan应用。 以下是如何设置和使用vcan接口的步骤: 1. 加载vcan模块 首先,你需要确保…

变量命名的艺术:让你的代码更具可读性

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;为何变量命名如此重要&#xff1f; 二、变量命名的基本规则 1. 避免数…

卷爆短剧出海:五大关键,由AIGC重构

短剧高温下&#xff0c;谈谈AIGC的助攻路线。 短剧&#xff0c;一个席卷全球的高温赛道。 以往只是踏着霸总题材&#xff0c;如今&#xff0c;内容循着精品化、IP化的自然发展风向&#xff0c;给内容、制作、平台等产业全链都带来新机&#xff0c;也让短剧消费走向文化深处&am…

Docker仅需3步搭建免费私有化的AI搜索引擎-FreeAskInternet!

简介 FreeAskInternet 是一个完全免费、私有且本地运行的搜索引擎&#xff0c;并使用 LLM 生成答案&#xff0c;无需 GPU。用户可以提出问题&#xff0c;系统会进行多引擎搜索&#xff0c;并将搜索结果合并到ChatGPT3.5 LLM中&#xff0c;并根据搜索结果生成答案。 什么是 Fr…

重学java 39.多线程 — 线程安全

逐渐成为一个情绪稳定且安静成长的人 ——24.5.24 线程安全 什么时候发生&#xff1f; 当多个线程访问同一个资源时&#xff0c;导致了数据有问题&#xff0c;出现并发问题&#xff0c;数据不能及时更新&#xff0c;导致数据发生错误&#xff0c;出现线程安全问题 多线程安全问…

纹理映射技术在AI去衣中的艺术与科技融合

引言&#xff1a; 在数字图像处理的世界里&#xff0c;AI去衣技术正逐步揭开其神秘的面纱。这门技术结合了深度学习的智能算法与图形学的先进手段&#xff0c;以实现对图像中衣物的智能识别与处理。在这一过程中&#xff0c;纹理映射技术发挥着至关重要的作用。本篇博客将深入探…

变量命名的艺术:从蛇形到驼峰

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、蛇形命名法的魅力 二、类名和模块名的特殊规则 三、驼峰命名法的魅力与挑战 四、保持…

【kubernetes】探索k8s集群中kubectl的陈述式资源管理

目录 一、k8s集群资源管理方式分类 1.1陈述式资源管理方式&#xff1a;增删查比较方便&#xff0c;但是改非常不方便 1.2声明式资源管理方式&#xff1a;yaml文件管理 二、陈述式资源管理方法 2.1查看版本信息 2.2查看资源对象简写 2.3配置kubectl自动补全 2.4node节点…

初始Java篇(JavaSE基础语法)—— 内部类

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaSE 目录 内部类的概念 内部类的种类 使用举例&#xff1a; 1. 静态内部类&#xff1a; 2. 实例内部类 3. 局部内部类 4. 匿名内部…