在linux环境下学习的多了,这些开源协议也听的见的越来越多,感觉有必要仔细了解一下。

1. BSD

先说BSD是因为它的自由度相对来说是比较大的。BSD全称Berkeley Software Distribution license,以此协议代码为基础做二次开发时,只需满足以下三个条件:

a. 对本软件源代码的再传播,必须保留上述的版权宣告、此三条件表列,以及免责声明。

b. 对本软件二进制形式的再传播,必须连带以文件以及/或者其他附于散播包装中的媒介方式,重制上述之版权宣告、此三条件表列,以及免责声明。

c. 不能使用本软件的作者/机构名字和产品的名字进行推广。

可以看出以上三条都是针对BSD源码部分,解释参考http://www.openfoundry.org/tw/legal-column-list/524--bsd。BSD协议允许使用者修改和重新发布代码,也没有对商业软件的发布和销售进行限制,使用BSD软件做二次开发后,也可以选择不公开源码,成为封闭软件,因此许多公司选择开源软件时会选BSD软件。http://soundsoftware.ac.uk/open-source-software-licences-bsd-style

2. MIT协议

来源于麻省理工,它甚至更自由,只有一个要求:在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。

3. Apache协议

是由Apache软件基金会发布的自由软件许可证。条件如下:

1. 需要给使用代码的用户一份Apache Licence
2. 如果你修改了代码,需要在被修改的文件中说明。
3. 在延伸的代码中(修改和由源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。https://www.xuchao.org/docs/apache/license.html

4. GPL协议

全称为general public license。linux使用的就是GPL协议,不同于上面几个对商业友好的协议,GPL的精神是自由软件。它授予使用者运行、复制、修改、发布的权利和自由,并要求GPL程序的演绎软件也符合GPL规定。

也就是说使用GPL源码进行二次开发之后,新的软件发布时必须以GPL为许可证,即允许使用和修改。注意这里指的是发布时,如果你不发布或不公开,则不需要执行这个规定。

这里需要特别说下收费的权力,开源不等于免费。GPL软件在发布的时候必须公开源代码,但是这不代表不能商卖,只不过用户买了之后就有权利获得你的源代码;而用户得到源代码之后,按照GPL的规定他可以免费的再分发出去,所以靠卖GPL代码赚钱很难,比较多的是通过订阅增值服务的方式收费,如redhat。

再说说“传染性”:基于GPL作品得到的作品也必须使用GPL许可证,这就是感染性。这也是为什么现在GPL是最流行的许可协议,因为传染性在很大程度上保护了自由的权利。

一般认为,修改、包含、复制、静态/动态链接都是会被“传染”的。而不被传染的行为有:使用GPL作品的输出,及简单的调用或触发作品(例如通过使用fork或exec,或调用程序的入口main方法等)。

参考:https://www.zhihu.com/question/22703660和http://stackoverflow.com/questions/10130143/gpl-lgpl-and-static-linking

另外,在欧美GPL还是蛮具有法律效力的,而在中国,由于相关法规不是很明确,所以违反了似乎也不会怎么样,但是还是准守协议为好。

GPL,BSD,Apache,MIT开源许可协议的更多相关文章

  1. 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

    一张图看懂开源许可协议,开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL.BSD.MIT.Mozi ...

  2. License开源许可协议

    开源许可协议 License是软件的授权许可,表述了你获得代码后拥有的权利,可以对别人的作品进行何种操作,何种操作又是被禁止的. 开源许可证种类 Open Source Initiative http ...

  3. [转载]一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

    本文转载自:http://blog.csdn.net/testcs_dn/article/details/38496107 开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区 ...

  4. 【转】 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

    原文:http://blog.csdn.net/testcs_dn/article/details/38496107 ----------------------------------------- ...

  5. 关于常见的协议BSD,APACHE,MIT,GPL的理解

    其实BSD和APACHE和MIT协议类似,基本就是可以为所欲为,但是要尊重原来的作者. GPL协议是一个免费和开源的协议,只要用了GPL协议的类库源码等,也必须适应GPL协议. 意思就是把开源和免费进 ...

  6. 痞子衡嵌入式:开源软件协议(MIT/BSD/Apache/LGPL/MPL/GPL)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是关于开源软件协议基本知识. 牛顿曾说过:"如果我比别人看得更远,那是因为我站在巨人的肩上".在软件开发中如果说也存在巨 ...

  7. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)

    本篇博客比较了常见的5种开源协议的异同,大家在为自己的代码选择协议的时候可以参考.现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http ...

  8. apache基金会开源项目简介

    apache基金会开源项目简介   项目名称 描述 HTTP Server 互联网上首屈一指的HTTP服务器 Abdera Apache  Abdera项目的目标是建立一个功能完备,高效能的IETF ...

  9. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)(整理)

    BSD开源协议(original  BSD license.FreeBSD  license.Original  BSD license) BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可 ...

随机推荐

  1. 爬虫入门【11】Pyspider框架入门—使用HTML和CSS选择器下载小说

    开始之前 首先我们要安装好pyspider,可以参考上一篇文章. 从一个web页面抓取信息的过程包括: 1.找到页面上包含的URL信息,这个url包含我们想要的信息 2.通过HTTP来获取页面内容 3 ...

  2. Windows 磁盘分区

    在“我的电脑”右键,点击“管理”,打开计算机管理,然后如图操作

  3. 170118、快速失败Vs安全失败(Java迭代器附示例)

    简介: 当错误发生时,如果系统立即关闭,即是快速失败,系统不会继续运行.运行中发生错误,它会立即停止操作,错误也会立即暴露.而安全失败系统在错误发生时不会停止运行.它们隐蔽错误,继续运行,而不会暴露错 ...

  4. 基于minikube的kubernetes集群部署及Vitess最佳实践

    简介 minikube是一个可以很容易在本地运行Kubernetes集群的工具, minikube在电脑上的虚拟机内运行单节点Kubernetes集群,可以很方便的供Kubernetes日常开发使用: ...

  5. delphi,增删改查问题记录

    新增时获取新的主键方法 1.oracle :sys_guid()   写法: 2.sql:pGetGUID  写法: {**************************************** ...

  6. C# WinForm 中进行UrlEncode

    public static string ToUrlEncode(string strCode) { StringBuilder sb = new StringBuilder(); byte[] by ...

  7. window.onbeforeunload 埋点 页面停留时间

    window.onbeforeunload - Web API 接口 | MDN https://developer.mozilla.org/zh-CN/docs/Web/API/Window/onb ...

  8. ubuntu-16.04.2-server-amd64.iso

    w

  9. javascript数组中的方法

    数组中的方法 今天我们来说一下,对数组进行操作的几种方法: //添加 a=[];//空数组   a[0]="我是第一个";   a[2]="我是第三个";    ...

  10. MySQL给字段唯一索引的三种方法

    建表时添加 DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `stu_id` ) NOT NULL AUTO_INCREMENT, ` ...