GPL,BSD,Apache,MIT开源许可协议
在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开源许可协议的更多相关文章
- 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
一张图看懂开源许可协议,开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL.BSD.MIT.Mozi ...
- License开源许可协议
开源许可协议 License是软件的授权许可,表述了你获得代码后拥有的权利,可以对别人的作品进行何种操作,何种操作又是被禁止的. 开源许可证种类 Open Source Initiative http ...
- [转载]一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
本文转载自:http://blog.csdn.net/testcs_dn/article/details/38496107 开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区 ...
- 【转】 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
原文:http://blog.csdn.net/testcs_dn/article/details/38496107 ----------------------------------------- ...
- 关于常见的协议BSD,APACHE,MIT,GPL的理解
其实BSD和APACHE和MIT协议类似,基本就是可以为所欲为,但是要尊重原来的作者. GPL协议是一个免费和开源的协议,只要用了GPL协议的类库源码等,也必须适应GPL协议. 意思就是把开源和免费进 ...
- 痞子衡嵌入式:开源软件协议(MIT/BSD/Apache/LGPL/MPL/GPL)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是关于开源软件协议基本知识. 牛顿曾说过:"如果我比别人看得更远,那是因为我站在巨人的肩上".在软件开发中如果说也存在巨 ...
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
本篇博客比较了常见的5种开源协议的异同,大家在为自己的代码选择协议的时候可以参考.现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http ...
- apache基金会开源项目简介
apache基金会开源项目简介 项目名称 描述 HTTP Server 互联网上首屈一指的HTTP服务器 Abdera Apache Abdera项目的目标是建立一个功能完备,高效能的IETF ...
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)(整理)
BSD开源协议(original BSD license.FreeBSD license.Original BSD license) BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可 ...
随机推荐
- Minecraft Forge编程入门一 “环境搭建”
什么是Forge Minecraft Forge is a Minecraft application programming interface (API) which allows almost ...
- Python mock 的使用
使用 mock 对象替换系统的一部分并且能获取它们的使用情况. 具体的说,你可以获取方法/属性的使用情况以及它们的调用参数.也可以指定返回值和设置属性. 思路是将对象设置为 mock 对象,然后根据需 ...
- AVCaptureInput和AVCaptureOutput子类
1.AVCaptureInput AVCaptureDeviceInput:用于从AVCaptureDevice对象捕获数据. AVCaptureScreenInput:从macOS屏幕上录制的一种捕 ...
- 使用ADO如何获得SQLSERVER 2K的数据库名的列表
打开数据库连接_ConnectionPtr m_pConn;_RecordsetPtr m_pRs;m_pConn.CreateInstance(__uuidof(Connection));m_pRs ...
- javascript教程2:---DOM操作
1.DOM 简介 当页面加载时,浏览器会创建页面的文档对象模型(Document Object Model).文档对象模型定义访问和处理 HTML 文档的标准方法.DOM 将 HTML 文档呈现为带有 ...
- 使用.gitignore忽略文件
单个项目配置 在.git文件夹同目录下打开git bash,执行命令: touch .gitignore 生成“.gitignore”文件. 在”.gitignore” 文件里输入你要忽略的文件夹及其 ...
- tensorflow 中 softmax_cross_entropy_with_logits 与 sparse_softmax_cross_entropy_with_logits 的区别
http://stackoverflow.com/questions/37312421/tensorflow-whats-the-difference-between-sparse-softmax-c ...
- xcode中全文查询某个中文字
查询所有中文 [^"]*[\u4E00-\u9FA5]+[^"\n]*? 查询某个中文字“中”字 [^"]*[\u4e2d]+[^"\n]*? 中文字转成uni ...
- HTTP协议简要介绍
1. 网络基础 TCP/IP 通常使用的网络是在TCP/IP协议簇基础上运作的. HTTP属于它内部的一个子集. TCP/IP分为4个层次, 应用层, 传输层, 网络层, 链路层. (Applicat ...
- 批量编译目录下文件的Makefile
1.多C文件生成各自可执行文件的Makefile如果一个目录下有很多C文件,且每个C文件都能生成一个独立的可执行文件,那么想全编译这些C文件并生成各作的可执行文件,在该目录下编写一个Makefile文 ...