smilekevin

          Soa Contest

          2006年5月17日 #

          對于license的說明

          Soa 競賽中對于開源軟件有如下要求:
          關于開源軟件(Open Source Software)的使用

          系統(tǒng)開發(fā)過程中可以使用開源軟件,系統(tǒng)運行安裝包中也可以使用開源軟件。但是,對所使用的開源軟件有如下限制:

          禁止使用任何版本的GPL/LGPL license的開源軟件;

          可以使用Eclipse, Apache, CPL, BSD等license的開源軟件;

          對使用到的任何開源軟件,都需要認真閱讀其license。在交付件中的開源軟件列表中不得有遺漏的開源軟件。

          對開源軟件的理解可以參考
          http://www.opensource.org/docs/definition.php;

          對開源軟件license的了解可以參考
          http://www.opensource.org/licenses/。

          對于開源軟件license的理論,首先,要對幾個概念有所了解:

          ?

          1 Contributors Recipients

          Contributors 指的是對某個開源軟件或項目提供了代碼(包括最初的或者修改過的)發(fā)布的人或者實體(團隊、公司、組織等), Contributors 按照參與某個軟件開源的時間先后,可以分為 an initial Contributor subsequent Contributors

          ?

          Recipients 指的是開源軟件或項目的獲取者,顯然, subsequent Contributors 也屬于 Recipients 之列。

          ?

          2 Source Code Object Code

          Source Code 指的是各種語言寫成的源代碼,通過 Source Code ,結合文檔, 可以了解到整個軟件的體系結構及具體到某個功能函數(shù)的實現(xiàn)方法等。

          Object Code 指的是 Source Code 經過編譯之后,生成的類似于“類庫”一樣的,提供各種接口供他人使用的目標碼,按我的理解,它就是像常見的 DLL ActiveX OCX 控件性質的東西。(不知道這樣理解對不對)

          分清楚這兩個概念的目的在于,有些開源,只發(fā)布 Object Code ,當然,大多數(shù)發(fā)布的是 Source Code 。很多協(xié)議也對 “你發(fā)布的是哪種 Code 的時候應該怎樣”,有著明確的約束。

          ?

          3 Derivative Module Separate Module

          Derivative Module 指的是,依托或包含“最初的”或者“從別人處獲取的”開源代碼而產生的代碼,是原“源代碼”的增強(不等于增加)、改善和延續(xù)的模塊,意為“衍生模塊”。

          ?

          Separate Module 指的是,參考或借助原“源代碼”,開發(fā)出的獨立的,不包含、不依賴于原“源代碼模塊”,意為“獨立的模塊”。

          ?

          理解這兩個概念的目的在于,很多協(xié)議對涉及到商業(yè)發(fā)布的時候,會有哪些是衍生的,哪些是獨立的,有著明確的商業(yè)發(fā)布規(guī)定。

          ?

          CPL(Common Public License) version 1.0

          CPL IBM 提出的并通過了 OSI Open Source Initiative )批準的開源協(xié)議。主要用于一些 IBM 或跟 IBM 相關的開源軟件 / 項目中。如 很著名的 Java 開發(fā)環(huán)境 Eclipse RIA 開發(fā)平臺 Open Laszlo 等。

          CPL 也是一項對商業(yè)應用友好的協(xié)議。它允許 Recipients 對源碼進行任意的使用、復制、分發(fā)、傳播、展示、修改以及改后做閉源的二次商業(yè)發(fā)布,這點跟 BSD 很類似,也屬于自由度比較高的開源協(xié)議。但是,需要遵循:

          1. 當一個 Contributors? 將源碼的整體或部分再次開源發(fā)布的時候,必須繼續(xù)遵循 CPL 開源協(xié)議來發(fā)布,而不能改用其他協(xié)議發(fā)布。除非你得到了原“源碼” Owner? 授權。

          2.CPL 協(xié)議下,你可以將源碼不做任何修改來商業(yè)發(fā)布。但如果你要將修改后的源碼其開源,而且當你再發(fā)布的是 Object Code 的時候,你必須聲明 它的 Source Code 是可以獲取的,而且要告知獲取方法

          3. 當你需要將 CPL 下的源碼作為一部分跟其他私有的源碼混和著成為一個 Project 發(fā)布的時候,你可以將整個 Project/Product 以私人的協(xié)議發(fā)布,但要聲明哪一部分代碼是 CPL 下的,而且聲明那部分代碼繼續(xù)遵循 CPL

          4. 獨立的模塊( Separate Module ),不需要開源

          ?

          GPL Gun General Public License version 2.0? 1991

          最常見的開源協(xié)議,使用它作為授權協(xié)議的有大名鼎鼎的 Linux GPL 最顯著的兩個特點就是網上稱為的“病毒性傳播”和“不允許閉源的商業(yè)發(fā)布”。

          ?

          所謂的“病毒性傳播”,指的是, GPL 規(guī)定,所有從 GPL 協(xié)議授權的源碼衍生出來的(即上面提到的 Derivative Module ),或者要跟 GPL 授權的源碼混著用的 Project ,都要遵循 GPL 協(xié)議,就像病毒一樣,粘上了關系,就“中毒”了。 GPL 這樣規(guī)定的目的是,保證 GPL 協(xié)議保護下的產品,不會再受到其他協(xié)議或者授權的約束。即讓跟 GPL 有關系的源碼都能免費獲取。舉個例子,如果你的改進的 Linux 中使用了 GPL 授權下的開源模塊(也必須使用,你不可能自己重新去做個內核吧,如果做出來了,你也沒必要叫 Linux 了。),那么你整個 Linux 產品也必須遵循 GPL 協(xié)議去開源,不能以其他方式去開源發(fā)布,更不允許閉源發(fā)布。這樣一來,就不會出現(xiàn)這樣一個 Linux --這個功能是 GPL 協(xié)議授權的,可以免費獲取源碼,而另外一個功能是其他協(xié)議下的,拿不到源碼。這點規(guī)定對使用或者研究該產品的人來說,是一個極大的便利。

          ?

          而“不允許閉源商業(yè)發(fā)布”指的是,在 GPL 授權下,你的軟件產品可以商業(yè)發(fā)布,拿去賣錢,但是在這同時,你也必須將該產品的源碼以 GPL 協(xié)議方式開源發(fā)布出去,供他人免費獲取。也許有人會迷惑,拿去賣,又同時開源,那誰來買阿?這個產品怎么賺錢呢??這就涉及到開源產品的商業(yè)模式的問題了。

          ?

          GPL 協(xié)議下的商業(yè)發(fā)布的一個關鍵點就像 Java 視線論壇的 Robin 所說的, GPL 是針對軟件源代碼的版權,而不是針對軟件編譯后二進制版本的版權。你有權免費獲得軟件的源代碼,但是你沒有權力免費獲得軟件的二進制發(fā)行版本。 GPL 對軟件發(fā)行版本唯一的限制就是:你的發(fā)行版本必須把完整的源代碼一同提供。

          ?

          BSD Berkeley Software Distribution

          GPL 有很大的不同, BSD 協(xié)議是給予人很大的自由的一種開源協(xié)議。其最大的特點是, Recipients 幾乎可以對源碼“為所欲為”,可以自由地修改,自由地使用,修改后再以其他方式再發(fā)布(商業(yè)或者開源)。但,你做這些事情的時候,還是得遵循以下規(guī)則:

          1 如果再發(fā)布的產品中包含原“源代碼”,則在原“源代碼”中必須帶有原來代碼中的 BSD 協(xié)議。

          2 如果再發(fā)布的只是二進制類庫 / 軟件( Object Code / Product ),則需要在類庫 / 軟件的文檔和版權聲明中包含原來代碼中的 BSD 協(xié)議。

          3 不可以用開源代碼的作者 / 機構名字和原來產品的名字做市場推廣。

          ?

          其實這幾個規(guī)則約定的目的也只是達到一個目的:是他人的東西,別人以 BSD 開源了,你就不能不做任何聲明而占為己有,更不能用他人的名義來做商業(yè)推廣。你只對你自己的東西擁有絕對控制權。

          BSD 代碼鼓勵代碼共享,但需要尊重代碼作者的著作權。 BSD 由于允許使用者修改和重新發(fā)布代碼,也允許使用或在 BSD 代碼上開發(fā)商業(yè)軟件發(fā)布和銷售,因此是對商業(yè)集成很友好的協(xié)議。而很多的公司企業(yè)在選用開源產品的時候都首選 BSD 協(xié)議,因為可以完全控制這些第三方的代碼,在必要的時候可以修改或者二次開發(fā)。

          ?

          Apache License version 2.0

          Apache License 是著名的非盈利開源組織 Apache 采用的協(xié)議。該協(xié)議和 BSD 類似,同樣鼓勵代碼共享和尊重原作者的著作權,同樣允許代碼修改,再發(fā)布(作為開源或商業(yè)軟件)。需要滿足的條件也和 BSD 類似:(配備英文原文,方便更準確理解)

          1 需要給 Recipients 一份 Apache License

          2 如果你修改了代碼,需要在被修改的文件中進行說明。

          3 Derivative Module 中(修改和包含源代碼而衍生的代碼)需要帶有原來代碼中的協(xié)議,商標,專利聲明和其他原來作者規(guī)定需要包含的說明。

          4 如果再發(fā)布的產品中包含一個 Notice 文件,則在 Notice 文件中需要帶有 Apache License 。你可以在 Notice 中增加自己的許可,但不可以表現(xiàn)為對 Apache License 構成更改。

          ?

          Apache License 也是對商業(yè)應用友好的許可。使用者也可以在需要的時候修改代碼來滿足需要并作為開源或商業(yè)產品發(fā)布 / 銷售。

          ?

          LGPL

          LGPL GPL 的一個為主要為類庫使用設計的開源協(xié)議。和 GPL 要求任何使用 / 修改 / 衍生之 GPL 類庫的軟件必須采用 GPL 協(xié)議不同。 LGPL 允許商業(yè)軟件通過類庫引用 (link) 方式使用 LGPL 類庫而不需要開源商業(yè)軟件的代碼。這使得采用 LGPL 協(xié)議的開源代碼可以被商業(yè)軟件作為類庫引用并發(fā)布和銷售。

          ?

          但是如果修改 LGPL 協(xié)議的代碼或者衍生,則所有修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須采用 LGPL 協(xié)議。因此 LGPL 協(xié)議的開源代碼很適合作為第三方類庫被商業(yè)軟件引用,但不適合希望以 LGPL 協(xié)議代碼為基礎,通過修改和衍生的方式做二次開發(fā)的商業(yè)軟件采用。

          ?

          posted @ 2006-05-17 14:27 Кёп 閱讀(1551) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 将乐县| 德格县| 重庆市| 凤城市| 堆龙德庆县| 淮北市| 岫岩| 阿拉善左旗| 平邑县| 北海市| 盐池县| 余庆县| 河池市| 公安县| 灵丘县| 凤山市| 南丹县| 林芝县| 张家界市| 精河县| 渭南市| 肥城市| 木里| 东乡县| 莫力| 景德镇市| 青海省| 屯昌县| 育儿| 昌乐县| 彝良县| 同德县| 朝阳县| 大庆市| 定陶县| 宜都市| 莆田市| 乌兰浩特市| 栾城县| 永靖县| 水城县|