不同类型的开源许可证

不同类型的开源许可证

什么是开源许可证

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

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

不同的开源许可证: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,一经查实,立即删除!

相关文章

gcp, loki, honeybadger 查看日志 语句

gcp, loki, honeybadger 查看日志 语句 GCP resource.type“cloudsql_database” AND logName:“projects/ebay-mag/logs/cloudsql.googleapis.com%2Fpostgres.log” AND ( textPayload:“[2823409]”) log_name“projects/ebay-mag/logs/cloudsql.googleapis.com%2Fpostgres…

代码随想录算法训练营第四十九天 | 121. 买卖股票的最佳时机,122.买卖股票的最佳时机II

目录 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 121. 买卖股票的最佳时机 题目链接:121. 买卖股票的最佳时机 比较好想到的是贪心算法,贪心选择价格更低的日子买入,价格更高的日子卖出。 class Solution { public:int maxProfit(vec…

ROS命令行工具

1、roscore 在使用ROS之前,首先要启动roscore进程。当我们在终端中运行这个命令时,系统就会启动ROS Master、参数服务器和日志节点。在这之后,就可以运行任何其他的ROS程序/节点了。所以可以在一个终端窗口运行roscore指令&#…

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

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

【Linux驱动开发】编译Android12源码+

编译Android12源码 1. 简单描述2. 准备资料3. 编译Android12 1. 简单描述 基于讯为电子rk3568教程 2. 准备资料 rk_android12.0_sdk_20220720.tar.gz 3. 编译Android12 解压 tar -vxf rk_android12.0_sdk_20220720.tar.gz设置屏幕配置 rk_android12.0_sdk/kernel-4.19/ar…

关于src别名的配置之tsconfig.json配置

tsconfig.json {"compilerOptions": {"baseUrl": "./", // 解析非相对模块的基地址,默认是当前目录"paths": { //路径映射,相对于baseUrl"/*": ["src/*"] }} } ① "baseUrl": &…

力扣 226.反转二叉树

目录 1.解题思路2.代码实现 1.解题思路 该题思路很简单,就是利用递归,将每次的root结点的左右树相互交换即可,最后再返回root结点. 2.代码实现 struct TreeNode* invertTree(struct TreeNode* root) { if(rootNULL)return NULL;struct Tree…

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

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

专攻C++真题合集(1)

C语言作为一门广泛使用的编程语言,已经成为了许多IT领域从业者的必备技能之一。为了帮助大家更好地掌握C语言,本文将为大家提供一些专门的C真题。 1. 指针 题目一:请编写一个函数,函数名为swap,交换两个整数型变量的…

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

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

【C++】POCO学习总结(七):进程、管道、进程间同步、共享内存

【C】郭老二博文之:C目录 1、Poco::Process 进程 1.1 说明 Poco::Process的功能: 获取有关当前进程的一些信息开始一个新的进程终止另一个进程 1.2 用法 头文件:#include “Poco/Process.h” Poco::Process中的所有方法都是静态的。 常…

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

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

[cmake] --- find_package

1 find_package的作用 find_package是CMake中用于查找并加载外部库的指令。它可以根据指定的参数在系统或用户指定的路径中查找库文件&#xff0c;并生成相应的变量供后续使用。 2 find_package基本语法 find_package(<PackageName> [version] [EXACT] [QUIET] [MODUL…

医学机器学习数据集介绍与使用 ABIDE Autism Brain Imaging Data Exchange I

ABIDE I 简介 自闭症脑成像数据交换I&#xff08;ABIDE I&#xff09;代表了第一个ABIDE倡议。作为基层工作&#xff0c;ABIDE I涉及17个国际站点&#xff0c;共享以前收集的静息态功能磁共振成像&#xff08;R-fMRI&#xff09;、解剖和表型数据集&#xff0c;这些数据集可供…

.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;楼…

选择三个机器学习算法,代码实现 ,并选择一个数据集进行性能分析

1. 线性回归算法 线性回归是一种用于预测连续数值的监督学习算法。以下是使用Python和scikit-learn库实现线性回归的示例代码&#xff1a; import numpy as np from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from…

Linux(openssl):X509_verify通过ca证书的public key验证证书的签名

/docs/man3.0/man3/X509_verify.html (openssl.org) 提供了方法用于通过ca证书的public key验证证书的签名 //verify_cert.hpp #include <string> #include <memory> #include <filesystem> #include <openssl/pem.h>using namespace std; namespace …

一文学会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 …