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

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


在企业应用开发中,为了提高开发效率,经常可能会用到一些开源的软件、项目、组件。在使用这些开源项目的时候,必须要先看好其开源协议,免得被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

时间: 2024-10-31 11:23:31

在企业应用开发中遵循开源协议的相关文章

元数据(metadata)在企业应用开发中的作用

数据 元数据(metadata)在企业应用开发中的作用 元数据(metadata)介绍:Metadata(元数据),它是"关于数据的数据"(data about data),近年来在软件设计中Metadata有广泛的应用.在编程中,元数据不是被处理的对象,而是通过改变元数据的一些"值"来改变程序的运行的数据.可以"解释"程序的运行时,不同的元数据值可以让同一段程序有不同的运行结果.元数据(metadata)应用: 在以前的工作中,经常遇到这样的问

silverlight在企业应用开发中的定位

从silverlight 1开始,MS对这个技术的定位似乎更重视于互联网应用的娱乐性体验,但是,我认为 silverlight技术应该更多关注一下企业应用的解决方案. 把html应用于企业应用的原始动力是易于维护和部署,但是由于html的设计先天上就只是为了内容的 展示而非交互,因此在实现企业应用中常有的复杂逻辑.界面逻辑控制方面根本就是草率应付,虽然后来 加入了JS来扩展应用,但是基础html规范的简陋,使得即使我们只是想要实现一个限定类型的输入框,也 不得复制一堆堆繁琐而丑陋的代码. 另外一

请问一下企业应用软件开发中,应用到的设计模式多吗?我感觉没怎么用啊?

问题描述 如题,Struts,Spring等框架本身应用了不少设计模式除外,另外有没有什么好的源码学习的!框架代码除外!! 解决方案 做业务系统开发, 和 做技术框架开发的方向性是不一样的. 还有设计模式一般用到的都是公用的方法都会封装起来,然后你去调用,做业务系统上很难说是,业务需求上需要你去自己用设计模式来写代码~解决方案二:推荐书籍:http://product.dangdang.com/product.aspx?product_id=71052解决方案三:yeqing4562011 说的

企业级应用开发中的JAVA开源项目

对于目前企业应用开发竞争日益激烈,需求变更频繁,各个系统集成商都面临巨大的生存压力.其中有两个方面表现尤其突出: 没有统一的软件开发过程或者照搬重量级的软件开发过程,例如RUP等,但是往往由于时间等压力的影响,并不能切实执行:大部分企业仍然没有摆脱手工作坊期间的做法,每个项目或者产品由于管理人员或者团队的不同,重新设计系统框架,浪费大量的时间在结构验证与调整上. 企业应用系统的开发中,需求的变更是项目中唯一不变的东西,而且,为了保持开发的一致性和利益最大化,系统集成商需要与客户保持长期的合作.因

《Linux嵌入式实时应用开发实战(原书第3版)》——1.5 开源协议

1.5 开源协议 多数软件终端用户协议都明确限制了你只可以使用协议范围内的功能.典型的限制条件是不允许复制或重新发布.你通常会被警告不要试图对软件进行"逆向工程". 相反,开源协议是只要你愿意,就允许使用.修改和复制授权的软件.和权利相伴的是义务.如果你修改并发布了一个开源协议内的软件,你就必须将修改后的源代码也纳入该框架.你的修改就成为"派生的工作",也在该协议的范围内.这就允许其他使用者更好地理解软件,并按他们的意愿做出更多的修改. 开源协议也叫"公共

企业开发中选择logback而不是log4j的理由

不知道看到这篇文章的Java工程师有没有考虑过这个问题:为什么在企业开发中会选择logback来记录日志,而不是log4j呢? 如果你以前没有考虑过这个问题,那么现在如果让你考虑一下,你可能觉的会是因为什么原因呢?本文就来为你回答这个问题.   无论从设计上还是实现上,Logback相对log4j而言有了相对多的改进.不过尽管难以一一细数,这里还是列举部分理由为什么选择logback而不是log4j.牢记logback与log4j在概念上面是很相似的,它们都是有同一群开发者建立.所以如果你已经对

在企业开发中,一般用link的饿汉模式多还是懒汉模式多一点?

问题描述 在企业开发中,一般用link的饿汉模式多还是懒汉模式多一点? 在企业开发中,一般用link的饿汉模式多还是懒汉模式多一点? 解决方案 如果你看ef自己生成的代码,大部分都是lazyload,因为导航属性没必要加载进来,既浪费性能也没有必要. 解决方案二: 当然是根据需要来.不好说谁多谁少.事实上根据2-8法则,20%的代码反倒是更关键,你说呢.

Android开发之常用开源库直接拿来用

1.from  代码家 整理比较好的源码连接 *************************************************************************************************************************************************************************** http://blog.zhan-dui.com/?page_id=60 感谢 "代码家"整理 一.

实用文章:常用开源协议详细解析

原文:http://www.cnbeta.com/articles/28880.htm 开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢?答案是否定的.开源运动同样有自己的游戏规则和道德准则.不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成名誉和市场上的损失,更可能陷入法律纠纷和赔偿. 首先,要对几个概念有所了解: 1. Contributors 和 Recipients Contributors 指的是对某个开源软件或项目提供了代码(包括最初的或者修改