第十章 开源许可证

news2024/11/29 22:51:12

软件是一种著作,天然是拥有版权的。很多人会认为放在 Github 上的就是开源软件,既然放了源代码,我就可以随便使用了。其实版权法规定著作是禁止共享的,也就是说没有许可证的软件等于保留版权。虽然源代码公开了,但并不表明你可以随便使用,一用就会侵犯版权。如果软件侵犯版权,必须明确授予用户开源许可证。

另外,有一些没有道德的公司会大量使用开源的产品,进行组合封装修改后当做自己的劳动创造。这些拿来党属于破坏游戏规则的一群人,这些人也应该让他们受到应有的惩罚,例如:GPL协议就是防止这种情况发生的。

  • 软件著作权的明确,作者(版权方)的权益明确,保护知识成果

  • 方便用户使用,用户获得明确的授权(是否可以进行使用、拷贝、修改和再发布)

  • 开源≠免费,免费≠免责, no license≠授权,授权≠收费

版权是知识产权的一种,和著作权是同一个概念,可以自动取得,也可以登记取得,是作者对自己的著作享有的法定权利。著作权是公民、法人依法享有的一种民事权利,属于无形财产权。享有著作权的作者可以决定是否对他的作品进行著作权意义上的使用和处理,在我国,只要发表就会受到保护。


开源许可证的种类

我们可以把版权分为四大种。

  • Copyright - 受版权保护的;未经准许不得复制的。
  • Copyleft - 有限空间内的自由使用,不得用于商业目的,且不得闭源,衍生品仍需开源。
  • Permissive - 宽松自由软件许可协议,对软件的使用、修改、传播等方式采用最低限制的自由软件许可协议条款类型。
  • Create Commons - 大多是被用于设计类的工程上,署名权,非商业用途,禁止衍生。

实际上,一般只会把 CopyleftPermissive 叫做开源,其中 Permissive 限制比较宽松。而 Copyleft 要求不得用于商业目的且不得闭源,并且后续衍生子软件必须遵守条款。其实这种协议就是为了弘扬开源精神,不希望某些公司垄断和强占开发成果。

copyright就是俗称的版权,也叫著作权。

版权又称著作权,用来表述创作者因其文学和艺术作品而享有的权利。版权的取得有两种方式:自动取得和登记取得。在中国,按照著作权法规定,作品完成就自动有版权(百度百科)

在版权的基础上,作者还可以制定授权协议(license),按照自己的心意进一步界定使用者的权利。

也就是说,作者的具体权利 = 当地法律规定的版权(copyright) + 自己在作品中添加的授权协议(license)。

权利 = 版权(copyright) + 授权协议(license)

比如,商业化的授权协议(license)可能会倾向于强调,使用者的哪些行为是侵权行为,从而保护自己的商业利益。而基于开源思想的授权协议则会强调使用者的权力。


Permissive 宽松自由许可

BSD(二条版)、BSD(三条版)、MITApache2

BSD(二条版)BSD(三条版)MITApache2
允许修改后闭源
不保证代码质量
必须披露原始作者
不得使用原始作者名字为软件推广
分发时必须保留原始许可声明
修改过必须向用户声明修改
未修改必须保持许可证不变

Copyleft 有限空间内的自由

GPLAffero GPL (AGPL)LGPLMozilla(MPL)

GPLAffero GPL (AGPL)LGPLMozilla(MPL)
分发二进制格式,必须提供源码
修改后,必须与修改前保持许可一致
不得在原始许可以外附加限制
如果项目包含GPL许可代码, 整个项目必须开源
云服务用到的代码, 云服务代码必须开源
如果项目属于动态链接库使用许可证库 项目不用开源
许可证代码在单独文件中 新增其他文件可以不开源

前端项目的开源协议

目前前端项目普遍会选择 MIT协议。

  • Vue: MIT https://github.com/vuejs/vue/blob/dev/LICENSE
  • React:MIT https://github.com/facebook/react/blob/main/LICENSE
  • Element: MIT https://github.com/ElemeFE/element/blob/master/LICENSE
  • Ant Design:MIT https://github.com/ant-design/ant-design/blob/master/LICENSE

MIT 协议是一种最简单的开源协议,只需要保留最基本的版权许可。这个时候就会有人问,为什么React 同样是MIT协议,但是听说百度要求内部全面停止使用 React 呢?这是因为 React 曾经在开源协议外还增加了附加的条款。

大概意思就是,当发生下列情况时,Facebook 有权益吊销你的 React 使用权:

  • Facebook 及其附属机构发生利益冲突;
  • 同任何一个和 Facebook 有关的组织发生了法律纠纷;
  • 同任何与 React 有关的组织发生利益冲突。

也就是说,使用 React 的项目,如果和 Facebook 有利益冲突都可能被吊销React的使用权。这个对于大厂来讲肯定不太行,后来这件事不断发酵,开源社区在更多的 Facebook 开源项目中发现了类似的规定,开发者普遍认为这种许可证模式正在毒害社区。 不过 Facebook 最后还是意识到了这个问题,修改了开源协议。


开源许可证的权力术语

不同的“开源许可证”有不同的授权维度,或者加以限制,又或者要求有条件的使用。

在这里插入图片描述

名称中文备注
Commercial use商业应用指是否可将开源用于商业目的
Distribution发布发行指是否允许发布发行依赖于此开源的项目
Modification修改指是否允许在开源项目上做修改
Patent use申请专利指是否允许用于专利申请
Private use个人使用指是否允许个人学习,修改和使用
License and copyright notice注明协议和版权指是否要求注明协议以及版权说明
State changes注明变更指对于开源代码的修改是否要明确说明
Liability义务指开源软件是否承担使用其后带来的义务
Trademark use商标使用指开源软件是否可用在商标或在商标中暗示使用
Warranty报修维护指开源软件是否提供后期维护
Same License同协议下指基于开源二次开发的产品若发布,是否要基于相同或相近的协议之下
Disclose source公开源码指基于开源开发的代码是否也需要开源

如何选择开源协议?

可以参考阮一峰老师的图:

在这里插入图片描述

Github 专门发布了一个网站 叫做 Choose an open source license 可以帮助你简化判断。

在这里插入图片描述

这个网站主张让开发者从自己的目的出发选择许可证。详细如下:

  • 需要简单宽松的协议: MIT 协议

    ==> 代表项目: VueReactElement

  • 比较关心专利: Apache协议

    ==> 代表项目: ApacheSVN

  • 比较关心项目的共享改进: GPL

    ==>代表项目: LinuxGit

  • 非代码项目: CCreative Commons

    ==>署名: 必须提到作者

    ==>非商业用户

    ==>禁止演绎,禁止修改原作品在创作


在 Github 中添加开源许可证

Github 中已经添加了各种开源许可证的模版。在创建项目的时候可以直接选择对应的开源协议。

在这里插入图片描述

当然也可以后期添加和修改,下面就在组件库添加上开源协议。

其实开源许可证就是一个文本文件放在项目的根目录下,所以可以在根目录下点击 【Add file】选择 【Create new file

在这里插入图片描述

然后填入文件名 【 LICENSE 】,Github 会自动判断出你需要添加开源协议的,并且会显示 【CHoose a license template 】选择许可证模版按钮,点击按钮就可以选择你需要的模版了。

在这里插入图片描述

然后是有效期和作者全名。

  • 有效期填写: 2022
  • 作者全名还是有点讲究的 可以把你的中文名字和英文名字做一个混合填写,比如 : genius

在这里插入图片描述

添加完成后,点击 Review and Submit 就可以创建属于自己的许可证了。


扩展阅读

  • Choose an open source license,https://choosealicense.com/

  • MIT License 协议原文 https://opensource.org/licenses/MIT

  • Apache License 2.0 协议原文 http://www.apache.org/licenses/LICENSE-2.0.html

  • GNU GPL v3 协议原文 https://www.gnu.org/licenses/gpl-3.0.txt

  • 更多开源许可列表 https://spdx.org/licenses/

  • 主流开源协议之间有何异同? https://www.zhihu.com/question/19568896

  • 《程序员不可不知的版权协议》,作者 GcsSloop https://www.gcssloop.com/tips/choose-license

  • 《如何选择开源许可证?》,作者 阮一峰,http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html

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

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

相关文章

GUI编程--PyQt5--QLabel

文章目录QLabel 文本展示QLabel 图片展示QLCDNumberQProgressBarQErrorMessageQProgressDialogQLabel 文本展示 展示文本、富文本、图片、动画。 # 实例化 label QLabel(self) # 设置文本 label.setText("666") # 设置图片 label.setPixmap(QPixmap) label.resize…

[BUG] runtime network not ready: NetworkReady=false reason:NetworkPluginNotRead

1 背景 执行kubectl get node是发现节点是NotReady状态,接着执行kubectl describe node 节点名 详细查看NotReady状态原因如下: runtime network not ready: NetworkReadyfalse reason:NetworkPluginNotReady message:docker: network plugin is not r…

数据结构之线性表中的双向循环链表【详解】

前言: 嗯!昨天我们的无头单向非循环链表咱已经是可以顺利完成出来了的,今天我们就来看一下什么是有头双向循环链表,不要看着这个链表又双向又循环的就比单向不循环链表难,其实这个更加的简单哦!前提是你有…

SpringBoot SpringBoot 原理篇 1 自动配置 1.17 自动配置原理【3】

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.17 自动配置原理【3】1.17.1 看源码了1.17.2 小结1 自动配置 1.…

【STA】(1)引言

目录 1. 纳米级设计 2. 什么是STA 3. 为什么要进行STA 4. 设计流程 5. 不同阶段的STA 6. STA的局限性 1. 纳米级设计 在半导体器件中,金属互连线通常被用来连接电路中的各个部分,进而实现整个芯片。随着制造工艺的进一步缩小,这些互连线…

【电源专题】案例:不导这颗MOS管的原因是在电路上不通用?

本案例发生在MOS管替代料导入时。正常情况下在替代料导入、部品导入的时候,我们需要查看规格书。怎么查找规格书可以看文章【电子通识】芯片资料查询方法 对于一些关键的信息我们要做对比,一般来说要通过列表进行对比。但因为不同的供应商的测试标准不同,有很多是很难对比的…

信号与系统2——LTI

信号与系统2——LTI一、Introduction1. Representation of LTI systems2. Significance of unit impulse二、DT-LTI:Convolution Sum1. Output2. Impulse response of LTI system H3. Convolution sum4. Convolution Sum Evaluation Procedure5. Sequence Convoluti…

Python 数据容器(1) - list(列表)

文章目录什么是数据容器?Python中的数据容器数据容器:list(列表)基本语法案例演示列表的下标(索引)列表常用操作list容器操作总结什么是数据容器? 一种可以容纳多份数据的数据类型,容…

算法学习 | 回溯算法之深度优先搜索常见题型练习

目录 岛屿的最大面积 电话号码的字母组合 二进制手表 组合总数 活字印刷 岛屿的最大面积 题目链接:leetcode-695.岛屿的最大面积 示例 输入:grid [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,…

线程“八锁“ synchronized到底是对哪个对象加锁?

线程"八锁" synchronized到底是对哪个对象加锁? 习题一 class Number{public synchronized void a(){System.out.println("1");}public synchronized void b(){System.out.println("2");} } public class TestBlock {public static void main(…

从Zemax OpticStudio导入光学系统

摘要 ZemaxOpticStudio是一款广泛使用的光线追迹软件。VirtualLab Fusion可以从Zemax OpticStudio导入光学系统,包括完整3D位置信息和镜片玻璃。导入后,光学系统的结构数据将显示为单独的表面或可以组合成VirtualLab Fusion中的组件。VirtualLab Fusion可…

docker入门(一):在centOS虚拟机上安装docker

索引CentOS虚拟机安装1.下载CentOS镜像问题1-报错“您已输入用户名,客户机操作系统将保留此用户名”2.根据docker官方指导进行安装1.卸载旧版本(初次安装可以忽略)2.确保能联网后下载前置软件包3.设置镜像库(阿里版)4.…

CLIP后续--LSeg,GroupViT,ViLD

这个博客开了有两个月,一直没写成,最近封寝给它完成~躺平第三天 CLIP应用领域概览: 1. LSeg 原论文地址:https://arxiv.org/abs/2201.03546 代码:https://github.com/isl-org/lang-seg 这个图就很清楚的说明了zero…

mysql数据库管理

目录 一、MySQL数据库管理 1、库和表 2、常用的数据类型 3、char和varchar区别 二、查看数据库结构 三、SQL语句 1、SQL语句分类: 四、创建及删除数据库和表 五、管理表中的数据记录 六、修改表名和表结构 七、自增 八、填充 九、克隆表 十、清空表&am…

信号与系统1——Signals and Systems

信号与系统1——Signals and Systems一、Introduction1. Signals and Systems信号与系统(1) Signal信号(2) System系统2. Classification of Signals信号的分类(1) Continuous-time & discrete-time1) Continuous-Time signal连续时间信号2) Discrete-Time signal离散时间信…

【Hack The Box】linux练习-- Passage

HTB 学习笔记 【Hack The Box】linux练习-- Passage 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年9月7日🌴 &#x1f36…

浅析数据仓库和建模理论

第一章 认识数据仓库 1.1 数据仓库概念 数据仓库,英文名称为 Data Warehouse,可简写为 DW 或 DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决…

BDD - SpecFlow SpecRun Web UI 多浏览器测试

BDD - SpecFlow & SpecRun 一个 Cases 匹配多个浏览器引言方案SpecFlow Runner profiles实现被测 Web Application创建一个 Class Libary 项目添加 NuGet PackagesSpecFlow & SpecRun 包添加 Selenium包其它包创建 Feature 文件配置 Default.srprofileDefault.srprofil…

MySQL的概念

MySQL的概念一.数据库的基本概念1、数据(Data)2、表3、数据库4、数据库管理系统(DBMS)4.1 关系数据库4.2 非关系型数据库 NoSQL5、数据库系统6、访问数据库的流程二.数据库系统发展史1.第一代数据库2.第二代数据库3.第三代数据库三…

JAVA多线程(MultiThread)的各种用法

多线程简单应用 单线程的问题在于,一个线程每次只能处理一个任务,如果这个任务比较耗时,那在这个任务未完成之前,其它操作就会无法响应。 如下示例中,点击了“进度1”后,程序界面就没反应了,强行…