http://www.cnblogs.com/mailingfeng/archive/2012/02/02/2335770.html
开源项目的各种协议简单介绍
很多企业在进行开发的时候,或多或少都会使用到开源项目。
这时候就要考虑到开源项目所执行的协议了。
1. 允许商用、闭源发布的协议:BSD 、Apache 、 MIT 协议 、 LGPL(更宽松的GPL)
1.1 BSD 协议
BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:
- 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
- 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
- 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销 售,因此是对商业集成很友好的协议。很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者 二次开发。
1.2 Apache协议
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:
- 需要给代码的用户一份Apache Licence
- 如果你修改了代码,需要在被修改的文件中说明。
- 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
- 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
英文原文:http://www.apache.org/licenses/LICENSE-2.0.html
1.3 MIT协议
MIT许可证之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称「X条款」(X License)或「X11条款」(X11 License)
MIT内容与三条款BSD许可证(3-clause BSD license)内容颇为近似,但是赋予软体被授权人更大的权利与更少的限制。
被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软体及软体的副本。
被授权人可根据程式的需要修改授权条款为适当的内容。
在软件和软件的所有副本中都必须包含版权声明和许可声明。
此授权条款并非属copyleft的自由软体授权条款,允许在自由/开放源码软体或非自由软体(proprietary software)所使用。
此亦为MIT与BSD(The BSD license, 3-clause BSD license)本质上不同处。
MIT条款可与其他授权条款并存。另外,MIT条款也是自由软体基金会(FSF)所认可的自由软体授权条款,与GPL相容。
协议英文原文:http://www.opensource.org/licenses/mit-license.php
1.4 LGPL协议
LGPL最初是Library GPL的缩写,后来改称作Lesser GPL,即为更宽松的GPL。
当一个自由软件使用GPL声明时,该软件的使用者有权重新发布、修改该软件,并得到该软件的源代码;但只要使用者在其程序中使用了该自由软件,或者是使用修改后的软件,那么使用者的程序也必须公布其源代码,同时允许别人发布、修改。也就是说,使用GPL声明下的的自由软件开发出来的新软件也一定是自由软件。
LGPL是GPL的变种,也是GNU为了得到更多的甚至是商用软件开发商的支持而提出的。与 GPL的最大不同是,可以私有使用LGPL授权的自由软件,开发出来的新软件可以是私有的而不需要是自由软件。所以任何公司在使用自由软件之前应该保证在 LGPL或其它GPL变种的授权下。
2. 允许商用、半闭源的协议 : MPL协议 - 使自己的代码和开源项目代码混合,只公开与开源项目代码交互部分的接口源代码,从而得到半闭源商用项目的发布。
MPL是The Mozilla Public License的简写,是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对 源代码的需求和他们利用源代码获得的利益。同著名的GPL许可证和BSD许可证相比,MPL在许多权利与义务的约定方面与它们相同(因为都是符合OSIA 认定的开源软件许可证)。但是,相比而言MPL还有以下几个显著的不同之处:
◆ MPL虽然要求对于经MPL许可证发布的源代码的修改也要以MPL许可证的方式再许可出来,以保证其他人可以在MPL的条款下共享源代码。但是,在MPL 许可证中对“发布”的定义是“以源代码方式发布的文件”,这就意味着MPL允许一个企业在自己已有的源代码库上加一个接口,除了接口程序的源代码以MPL 许可证的形式对外许可外,源代码库中的源代码就可以不用MPL许可证的方式强制对外许可。这些,就为借鉴别人的源代码用做自己商业软件开发的行为留了一个 豁口。
◆ MPL许可证第三条第7款中允许被许可人将经过MPL许可证获得的源代码同自己其他类型的代码混合得到自己的软件程序。
◆ 对软件专利的态度,MPL许可证不像GPL许可证那样明确表示反对软件专利,但是却明确要求源代码的提供者不能提供已经受专利保护的源代码(除非他本人是 专利权人,并书面向公众免费许可这些源代码),也不能在将这些源代码以开放源代码许可证形式许可后再去申请与这些源代码有关的专利。
◆ 对源代码的定义
而在MPL(1.1版本)许可证中,对源代码的定义是:“源代码指的是对作品进行修改最优先择 取的形式,它包括:所有模块的所有源程序,加上有关的接口的定义,加上控制可执行作品的安装和编译的‘原本’(原文为‘Script’),或者不是与初始 源代码显著不同的源代码就是被源代码贡献者选择的从公共领域可以得到的程序代码。”
◆ MPL许可证第3条有专门的一款是关于对源代码修改进行描述的规定,就是要求所有再发布者都得有一个专门的文件就对源代码程序修改的时间和修改的方式有描述。英文原文:http://www.mozilla.org/MPL/MPL-1.1.html
3. 允许商用、不可闭源(需开源)的协议 : GPL 、 AGPL 协议
3.1 GPL 协议 (用于软件产品)
在自由软件所使用的各种许可证之中,最为人们注意的也许是通用性公开许可证(General Public License,简称GPL)。
GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。
GPL还规定:只要这种修改文本在整体上或者其某个部分来源于遵循GPL的程序,该修改文本的 整体就必须按照GPL流通,不仅该修改文本的源码必须向社会公开,而且对于这种修改文本的流通不准许附加修改者自己作出的限制。因此,一项遵循GPL流通 的程序不能同非自由的软件合并。GPL所表达的这种流通规则称为copyleft,表示与copyright(版权)的概念“相左”。GPL协议最主要的几个原则:
1、确保软件自始至终都以开放源代码形式发布,保护开发成果不被窃取用作商业发售。任何一套软 件,只要其中使用了受 GPL 协议保护的第三方软件的源程序,并向非开发人员发布时,软件本身也就自动成为受 GPL 保护并且约束的实体。也就是说,此时它必须开放源代码。
2、GPL 大致就是一个左侧版权(Copyleft,或译为“反版权”、“版权属左”、“版权所无”、“版责”等)的体现。你可以去掉所有原作的版权 信息,只要你保持开源,并且随源代码、二进制版附上 GPL 的许可证就行,让后人可以很明确地得知此软件的授权信息。GPL 精髓就是,只要使软件在完整开源 的情况下,尽可能使使用者得到自由发挥的空间,使软件得到更快更好的发展。
3、无论软件以何种形式发布,都必须同时附上源代码。例如在 Web 上提供下载,就必须在二进制版本(如果有的话)下载的同一个页面,清楚地提供源代码下载的链接。如果以光盘形式发布,就必须同时附上源文件的光盘。
4、开发或维护遵循 GPL 协议开发的软件的公司或个人,可以对使用者收取一定的服务费用。但还是一句老话——必须无偿提供软件的完整源代码,不得将源代码与服务做捆绑或任何变相捆绑销售。
3.2 AGPL协议 (常用于函数库或者工具包)
View Code
相关推荐
7. **社区资源**:如果开源项目活跃,还可能包含论坛链接、问题追踪器等社区资源,以便开发者提问、交流和解决问题。 使用开源的CANOpen协议,开发者可以自由地实现CANOpen节点,不受商业授权的限制。但需要注意的...
标题“流行的c++语言开源项目”表明了本文档将聚焦于目前在开源领域中较受欢迎的C++项目。这些项目通常具有一定的影响力,被广大开发者所关注,并有可能成为其他开发者学习和借鉴的对象。由于C++语言在性能和控制上...
SIP作为一种更简单、更灵活的协议,相比H.323具有诸多优势,这也促进了众多开源SIP协议栈的诞生和发展。本文将详细介绍并对比最具代表性的五种开源SIP协议栈:OPAL、VOCAL、sipX、ReSIProcate和oSIP。 #### OPAL ...
【TCP/IP协议栈详解】 TCP/IP协议栈是互联网通信的核心,负责将数据打包并发送到目的地,同时处理接收到的数据。本文将分析五个开源的TCP/IP协议栈:...每个协议栈都有其适用的场景,选择时需根据项目需求进行权衡。
【标题】"donkeysharp-gocho.zip"是一个开源项目,主要关注的是本地网络中的文件分享应用Gocho。这个项目利用了节点自动发现技术,使得在局域网内的设备能够轻松找到并共享文件。 【描述】Gocho是一款轻量级的本地...
选择合适的开源协议对于开源项目的长期发展至关重要。开发者或企业在选择开源协议时,应考虑项目的性质、目标用户群以及未来的发展方向等因素。例如,对于希望代码被广泛使用的项目,MIT或BSD协议可能是较好的选择;...
1. **开源软件**: 开源项目意味着源代码是公开的,允许用户查看、使用、修改和分发代码,遵循特定的开源许可协议,如MIT、Apache或GPL等。这鼓励了社区协作和代码共享,有助于项目的持续改进和优化。 2. **Godb**: ...
【开源项目-cs8425-NetTop.zip】是一个包含源代码的压缩包,它提供的工具名为"NetTop",这是一个简单的命令行带宽监控工具。NetTop的设计旨在为用户提供实时的网络流量监控,帮助用户了解系统网络带宽的使用情况。在...
10. **许可证和开源协议**:开源项目通常会遵循一定的许可证,比如MIT、Apache 2.0或GPL等。这些许可证规定了其他人如何使用、修改和分发代码的规则,保障了知识产权的同时鼓励代码共享和改进。 通过学习和理解这个...
**开源项目-pions-webrtc.zip** 该项目名为"pions-webrtc", 是一个基于Go语言实现的WebRTC(Web Real-Time Communication)开源库。WebRTC是一种允许网页浏览器进行实时通信(RTC)的技术,广泛应用于视频会议、...
开源项目“Maxpert-Raspchat”是一个基于Node.js重构的聊天应用,原来使用Go语言开发。这个项目展示了如何从Go语言迁移到Node.js这一流行的JavaScript运行时环境,以实现更高效、更灵活的Web应用程序开发。 Node.js...
开源项目HslCommunication 7.0,作为一款免费的PLC通信工具,为开发者提供了便捷的C#语言接口,使得与PLC设备的交互变得更加简单。本文将深入探讨HslCommunication 7.0的核心特性、应用场景以及如何利用其进行PLC...
《IPISP:程序化解析IP的ASN/ISP/范围》 ...通过参与这个开源项目,你可以深入学习网络协议、数据查询技术,同时也能提升自己的编程和协作能力。在互联网世界里,这样的工具无疑为我们的工作带来了极大的便利。
这个压缩包包含了三个与安卓开发RTSP协议相关的开源项目,对于初学者来说是极好的学习资源。下面我们将详细讨论这些知识点。 1. **RTSP协议**:RTSP是一种应用层协议,用于控制媒体的实时传输。它允许客户端向...
Lukechampine的开源项目“httprpc”正致力于解决这个问题,它提供了一种将任意基于文本的RPC协议转化为HTTP服务的方法。 首先,让我们理解RPC的概念。RPC是一种允许程序调用另一个程序的功能,就像它是在本地执行...
本文将详细介绍几种流行的开源TCP/IP协议栈:BSD TCP/IP协议栈、uC/IP、LwIP、uIP以及TinyTcp,探讨它们的特点、应用场景以及如何选择最适合项目需求的协议栈。 #### 二、BSD TCP/IP协议栈 **历史背景与特点**:...
开源项目-johnnadratowski-golang-neo4j-bolt-driver.zip是一个专注于Go语言的开源项目,由johnnadratowski开发,旨在提供对Neo4J数据库的Bolt协议支持。这个驱动程序使得Go开发者能够高效、稳定地与Neo4J图形数据库...
《开源项目:VectorHacker-Goro——构建Go语言Event Store客户端库》 在信息技术日新月异的今天,开源项目已经成为了推动技术创新的重要力量。"VectorHacker-Goro"就是一个典型的例子,它是一个专为Event Store设计...
开源项目通常遵循特定的许可协议,如MIT、Apache 2.0或GPL,确保了贡献者和使用者的权利。 【压缩包子文件的文件名称列表】只有一个条目:"ProcJam15-master",这通常代表了项目的主分支或源码仓库。"master"是Git...
在这个开源项目中,我们可以看到Java如何被用来实现WordPress客户端的各种功能,包括文章浏览、评论管理、用户登录和个性化设置等。 Android开发中的关键组件,如Activity、Service、BroadcastReceiver和...