开源协议概览

身为程序员,我们不可避免的要和开源项目打交道,不管是我们自己做了些开源项目,还是使用开源项目,对各种开源协议的了解是必要的。

在这里插入图片描述
在这里插入图片描述

OSI(Open Source Initiative)

OSI,开发源代码组织,是一个旨在推动开源软件发展的非盈利组织。目前受到OSI承认的开源协议一共83种,具体协议可以在OSI 官网查看。

在 Github 上如何添加开源协议

我们在 Github 上创建一个开源项目时,新建一个名为 LICENSE 的文件时,就会弹出选择开源协议的按钮,我们点进去就可以看到,Github 默认支持的协议模板。点击协议会有详细的介绍。

开源协议一览表

开源协议特点共享修改衍生商业化例子
Apache允许商业使用和闭源,但需要保留版权声明和使用许可条款可以自由地查看、使用、修改和共享源代码,但修改后的项目必须开放源代码库的链接可以自由选择协议进行修改和衍生项目可以自由选择协议进行商业化Hadoop分布式计算框架、Apache Tomcat Web服务器等
GPL最严格和强大的,要求任何使用、修改或衍生代码的项目都必须采用GPL协议可以自由地查看、使用、修改和共享源代码必须使用GPL协议进行修改和衍生项目必须使用GPL协议进行商业化Linux操作系统、GIMP图像编辑器等
BSD简洁和慷慨的,允许商业使用和闭源,但需要保留版权声明可以自由地查看、使用、修改和共享源代码可以自由选择协议进行修改和衍生项目可以自由选择协议进行商业化FreeBSD操作系统、Nginx Web服务器等
MIT简单和宽松的,允许商业使用和闭源,但需要保留版权声明可以自由地查看、使用、修改和共享源代码可以自由选择协议进行修改和衍生项目可以自由选择协议进行商业化React JavaScript库、TensorFlow机器学习框架等
Mozilla旨在保护用户隐私和自由,允许商业使用和闭源,但需要保留版权声明可以自由地查看、使用、修改和共享源代码必须使用MPL协议进行修改和衍生项目必须使用MPL协议进行商业化Firefox浏览器、Rust编程语言等
LGPL允许商业使用和闭源,但需要保留版权声明和使用许可条款,并开放源代码库的链接可以自由地查看、使用、修改和共享源代码,但修改后的项目必须开放源代码库的链接必须使用LGPL协议进行修改和衍生项目,并开放源代码库的链接必须使用LGPL协议进行商业化,并开放源代码库的链接Qt开发框架、GTK+图形界面库等

三、Apache 2.0
3.1 关键词
修改代码需要说明

3.2 关键点
需要保留原有作者的声明
如果修改了代码,需要进行说明
不承担责任
可以新增许可,但不能对 Apache 协议造成更改
3.3 商业化
可用于商业

3.4 举个栗子
小益使用 Apache 协议开源了一个 Android 类库,只要小张引用类库时保留了原作者的声明,并对修改的源码进行说明,那后续项目开源与否,都是符合协议的。

3.5 使用此协议的开源项目
hadoop,tomcat

四、BSD 2
4.1 关键词
声明协议

4.2 关键点
再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议
如果再发布的只是二进制类库/软件,则需要在类库/软件的文档那个和版权声明中包含原来代码中的BSD协议
4.3 商业化
允许闭源商业软件的发布和销售

4.4 使用此协议的开源项目
brew

五、BSD 3
5.1 关键词
声明协议

5.2 关键点
相比 BSD 2.0 新增协议如下: 不可以用开源代码的“作者/机构的名字”或“原来产品的名字”做市场推广

5.3 商业化
允许闭源商业软件的发布和销售

5.4 举个栗子
小益使用 BSD 协议开源了一个 Android 类库,只要小张引用类库时保留了原作者的声明,并对修改的源码进行说明,那后续项目开源与否,都是符合协议的。

5.5 使用此协议的开源项目
flask,redis,numpy

六、MIT
6.1 关键词
许可声明

6.2 关键点
软件中必须包含许可声明
6.3 商业化
允许商业化

6.4 举个栗子
小益使用 MIT 协议开源了一个 Android 类库,只要小张引用类库时保留包含了许可声明,那后续项目开源与否,都是符合协议的。

6.5 使用此协议的开源项目
vue,react,bootstrap,vscode,electron,axios,terminal

七、GPL 2.0
7.1 关键词
感染

7.2 关键点
使用 / 修改 / 衍生 GPL 类库的代码或软件,必须也采用 GPL 协议进行开源
项目开源后可以再增加其他开源协议,但是协议必须比 GPL 宽泛
不提供品质担保,使用采用此协议的软件产生的任何后果都不会负责
7.3 商业化
可以用于商业,但是必须开放源码

7.4 举个栗子
小益使用 GPL 协议开源了一个 Android 类库,这个时候小张做开发时,本着不重复造轮子的想法,在项目中引用了小益的类库。项目开发完成以后,小张想把项目上架到 GooglePlay,但是不想开源,这个时候就违反了 GPL 协议。 为了不违反协议,小张索性将项目开源,而在选择开源协议的时候,小张必须选择 GPL 协议。

GPL 的本质就是生生不息,不断衍生。

7.5 使用此协议的的开源项目
Linux,GCC,scapy

八、GPL 3.0
GPL 3.0 相比 2.0 新增了一些条例:

任何向 GPL 项目贡献的成果将永远以 GPL 协议发行
GPL 软件设备的用户有权更改软件
使用此协议的的开源项目
GIMP,Bash,YouCompleteMe

九、LGPL
9.1 关键词
引用类库无需开源

9.2 关键点
LGPL 允许商业软件通过引用(link)的方式使用 LGPL 类库,而不需要开放源代码
但是如果修改或衍生 LGPL 协议代码,则必须采用 LGPL 协议
9.3 商业化
适合商业软件

9.4 举个栗子
小益使用 LGPL 协议开源了一个 Android 类库,小张做开发时引用了此类库。之后小张将项目上架到 GooglePlay 而不开源,是没有违反协议的。但是小张引用类库时,是以源码的形式引用的,那就必须要将项目开源了。

9.5 使用此协议的的开源项目
alibaba/jvm-sandbox

十、AGPL 3.0
10.1 关键词
网络交互

10.2 关键点
AGPL 在 GPL 的基础上,增加了一条限制,通过网络与用户交互,也需要提供源代码

10.3 商业化
可以用于商业,但是必须开放源码

10.4 使用此协议的开源项目
octotree

十一、EPL 2.0
11.1 关键词
修改源码需要开源

11.2 关键点
修改源码后发布需要开源
软件贡献者再次将源码开源发布时,需要使用 EPL 协议,除非得到作者授权
项目中引用了 EPL 协议的代码,项目开源时可以使用其他协议,但是引用的那部分代码仍然需要使用 EPL 协议
11.3 商业化
允许闭源商业软件的发布和销售

11.4 使用此协议的开源项目
che

十二、MPL
12.1 关键词
版权集中

12.2 关键点
修改后的代码版权归软件的发起者,可以免费使用
12.3 商业化
允许闭源商业软件的发布和销售

12.4 举个栗子
小益使用 MPL 协议开源了一个 Android 类库,小张对源码进行修改以后重新发布,修改后的源码版权也属于小益。

12.5 使用此协议的开源项目
syncthing,firefox-ios

如何选择开源协议

如果想省事,不关系别人用自己的代码去做什么,直接选 MIT 或者 BSD 就好
如果想代码修改以后做出声明,选择 Apache 协议
如果想“繁衍”后代,那么使用 GPL 协议
其实看了上述介绍,了解了各个协议之间的区别,我们基本上也就清楚项目该选哪种协议了。如果还不清楚,可参照此网站。

参考

GNU通用公共许可证
GNU General Public License, version 1
GNU通用公共许可协议
LGPL 与GPL的区别
开源许可证亟需更新 —— 摆脱 1980 年代束缚、应对人工智能

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

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

相关文章

【河海大学论文LaTeX+VSCode全指南】

河海大学论文LaTeXVSCode全指南 前言一、 LaTeX \LaTeX{} LATE​X的安装二、VScode的安装三、VScode的配置四、验证五、优化 前言 LaTeX \LaTeX{} LATE​X在论文写作方面具有传统Word无法比拟的优点,VScode作为一个轻量化的全功能文本编辑器,由于其极强的…

ZYNQ 7020 PL feature 解读

1. 组成 CLB, RAM, DSP, IO block,XADC, PCI-E, etc 2. CLK Each device in the Zynq-7000 family has up to 8 clock management tiles (CMTs), each consisting of one mixed-mode clock manager (MMCM) and one phase-locked loop (PLL). See Table 5. 2.1, Clock Distri…

记录下载安装rabbitmq(Linux) 并整合springboot--详细版(全)

下载rabbitmq(Linux): erlang压缩包: https://share.weiyun.com/TGhfV8eZ rabbitMq-server压缩包: https://share.weiyun.com/ZXbUwWHD (因为RabbitMQ采用 Erlang 实现的工业级的消息队列(MQ)服务器&#…

网络安全技术新手入门:利用永恒之蓝获取靶机控制权限

目录 前言 一、搜索永恒之蓝可用模块 二、使用攻击模块 三、配置攻击模块 四、攻击 五、总结 前言 相关法律声明:《中华人民共和国网络安全法》第二十七条 任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动&…

element-ui表单验证同时用change与blur一起验证

项目场景: 提示:这里简述项目相关背景: 当审批时不通过审批意见要必须输入, 1:如果用change验证的话删除所有内容时报错是massage的提示,但是在失去焦点的时候报错就成了英文,如下图&#xf…

Qt 国产嵌入式操作系统实现文字转语音功能(TTS)

1.简介 本示例使用的CPU:rk3588。 操作系统:kylin V10 架构:aarch64 在Windows端,我们很容易想到使用Qt自带的类QTextToSpeech来实现文字转语音功能,Qt版本得在5.11.0以上才支持。但是在嵌入式平台,尤其…

Matlab数学建模算法之模拟退火算法(SA)详解

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家…

STM32之OLED显示

一、模块介绍 1、常见的显示设备 LED、数码管、点阵、LCD屏(1602/12864)、OLED屏(消费电子) 2、OLED屏的概述 OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesenc…

机器学习算法 - 马尔可夫链

马尔可夫链(Markov Chain)可以说是机器学习和人工智能的基石,在强化学习、自然语言处理、金融领域、天气预测、语音识别方面都有着极其广泛的应用 > The future is independent of the past given the present 未来独立于过去&#xff…

Linux实操学习

Linux常用操作 一、帮助命令1. man1.1 基本语法1.2 快捷键1.3 注意事项 2. help2.1 基本语法2.2 注意事项 3. 常用快捷键 二、文件目录类1. 常规操作1.1 pwd1.2 cd1.3 ls 2. 文件夹操作2.1 mkdir2.2 rmdir 3. 文件操作3.1 touch3.2 cp3.3 rm3.4 mv 4. 文件查看4.1 cat4.2 more4…

四、任意文件读取漏洞

一、介绍 解释:任意文件读取漏洞就其本身来说就是,攻击者绕过网站防御者设置的防御,读取到了正常使用者不应该读取到的内容。网站开发者使用不同的语言,任意文件读取漏洞利用方式就不同。 二、不同开发语言的不同漏洞点 1.PHP …

Kali Linux保姆级教程|零基础从入门到精通,看完这一篇就够了!(附工具包)

作为一名从事网络安全的技术人员,不懂Kali Linux的话,连脚本小子都算不上。 Kali Linux预装了数百种享誉盛名的渗透工具,使你可以更轻松地测试、破解以及进行与数字取证相关的任何其他工作。 今天给大家分享一套Kali Linux资料合集&#xf…

2024年高校建设大数据实验室建设的意义

数据挖掘与大数据分析是以计算机基础为基础,以挖掘算法为核心,紧密面向行业应用的一门综合性学科。其主要技术涉及概率论与数理统计、数据挖掘、算法与数据结构、计算机网络、并行计算等多个专业方向,因此该学科对于实验室具有较高的专业要求…

构建未来教育:在线培训系统开发的技术探讨

随着远程学习的崛起和数字化教育的普及,在线培训系统的开发成为了现代教育的核心。本文将深入讨论在线培训系统的关键技术要点,涵盖前后端开发、数据库管理、以及安全性和身份验证等关键方面。 前端开发:提供交互性与用户友好体验 在构建在…

HTML--JavaScript--引入方式

啊哈~~~基础三剑看到第三剑,JavaScript HTML用于控制网页结构 CSS用于控制网页的外观 JavaScript用于控制网页的行为 JavaScript引入方式 引入的三种方式: 外部JavaScript 内部JavaScript 元素事件JavaScript 引入外部JavaScript 一般情况下网页最好…

【数据结构】常见八大排序算法总结

目录 前言 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 6.1Hoare版本 6.2挖坑法 6.3前后指针法 6.4快速排序的递归实现 6.5快速排序的非递归实现 7.归并排序 8.计数排序(非比较排序) 9.补充:基数排序 10.总结…

【Java】十年老司机转开发语言,新小白从学习路线图开始

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握…

【HTML5】 canvas 绘制图形

文章目录 一、基本用法二、用法详见2.0、方法属性2.1、绘制线条2.2、绘制矩形2.3、绘制圆形2.4、绘制文本2.5、填充图像 一、基本用法 canvas 标签:可用于在网页上绘制图形(使用 JavaScript 在网页上绘制图像)画布是一个矩形区域&#xff0c…

决战排序之巅(二)

决战排序之巅(二) 排序测试函数 void verify(int* arr, int n) 归并排序递归方案代码可行性测试 非递归方案代码可行性测试 特点分析 计数排序代码实现代码可行性测试 特点分析 归并排序 VS 计数排序(Release版本)说明1w rand( ) …

1 python计算机基础

计算机基础和环境搭建 1 计算机基础和环境搭建1.计算机基础1.1 基本概念1.2 编程语言1.3 编译器/解释器 2.学习编程的本质3.Python的介绍3.1 语言的分类3.2 Python3.3 Python的解释器种类(了解)3.4 CPython解释器的版本 4.环境搭建4.1 安装Python解释器4…