不同类型的开源许可证

不同类型的开源许可证

什么是开源许可证

最简单的解释是,开源许可证是计算机软件和其他产品的许可证,允许在定义的条款和条件下使用、修改或共享源代码、蓝图或设计。开源并不意味着该软件可以根据需要使用、复制、修改和分发。根据开源许可证的类型,我们可能可以修改源代码以满足我们的需求或修复任何问题。许可证将决定我们对软件及其源代码的自由。

在讨论开源许可证时,不考虑出于个人用途而进行的非商业重新分发或源代码修改。但作为开发人员和用户,我们绝对必须了解这些开源许可证以及这些用途。因此,请继续阅读本文,了解最常见的许可证以及它们如何寻求保护软件的作者和用户。

不同的开源许可证:Copyleft 和 Permissive

目前有超过 200 个开源许可证,但一般来说,它们都分为两个主要类别。这些是Permissive(许可)和Copyleft(拥有著作权)。

在这里插入图片描述

Permissive

Permissive允许我们以最小的限制复制、修改、重新组合和重新分发作品。通常,用户在重新分发许可软件时只需要包含“原始版权声明”和“许可文本的副本”。

最流行的许可式开源许可证是Apache、MIT、BSD。

Apache

Apache许可证是 Apache 软件基金会 (ASF) 发布的开源许可证。

1995 年 Apache Group 发布了其许可证的第一个版本,并于 2004 年发布了 Apache License 2.0 版。

在 Apache License 下,我们可以自由地使用、修改、分发和销售软件,而无需担心软件的使用情况。

如果我们想重新分发带有 Apache 许可组件的软件,那么我们只需在我们修改的所有文件中添加“许可证副本”、“明确的 Apache 归属”和“修改通知”即可。

与其他Permissive许可证不同,此 Apache 许可证明确向用户授予可应用于版权和专利的权利(Apache 许可证描述了实践代码贡献者专利声明的权利)。
Apache License 2.0 等宽松的开源许可证越来越受欢迎。

MIT

MIT许可证是由麻省理工学院创建的开源许可证。

在MIT许可证下,我们可以自由修改和分发软件的代码,只要添加“原始版权声明”和“许可证本身的副本”。

尽管 MIT 许可证非常简单、简短,但一些开发人员尽量避免这样做,因为它没有明确授予专利权。

jQuery、Node.js、Lua、Ruby on Rails、X Windows System (X11)都使用了 MIT。

BSD

加州大学伯克利分校于 1980 年创建了BSD 许可证的第一个版本。目前,BSD 许可证有三种变体(原始 BSD 许可证、修改版 BSD 许可证 — 3 条款和简化 BSD 许可证/FreeBSD 许可证 — 2 条款)。

在BSD许可证下,我们可以自由地修改和分发源代码或二进制格式的软件代码,只要包含“许可证全文”和“原始版权声明”。

Quill、level DB、D3.js等都使用了BSD 3-Clause License。

尽管 BSD 许可证看起来与 MIT 许可证相同,但目前 BSD 许可证不如其他许可许可证(如 MIT 和 Apache License 2.0)受欢迎。

Permissive 许可用例

最近的趋势表明,多年来软件开发人员倾向于使用 Permissive 许可证而不是 Copyleft 许可证。选择 Permissive 许可证而不是 Copyleft 许可证的原因有很多:

  • 获得个人、企业的更多贡献并最大化软件的使用:
    当考虑到希望将代码用于商业目的的公司的角度时,他们通常更喜欢宽松的许可证而不是 Copyleft,因为在宽松的许可证下,他们将能够将其衍生作品转化为专有作品并将其用于商业目的。

  • 保护代码很少的软件包:
    自由软件基金会(FSF)建议对少于 300 行的软件使用Permissive 许可证。因此,根据 FSF 的建议,具有 Permissive 许可证的小型软件比 Copyleft 许可证吸引更多的开发人员。

  • 如果软件的目的不是为了赚钱:
    就个人而言,如果有人不想赚取利润,但想创建有价值的软件,最好的办法是使用许可许可证。

Copyleft 许可证

Copyleft许可证还为我们提供与Permissive 许可证相同的权限。但它要求我们在 Copyleft 许可下发布完整的作品。换句话说,如果我们在 Copyleft 许可证(例如 GPL)下发布软件库,并且其他人想要将我们的软件库与另一个专有库一起使用,他们将不会被允许这样做。需要 GPL 才能在 GPL 许可证下构建整个程序。

GNU 通用公共许可证 (GPL)

GPL 许可证是最流行的开源许可证。自由软件基金会 (FSF) 的创始人 Richard Stallman 编写了 GPL 许可证,以保护 GNU 软件免于成为专有软件。

如果我们在软件中使用了 GPL 组件,则意味着我们的整个软件被视为“基于 GPL 的作品”,因为:

我们无权要求该软件的专利或版权。此外,我们还有义务“显示版权声明”、“免责声明”、“完整的 GPL 声明”和“GPL 副本”。

我们无权更改许可或添加附加条款和条件。

我们有互惠义务。换句话说,我们有义务发布源代码以及修改和分发整个代码的所有权利。

Red Hat、GIMP、Unix shell Bash使用GPL v3 许可证。

尽管 Copyleft 许可证不如 Permissive 许可证受欢迎,但 GPL 许可证仍然在开源生态系统中发挥着至关重要的作用。

Affero GPL (AGPL)

顾名思义,Affero GPL是 GNU GPL 的一部分,包括 LGPL、GPL v2、GPL v3。所有这些许可证都是 Richard Stallman 的 GNU 项目的一部分。

Henry Poole 和 Stallman 认为GPL 中存在“应用服务提供商(ASP)漏洞”。然后克服了这个问题,关于 AGPL 许可证的想法就建立了。

AGPL 许可证基于 GPL v3,并且 AGPL 许可证具有与 GPL v3 相同的要求。但它还有一个关于通过网络进行远程访问的附加声明。

GNU 项目建议任何程序员在其软件通过网络运行时使用 AGPL 许可证。然而,AGPL 并不是一个很流行的开源许可证。目前,它只使用了不到所有开源项目的 1%。

Copyleft 许可证用例

目前,许可许可证是开源软件中最常用的许可证类型。但我们不能忘记 Copyleft 许可证也发挥着至关重要的作用。GPL 系列被认为是最常用的 OSS 许可证之一,因为例如 Linux 内核也是使用 Copyleft 许可证开发的。

如果我们的公司使用 Copyleft 开源许可证开发一个程序并分发该程序,则任何人都可以修改和使用它。但公司可以随时更改这些内容,并且这些更改必须公开。因此,如果我们满足以下条件,Copyleft 许可证可能最适合我们的软件:

  • 希望与开源社区分享我们的改进。
  • 喜欢在构建软件时与他人协作。
  • 想要将项目商业化并赚取利润。
  • 不想让其他人使用我们的代码来制作专有软件。

结论

本文解释一下令人困惑的开源许可证,并尝试简化200多个许可证中的几个开源许可证。这仅用于讲解目的,我们可以自行研究以找出我们应该选择的最佳开源许可证。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

群晖安装portainer

一、下载镜像 打开【Container Manager】 ,搜索portainer,双击【6053537/portainer-ce】下载汉化版本 二、创建映射文件夹 打开【File Station】,在docker目录下创建【portainer】文件夹 三、开启SSH 群晖 - 【控制面板】-【终端机和SNMP】 勾选【启动…

36.JavaScript补完计划:typescript

点赞收藏加关注,你也能住大别墅! 一、什么是typescript 二、应用场景 我认为JavaScript的特点就是在于它强大的延展性,不仅蔓延到了后端,而且也逐渐成为代码世界无法被忽视的存在。那么,编写js代码时我们都会经常遇到…

Echarts tooltip配置项的属性 图表悬浮框

这个小图标就是tooltip的配置项 tooltip:{} //默认样式 自定义显示数据 如果没有自定义的属性可以 只是写data [1254,1551,574,10]… series: {//图表配置项 如大小,图表类型name: 图表名字,type: bar,//图表类型data: [{value: 454,time: 2012-11-12},{value: 898…

easyrecovery 16数据恢复软件2024最新免费下载地址

EasyRecovery 16是一款操作简单、功能强大数据恢复软件,通过easyrecovery可以从硬盘、光盘、U盘、数码相机、手机等各种设备中恢复被删除或丢失的文件、图片、音频、视频等数据文件。 EasyRecovery Pro 16安装步骤 一、首先需要在该页找到下载地址处选任意地址将EasyRecovery软…

小间距LED屏幕需要解决的五大芯片问题

随着微距LED电子显示屏的像素间距逐渐缩小,对封装技术提出了更高的要求,LED灯珠和芯片尺寸也需要进一步减小。由此引发的显示性能、产品品质、一次性通过率、亮度和灰度等问题都需要通过先进芯片技术来解决。那么,什么是微距LED显示屏&#x…

JavaScript基础知识总结

1.前提 Html是一种标记语言,用来结构化我们的网页内容并赋予内容含义,例如定义段落、标题和数据表,或在页面中嵌入图片和视频 Css是一种样式规则语言,可将样式应用于 HTML 内容,例如设置背景颜色和字体,在多…

BUUCTF-pwn-ciscn_2019_ne_51

简单查看保护: 32为程序没有canary没有PIE,应该是简单的栈溢出。我们照着这个思路去找溢出点在哪,运行下程序看看什么情况: 程序上来是输入一个密码验证。随便输入下错误直接退出。因此我们需要到IDA中看看怎么回事: 主…

tcp/ip协议 error=10022 Winsock.reg Winsock2.reg

tcp/ip协议 error10022 这2个注册表选项千万不能删除,否则上不了网。 按下windows键R键,输入regedit,打开注册表,在文件目录里找到如下两个文件夹,删除这两个文件夹。 路径:HKEY_LOCAL_MACHINE\System\C…

微信小程序获取手机号上限,怎么处理比较省钱

微信新规 微信2023年改了规则,原本免费的小程序获取手机号,现在如果要获取要1分钱一条。 有些小程序的用户非常恐怖, 比如一些工具类的, 群发类的。如果进入小程序就必须要获取小程序,就像是无底洞,让运营…

enote笔记法之附录1——“语法词”(即“关联词”)(ver0.24)

enote笔记法之附录1——“语法词”(即“关联词”)(ver0.24) 最上面的是截屏的完整版,分割线下面的是纯文字版本: 作者姓名(本人的真实姓名):胡佳吉 居住地&#xff1…

HCIE 01:基于前缀列表的BGP ORF功能

当运行BGP协议的某台设备上,针对入方向配置了基于ip-prefix的路由过滤,过滤了邻居发送的路由; 目前想,通过在peer关系的两端设备上都配置ORF功能,实现路由发送端只能送路由接收端过滤后的路由; ORF功能的说…

Java实现通过经纬度求两个任意地点在球面上的距离

我们在实际开发中会获取对应的经纬度,可以使用ES大数据搜索引擎进行计算对应区域的数据,那我们在如何根据两个经纬度获取对应的球面距离,就是在地球上从一个地点到另一个地点的直线距离 工具类如下: public class GeoUtils {// 地球半径&am…

centos7中通过kubeadmin安装k8s集群

k8s部署官方提供了kind、minikube、kubeadmin等多种安装方式。 其中minikube安装在之前的文章中已经介绍过,部署比较简单。下面介绍通过kubeadmin部署k8s集群。 生产中提供了多种高可用方案: k8s官方文档 本文安装的是1.28.0版本。 建议去认真阅读一下…

Linux常用命令----cp 命令

文章目录 1. 基本用法2. 保留文件属性3. 递归复制4. 仅复制更新的文件5. 交互式复制6. 创建符号链接而非复制7. 复制并备份目标文件8. 指定备份后缀9. 详细输出总结 Linux操作系统中,cp 命令是一个非常基础且强大的工具,用于复制文件或目录。本文将详细介…

[Java]JUC并发编程

JUC并发编程 一、什么是JUC 使用到 java.util 工具包、包、分类 二、线程和进程 进程:一个正在运行的程序,QQ.exe Music.exe 程序的集合; 一个进程往往可以包含多个线程,至少包含一个! Java默认有两个线程&#x…

动态规划学习——斐波那契数列

目录 最长的斐波那契数列子序列的长度 1.题目 2.题目接口 3.解题思路及其代码 最长的斐波那契数列子序列的长度 1.题目 如果序列x_1&#xff0c;X_2&#xff0c;...&#xff0c;x_n 满足下列条件&#xff0c;就说它是斐波那契式的: 1.n > 3 2.对于所有i2 <n&a…

Java面向对象(高级)-- 接口(interface)

文章目录 一、概念&#xff08;1&#xff09;引入&#xff08;2&#xff09;类比&#xff08;3&#xff09;举例1. 举例12. 举例23. 举例34. 举例4 &#xff08;4&#xff09; 定义格式及重点举例1. 接口的声明格式2. 接口的成员说明3. 接口内部结构的说明4. 举例4.1 举例1--接…

【算法挨揍日记】day33——1027. 最长等差数列、446. 等差数列划分 II - 子序列

1027. 最长等差数列 1027. 最长等差数列 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;返回 nums 中最长等差子序列的长度。 回想一下&#xff0c;nums 的子序列是一个列表 nums[i1], nums[i2], ..., nums[ik] &#xff0c;且 0 < i1 < i2 < ... < …

Go GORM简介

GORM&#xff08;Go Object-Relational Mapping&#xff09;是一个用于Go语言的ORM库&#xff0c;它提供了一种简单、优雅的方式来操作数据库。GORM支持多种数据库&#xff0c;包括MySQL、PostgreSQL、SQLite和SQL Server。以下是GORM的一些主要特性 全功能ORM&#xff1a;GORM…

MyBatis-plus-Generate 自动生成代码结构实践

一、新建一个springboot项目&#xff0c;并引入依赖 关注mybatis-plus-boot-starter <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding…