??xml version="1.0" encoding="utf-8" standalone="yes"?>
pȝ开发过E中可以使用开源YӞpȝq行安装包中也可以用开源Y件。但是,Ҏ使用的开源Y件有如下限制Q?/p>
止使用M版本的GPL/LGPL license的开源YӞ
可以使用Eclipse, Apache, CPL, BSD{license的开源YӞ
对用到的Q何开源YӞ都需要认真阅dlicense。在交付件中的开源Y件列表中不得有遗漏的开源Y件?/p>
对开源Y件的理解可以参?br />http://www.opensource.org/docs/definition.phpQ?/p>
对开源Y件license的了解可以参?br />http://www.opensource.org/licenses/?/p>
对于开源Y件license的理论,首先Q要对几个概忉|所了解Q?/p>
Q?/span> 1 Q?/span> Contributors ?/span> Recipients
Contributors 指的是对某个开源Y件或目提供了代码(包括最初的或者修改过的)发布的h或者实体(团队、公司、组l等Q, Contributors 按照参与某个软g开源的旉先后Q可以分?/span> an initial Contributor ?/span> subsequent Contributors ?/span>
Recipients 指的是开源Y件或目的获取者,昄Q?/span> subsequent Contributors 也属?/span> Recipients 之列?/span>
Q?/span> 2 Q?/span> Source Code ?/span> Object Code
Source Code 指的是各U语a写成的源代码Q通过 Source Code Q结合文档, 可以了解到整个Y件的体系l构及具体到某个功能函数的实现方法等?/span>
Object Code 指的?/span> Source Code l过~译之后Q生成的cM于“类库”一LQ提供各U接口供他h使用的目标码Q按我的理解Q它是像常见的 DLL ?/span> ActiveX ?/span> OCX 控g性质的东ѝ(不知道这L解对不对Q?/span>
分清楚这两个概念的目的在于,有些开源,只发?/span> Object Code Q当Ӟ大多数发布的?/span> Source Code 。很多协议也?/span> “你发布的是哪种 Code 的时候应该怎样”,有着明确的约束?/span>
Q?/span> 3 Q?/span> Derivative Module ?/span> Separate Module
Derivative Module 指的是,依托或包含“最初的”或者“从别h处获取的”开源代码而生的代码Q是原“源代码”的增强Q不{于增加Q、改善和延箋的模块,意ؓ“衍生模块”?/span>
Separate Module 指的是,参考或借助原“源代码”,开发出的独立的Q不包含、不依赖于原“源代码模块”,意ؓ“独立的模块”?/span>
理解q两个概늚目的在于Q很多协议对涉及到商业发布的时候,会有哪些是衍生的Q哪些是独立的,有着明确的商业发布规定?/span>
CPL(Common Public License) version 1.0
CPL ?/span> IBM 提出的ƈ通过?/span> OSI Q?/span> Open Source Initiative Q批准的开源协议。主要用于一?/span> IBM 或跟 IBM 相关的开源Y?/span> / 目中。如 很著名的 Java 开发环?/span> Eclipse ?/span> RIA 开发^?/span> Open Laszlo {?/span>
CPL 也是一对商业应用友好的协议。它允许 Recipients Ҏ码进行Q意的使用、复制、分发、传播、展C、修改以及改后做闭源的二ơ商业发布,q点?/span> BSD 很类|也属于自由度比较高的开源协议。但是,需要遵循:
1. 当一?/span> Contributors 源码的整体或部分再ơ开源发布的时候,必须l箋遵@ CPL 开源协议来发布Q而不能改用其他协议发布。除非你得到了原“源码?/span> Owner ?/span> 授权?/span>
2.CPL 协议下,你可以将源码不做M修改来商业发布。但如果你要修改后的源码其开源,而且当你再发布的?/span> Object Code 的时候,你必d?/span> 它的 Source Code 是可以获取的Q而且要告知获取方?/span>
3. 当你需要将 CPL 下的源码作ؓ一部分跟其他私有的源码混和着成ؓ一?/span> Project 发布的时候,你可以将整个 Project/Product 以私人的协议发布Q但要声明哪一部分代码?/span> CPL 下的Q而且声明那部分代码l遵?/span> CPL ?/span>
4. 独立的模块( Separate Module Q,不需要开?/span>
GPL
Q?/span>
Gun General Public License
Q?/span>
version 2.0 1991
最常见的开源协议,使用它作为授权协议的有大名鼎鼎的 Linux ?/span> GPL 最显著的两个特点就是网上称为的“病毒性传播”和“不允许闭源的商业发布”?/span>
所谓的“病毒性传播”,指的是, GPL 规定Q所有从 GPL 协议授权的源码衍生出来的Q即上面提到?/span> Derivative Module Q,或者要?/span> GPL 授权的源码着用的 Project Q都要遵?/span> GPL 协议Q就像病毒一P_上了关p,“中毒”了?/span> GPL q样规定的目的是Q保?/span> ?/span> GPL 协议保护下的产品Q不会再受到其他协议或者授权的U束。即让跟 GPL 有关pȝ源码都能免费获取。D个例子,如果你的改进?/span> Linux 中用了 GPL 授权下的开源模块(也必M用,你不可能自己重新d个内核吧Q如果做出来了,你也没必要叫 Linux 了。)Q那么你整个 Linux 产品也必遵?/span> GPL 协议d源,不能以其他方式去开源发布,更不允许闭源发布。这样一来,׃会出现这样一?/span> Linux Q-q个功能?/span> GPL 协议授权的,可以免费获取源码Q而另外一个功能是其他协议下的Q拿不到源码。这点规定对使用或者研I该产品的h来说Q是一个极大的便利?/span>
而“不允许闭源商业发布”指的是Q在 GPL 授权下,你的软g产品可以商业发布Q拿d钱,但是在这同时Q你也必d该品的源码?/span> GPL 协议方式开源发布出去,供他人免费获取。也许有ZqhQ拿dQ又同时开源,那谁来买阿?q个产品怎么赚钱呢?Q这涉及到开源品的商业模式的问题了?/span>
GPL 协议下的商业发布的一个关键点像 Java 视线论坛?/span> Robin 所说的Q?/span> GPL 是针对Y件源代码的版权,而不是针对Y件编译后二进制版本的版权。你有权免费获得软g的源代码Q但是你没有权力免费获得软g的二q制发行版本?/span> GPL 对Y件发行版本唯一的限制就是:你的发行版本必须把完整的源代码一同提供?/span>
BSD
Q?/span>
Berkeley Software Distribution
Q?/span>
?/span> GPL 有很大的不同Q?/span> BSD 协议是给予h很大的自q一U开源协议。其最大的特点是, Recipients 几乎可以Ҏ码“ؓ所Ʋؓ”,可以自由C改,自由C用,修改后再以其他方式再发布Q商业或者开源)。但Q你做这些事情的时候,q是得遵循以下规则:
1 Q?/span> 如果再发布的产品中包含原“源代码”,则在原“源代码”中必须带有原来代码中的 BSD 协议?/span>
2 Q?/span> 如果再发布的只是二进制类?/span> / 软gQ?/span> Object Code / Product Q,则需要在cd / 软g的文和版权声明中包含原来代码中?/span> BSD 协议?/span>
3 Q?/span> 不可以用开源代码的作?/span> / 机构名字和原来品的名字做市场推qѝ?/span>
其实q几个规则约定的目的也只是达C个目的:是他人的东西Q别Z BSD 开源了Q你׃能不做Q何声明而占为己有,更不能用他h的名义来做商业推qѝ你只对你自q东西拥有l对控制权?/span>
BSD 代码鼓励代码׃nQ但需要尊重代码作者的著作权?/span> BSD ׃允许使用者修改和重新发布代码Q也允许使用或在 BSD 代码上开发商业Y件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源品的时候都首?/span> BSD 协议Q因为可以完全控制这些第三方的代码,在必要的时候可以修Ҏ者二ơ开发?/span>
Apache License version 2.0
Apache License 是著名的非盈利开源组l?/span> Apache 采用的协议。该协议?/span> BSD cMQ同样鼓׃码共享和重原作者的著作权,同样允许代码修改Q再发布Q作为开源或商业软gQ。需要满的条g也和 BSD cMQ(配备英文原文Q方便更准确理解Q?/span>
1 Q?/span> 需要给 Recipients 一?/span> Apache License
2 Q?/span> 如果你修改了代码Q需要在被修改的文g中进行说明?/span>
3 Q?/span> ?/span> Derivative Module 中(修改和包含源代码而衍生的代码Q需要带有原来代码中的协议,商标Q专利声明和其他原来作者规定需要包含的说明?/span>
4 Q?/span> 如果再发布的产品中包含一?/span> Notice 文gQ则?/span> Notice 文g中需要带?/span> Apache License 。你可以?/span> Notice 中增加自q许可Q但不可以表Cؓ?/span> Apache License 构成更改?/span>
Apache License 也是对商业应用友好的许可。用者也可以在需要的时候修改代码来满需要ƈ作ؓ开源或商业产品发布 / 销售?/span>
LGPL
LGPL ?/span> GPL 的一个ؓ主要为类库用设计的开源协议。和 GPL 要求M使用 / 修改 / 衍生?/span> GPL cd的Y件必采?/span> GPL 协议不同?/span> LGPL 允许商业软g通过cd引用 (link) 方式使用 LGPL cd而不需要开源商业Y件的代码。这使得采用 LGPL 协议的开源代码可以被商业软g作ؓcd引用q发布和销售?/span>
但是如果修改 LGPL 协议的代码或者衍生,则所有修改的代码Q涉及修攚w分的额外代码和衍生的代码都必采?/span> LGPL 协议。因?/span> LGPL 协议的开源代码很适合作ؓW三方类库被商业软g引用Q但不适合希望?/span> LGPL 协议代码为基Q通过修改和衍生的方式做二ơ开发的商业软g采用?/span>