0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【RT-Thread学习笔记】常见开源许可协议的区别与联系

嵌入式物联网开发 来源:嵌入式物联网开发 作者:嵌入式物联网开发 2022-07-30 11:58 次阅读

作为一个软件开发人员,你一定也是天天接触一些开源软件,比如一些开源的软件框架,比如开源的操作系统。这里大名鼎鼎就是Linux操作系统了,在服务器领域和嵌入式开发,它决定是大神中的大神级别的存在。

那么,就算我们学会了这么多的开源软件,我们真的就了解这些开源软件使用的【开源许可协议】吗?这年代,不会还真有人理解成:【开源就是免费】吧?

通过阅读本文,你讲会了解到以下几部分内容:

  • 开源许可协议是什么及它的来源
  • 开源许可协议之间的区别与联系
  • 几种常见开源许可协议的主要内容
  • 学习开源许可协议的意义

一、开源许可协议是什么及它的来源

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

开源许可协议是怎么来的呢?

自由软件/开源软件是自由的,源代码开放的,我们可自由下载安装和使用。

人们不太容易区分一个软件是否真正开源的根本原因,在于开源研究院认可的许可有60多种。但在这60多种许可中,有一个许可明显主宰着开源世界。迪博纳说:“GPL(General Public License,通用性公开许可协议)是当今开源世界中最重要的许可。”根据迪博纳引述的Google所进行的研究,基于GPL的开源代码在所有开源软件中占45%---50%。

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

为了能够让大家更加直观地了解到,各种开源许可协议之间的区别与联系,我参考了了一些资料,重新画了这一张图,供大家参考。下面的内容,我将会围绕这张图来展开。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

​编辑这张就很清晰地描述了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)内容颇为近似,但是赋予软件被授权人更大的权利与更少的限制。

它的核心内容是:

1)被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。

2)被授权人可根据程式的需要修改授权条款为适当的内容。

3)在软件和软件的所有副本中都必须包含版权声明和许可声明。

此授权条款并非属copyleft的自由软件授权条款,允许在自由/开放源码软件或非自由软件(proprietary software)所使用。

此亦为MIT与BSD(The BSD license, 3-clause BSD license)本质上不同处。

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

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

3、BSD开源许可协议

BSD (Berkeley Software Distribution) : 伯克利软件分发许可协议。

BSD开源协议是一个给予使用者很大自由的协议。基本上使用者可以"为所欲为",可以自由的使用修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

但"为所欲为"的前提是当你发布使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足一些条件。

它的核心内容是:

1)如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。

2)如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。

3)不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

可以说BSD开源许可协议是当下流行的开源许可协议中【较为宽松】的许可协议。

4、MPL开源许可协议

MPL (Mozilla Public License):Mozilla公共许可协议。

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

它的核心内容是:

1)允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。

2)这种授权维护了商业软件的利益,它要求基于这种软件的修改无偿贡献版权给该软件。这样,围绕该软件的所有代码得版权都集中在发起开发人得手中。

3)但MPL是允许修改,无偿使用的。

4)MPL软件对链接没有要求。(要求假如你修改了一个基于MPL协议的源代码,则必须列入或公开你所做的修改,假如其他源代码不是基于MPL则不需要公开其源代码)

5、GPL开源许可协议

GPL (GNU General Public License) :GNU通用公共许可协议。

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

它的核心内容是:

1)可自由复制:你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。

2)可自由分发:在你的网站提供他人下载,拷贝到U盘送人。

3)可用来盈利:你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。

4)可自由修改:如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 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的最大不同是,它有以下几个核心内容:

1)可以私有使用LGPL授权的自由软件;

2)开发出来的新软件可以是私有的而不需要是自由软件;

3)任何公司在使用自由软件之前应该保证在LGPL或其它GPL变种的授权下。

四、学习开源许可协议的意义

通过对上面几种常见的开源许可协议的学习,至少我们肯定已经打破了【开源就是免费】的固化思想,也了解到了【开源并不是简简单单把源代码公开而已】。

从上面的分析,我们可以简单对上面6中常见开源许可协议在宽松到严谨的方向做个简单排序:

MIT > BSD > Apache > LGPL > Mozalla (MPL) > GPL

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

好了,本期关于开源许可协议的介绍就到这里了,感兴趣或者有疑问的,欢迎留言评论。谢谢大家。


参考文章:

百度百科开源许可协议

几种常见的许可协议

逐句深扒 Apache 许可协议原文,一文看懂!

详细介绍 MPL (Mozilla Public License) 协议

几种开源协议的比较

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    2985

    浏览量

    41716
  • 许可协议
    +关注

    关注

    0

    文章

    4

    浏览量

    5769
  • RT-Thread
    +关注

    关注

    31

    文章

    1148

    浏览量

    38865
收藏 人收藏

    评论

    相关推荐

    RT-Thread学习笔记】使用scons命令生成静态库

    RT-Thread学习笔记】如何使用scons 命令中buildlib的生成静态库?
    的头像 发表于 07-27 09:13 4750次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】使用scons命令生成静态库

    RT-Thread学习笔记】ARM汇编基础的三大块知识

    RT-Thread学习笔记】ARM汇编基础的三大块知识
    的头像 发表于 07-30 10:59 1603次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】ARM汇编基础的三大块知识

    RT-Thread学习笔记开源许可协议的核心(思维导图)

    开源许可协议常见开源许可协议的核心内容(思维导图
    的头像 发表于 07-30 12:02 1582次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】<b class='flag-5'>开源</b><b class='flag-5'>许可</b><b class='flag-5'>协议</b>的核心(思维导图)

    RT-Thread学习笔记】一种C语言宏定义的写法

    RT-Thread学习笔记】一种C语言宏定义的写法
    的头像 发表于 07-30 13:41 1935次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】一种C语言宏定义的写法

    RT-Thread Nano入门学习笔记

    RT-Thread Nano入门学习笔记
    发表于 11-26 12:36 20次下载
    <b class='flag-5'>RT-Thread</b> Nano入门<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    RT-Thread 内核学习笔记 - 理解defunct僵尸线程

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:19 8次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 理解defunct僵尸线程

    RT-Thread 内核学习笔记 - 设备模型rt_device的理解

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:19 8次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 设备模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 内核学习笔记 - 内核对象链表结构深入理解

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:23 6次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 内核对象链表结构深入理解

    RT-Thread 内核学习笔记 - 内核对象初始化链表组织方式

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:24 3次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 内核对象初始化链表组织方式

    RT-Thread 内核学习笔记 - 内核对象操作API

    RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记
    发表于 01-25 18:26 7次下载
    <b class='flag-5'>RT-Thread</b> 内核<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> - 内核对象操作API

    RT-Thread学习笔记 RT-Thread的架构概述

    RT-Thread 简介 作为一名 RTOS 的初学者,也许你对 RT-Thread 还比较陌生。然而,随着你的深入接触,你会逐渐发现 RT-Thread 的魅力和它相较于其他同类型 RTOS
    的头像 发表于 07-09 11:27 3989次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b> <b class='flag-5'>RT-Thread</b>的架构概述

    RT-Thread学习笔记】Makefile的FORCE

    RT-Thread学习笔记】十分钟学会Makefile的FORCE
    的头像 发表于 07-30 13:55 1648次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】Makefile的FORCE

    RT-Thread学习笔记】如何抓取终端的网络报文

    RT-Thread学习笔记】如何抓取终端的网络报文?
    的头像 发表于 07-30 13:57 2150次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】如何抓取终端的网络报文

    RT-Thread学习笔记】用memwatch排除内存泄露

    RT-Thread学习笔记】使用memwatch排除内存泄露
    的头像 发表于 07-30 14:01 1725次阅读
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】用memwatch排除内存泄露

    基于RT-Thread Studio学习

    前期准备:从官网下载 RT-Thread Studio,弄个账号登陆,开启rt-thread学习之旅。
    的头像 发表于 05-15 11:00 2576次阅读
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>学习</b>