几种开源协议的区别(Apache、MIT、BSD、MPL、GPL、LGPL)

news2024/7/30 3:52:27

 作为一名软件开发人员,你一定也是经常接触到开源软件,但你真的就了解这些开源软件使用的开源许可协议吗?

        你不会真的认为,开源就是完全免费吧?那么让我们通过本文来寻找答案。


一、开源许可协议简述


        开源许可协议是指开源社区为了维护作者和贡献者的合法权利,保证软件不被一些商业机构或个人窃取,影响软件的发展而开发的协议。它的中文名:开源许可协议;外文名:open source license。

二、开源许可协议之间的区别与联系

        通过上图,可以很清晰的了解到6种常见的开源许可协议之间的区别与联系,主要围绕的就是几个核心问题:

  • 修改源代码后,是否允许闭源?
  • 每一个修改过后的文件,是否都必须放置版权说明?
  • 是否需要对每一个修改过的文件提供说明文档?
  • 新增代码是否需要使用同样的许可证?
  • 衍生软件的广告是否可以使用你的名字进行促销? 

 三、几种常见开源许可协议的主要内容


        说起各式各样的开源许可协议,我们不得不提起GNU,它的全称是“GNU's Not Unix!”(GNU并非Unix!)的首字母递归缩写。

        1985年Richard Stallman又创立了自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律以及财政支持。尽管GNU计划大部分时候是由个人自愿无偿贡献,但FSF有时还是会聘请程序员帮助编写。当GNU计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被Red Hat兼并的 Cygnus Solutions。

        正因为有了GNU计划的大力推广,后面的Linux才逐渐发展壮大,直至今日,它已经走到30个年头,在服务器领域可谓是一枝独秀。也正因为有了Linux的蓬勃发展,慢慢才看到了越来越多的开源软件走向大众视野,整个软件行业才走向了发展的快车道,今后也会是长盛不衰,勇往直前。下面着重说一下各大流行的开源许可协议的核心内容。

1、Apache开源许可协议


         Apache (Apache License) :Apache许可协议,一般常用是2.0版本,Apache 2.0许可证是ASF(Apache Software Foundation,Apache软件基金会)在2004年发布的,以帮助ASF实现其目标:“通过开源软件开发协作,提供可靠且长久不衰的软件产品”。ASF出品的软件一般都采用Apache 2.0许可证。当然,非ASF的项目也可以使用,Apache许可证设计出来是供所有人使用的。

它的核心内容如下:

  • 可以随便使用,不会因版权和专利找你麻烦!
  • 不能用我的商标!
  • 你分发本作品或衍生作品时,可以不再提供源码!
  • 你在分发时,必须做到:

        1)带上本许可证!

        2)保留本软件的所有版权、专利等说明!

        3)你改过的文件,你得说改了哪!

        4)NOTICE文件中的信息得保留!

        5)在遵循本许可证的条件下,你可以再许可!

        6)本作品就这样了,我不会负任何责任的!你想负责你可以负,但别拉上我!

2、MIT开源许可协议


        MIT (Massachusetts Institute of Technology):MIT许可协议之名源自麻省理工学院,又称“X许可协议”或“X11许可协议”。

        MIT内容与三条款BSD许可证(3-clause BSD license)内容颇为近似,但是赋予软件被授权人更大的权利与更少的限制。

它的核心内容是:

  • 被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。
  • 被授权人可根据程式的需要修改授权条款为适当的内容。
  • 在软件和软件的所有副本中都必须包含版权声明和许可声明。

        此授权条款并非属copyleft的自由软件授权条款,允许在自由/开放源码软件或非自由软件(proprietary software)所使用。此亦为MIT与BSD(The BSD license, 3-clause BSD license)本质上不同处。

        MIT条款可与其他授权条款并存。另外,MIT条款也是自由软件基金会(FSF)所认可的自由软件授权条款,与GPL相容。

        相对于BSD开源许可协议,MIT开源许可协议是当下流行的开源许可协议中【最为宽松】的许可协议。

3、BSD开源许可协议 

        BSD原先是用在加州大学柏克利分校发表的各个4.4BSD/4.4BSD-Lite版本上面(BSD是Berkly Software Distribution的简写)的,后来也就逐渐沿用下来。1979年加州大学伯克利分校发布了BSD Unix,被称为开放源代码的先驱,BSD许可证就是随着BSD Unix发展起来的。BSD许可证被Apache和BSD操作系统等开源软件所采纳。

        相较于GPL许可证和MPL许可证的严格性,BSD许可证就宽松许多了,一样是只需要附上许可证的原文,不过比较有趣的是,它还要求所有进一步开发者将自己的版权资料放上去,所以拿到以BSD许可证发行的软件可能会遇到一个小状况,就是这些版权资料许可证占的空间比程序还大。

它的核心内容是:

  • 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
  • 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
  • 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
  • 可以说BSD开源许可协议是当下流行的开源许可协议中【较为宽松】的许可协议。

4、MPL开源许可协议 


        MPL (Mozilla Public License):Mozilla公共许可协议。MPL是The Mozilla Public License的简写,是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对源代码的需求和他们利用源代码获得的利益。同著名的GPL许可证和BSD许可证相比,MPL在许多权利与义务的约定方面与它们相同(因为都是符合OSIA 认定的开源软件许可证)

它的核心内容是:

  •  MPL虽然要求对于经MPL许可证发布的源代码的修改也要以MPL许可证的方式再许可出来,以保证其他人可以在MPL的条款下共享源代码。但是,在MPL许可证中对“发布”的定义是“以源代码方式发布的文件”,这就意味着MPL允许一个企业在自己已有的源代码库上加一个接口,除了接口程序的源代码以MPL许可证的形式对外许可外,源代码库中的源代码就可以不用MPL许可证的方式强制对外许可。这些,就为借鉴别人的源代码用做自己商业软件开发的行为留了一个活口。
  • MPL许可证第三条第7款中允许被许可人将经过MPL许可证获得的源代码同自己其他类型的代码混合得到自己的软件程序。
  •  对软件专利的态度,MPL许可证不像GPL许可证那样明确表示反对软件专利,但是却明确要求源代码的提供者不能提供已经受专利保护的源代码(除非他本人是专利权人,并书面向公众免费许可这些源代码),也不能在将这些源代码以开放源代码许可证形式许可后再去申请与这些源代码有关的专利。
  • 对源代码的定义:而在MPL(1.1版本)许可证中,对源代码的定义是:“源代码指的是对作品进行修改最优先择取的形式,它包括:所有模块的所有源程序,加上有关的接口的定义,加上控制可执行作品的安装和编译的‘原本’(原文为‘Script’),或者不是与初始源代码显著不同的源代码就是被源代码贡献者选择的从公共领域可以得到的程序代码。”

  • MPL许可证第3条有专门的一款是关于对源代码修改进行描述的规定,就是要求所有再发布者都得有一个专门的文件就对源代码程序修改的时间和修改的方式有描述。

5、GPL开源许可协议 


        GPL (GNU General Public License) :GNU通用公共许可协议。GNU通用公共许可协议是一个被广泛使用的自由软件许可协议条款,GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利。

它的核心内容是:

  • 可自由复制:你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。
  • 可自由分发:在你的网站提供他人下载,拷贝到U盘送人。
  • 可用来盈利:可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由
  • 可自由修改:如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。

        需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。

6、LGPL开源许可协议


        LGPL (GNU Lesser General Public License) :GNU宽通用公共许可协议。GNU 还有另外一种协议,叫做 LGPL (Lesser General Public Licence),它对产品所保留的权利比 GPL 少,总的来说,LGPL 适合那些用于非 GPL 或非开源产品的开源类库或框架。因为 GPL 要求,使用了 GPL 代码的产品必须也使用 GPL 协议,开发者不允许将 GPL 代码用于商业产品。LGPL 绕过了这一限制。

LGPL是GPL的变种,也是GNU为了得到更多的甚至是商用软件开发商的支持而提出的。与GPL的最大不同是,它有以下几个核心内容:

  • 可以私有使用LGPL授权的自由软件;
  • 开发出来的新软件可以是私有的而不需要是自由软件;
  • 任何公司在使用自由软件之前应该保证在LGPL或其它GPL变种的授权下。

四、结尾


        通过上文,你肯定已经打破了开源就是免费的思想了吧?并且我们可以简单对上面6中常见开源许可协议在宽松到严谨的方向做个简单排序:MIT > BSD > Apache > LGPL > Mozalla (MPL) > GPL 

        另外,在今后使用/学习一些开源软件/框架的时候,需要了解一下它使用的是什么开源许可协议,如果你想基于这个开源软件/框架进行一些商业行为,请务必了解清楚该开源许可协议的核心内容,以免将来在版本问题上受到法律的制裁。

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

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

相关文章

CI/CD工具中的CI和CD的含义

CI/CD工具中的CI和CD的含义? CI/CD 是现代软件开发方法中广泛使用的一种方法。其中,CI 代表持续集成(Continuous Integration),CD 则有两层含义,一是持续交付(Continuous Delivery)…

Linux CentOS7 vim寄存器

计算机中通常所说的寄存器Register一般指的是CPU中的寄存器,用来暂存CPU处理所需要的指令、数据等。 vim中同样也有寄存器,使用的方式和CPU非常类似。 vim中的寄存器(register)作用和windows中的剪切板类似,不过vim中的寄存器不止一个&…

前后端协议后端统一返回格式Result

/*** 后端统一返回结果* param <T>*/ Data public class Result<T> implements Serializable {private Integer code; //编码&#xff1a;1成功&#xff0c;0和其它数字为失败private String msg; //错误信息private T data; //数据public static <T> Result…

STM32芯片为什么有那么多组VDD?

对于一般的IC元器件通常只有两个电源引脚&#xff0c;一个是Vcc或Vdd&#xff0c;和GND或Vss。学习过32单片机的小伙伴肯定都会有这个发现&#xff0c;32单片机有多组VDD&#xff0c;单片机的引脚资源那么珍贵&#xff0c;为什么要在这里浪费那么多引脚呢&#xff1f;还有就是引…

十三、Django之添加用户(原始方法实现)

修改urls.py path("user/add/", views.user_add),添加user_add.html {% extends layout.html %} {% block content %}<div class"container"><div class"panel panel-default"><div class"panel-heading"><h3 c…

c语言练习78:执⾏操作后的变量值

字符串函数汇总 1. strlen &#xff1a;计算字符串的⻓度。 2. strcpy &#xff1a;将⼀个字符串复制到另⼀个字符串中。 3. strcat &#xff1a;将⼀个字符串连接到另⼀个字符串的末尾。 4. strcmp &#xff1a;⽐较两个字符串是否相等。 5. strncmp &#xff1a;⽐较两个…

Electron.js入门-构建第一个聊天应用程序

什么是electron 电子是一个开源框架&#xff0c;用于使用web技术构建跨平台桌面应用程序&#xff1b;即&#xff1a; HTML、CSS和JavaScript&#xff1b;被集成为节点模块&#xff0c;我们可以为我们的应用程序使用节点的所有功能&#xff1b;组件&#xff0c;如数据库、Api休…

口袋参谋:深度解析淘人群画像的两种方法!

​一直以来&#xff0c;有不少人问我&#xff0c;关于流量的问题。如若店铺流量不精准会怎么样&#xff1f;这可想而知&#xff0c;不精准的流量会导致店铺销售下降&#xff0c;店铺宝贝的表现力差了&#xff0c;淘宝自然会缩减你的免费流量。 不少新手卖家在开店初期&#xff…

WebGL 响应上下文丢失解决方案

目录 响应上下文丢失 如何响应上下文丢失 上下文事件 示例程序&#xff08;RotatingTriangle_contextLost.js&#xff09; 响应上下文丢失 WebGL使用了计算机的图形硬件&#xff0c;而这部分资源是被操作系统管理&#xff0c;由包括浏览器在内的多个应用程序共享。在某些特…

BIT-5-操作符详解(C语言初阶学习)

1. 各种操作符的介绍。 2. 表达式求值 1. 操作符分类&#xff1a; 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 除了 % 操作符…

【实战】流动的箭头 —— 线性流动组件(repeating-linear-gradient,@keyFrames)

文章目录 一、引子二、组件思路三、效果图四、源代码src\components\flow-arrow\index.jssrc\components\flow-arrow\keyFrames.jssrc\components\flow-arrow\constant.js组件调用 五、拓展学习1.repeating-linear-gradient2.animation3.keyFrames 组件源码获取&#xff1a;⭐️…

docker 安装 logstash

文章目录 Logstash基本语法组成什么是Logstash配置文件&#xff1a;拉去镜像启动镜像 Logstash输入插件&#xff08;input&#xff09;1、标准输入(Stdin)2、读取文件(File) Logstash基本语法组成 什么是Logstash logstash是一个数据抽取工具&#xff0c;将数据从一个地方转移…

Dubbo3应用开发—协议(Dubbo协议、REST协议 、gRPC协议、Triple协议)

协议 协议简介 什么是协议 Client(Consumer端)与Server&#xff08;Provider端&#xff09;在传输数据时双方的约定。 Dubbo3中常见的协议 1.dubbo协议[前面文章中使用的都是dubbo协议] 2.rest协议 3.triple协议 4.grpc协议 5.thirft协议 6.webservice协议 7.rocketmq协议 …

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测 目录 回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测预测效果基本介绍模型描述程序设计预测效果 <

【Unet系列】

https://tianfeng.space/1947.html 前言概念 图像分割 分割任务就是在原始图像中逐像素的找到你需要的家伙! 语义分割 就是把每个像素都打上标签&#xff08;这个像素点是人&#xff0c;树&#xff0c;背景等&#xff09; &#xff08;语义分割只区分类别&#xff0c;不区…

Android Studio编写xml布局不提示控件的部分属性问题的解决

最近突然发现Android Studio编写xml&#xff0c;发现有一部分控件的属性没有了代码提示&#xff0c;主要体现为id,margin等属性不再有代码提示&#xff0c;如下图。 但是手动输入仍然有效。然后删掉Android Sdk重新回来还是发现有问题&#xff0c;导一个之前的旧项目进来&#…

Mysql技术文档--慢mysql的优化--工作流--按步排查

这里是用来发现慢sql的一个好方法 --by.阿丹 Prometheus-监控Mysql进阶用法(1)&#xff08;安装配置&#xff09;_一单成的博客-CSDN博客 阿丹&#xff1a; 知道了慢sql的语句那么就开始按照优化步骤对sql进行排查和优化。 1、阅读sql逻辑 首先观察sql语句的书写&#xff0…

智慧邮政:浅述视频监控与AI智能分析技术助力邮政物流智能监管

随着电子商务的蓬勃发展&#xff0c;我国的快递业务量也随之增长&#xff0c;邮政快递业的规模也在不断扩大。快递业务的迅猛发展促进了快递网点数量的爆发式增长&#xff0c;同时也带来了成本投入增加、服务质量下降等各种管理问题。快递企业每年因快递损毁、丢件等事件造成的…

棉花叶病害数据集

Bacterial Blight&#xff08;细菌性枯萎病&#xff09;&#xff1a;细菌性枯萎病是由细菌引起的棉花疾病&#xff0c;主要受害部位是棉花的叶子和茎。这种病害可以导致叶片枯萎、变色和腐烂&#xff0c;对棉花产量产生不利影响。 Curl Virus&#xff08;卷叶病毒&#xff09;…

对比表:阿里云轻量应用服务器和服务器性能差异

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;轻量和ECS优缺点对比&#xff0c;云服务器ECS是明星级云产品&#xff0c;适合企业专业级的使用场景&#xff0c;轻量应用服务器是在ECS的基础上推出的轻量级云服务器&#xff0c;适合个人开发者单机应用访问量不高的网站…