gpl&cpl

来源:互联网 发布:js 层级关系图 插件 编辑:程序博客网 时间:2024/05/17 03:50

gpl和cpl
http://shanyou.cnblogs.com/archive/2005/09/30/247539.html
  首先,要对几个概念有所了解:
(1)Contributors 和 Recipients
      Contributors 指的是对某个开源软件或项目提供了代码(包括最初的或者修改过的)发布的人或者实体(团队、公司、组织等),Contributors 按照参与某个软件开源的时间先后,可以分为 an initial Contributor 和 subsequent Contributors 。
      Recipients指的是开源软件或项目的获取者,显然,subsequent Contributors 也属于 Recipients之列。

(2)Source Code 和 Object Code

        Source Code 指的是各种语言写成的源代码,通过Source Code,结合文档, 可以了解到整个软件的体系结构及具体到某个功能函数的实现方法等。

        Object Code 指的是Source Code 经过编译之后,生成的类似于“类库”一样的,提供各种接口供他人使用的目标码,按我的理解,它就是像常见的DLL、AtiveX、OCX控件性质的东西。(不知道这样理解对不对)

分清楚这两个概念的目的在于,有些开源,只发布Object Code ,当然,大多数发布的是Source Code。很多协议也对 “你发布的是哪种Code的时候应该怎样”,有着明确的约束。

(3)Derivative Module 和 Separate Module

       Derivative Module 指的是,依托或包含“最初的”或者“从别人处获取的”开源代码而产生的代码,是原“源代码”的增强(不等于增加)、改善和延续的模块,意为“衍生模块”。

         Separate Module 指的是,参考或借助原“源代码”,开发出的独立的,不包含、不依赖于原“源代码模块”,意为“独立的模块”。

GPL最显著的两个特点就是网上称为的“病毒性传播”和“不允许闭源的商业发布”。   所谓的“病毒性传播”,指的是,GPL规定,所有从GPL协议授权的源码衍生出来的(即上面提到的Derivative Module),或者要跟GPL授权的源码混着用的Project,都要遵循GPL协议,GPL这样规定的目的是,保证 在GPL协议保护下的产品,不会再受到其他协议或者授权的约束。即让跟GPL有关系的源码都能免费获取。而“不允许闭源商业发布”指的是,在GPL授权下,你的软件产品可以商业发布,拿去卖钱,但是在这同时,你也必须将该产品的源码以GPL协议方式开源发布出去,供他人免费获取。

 CPL也是一项对商业应用友好的协议。它允许 Recipients 对源码进行任意的使用、复制、分发、传播、展示、修改以及改后做闭源的二次商业发布,这点跟 BSD 很类似,也属于自由度比较高的开源协议。但是,需要遵循:

       1.当一个Contributors  将源码的整体或部分再次开源发布的时候,必须继续遵循 CPL 开源协议来发布,而不能改用其他协议发布。除非你得到了原“源码”Owner  的 授权。
  2.CPL协议下,你可以将源码不做任何修改来商业发布。但如果你要将修改后的源码其开源,而且当你再发布的是Object Code 的时候,你必须声明 它的Source Code 是可以获取的,而且要告知获取方法
 3.当你需要将 CPL 下的源码作为一部分跟其他私有的源码混和着成为一个 Project 发布的时候,你可以将整个Project/Product 以私人的协议发布,但要声明哪一部分代码是CPL下的,而且声明那部分代码继续遵循CPL。 

原创粉丝点击