`

在企业应用开发中遵循开源协议

阅读更多

(摘自http://www.cnblogs.com/studyzy/archive/2011/05/20/2051612.html

最近看到一个关于开源协议的图,想到我们平时在企业应用开发中也在大量使用开源软件,那么我们应该怎么对待这些开源软件呢,所以简单的写下了这篇博客。

image

在企业应用开发中,为了提高开发效率,经常可能会用到一些开源的软件、项目、组件。在使用这些开源项目的时候,必须要先看好其开源协议,免得被Challenge。网上有很多文章介绍各种开源协议以及其进行比较的,我就不在此老生常谈了,我只说是该怎么用。

这里指的企业应用开发,主要是希望实现尽量闭源以保护自己的知识成果,尽量免费以降低成本。

对 于Apache Licence、BSD、MIT这几种协议的开源项目,可以直接基于项目的源代码进行二次开发,也可以引用项目编译出来的Dll或其他,这些协议都是对企 业友好的,我们的项目不需要开源,不需要付钱购买许可。只需要在版权声明文档中注明原项目的License信息。

对于LGPL,其要求 是对源代码的修改需要开源,但是只是引用的话就可以不用开源。所以一般我们直接使用LGPL协议的程序集,而不使用其源代码进行二次开发,比如我们常用使 用的NHibernate就是LGPL协议的,只需要在开发中引用NHibernate程序集就可以了,我们的代码仍然是闭源的。但是这里有一个问题是, 如果现有的LGPL协议的开源项目能够满足我们的大部分需求,但是仍然有一小部分需求必须要修改源代码,或者原项目中有Bug,我们必须要修改源代码进行 修正。对于这种必须修改源代码的情况,我的做法是基于该源代码,专门新建一个项目,在这个项目中补充我们需要的功能和修复发现的Bug,然后将这个项目以 LGPL协议开源并将项目编译好的Dll用于我们的企业应用开发中。这样既满足了我们必须修改源代码的需求,也保护了我们自己的项目,同时仍然满足其协议 的要求。

总之,LGPL协议主要还是以类库的方式使用,不建议在LGPL协议的项目上直接进行二次开发。在不得已必须修改开源项目源代码时新建一个开源项目,在该项目上进行修改。

MPL 也是和LGPL差不多,对于类库的引用是比较友好的,但是要是对源代码进行了二次开发,那么修改后的版权就归原MPL项目的作者了,所以处理方法也是在必 须修改源代码的情况下,新建一个开源项目来修改,修改好后以类库的形式引用。另外MPL需要对修改之处提供说明文档。

接下来说说GPL 协议,这是个对企业不友好的协议,其变态之处在于,你哪怕是引用了GPL协议的类库,那么你的项目也必须开源。所以在企业应用中,能不用GPL的就尽量不 用GPL的,大家说GPL协议像是病毒,所有使用了GPL项目的新项目都被传染成了开源的GPL项目。所以对于病毒,我们想不被传染,变成开源的GPL项 目,处理方法除了尽量避免使用GPL外,如果必须使用,找不到合适的替代产品,那么我们就应该尽量隔离使用GPL项目的那个模块。比如我们的项目有10个 模块,而其中有1个模块要使用GPL项目,那么可以尽量把我们的项目拆分成2个项目,一个项目是完全闭源的包含9个模块的项目,另一个项目是开源的GPL 项目。这样至少可以隔离开GPL与我们其他不相关模块的代码,免得被传染。

另外还有一个隔离办法是将GPL项目与闭源项目并列,不存在 引用关系。比如A项目中需要使用到GPL项目B,那么我们可以先建立项目A1,在其中完成我们的核心逻辑处理,然后以闭源的形式发布A1,接下来再建立开 源项目A,A引用了项目A1和B,将这两个项目结合起来完成相应的功能。总之尽量减少对GPL项目的使用范围,做到最低限度的开源,满足企业应用开发的需要。

PS:所有的开源协议列表:http://www.opensource.org/licenses/alphabetical

分享到:
评论

相关推荐

    Python-开源协议说明

    在实际操作中,我们可以通过阅读`licenses-master`这样的资源库,获取各种开源协议的具体文本,以确保在使用、修改或发布Python项目时遵循正确的法律条款。这不仅保护了开发者的权益,也是对开源社区规则的尊重。 ...

    开源协议知多少开源协议知多少

    开源协议是软件开发者为了促进技术交流与合作,将自己开发的软件以特定的方式公开,并规定了其他人如何使用这些软件的规则。开源协议确保了软件的开放性、可修改性和可分发性等特性。在开源社区中,存在着多种不同的...

    五种开源协议的比较

    在众多开源协议中,BSD、Apache、GPL、LGPL 和 MIT 是最为常见且广受好评的几种协议。本文将详细介绍这五种协议的特点、适用场景及其之间的差异。 #### BSD 开源协议 - **简介**:BSD协议给予使用者很大的自由度,...

    Java程序员必须了解的七大开源协议

    在软件开发领域,开源协议扮演着极其重要的角色,它们不仅定义了软件如何被使用、修改和分发,还为开发者提供了合法使用开源组件的基础。对于Java程序员而言,了解并熟悉常见的开源协议至关重要。这不仅能帮助他们在...

    各种开源协议简析 GPL、BSD、MIT、Mozilla、Apache、LGPL1

    Apache Licence对商业应用十分友好,允许商业产品在必要时进行修改和二次开发。 GPL,全称GNU General Public License,是Linux等著名开源项目所采用的协议。其核心原则是“传染性”,即任何使用、修改或衍生自GPL...

    一个免费开源的,快速、简单的面向对象的轻量级Node.JS开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的

    Monk.Node 是一个免费开源的,快速、简单的面向对象的轻量级Node.JS开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。Monk.Node从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的...

    开源的CANOpen协议.rar

    此外,参与开源社区需要遵循一定的规则,如遵循开源许可证条款,尊重他人的知识产权,积极回馈社区等。 总的来说,开源的CANOpen协议为开发者提供了强大的工具,有助于降低基于CAN总线系统的开发成本和难度,推动了...

    Java程序员需要了解的几个开源协议介绍.rar

    本篇文章将详细介绍几个Java程序员必须了解的开源协议,帮助开发者更好地理解和遵循这些规则。 1. **Apache License 2.0**: Apache License 2.0 是一个非常宽松的开源协议,它允许用户自由地使用、修改、复制、...

    “像搭积木一样开发应用”--开源的ToyBricks(积木)开发平台

    在IT领域,这种开发方式被称为“低代码”或“无代码”编程,它降低了编程的门槛,使得非专业程序员也能参与到应用开发中来。 1. **模块化编程**: ToyBricks的关键特性是其模块化设计。每个功能作为一个独立的模块...

    ZigBee开源协议栈MpZBee

    ZigBee开源协议栈MpZBee是一个用于开发ZigBee无线网络应用的开放源码项目。这个协议栈全面实现了ZigBee协议的各个层次,为开发者提供了便捷的工具来构建基于ZigBee标准的物联网解决方案。ZigBee是一种低功耗、低数据...

    企业级IOS应用开发

    ### 企业级iOS应用开发知识点概述 #### 一、企业级iOS应用...综上所述,《企业级iOS应用开发》一书深入浅出地讲解了iOS应用开发过程中所涉及的各项关键技术点,对于希望涉足该领域的开发人员来说具有很高的参考价值。

    基于开源平台的中小型WebGIS应用研究.pdf

    使用开源平台构建WebGIS应用,可以利用GeoServer、SharpMap、GRASS等开源软件,这些软件遵循GPL、LGPL等开源许可协议。GeoServer是一个Java编写的服务器,可以发布和编辑地理数据,支持OGC标准的Web服务。SharpMap是...

    常用开源协议文本

    开源协议是软件开发领域的重要组成部分,它规定了代码的使用、修改、分发等行为的法律框架。在开源世界中,正确理解和应用这些协议对于开发者、企业以及整个社区的健康发展至关重要。以下是对五个主要开源协议——...

    h2 开源数据库

    它的简洁性和易用性使其在各种项目中得到了广泛应用,尤其在需要快速搭建数据库环境或者进行本地开发时,H2数据库显得尤为便捷。 1. **轻型数据库特性**: H2数据库以其小巧的体积和快速的启动时间而著名。它通常...

    thinkphp php开源框架

    ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和...

    Go-Threema协议在Go中的开源实现

    在实际开发中,开发者可以利用Go-Threema来构建各种应用程序,如即时通讯软件、企业内部通信工具,甚至是物联网设备间的安全通信。为了方便使用,Go-Threema通常会提供丰富的示例代码和详细的文档,帮助开发者快速...

    IEC61850协议的.net开源系统软件

    IEC61850协议的.NET开源系统软件,如libiec61850-1.5,为电力行业提供了强大的工具,简化了基于.NET框架的智能变电站应用开发。通过理解和利用这样的库,开发者可以高效地构建符合标准的自动化系统,实现电力设备间...

    libiec61850-1.4.2.1_iec61850协议的开源库_

    8. **编程接口(API)**:libiec61850 提供了API,使得开发者能够轻松地在自己的应用中集成 IEC 61850 功能,实现与智能电网设备的交互。 9. **兼容性**:作为开源库,libiec61850 通常会支持多种操作系统和编程...

    "萤火uniapp"是一款基于uni-app框架的开源前端开发工具 在1.1.4.2版本中,它提供了一系列的功能和优化,方便开发

    5. 开源共享:遵循开源协议,开发者可以自由获取和修改源代码,同时也可以参与到项目的贡献中。 "萤火uniapp"是一款优秀的前端开发工具,无论你是刚接触前端开发的新手,还是有经验的开发者,都可以通过它快速、...

    微信ipad协议,微信开发API接口

    微信iPad协议和微信开发API接口是开发者用于在iPad设备上构建与微信深度集成的应用程序的重要工具。这些接口和协议使得开发者能够实现丰富的功能,而不仅仅是基础的聊天和通讯,还能扩展到更广泛的社交互动和业务...

Global site tag (gtag.js) - Google Analytics