“借鑑代碼不能算抄...借鑑!程序員的事,能算抄嗎!”
最近某著名視頻網站的知名UP主由於不恰當的代碼“借鑑”而招致了不小的非議,這引出了很多人對於版權的討論。其實無論是引用論文、圖書,抑或是代碼,版權都是我們繞不開的問題。正確地引用不僅僅是對他人勞動成果的尊重,也可以避免潛在的法律風險。
“敢有翻印,千里必究”:版權的起源
所謂“版權”,就是著作權,其產生可謂技術推動社會與法律發展的典範。在印刷術大規模推廣之前,著作的流傳主要依靠手抄本,數量相對較少。而印刷術的推廣使得一部著作可以很方便地複製和銷售,這也就催生出版權以及對版權的保護。
根據現存的文獻,最早在唐、五代時期中國已經出現了牌記。所謂“牌記”,乃是出版者用以說明版本情況的標誌,又稱牌子、書牌。牌記的主要內容包括刊刻時間、地點、刊刻者姓名、室名等,與當今圖書的版權頁內容基本類似。宋朝之後排記廣爲推行,明清時期,更是有不少人會在書本後印上“版權所有,敢有翻印,千里必究”。
“侯官嚴氏版權所有”,嚴復提供給商務印書館的印花(圖片來源:文匯網《艾俊川 | 嚴復改“版權”爲“著作權”》)
世界上第一部著作權法,一般認爲是英國的《安妮法令》(Statute of Anne,又稱《1710年版權法令》,全稱爲“爲鼓勵知識創作授予作者及購買者就其已印刷成冊的圖書在一定時期內之權利的法令”)。這項法令於1709年由安妮女王頒佈,並於次年4月10日正式執行。法令規定對於1709年前已經印刷的圖書,作者享有爲期21年的專有權利;對於尚未印刷的圖書則爲14年。未經權利所有者的許可而印製或銷售其圖書便構成侵權,侵權圖書將被沒收並按侵權圖書每頁1便士罰款。
著作權的客體自然是作品。依據《伯爾尼保護文學和藝術作品公約》(《伯爾尼公約》)第二條第一款的規定,“(文學和藝術)作品”一詞包括文學、科學和藝術領域內的一切成果,不論其表現形式或方式如何。所以無論是圖書,抑或是繪畫、音樂、攝影,甚至是舞蹈、表演,都是著作權保護的對象,當然也包括前段時間引起爭議的代碼。不過值得強調的是,著作權保障的是思想的表達形式,而不是保護思想本身。所以算法、數學方法等均不屬著作權所要保障的對象。
GNU is Not Unix:自由軟件的發端
時間來到二十世紀中葉,彼時計算機在歐美大學和研究機構內逐漸普及。上世紀六十年代,幾乎所有軟件都是由研究人員開發並分發。七十年代,由於集成電路技術的發展,計算機的體積和成本大大降低,個人電腦也開始走進普通家庭。早期的計算機軟件需要經常性地修改以適配新的操作系統或硬件、修正bug,軟件的源代碼一般都會與軟件一併提供。此時便誕生了第一批自由軟件,如不少理工科同學都會用到的排版軟件TeX。
但隨着計算機的進一步推廣,軟件的版權問題也慢慢引起人們的重視。一個典型的例子就是著名的UNIX系統。上世紀七十年代,AT&T曾免費地向研究機構人員分發早期版本的UNIX,但在八十年代,隨着UNIX的使用變得更爲廣泛,AT&T停止了免費分發UNIX,並且開始對系統補丁收費。這也直接催生出了“GNU計劃”。
左圖:理查德·馬修·斯托曼,自由軟件活動家,GNU項目發起人;右圖:GNU計劃的標誌——牛羚(圖片來源:Wikipedia)
1983年,理查德·馬修·斯托曼在MIT發起了“GUN計劃”,旨在構建一整套完全自由的操作系統“GNU”。GNU是“GNU is Not Unix”的遞歸縮寫。所謂“遞歸縮寫”或者“遞歸首字縮寫”,指的是縮寫會遞歸地包含在其全稱之中。(再舉個例子,PHP的全稱是“PHP: Hypertext Preprocessor”,首字母縮寫便是PHP自己)爲了避免與單詞“gnu”(牛羚)混淆,斯托曼宣佈GNU發音應爲“Guh-NOO”(“革奴”)。
斯托曼引領了之後的自由軟件運動。在《GNU宣言》中,斯托曼指出要“重現當年軟件界合作互助的團結精神”。而自由軟件則意味着用戶可以自由地運行、拷貝、分發、學習、修改並改進該軟件。1985年,斯托曼創立了自由軟件基金會, 爲GNU計劃提供技術、法律和財務支持。1989 年,該基金會發布了第一版的“GNU通用公共許可證”(GNU General Public License, GPL)。
這裏有兩點需要指出。其一,自由軟件(free software)中的“free”主要指的是“自由”而不是“免費”(當然免費也很重要)。雖然大部分自由軟件是免費的,但是自由軟件的許可證並不限制販賣軟件或者提供商業服務。自由軟件的關鍵在於四項基本自由:
- 自由度0:無論用戶出於何種目的,必須可以按照用戶意願,自由地運行該軟件。
- 自由度1:用戶可以自由地學習並修改該軟件,以此來幫助用戶完成用戶自己的計算。作爲前提,用戶必須可以訪問到該軟件的源代碼。
- 自由度2:用戶可以自由地分發該軟件的拷貝,這樣就可以助人。
- 自由度3:用戶可以自由地分發該軟件修改後的拷貝。藉此,用戶可以把改進後的軟件分享給整個社區令他人也從中受益。作爲前提,用戶必須可以訪問到該軟件的源代碼。
其次,自由軟件不等於沒有著作權,也不意味着作者放棄了著作權。其中的邏輯在於自由軟件旨在保證自由使用、自由修改等的同時,要求修改後的軟件(“二創”)仍具有“自由”的屬性。這就要求“一創”的著作權不能放棄,以此從法律上保證“二創”也必須將“自由”傳承下去。
大教堂和市集:開源代碼
自由軟件運動無疑取得了巨大的成功,但其運作模式卻也招致了批評。這裏就不得不提到另一位傳奇黑客,埃裏克·斯蒂芬·雷蒙(ESR)。
左圖:埃裏克·斯蒂芬·雷蒙,程序員、黑客,開放源代碼運動的主要領導者之一;右圖:《大教堂與市集》,ESR的代表作之一(圖片來源:Wikipedia)
1997年,埃裏克·斯蒂芬·雷蒙發表了著名的《大教堂與市集》(The Cathedral and the Bazaar)。作爲深度參與衆多知名軟件開發的黑客,雷蒙在書中探討了兩種不同的自由軟件開發模式。即“大教堂模式”(Cathedral Model)和“市集模式”(Bazaar Model)。前者是傳統的自由軟件開發模式,要求源代碼在軟件發行後公開,但每個版本開發過程中有一個專屬團隊掌控全局。而後者則主張源代碼在開發過程中即在互聯網公開(譬如Linux核心的開發)。
書中雷蒙提出了著名的林納斯定律(林納斯·託瓦茲,Linux創始人):"Given enough eyeballs, all bugs are shallow." ——“只要眼睛多,bug容易捉。”(感謝《大教堂與市集》中文譯者衛劍釩老師的神來之筆)
一經發布,《大教堂和市集》就引起了業界極大的關注,而這也激起了雷蒙等人深入思考如何將自由軟件的概念引入商業軟件,於是他們在自由軟件運動的基礎上,提出了“開放源代碼”(open source),強調分享與協作軟件源代碼帶來的潛在商業機會。於是開放源代碼促進會(OSI)於1998年2月創立,旨在宣傳和推動開源運動。OSI 在網站上給出了定義開源的10條標準。鑑於篇幅原因,有興趣的同學可以參閱OSI相關網頁(
https://opensource.org/osd)。
儘管斯托曼在開源運動之初表示“開源軟件”與“自由軟件”可以包容,然而之後他反對將兩者混爲一談。形式上,開源軟件所覆蓋的範圍遠大於自由軟件。可以認爲,自由軟件是開源軟件的子集。換言之,自由標準的軟件也是開源軟件,而符合開源標準則未必符合自由軟件的標準。
具體來說,自由軟件運動基於“黑客文化”,將尊重用戶自由作爲一種道德標準的理想主義運動;而開源運動則主要側重於使用開放的開發方式,從而促使軟件優化。自由軟件運動經常反對開源運動擁抱商業化的做法,而後者也不甚認同前者將道德強加於人的觀念。
對於普通的軟件開發者和用戶,相較於研究源遠流長的黑客文化,也許瞭解一下如何爲代碼選擇開源許可證更爲實用。現行的開源許可證衆多,如何爲代碼選擇開源許可證,以及如何正確地使用開源代碼,就成爲了一個值得研究的問題。對於開發者,這裏直接引用阮一峯老師關於程序員如何選擇許可證的導圖。導圖最初由烏克蘭程序員Paul Bagwell給出,涉及最主流的六種許可證。
圖片來源:https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
而對於用戶,則需要我們在使用前認真閱讀原作者開源許可證(LICENSE)部分的條款。
譬如這次知名UP主的代碼爭議事件中的技術工具ASCII-generator,原作者Viet Nguyen在其GitHub的項目裏包含了MIT許可證(The MIT License),明確指出刪去作者信息(著作權聲明的一部分)的行爲是不符合要求的,因此使用者就無法得到許可。從理論上說,原作者就可以依此提出版權訴訟。(當然現實中原作者選擇了諒解)
開源項目推薦:開源可樂
當然了,開源項目也並不都與計算機相關,它們也可以很有意思。比如開源可樂項目——OpenCola。與神祕兮兮的可口可樂配方不同,OpenCola配方是公開發布的——
開放可樂配方
香料配方
- 3.50 ml 橙油(orange oil)
- 1.00 ml 檸檬油(lemon oil)
- 1.00 ml 肉豆蔻油(nutmeg oil)
- 1.25 ml 桂皮油(cassia oil)
- 0.25 ml 芫荽油(coriander oil)
- 0.25 ml 橙花油(neroli oil)
- 2.75 ml 酸橙油(lime oil)
- 0.25 ml 薰衣草油(lavender oil)
- 10.0 g 阿拉伯膠(gum arabic)
- 3.00 ml 水
糖漿
- 約10 ml 上述香料
- 約17.50 ml 75% 磷酸或檸檬酸(phosphoric acid or citric acid)
- 2.28 l 水
- 2.36 kg 白砂糖
- 約2.50 ml 咖啡因(可選)
- 30.0 ml 焦糖色(caramel color)
製備香料
- 將各種香精混合在一個杯子裏
- 加入阿拉伯膠,用勺子攪拌
- 加水攪拌均勻,4-5 分鐘
- 密封保存於玻璃罐中,冷藏或室溫
製備糖漿
- 取香料,加入 75% 磷酸或檸檬酸
- 加水後加糖,攪拌
- 可在攪拌時加入咖啡因,確保其完全溶解
- 加入焦糖色,攪拌至完全混合
製備可樂
- 取一份糖漿,加入五份碳酸水(或稱氣泡水,carbonated water)混合
OpenCola 配方根據 GNU 通用公共許可證 (GPL) 發佈
https://upload.wikimedia.org/wikipedia/commons/b/bf/OpenCola_soft_drink_recipe.pdf
根據《麻省理工科技評論》的報道,OpenCola最早是OpenCola公司推廣其開源軟件的一個營銷項目,但似乎飲料比他們的軟件更爲成功。
由於開源的也可以是可樂配方這種好東西,那麼它也可以是菜譜啊!屏幕前的各位大廚可以考慮將類似豆腐腦、螺絲粉等的菜譜以MIT許可證開源分享,這樣就能允許大家可以在原有菜譜的基礎上加以修改(譬如加鹽or加糖?是否放酸筍?)並分享出來,引發了無數討論的 “甜鹹之爭”這類問題似乎也可以因此迎刃而解了?
作者:鑄雪