不同类型的开源许可证

不同类型的开源许可证

什么是开源许可证

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

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

不同的开源许可证: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多个许可证中的几个开源许可证。这仅用于讲解目的,我们可以自行研究以找出我们应该选择的最佳开源许可证。

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

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

相关文章

【unity实战】基于权重的随机事件(附项目源码)

文章目录 前言开始一、简单的使用二、完善各种事件1. 完善生成金币事件2. 完善生成敌人事件敌人3. 完善生成药水事件 最终效果参考源码完结 前言 随机功能和UnityEvent前面其实我们都已经做过了,但是随机UnityEvent事件要怎么使用呢?这里就来举一个例子…

由于找不到steam_api64.dll如何修复?steam_api64.dll丢失多种解决方法

steam_api64.dll文件介绍 steam_api64.dll是Steam平台的一个关键组件,主要用于支持Steam客户端和相关游戏的应用程序。这个文件缺失或损坏会导致Steam及相关游戏无法正常运行。它位于Steam安装目录的bin子文件夹中。 steam_api64.dll丢失的原因 系统误删&#xf…

爬虫代理技术与构建本地代理池的实践

爬虫中代理的使用: 什么是代理 代理服务器 代理服务器的作用 就是用来转发请求和响应 在爬虫中为何需要使用代理? 隐藏真实IP地址:当进行爬取时,爬虫程序会发送大量的请求到目标网站。如果每个请求都使用相同的IP地址&#xff…

修复 MyBatis 中空值引起的 SQL 语法错误

修复 MyBatis 中空值引起的 SQL 语法错误 背景 最近在查看别人的项目代码时&#xff0c;遇到了一个问题&#xff1a;数据库中的数据为空。在调试过程中&#xff0c;发现问题出现在调用 MyBatis 中的方法&#xff1a;listByIds(Collection<? extends Serializable> idL…

.net core 封装一个统一的返回结果

public class ApiResponse<T> { public bool Success { get; set; } public T? Data { get; set; } public string? Message { get; set; } public ApiResponse(bool success, T? data, string errorMessage "") { …

矩阵快速幂及应用实战[C/C++]

矩阵快速幂 矩阵快速幂可以用来优化递推问题&#xff0c;如状态机DP&#xff0c;需要一丢丢线性代数里面矩阵的概念&#xff0c;只需要知道简单的矩阵乘法&#xff0c;结合我们普通的二分快速幂就能很快的掌握矩阵快速幂。 问题引入 三步问题。有个小孩正在上楼梯&#xff0c;楼…

一文学会Aiohttp

一、什么是aiohttp库 aiohttp库官网&#xff1a;https://docs.aiohttp.org/en/stable/ aiohttp是一个Python的HTTP客户端/服务器框架&#xff0c;它基于asyncio库实现异步编程模型&#xff0c;可以支持高性能和高并发的HTTP通信。aiohttp用于编写异步的Web服务器、Web应用程序…

【Vulnhub 靶场】【Coffee Addicts: 1】【简单-中等】【20210520】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/coffee-addicts-1,699/ 靶场下载&#xff1a;https://download.vulnhub.com/coffeeaddicts/coffeeaddicts.ova 靶场难度&#xff1a;简单 - 中等 发布日期&#xff1a;2021年5月20日 文件大小&#xff1a;1.3 …

【数值计算方法(黄明游)】常微分方程初值问题的数值积分法:欧拉方法(向后Euler)【理论到程序】

文章目录 一、数值积分法1. 一般步骤2. 数值方法 二、欧拉方法&#xff08;Euler Method&#xff09;1. 向前欧拉法&#xff08;前向欧拉法&#xff09;2. 向后欧拉法&#xff08;后向欧拉法&#xff09;a. 基本理论b. 算法实现 常微分方程初值问题的数值积分法是一种通过数值方…

webpack如何处理文件、图片

webpack5之前是通过&#xff0c;file-loader、raw-loader、url-loader处理文件 webpack5是通过使用资源模块类型&#xff08;asset module type&#xff09;处理文件 资源模块类型(asset module type)&#xff0c;通过添加 4 种新的模块类型&#xff0c;来替换所有这些 loade…

Linux常用命令——rm 命令

文章目录 Linux系统中的rm命令是一个非常强大且危险的工具&#xff0c;用于删除文件和目录。由于其具有不可逆的特性&#xff0c;了解其参数和正确使用非常重要。 1. 基本用法 rm命令的基本格式是rm [选项] 文件或目录。不带任何选项时&#xff0c;rm命令仅删除文件。 示例&a…

python读取excel自动化生成sql建表语句和java实体类字段

1、首先准备一个excel文件&#xff1a; idtypenameidint学号namestring姓名ageint年龄sexstring性别weightdecimal(20,4)体重scoredecimal(20,4)分数 2、直接生成java字段和注释&#xff1a; import pandas as pddf pd.read_excel(test.xlsx, sheet_nameSheet1)for i in ran…

java 对象大小计算

说明&#xff1a; 对于64位机&#xff1a;一个对象由三部分组成 对象头(object header) mark word &#xff1a;64bitkclass pointer &#xff1a;32bit(默认使用指针压缩)&#xff0c;如果取消指针压缩( XX:-UseCompressedOops)&#xff0c;则占用64bit数组长度&#xff1a;数…

Zynq-Linux移植学习笔记之67- 国产ZYNQ上通过GPIO模拟MDC/MDIO协议

1、背景介绍 模块上有9个PHY&#xff0c;其中两个PHY通过ZYNQ PS端的MDIO总线连接&#xff0c;其余7个PHY单独通过GPIO进行控制&#xff0c;需要实现GPIO模拟MDC/MDIO协议。 2、vivado工程设计 vivado工程内为每个PHY建立两个GPIO IP核&#xff0c;分别用来代表MDC和MDIO&…

基于BP神经网络的手写体数字识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 filename dir(images\*.bmp); %图像文件格式 load BP.matfilename dir(test\*.bmp); …

PyQt基础_009_ 按钮类控件QSlider

基本功能 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *class SliderDemo(QWidget):def __init__(self, parentNone):super(SliderDemo, self).__init__(parent)self.setWindowTitle("QSlider 例子") self.resize…

Google play开发者账号付款资料暂停的原因及解决方案

相信大多数Google play开发者都收到过这封邮件 邮件内容的大致意思是“由于可疑的活动&#xff0c;我们暂停了你的付款资料。” “要恢复您的帐户&#xff0c;请转到您的帐户并执行所要求的操作。” 这是触发了谷歌的付款风控机制&#xff0c;根据开发者们的反馈&#xff0c;账…

滴滴打车崩了!全过程

滴滴发布致歉10元补偿券&#xff0c;文末可领取 。 事情发生于 2023年11月27日晚~28日中午&#xff0c;滴滴打车服务出现大面积故障&#xff0c;登上微博热搜。 许多用户在使用滴滴出行时遇到了无法叫车、订单异常等问题&#xff0c;导致大量用户滞留在外&#xff0c;出行受阻…

2023年11月编程语言排行榜——你的编程语言上榜了吗?

编程语言的流行度是一个热门的话题&#xff0c;不同的机构和平台有不同的评判标准和排名方法。本文将以 TIOBE 编程社区指数为例&#xff0c;介绍 2023 年 11 月的编程语言趋势榜单&#xff0c;分析各种编程语言的表现和原因&#xff0c;以及对未来的展望。 TIOBE 编程社区指数…

【小黑嵌入式系统第二课】嵌入式系统的概述(二)——外围设备、处理器、ARM、操作系统

上一课&#xff1a; 【小黑嵌入式系统第一课】嵌入式系统的概述&#xff08;一&#xff09;——概念、特点、发展、应用 下一课&#xff1a; 【小黑嵌入式系统第三课】嵌入式系统硬件平台&#xff08;一&#xff09;——概述、总线、存储设备&#xff08;RAM&ROM&FLASH…