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

news2024/11/26 2:46:05

为什么开源软件会存在许可证,许可证的起源与产生目的是为了解决什么问题?许可证的定义又是怎样的?什么是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.coloradmin.cn/o/1689083.html

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

相关文章

RAC11G删除节点

删除节点步骤:删除实例、删除 DB 软件、删除 GI 软件 删除节点发生的场景 1、被删除节点一切保留,需要从RAC中剔除,例如因为要更换服务器。 2、被删除节点关于RAC的部分文件丢失,如GI、库软件误删除,需要重新安装GI…

英语学习笔记21+23——Which book?/Which glasses?

Which book?/Which glasses? 哪本书?/哪些杯子? 词汇 Vocabulary give v. 给 搭配:Give me five! 击掌庆祝 用法:give 人 东西     give 东西 to 人    把……东西给某人 例句:把这些苹果给 Bobby.   …

【高频】从输入URL到页面展示到底发生了什么?

一、相关衍生面试问题: 浏览器输入美团网站,从回车到浏览器展示经历了哪些过程 ? http输入网页之后的流程? 百度搜索页面,从点开搜索框,到显示搜索页面经历了什么? 二、探究各个过程&#x…

起底震网病毒的来龙去脉

2010年,震网病毒被发现,引起世界哗然,在后续的10年间,陆陆续续有更多关于该病毒的背景和细节曝光。今年,《以色列时报》和《荷兰日报》又披露了关于此事件的更多信息,基于这些信息,我们重新梳理…

【数据结构】第七节:堆

个人主页: 深情秋刀鱼-CSDN博客 数据结构专栏:数据结构与算法 源码获取:数据结构: 上传我写的关于数据结构的代码 (gitee.com) ​ 目录 一、堆 1.堆的概念 2.堆的定义 二、堆的实现 1.初始化和销毁 2.插入 向上调整算法 3.删除 向下调整算法…

短剧系统源码解析与应用

在数字化时代,短剧作为一种新兴的娱乐形式,因其内容紧凑、节奏快速而受到广大年轻群体的喜爱。短剧系统源码的开发和应用,不仅为创作者提供了一个展示才华的平台,也为观众带来了全新的观看体验。本文将对短剧系统源码进行解析&…

get和post的区别,二者是幂等的吗?

一、什么是幂等 所谓幂等性通俗的将就是一次请求和多次请求同一个资源产生相同的副作用。 维基百科定义:幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执…

win32-鼠标消息、键盘消息、计时器消息、菜单资源

承接前文: win32窗口编程windows 开发基础win32-注册窗口类、创建窗口win32-显示窗口、消息循环、消息队列 本文目录 键盘消息键盘消息的分类WM_CHAR 字符消息 鼠标消息鼠标消息附带信息 定时器消息 WM_TIMER创建销毁定时器 菜单资源资源相关菜单资源使用命令消息的…

人类交互2 听觉处理和语言中枢

人类听觉概述 人类听觉是指通过耳朵接收声音并将其转化为神经信号,从而使我们能够感知和理解声音信息的能力。听觉是人类五种感觉之一,对我们的日常生活和交流至关重要。 听觉是人类交流和沟通的重要工具。通过听觉,我们能够听到他人的语言…

jwtcracker下载安装出现错误

1.jwtcracker 用于爆破jwt秘钥 2.下载 ubuntu/kali安装c-jwt-cracker及使用方法-CSDN博客 参考这个大佬写的 但是我在这里出现了这个问题 显示Cannot initialize the default message digest sha256, aborting 我实在找不出来哪里有问题,所以直接换成docker …

Java并发面试题,多线程通关秘籍

【知识点记录】- 不能不知道的知识点 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得&#xf…

Go语言(Golang)的开发框架

在Go语言(Golang)的开发中,有多种开发框架可供选择,它们各自具有不同的特点和优势。以下是一些流行的Go语言开发框架,选择Go语言的开发框架时,需要考虑项目需求、团队熟悉度、社区支持、框架性能和可维护性…

Android 共享内存

Parcelable 和 Serializable 区别 Serializable IO完成(通过磁盘文件读写) Parcelable C 对象指针 来实现共享内存 import android.os.Parcel; import androidx.annotation.NonNull;public class ApiResponseBean extends Throwable implements Parce…

小短片创作-组装场景(一)

1、项目基础设置 通过第三人称模板,创建1个项目 1.自动曝光:关闭,因为要做专业的小短片,曝光需要手动控制。 2.扩展自动曝光中的默认亮度范围:启用 3.全局光照系统:选择屏幕空间光照(SSGI&am…

SpringCloudAlibaba:6.3SpringBoot接入RocketMQ

依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 htt…

vue通过for循环生成input框后双向绑定失效问题

有些时候页面上有太多的表单元素&#xff0c;一个个的写太过繁琐&#xff0c;拿 input 框举例&#xff0c;众多的 input 框&#xff0c;无非就是输入框前的说明和 input 框的 name 属性不一样 <el-form :inline"true" :model"formInline" size"mi…

C语言-atoi()库函数的模拟实现

文章目录 前言一、atoi()库函数的介绍及使用1.1 atoi()库函数介绍1.2 atoi()库函数使用 二、atoi()库函数的模拟实现2.1 函数设计2.2 函数实现思路2.3 具体实现2.4 测试 总结 前言 本篇文章介绍c语言中库函数atoi()的使用&#xff0c;以及模拟实现库函数。 一、atoi()库函数的…

allegro 无法删除Xnet

allegro 无法删除Xnet Orcad中打开Constraint Manager之后&#xff0c;再生成网表&#xff0c;导入PCB后就会出现一堆Xnet网络。无法去除Xnet。 解决办法 在原理图ORCAD中&#xff0c; 1、打开Edit Object properties 2、选择Filter by:Capture 3、点击New Property 4、设置…

开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)

本文学习并分析App.Hosting项目中后台管理页面的文章管理页面。   文章管理页面用于显示、检索、新建、编辑、删除文章数据&#xff0c;以便在前台页面的首页、文章专栏、文章详情页面显示文章数据。文章管理页面附带一新建及编辑页面&#xff0c;以支撑新建和编辑文章数据。…

5月20日分割等和子集+最后一块石头的重量Ⅱ

416.分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和…