`
darkjune
  • 浏览: 309935 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

开源协议的区分

 
阅读更多

开发中经常遇到要使用第三方类库, 查看类库的协议保证要求闭源的商业软件的利益是必备基本功,下面也是参考了网上的文章。

BSD开源协议(original BSD licenseFreeBSD licenseOriginal BSD license

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

但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

  1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
  2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
  3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

Apache Licence 2.0(Apache License, Version 2.0Apache License, Version 1.1Apache License, Version 1.0

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

  1. 需要给代码的用户一份Apache Licence
  2. 如果你修改了代码,需要再被修改的文件中说明。
  3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
  4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

GPL(GNU General Public License

我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。

GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。

由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

LGPL(GNU Lesser General Public License

LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品

MIT(MIT

MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.

分享到:
评论

相关推荐

    1 计算机;GPL等开源协议;Linux 哲学思想的炼成;MBR & GPT1

    计算机基础知识、Linux 哲学思想、GPL 等开源协议、MBR & GPT 本资源摘要信息涵盖了计算机基础知识、Linux 哲学思想、GPL 等开源协议、MBR & GPT 等方面的知识点。 一、计算机基础知识 1. 计算机的发展史:从 ...

    物联网协议开源代码

    Wakaama项目是LWM2M协议的一个开源实现,提供了C语言编写的客户端库,适用于嵌入式系统和资源受限的设备。开发者可以通过这个库轻松地在自己的设备上集成LWM2M支持,实现远程管理和通信功能。 Wakaama-1.0版本可能...

    前端开源库-inconsolata

    同时,它的符号设计独特,如大括号{}、引号""等编程常用符号形状明确,易于区分,减少了编码时的误判可能。此外,Inconsolata还提供了多种语言的支持,包括各种编程语言的特殊符号,增强了其在不同项目中的适应性。 ...

    RdmProtocal.rar_artnet_lifej6w_rdm协议中文版_rdm协议源代码_协议 RDM

    1. 设备地址:每个RDM设备都有一个独特的64位地址,用于区分网络中的不同设备。 2. 主控器:控制RDM网络的设备,发送RDM命令并接收响应。 3. 从设备:被控制的设备,接收RDM命令并返回响应。 4. RDM消息:由主控器...

    优秀的开源http框架Forest,通过简单配置复杂的http调用.docx

    因此,寻找一种能够通过配置或简单参数就能灵活区分并调用各种API的解决方案显得尤为必要。 Forest是一款强大的开源HTTP框架,它旨在解决上述问题。Forest支持Spring Boot的自动装配,只需添加对应的依赖,即可轻松...

    Thingsboard gateway 3.4 接入TCP协议单设备改多设备

    4. **协议扩展**:修改或定制TCP协议,使其包含设备信息,这样 Gateway可以通过解析协议来区分不同设备的数据。 在"socket_extends"这个文件中,可能包含了实现上述策略的一些代码示例或脚本。这可能包括创建新的...

    背景去除的开源库

    本文将深入探讨一个专注于此领域的开源库——"背景去除的开源库",该库包含了大约三十种不同的算法,全部遵循GPL3.0协议,允许用户自由地使用、修改和分享代码。 首先,我们来看看什么是背景去除。背景去除,...

    开源软件相关法规.docx

    同时,需要加强供应商的安全意识,确保供应商遵守安全标准和协议。 二、开源软件著作权保护 开源软件的协作开发是一个复杂的动态创作过程,开发人员的组成、分工、能力等会发生经常性改变。在这种情况下,社区贡献...

    网络娃娃机主板对接协议1

    - 消息ID号:2个字节,用于区分不同的命令,随机生成以避免重复。 - 命令头取反:2个字节,用于校验。 - 消息ID取反:2个字节,同样用于校验。 - 包长度:1个字节,表示数据部分的长度。 - 数据:根据包长度...

    开源项目-fhmq-hmq.zip

    消息主题(Topic)是区分不同消息的关键,订阅者通过订阅特定的主题来接收相关的消息。这种模型使得消息的分发更灵活,支持一对多、多对一甚至多对多的通信模式。 2. fhmq-hmq的设计特点: - 高性能:fhmq-hmq的...

    XMPP协议中文版

    XMPP协议的发展和标准化过程经历了多个阶段,从Jabber开源社区的初步开发到IETF工作组的接手和标准化,最终形成了互联网标准跟踪协议。文档中的关键字解释部分指出了这些关键词在文档中的确切含义,帮助开发者理解...

    Hart 主模式-协议栈实现

    在“open-hart-master”这个压缩包文件中,很可能是包含了开源的HART主模式协议栈实现代码。通过分析和研究这些代码,开发者可以了解HART协议的具体实现细节,以及如何在自己的项目中集成和定制HART通信功能。 总结...

    通用串行通信协议

    通用串行通信协议是一种专门为嵌入式系统设计的协议,主要用于串口通信、蓝牙Ble以及...最后,作者ayst.***表明了协议文档的所有权和贡献信息,这在开源协议或通用协议的维护和更新中是很常见的,便于追溯和沟通。

    NTP协议源码for Linux

    - **Mode**:工作模式,用于区分不同的操作模式。具体包括: - 0:保留 - 1:对称主动模式 - 3:客户端模式 - 4:服务器模式 - 5:广播模式 - 6:NTP控制消息 - **Stratum**:表示时间源的层级,通常服务器离...

    log4j2me-开源

    7. **版本号**:软件的版本标识,用于区分不同阶段的开发成果。 8. **MD5校验**:用于验证文件的完整性和未被篡改,通过比较原始MD5值和下载后的MD5值来检查文件是否正确。 在使用Log4j2me时,开发者可以根据J2ME...

    XMPP协议(可扩展消息出席协议):核心.doc

    该协议的基本语法和语义最初由Jabber开源社区于1999年开发,后于2002年由XMPP工作组接手,以适应IETF的消息和出席信息技术的需求。XMPP 1.0的核心功能定义了协议的基础,而即时消息和出席信息功能则在XMPP-IM协议中...

    开源项目-ortuman-jackal.zip

    5. **许可证**:作为开源项目,Jackal遵循特定的开源许可协议,如MIT或Apache 2.0,允许他人自由地使用、修改和分发源代码。 **XMPP协议** XMPP是一个基于XML的即时通讯协议,最初由Jabber项目发展而来,并被IETF...

    rtp/rtcp协议实现源码

    3. **多路复用**:一个RTP会话可以承载多个不同的媒体流,通过不同的SSRC(同步源标识符)来区分。 4. **快速适应网络变化**:RTP本身不处理拥塞控制,但可以通过调整发送速率等策略来快速适应网络状况。 **RTCP...

Global site tag (gtag.js) - Google Analytics