上海基诺彩票中奖号码

English [en]   fran?ais [fr]   italiano [it]   русский [ru]   簡體中文 [zh-cn]  

這是針對英文原版頁面的中文翻譯。

許可證兼容性和再次授權

Richard Stallman 著

如果你要把兩個自由程序合而為一,或者把其中之一的代碼并入另一個,那么就會有一個它們的許可證是否允許/禁止這樣做的問題。(*)

如果兩個軟件使用同樣的許可證,應該沒有問題,假定該許可證象幾乎所有的自由軟件許可證一樣順理成章。(**)

那么如果許可證不一樣會如何呢?一般來說,如果有方法可以合并代碼而又能同時遵循各個代碼的許可證,那么我們就說這些許可證是 兼容的。其結果經常是一個由各個部分使用不同許可證的組合程序——但也不盡然。具有這個兼容性,或者沒有此兼容性,是許可證組合在一起的特點,這個特點并不依賴于你使用它們的順序。該許可證組合還決定著該合并程序需要哪個許可證。

我們把許可證分為三類:松散型(也即 “縱容型” 或者 “順從型”),中間型和 copyleft 型。松散型許可證不介意專有軟件使用其代碼。copyleft 許可證禁止專有軟件使用其代碼,它明確要求所有使用其代碼的程序都要使用同樣的許可證。中間型許可證限制但并不禁止專有軟件使用其代碼。

一般地,松散型許可證(修改版 BSD、X11、Expat、Apache、Python 等)是互相兼容的。這是因為它們對添加到程序里的代碼并無要求。它們甚至允許把整個程序(或許帶有修改)添加到專有軟件之中;因此,我們稱之為 “順從型許可證”,理由是它們在用戶的自由被否定時沒有說 “不”。

在把使用松散型許可證的代碼合在一起時,組合程序的每個部分都帶有自己的許可證。當這些代碼交織在一起無法分辨時,組合程序應該帶上所有代碼的許可證。由于這些許可證都是松散型的,所以全都帶上除了太長之外也沒有別的問題。(***)

同理可知,松散型許可證通常也和 copyleft 許可證兼容。在組合程序中,使用松散型許可證的代碼仍然帶著松散型許可證,而組合程序整體使用 copyleft 許可證。有一個松散型許可證,Apache 2.0,帶有和 GPL v2 不兼容的專利條款;由于我認為這些專利條款還不錯,所以我讓 GPL v3 與之兼容了。

因其 “令人反感的廣告條款”,原始 BSD 許可證是一個重要的例外。該廣告條款要求包含 任何 使用原始 BSD 許可證代碼的 任何 產品的 所有 廣告都要帶有一個特定的聲明。這種做法過去和所有已知的 copyleft 許可證都不兼容,現在也是。當程序里積攢了越來越多相似而又不同的廣告聲明時,每個發行版都忍受著一種如芒在背的痛苦。有段時間,一個 BSD 發行版需要包含 70 多個不同的聲明。

我說服 Hal Varian,UC Berkeley 的一位校長,促使他們發布 “修改版 BSD 許可證”(沒有廣告條款)并將 BSD 代碼按照此許可證發布。這樣就基本上根除了上面所說的問題。現在,原始 BSD 許可證(所幸)已經很少被使用了,但是我們還是必須小心 避免討論 “該” BSD 許可證

一般來說,兩個不同的 copyleft 許可證是無可避免的不兼容,除非兩者之間有明確的兼容條款。這不是因為細節有誤;這是 copyleft 理念與生俱來的特點。copyleft 的理念是 “修改和擴展的版本必須延用同樣的許可證。”如果使用許可證甲的擴展程序必須延用許可證甲,使用許可證乙的程序必須延用許可證乙,那么它們之間就是不可調和;如果合并程序,許可證必須是甲,必須是乙。這就是為什么 GPL v2 和 GPL v3 不兼容;這是無法避免的。同樣地,CC-BY-SA 4.0 的要求就天生和 CC-BY-SA 3.0 不兼容,而且作者也無法避免這一點。

有兩個方法來擺脫新版 copyleft 許可證帶來的先天不兼容性。

FSF 使用請求人們按照 “遵循 GNU GPL 版本 N 或任何以后版本” 來發布程序這一方法來解決此兼容性問題。這種授權兼容版本 N,也兼容版本 N+1(因為它確認版本 N+1 是可選項)。當你將遵循 “GPL 3 或以后版” 的代碼和遵循 “GPL 2 或以后版” 的代碼合并時,組合代碼的許可證是它們的交集,就是 “GPL 3 或以后版”。

我們希望我們再也不會有 GNU GPL v4,但是人無完人、世事難料,我們無法預見所有的情況。通過按照遵循 GNU GPL 3 或以后版本來發布程序,你就允許你的代碼許可證升級到 GNU GPL v4,一旦我們發布了 v4。

另一個方法是讓每一個版本都明確允許升級到以后的版本。這就是 Creative Commons 采用的辦法:例如,CC-BY-SA 4.0 版(當前版)明確允許任何用戶將許可證升級到以后版本的 CC-BY-SA(一旦有了)。Mozilla 基金會也是使用該方法。

只有 GNU 許可證給了作者選擇是否允許升級到未來許可證版本的權利。當年我編寫第一個 GNU GPL 版本的時候,那是 1989 年,我曾經想過包含一個許可證升級的選項,就像現在的 CC 許可證一樣,但是我覺得把選擇權交給作者更正當。這樣,作者就可以把其程序按照 “只用 GPL 1” 或者 “用 GPL 1 或以后版” 來發布。

從那時起,我就在思量當時的決定是否明智。像 Linux 這樣的程序,只允許一個版本的 GNU GPL 并拒絕升級許可證,這就導致實際上的不兼容。(****)或許我們應該在 GPL v4 的時侯包含一個升級條款,如果我們需要版本 4 的話。

有些 copyleft 許可證有一個明確的再次授權條款,該條款允許將代碼按照不同的 copyleft 許可證授權,這樣就允許了 copyleft 許可證之間的交叉授權。例如,CeCILL 許可證明確許可將代碼按照 GNU GPL v2 或以后版再次授權。如果程序 P 使用 CeCILL 許可證授權,而你想把它和按照 GPL v3 或以后版授權的程序 Q 合并在一起,那么 CeCILL 許可證允許你這么做,合并或組合的代碼使用 GPL v3 或以后版授權。

明確的再次授權許可和兼容性并不是一回事(雖然再次授權后的代碼可以和其他代碼兼容),二者也不對稱。例如,CeCILL 許可證明確允許將代碼再次授權給 GNU GPL,而 GNU GPL 并不允許將代碼再次授權給 CeCILL。因此,你不能合并 P 和 Q 兩個程序并把它們按照 CeCILL 許可證發布;那樣就違反了 Q 程序使用的 GPL 許可證的要求。它們的合并程序只允許使用適當的 GPL 版本來發布。

類似,CC-BY-SA 4.0 明確允許修改版再次授權可以使用 GPL v3 許可證,但是 GPL v3 并不允許再次授權到 CC-BY-SA。這個問題應該不會影響軟件代碼;Creative Commons 許可證的說明指出它不用于代碼,并且也指出如果是代碼,應該使用 GNU GPL 許可證。但是還有一些其他種類的作品,比如硬件設計或游戲藝術等,這時就會碰到把使用 CC-BY-SA 的材料和使用 GNU GPL 的材料合并的問題。這種情況可以使用 CC-BY-SA 許可證中明確說明的再次授權條款。

不幸的是,CC-BY-SA 4.0 不允許再次授權到將來版本的 GPL。當你把使用 CC-BY-SA 4.0 的材料再次授權到 GPL,你該怎么做呢?你 把你自己定義為許可證版本的代理,并指明該材料是否授權給未來的 GPL 版本。如果將來有了 GPL v4 并且 Creative Commons 許可證決定允許從 CC-BY-SA 再次授權到 GPL v4,那么你作為代理就能夠返回來用 GPL v4 對該材料再次授權。(另外,你也可以直接請該材料的作者立即授予你許可。)

GNU GPL 和 GNU Affero GPL 是兩個不同的 copyleft 許可證,所以它們自然是不兼容的。我們為此設計了專門的兼容方案:你可以在同一個程序里包含使用 GNU GPL v3 的源代碼和使用 GNU Affero GPL 的源代碼。因為兩個許可證都明確說明可以這么做,所以這個沒問題,其效果就是合并的程序適用于 GNU AGPL 許可證。不過,你不能簡單地把使用 GNU GPL(有或沒有 “或以后版本”)的代碼再次授權到 GNU Affero GPL,反過來也是一樣;兩個許可證都沒有允許這樣做。請也要注意,GNU Affero GPL v3 不是一個 GNU GPL v2 的 “以后版本”,因為 GNU Affero GPL 和 GNU GPL 是兩個不同系列的許可證。

GNU LGPL v3 真的就是 GNU GPL v3 加上額外的條款。GPL v3(第 7 節)表明你總是可以去掉那些額外的條款,這樣做了之后同樣的代碼就遵循了常規的 GNU GPL v3。如果一個程序允許使用 GNU LGPL v3 或以后版本,那么你就可以把它再次授權到 GPL v3 或以后版本;對將來的每個 GPL 版本 N(N > 3),我們都會做一個 LGPL 版本 N,它由 GPL 版本 N 加上額外的條款構成。

對 GNU LGPL 版本 2.1 來說,它明確允許再次授權到 GNU GPL v2 或者以后版本。

中間型的許可證是指對重新發布有重要的要求但是又不是 copyleft 的那些許可證。Eclipse 公共許可證和 Mozilla 公共許可證都是中間型許可證。由于中間型許可證的要求不允許組合程序使用 copyleft 許可證,所以它們一般都不兼容 copyleft 許可證。Mozilla 公共許可證允許將代碼再次授權到 GNU GPL,除非該代碼明確拒絕這樣做。

最后,雙重許可證怎么辦呢?(*****)雙重許可證是一種或的關系:它的意思是同一個程序可以選擇兩個或多個許可證中的一個或幾個。例如,老版本的 Perl 就帶有雙重許可證:或者是 Artistic 許可證,或者是 GNU 通用公共許可證。這意味著每個用戶都可以選擇并按照其中一個許可證或者就按照 Perl 原來的方式再次授權 Perl。如果雙重許可證中的一個許可證和一組許可證兼容,那么該雙重許可證就和該組許可證兼容。

當你選擇許可證時,請選擇 GNU GPL v3 或者以后版本,或者是與之兼容的許可證。這是使你的代碼能夠和幾乎所有自由軟件集合的代碼組合的正確方法。選擇 GPL 或 AGPL,v3 或者以后版本,也會最大程度地保護所有使用你各個版本代碼的用戶的自由。

合并代碼

當一組許可證兼容時,這就意味著你可以合法地合并或融合一系列按照其中某個許可證發布的程序。那么,合并后的程序該怎樣授權呢?

每個自由軟件許可證都說你必須保持其代碼原有的許可證。所以嚴格來講,合并程序的許可證要包含其所有組成部分的許可證。不過,有時你想要一個 總結性 的回答來解決合并程序該如何授權的問題。究竟哪一個許可證是使用合并程序的人 要關注的呢?

為了計算,你要從所有直接相關的許可證列表開始。然后你可以把列表中一些能夠被另外一些許可證包含的許可證刪除。

如果遵循許可證甲意味著也遵循許可證乙,那么我們就說許可證甲 包含 許可證乙。

例如,GNU GPL 版本 N 和 GNU Affero GPL 版本 N 都包含了 GNU Lesser GPL 版本 N,而它們三個都包含了 GNU Lesser GPL 版本 2.1。

任一版本 N 的 GNU 許可證,如果 N 不小于 3,那么它就包含了 Apache 2.0 許可證。

GNU GPL 版本 N 包含了與之兼容的所有版本的 Mozilla 公共許可證。

Apache 2.0 許可證包含了 BSD、Expat、X11、ISC 和 CC-0 許可證。BSD 3 條款包含了 BSD 2 條款。BSD 許可證包含了 Expat、X11 和 ISC 許可證以及 CC-0。

此處并非要提供一個完整列表,但是如果我們發現還有其他值得說明的例子,我們還會添加。

當某些許可證被包含時,你仍然需要在發布組合程序時包含該許可證的拷貝。

腳注

* 可以想象還可能有關于合并程序的其他法律問題,這些問題可能和合并程序的許可證無關。我們只討論和許可證本身有關的問題。

** 實際當中用到的不那么順理成章的許可證主要是 TeX 的許可證:如果兩個程序都按照 TeX 的方式授權,那么你就沒有辦法發布兩個程序的組合程序。

TeX 許可證允許發布的修改版只能是原來的版本加上一個差異文件。如果甲和乙兩個程序分別按照 Tex 許可證發布,然后再合并,那么按照甲程序加上一個差異文件來發布合并程序就違反了乙程序的許可證。反過來,發布乙程序加上差異文件的話又違反了甲的許可證。按照其他方式發布的話就違反了甲乙兩個程序的許可證。

這個并不意外,TeX 早在 1982 年就發布了:社區從此逐漸學會了撰寫順理成章的許可證。

*** 當發布源代碼時,在源代碼里加入許可證聲明通常就足夠了;只有象使用松散型許可證的僅發布二進制而不帶源代碼的程序才需要額外的許可證聲明。

**** 另外,GPL v2 仍然允許非自由的二進制——硬件只運行特別簽名的二進制而拒絕其他二進制文件,而且仍然不允許使用 torrent 發布二進制。我們在版本 3 中修復了這些問題,還修復了其他問題,但是我們不能改變版本 2。

***** 有人使用 “雙重許可證” 來兜售許可證例外,但是詞不達意。請參看 兜售例外。請注意,如果某個許可證兜售的程序包含了任何非自由的代碼,那么它就不是在兜售例外,它就是非自由軟件。

最頂

[FSF 標志]“自由軟件基金會(FSF)是一個非盈利組織。我們的使命是在全球范圍內促進計算機用戶的自由。我們捍衛所有軟件用戶的權利。”

加入 購物

上海基诺彩票中奖号码 四方海南麻将微信群 欢乐湖北麻将作弊器 明利配资 espn篮球比分直播 重庆快乐十分 德州麻将技巧怎么赢 湖北30选5开奖 棒球比分雪缘mlb 有免费好友房的麻将吗 青海十一选五 安徽麻将app下载 贵州麻将技巧常用四招 腾讯证券开户 世界杯比分一览表 广东36选7第开奖 cba国内球员得分榜