基礎知識普及:什么是Copyleft?
如果你在開源項目中花費了很多時間的話,你可能會看到使用的術語 “copyleft”(GNU 官方網站上的釋義:中文,英文)。雖然這個術語使用比較普遍,但是很多人卻不理解它。軟件許可是一個至少不亞于文件編輯器和打包格式的激烈辯論的主題。專家們對 copyleft 的理解可能會充斥在好多書中,但是這篇文章可以作為你理解 copyleft 啟蒙之路的起點。
什么是 copyright?
在我們可以理解 copyleft 之前,我們必須先介紹一下 copyright 的概念。copyleft 并不是一個脫離于 copyright 的法律框架,copyleft 存在于 copyright 規則中。那么,什么是 copyright?
它的準確定義隨著司法權的不同而不同,但是其本質就是:作品的作者對于作品的復制(copying)(因此這個術語稱之為 “copyright”:copy 's right)、表現等有一定的壟斷性。在美國,其憲法明確地闡述了美國國會的任務就是制定版權法律來“促進科學和實用藝術的進步”。
不同于以往,版權會立刻附加到作品上——而且不需要注冊。默認情況下,所有的權力都是保留的。也就是說,沒有經過作者的允許,沒有人可以重新出版、表現或者修改作品。這種“允許”就是一種許可,可能還會附加有一定的條件。
如果希望得到對于 copyright 更徹底的介紹,Coursera 上的教育工作者和圖書管理員的著作權是一個非常優秀的課程。
什么是 copyleft?
先不要著急,在我們討論 copyleft 是什么之前,還有一步。首先,讓我們解釋一下開源(open source)意味著什么。所有的開源許可協議,按照開源倡議的定義(Open Source Inititative's definition)(規定),除其他形式外,必須以源碼的形式發放。獲得開源軟件的任何人都有權利查看并修改源碼。
copyleft 許可和所謂的 “自由(permissive)” 許可不同的地方在于,其衍生的作品中,也需要相同的 copyleft 許可。我傾向于通過這種方式來區分兩者不同: 自由(permissive)許可向直接下游的開發者提供了***的自由(包括能夠在閉源項目中使用開源代碼的權力),而 copyleft 許可則向最終用戶提供***的自由。
GNU 項目為 copyleft 提供了這個簡單的定義(中文,英文):“規則就是當重新分發該程序時,你不可以添加限制來否認其他人對于[自由軟件]的自由。(the rule that when redistributing the program, you cannot add restrictions to deny other people the central freedoms [of free software].)”這可以被認為權威的定義,因為 GNU 通用許可證(GNU General Public License,GPL)的各種版本的依然是最廣泛使用的 copyleft 許可。
軟件中的 copyleft
GPL 家族是最出名的 copyleft 許可,但是它們并不是唯一的。Mozilla 公共許可協議(Mozilla Public License,MPL)和 Eclipse 公共許可協議( Eclipse Public License,EPL)也很出名。很多其它的 copyleft 許可 也有較少的采用。
就像之前章節介紹的那樣,一個 copyleft 許可意味著下游的項目不可以在軟件的使用上添加額外的限制。這***用一個例子來說明。如果我寫了一個名為 MyCoolProgram 的程序,并且使用 copyleft 許可來發布,你將有使用和修改它的自由。你可以發布你修改后的版本,但是你必須讓你的用戶擁有我給你的同樣的自由。(但)如果我使用 “自由(permissive)” 許可,你將可以將它自由地合并到一個不提供源碼的閉源軟件中。
對于我的 MyCoolProgram 程序,和你必須能做什么同樣重要的是你必須不能做什么。你不必用和我完全一樣的許可協議,只要它們相互兼容就行(但一般的為了簡單起見,下游的項目也使用相同的許可)。你不必向我貢獻出你的修改,但是你這么做的話,通常被認為一個很好的形式,尤其是這些修改是 bug 修復的話。
非軟件中的 copyleft
雖然,copyleft 的概念起始于軟件世界,但是它也存在于之外的世界。“做你想做的,只要你保留其他人也有做同樣的事的權力”的概念是應用于文字創作、視覺藝術等方面的知識共享署名許可(中文,英文)的一個顯著的特點(CC BY-SA 4.0 是貢獻于 Opensource.com 默認的許可,也是很多開源網站,包括 Linux.cn 在內所采用的內容許可協議)。GNU 自由文檔許可證是另一個非軟件協議中 copyleft 的例子。在非軟件中使用軟件協議通常不被建議。
我是否需要選擇一種 copyleft 許可?
關于項目應該使用哪一種許可,可以用(已經有了)成篇累牘的文章在闡述。我的建議是首先將許可列表縮小,以滿足你的哲學信條和項目目標。GitHub 的 choosealicense.com 是一種查找滿足你的需求的許可協議的好方法。tl;drLegal 使用平實的語言來解釋了許多常見和不常見的軟件許可。而且也要考慮你的項目所在的生態系統,圍繞一種特定語言和技術的項目經常使用相同或者相似的許可。如果你希望你的項目可以運行的更出色,你可能需要確保你選擇的許可是兼容的。