各开源协议一览

在 GitHub 上,开源项目通常会使用一些常见的开源协议来定义项目的使用、修改和分发规则。以下是目前 GitHub 上最常见的几种开源协议及其差异和示例说明:


TL;DR

协议宽松程度是否强制开源专利保护适用场景
MIT最宽松希望代码被广泛使用
Apache 2.0宽松希望提供专利保护
GPL严格希望确保代码始终开源
LGPL较宽松部分是希望代码被更广泛集成
BSD宽松希望代码被广泛使用且简单
MPL 2.0中等部分是希望代码部分开源但允许混合

协议详解

1. MIT License

  • 特点
    • 非常宽松,几乎没有任何限制。
    • 允许用户自由使用、复制、修改、合并、发布、分发、再授权甚至用于商业用途。
    • 唯一要求是保留原始版权声明和许可声明。
  • 适用场景
    • 适合希望代码被广泛使用的开发者。
    • 示例:Vue.js 使用了 MIT License 。
  • 差异
    • 相较于其他协议(如 GPL),MIT 不强制要求衍生作品也必须开源。

2. Apache License 2.0

  • 特点
    • 提供了明确的专利授权条款,保护用户免受潜在的专利诉讼。
    • 允许用户自由使用、修改和分发代码,但需要保留版权声明和许可证文件。
    • 明确限制商标使用,不允许用原作者的商标进行宣传。
  • 适用场景
    • 适合希望保护知识产权并提供专利保障的项目。
    • 示例:Apache Kafka 使用了 Apache License 2.0 。
  • 差异
    • 比 MIT 更加详细,特别是关于专利和商标的规定。

3. GNU General Public License (GPL)

  • 特点
    • 强制性开源,任何基于 GPL 代码的衍生作品也必须以 GPL 协议发布。
    • 用户可以自由使用、修改和分发代码,但必须公开源码。
  • 适用场景
    • 适合希望确保代码始终开源的项目。
    • 示例:Linux Kernel 使用了 GPL 。
  • 差异
    • 相较于 MIT 和 Apache,GPL 对衍生作品有更强的约束力。

4. Lesser GNU General Public License (LGPL)

  • 特点
    • 是 GPL 的一个变种,允许将 LGPL 代码作为库链接到闭源项目中。
    • 衍生作品如果是独立模块,可以不公开源码;但如果修改了 LGPL 库本身,则必须公开修改后的代码。
  • 适用场景
    • 适合希望代码被更广泛地集成到商业项目中的库类项目。
    • 示例:GNU C Library (glibc) 使用了 LGPL 。
  • 差异
    • 比 GPL 更宽松,但仍要求对库本身的修改保持开源。

5. BSD License

  • 特点
    • 类似于 MIT,非常宽松。
    • 分为两种主要版本:2-Clause(简化版)和 3-Clause(禁止用项目名称做广告)。
    • 要求保留版权声明和许可证文件。
  • 适用场景
    • 适合希望代码被广泛使用且不介意闭源衍生作品的项目。
    • 示例:FreeBSD 使用了 BSD License 。
  • 差异
    • 相较于 MIT,3-Clause 版本增加了对广告的限制。

6. Mozilla Public License 2.0 (MPL 2.0)

  • 特点
    • 是 BSD 系协议和 GPL 系协议的折中。
    • 要求对 MPL 覆盖的代码部分保持开源,但允许与闭源代码混合。
    • 必须保留版权信息,并公开对覆盖代码的修改。
  • 适用场景
    • 适合希望代码部分开源但允许与其他闭源代码协作的项目。
    • 示例:Firefox 使用了 MPL 2.0 。
  • 差异
    • 比 GPL 更宽松,但比 MIT 和 BSD 更严格。

7. Creative Commons (CC)

  • 特点
    • 主要用于非代码内容(如文档、图片、音乐等)。
    • 提供多种版本,包括 CC0(完全放弃版权)、CC BY(署名即可使用)等。
  • 适用场景
    • 适合非软件项目或需要灵活授权的内容。
    • 示例:Wikipedia 的部分内容使用了 CC BY-SA 。
  • 差异
    • 不适用于传统意义上的代码项目。

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

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

相关文章

51c自动驾驶~合集17

我自己的原文哦~ https://blog.51cto.com/whaosoft/13793157 #汇聚感知、定位、规划控制的自动驾驶系统 自动驾驶技术在应用到车辆上之后可以通过提高吞吐量来缓解道路拥堵,通过消除人为错误来提高道路安全性,并减轻驾驶员的驾驶负担,从…

小程序开发指南

小程序开发指南 目录 1. 小程序开发概述 1.1 什么是小程序1.2 小程序的优势1.3 小程序的发展历程 2. 开发准备工作 2.1 选择开发平台2.2 开发环境搭建2.3 开发模式选择 3. 小程序开发流程 3.1 项目规划3.2 界面设计3.3 代码开发3.4 基本开发示例3.5 数据存储3.6 网络请求3.7 …

Day15:关于MySQL的编程技术——基础知识

前言:先创建一个练习的数据库和数据 1.创建数据库并创建数据表的基本结构 -- 创建练习数据库 CREATE DATABASE db_programming; USE db_programming;-- 创建员工表(包含各种数据类型) CREATE TABLE employees (emp_id INT PRIMARY KEY AUTO…

批处理脚本bat丨遍历一个包含项目名称的数组,并对每个文件中的项目执行 git pull 操作 (一键拉很多文件的代码)

文章目录 前言一、操作方式二、文件展示三、分析代码结构四、代码五、需要注意的潜在问题六、改进后的代码七、改进说明八、感谢 前言 由于之前git服务部署在本地服务器,处于代码安全角度考虑。领导让我将所有的项目代码手动物理备份一份并且发给他。 这种傻傻的操…

【C++】C与C++、C++内存空间、堆与栈

C嘎嘎嘎嘎嘎~ C与C的区别与联系 C内存空间 int global_var; // 未初始化全局变量,BSS段 const char* str "Hello"; // 字符串常量text段 in数据段void func() {static int static_var; // 未初始化的静态变量,数据段int local_var; …

舵机:机器人领域的“关节革命者”

机器人的技术,每一个细微的进步都可能引领一场行业变革。而在这场变革中,舵机作为机器人关节的核心部件,正悄然上演着一场革命性的应用风暴。从简单的关节运动到复杂的姿态控制,舵机以其卓越的性能和无限的可能,重新定…

微前端的不断探索之路—— qiankun 实战与思考!

全文目录: 开篇语📝 前言🛠️ 微前端是什么?为什么需要它?💡 先从“前端痛点”说起🧐 微前端的优势 🤹‍♀️ qiankun 简介与核心概念🌟 为什么选择 qiankun?…

拆解加密黑盒

在Web安全与数据爬取领域,JavaScript加密黑盒的逆向工程是核心技术之一。本文基于行业通用方法论与实战案例,提炼出一套标准化的五步逆向流程,涵盖目标定位、代码提取、逻辑分析、算法复现到自动化集成的全链路解决方案,帮助开发者…

IntelliJ IDEA 中安装和使用通义灵码 AI 编程助手教程

随着人工智能技术的发展,AI 编程助手逐渐成为提升开发效率的强大工具。通义灵码是阿里云推出的一款 AI 编程助手,它能够帮助开发者实现智能代码补全、代码解释、生成单元测试等功能,极大地提升了编程效率和代码质量。 IntelliJ IDEA 是一款广…

Redis 特性和应用场景

1. Redis特性 1)In-memory data structures Redis 在内存中存储数据,key 是 String, value 可以是 hash, list, set, sorted set, stream ... MySQL主要是通过 “表” 的方式来存储组织数据的 “关系型数据库” Redis主要是通过 “键值对”…

每天五分钟深度学习:非线性激活函数的导数

本文重点 本文探讨了神经网络中几种常见非线性激活函数(Sigmoid、Tanh、ReLU、Leaky ReLU、ELU、Softmax)的导数特性。通过对各激活函数导数的数学推导与实际应用分析,揭示了不同激活函数在梯度传播、收敛速度及模型表达能力方面的差异。研究发现,ReLU及其变体在计算效率与…

redis哨兵机制 和集群有什么区别:

主从: 包括一个master节点 和多个slave节点: master节点负责数据的读写,slave节点负责数据的读取,master节点收到数据变更,会同步到slave节点 去实现数据的同步。通过这样一个架构可以去实现redis的一个读写分离。提升…

关于读完《毛泽东选集》的一些思考迭代

看完毛选前四卷,从革命初期一直讲到抗战胜利,共75.8W字,花费67个小时读完。从1925年发表的“中国社会各阶级的分析”,跨越100年,通过67个小时向主席学习到: 实事求是 从实践中来再到实践中去 用辩证与发展…

MySQL——MVCC(多版本并发控制)

目录 1.MVCC多版本并发控制的一些基本概念 MVCC实现原理 记录中的隐藏字段 undo log undo log 版本链 ReadView 数据访问规则 具体实现逻辑 总结 1.MVCC多版本并发控制的一些基本概念 当前读:该取的是记录的最新版本,读取时还要保证其他并发事务…

【Linux篇】深入理解文件系统:从基础概念到 ext2 文件系统的应用与解析

文件系统的魔法:让计算机理解并存储你的数据 一. 文件系统1.1 块1.2 分区1.3 inode(索引节点) 二. ext2文件系统2.1 认识文件系统2.2 Block Group (块组)2.2.1 Block Group 的基本概念2.2.2 Block Group 的作用 2.3 块组内部结构2.3.1 超级块(Super Bloc…

3 VS Code 配置优化与实用插件推荐:settings.json 详解、CodeGeeX 智能编程助手及插件离线安装方法

1 优化 settings.json 文件 1.1 settings.json 简介 settings.json 是 VS Code 的核心配置文件,用于存储用户的个性化设置和偏好。通过该文件,用户可以自定义和覆盖 VS Code 的默认行为,包括但不限于以下方面: 编辑器外观&#…

【Java面试系列】Spring Cloud微服务架构中的分布式事务处理与Seata框架实现原理详解 - 3-5年Java开发必备知识

【Java面试系列】Spring Cloud微服务架构中的分布式事务处理与Seata框架实现原理详解 - 3-5年Java开发必备知识 1. 引言 在微服务架构中,分布式事务处理是一个复杂且常见的问题。随着业务规模的扩大,单体应用逐渐拆分为多个微服务,每个服务…

力扣面试150题--有效的数独

Day 19 题目描述 思路 其实还挺简单的&#xff0c;主要的难点在于如何判断每个小数独是否满足要求 详细见代码 class Solution {public boolean isValidSudoku(char[][] board) {HashSet<Character> set new HashSet<>();//处理行HashSet<Character> set1…

达梦数据库-学习-15-大内存SQL相关视图介绍

目录 一、环境信息 二、介绍 三、数据字典表 1、V$MEM_POOL 2、V$SQL_STAT 3、V$SQL_STAT_HISTORY 4、V$LARGE_MEM_SQLS 5、V$SYSTEM_LARGE_MEM_SQLS 四、总结 一、环境信息 名称值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系统CentOS Linux release 7.9.2009 (Co…

从0到1使用C++操作MSXML

1. 引言 MSXML&#xff08;Microsoft XML Core Services&#xff09;是微软提供的一套用于处理XML的COM组件库&#xff0c;广泛应用于Windows平台的XML解析、验证、转换等操作。本文将详细介绍如何从零开始&#xff0c;在C中使用MSXML解析和操作XML文件&#xff0c;包含完整的…