作者:衛劍釩
大家都知道的是,使用Apache協議的是開源軟件,但若問是不是自由軟件呢?
大多數人是很猶豫的。
因為“自由”兩個字,還挺嚇人的。
很多人以為,只有采用GPL協議的軟件才是自由軟件。
其實,采用Apache 2.0協議的也是自由軟件。
只不過,自由軟件并不等同于copyleft,這才是人們容易搞混的東西。
本文就是簡單搞明白一下什么是開源軟件,什么是自由軟件,什么是copyleft。
誰掌管著定義?
“開源軟件”和“自由軟件”的定義掌握在這兩個組織手中。
1、開放源代碼促進會OSI(Open Source Initiative),維護著“開源”(Open Source)軟件的定義以及其認可的許可證列表。OSI的目標是促進和保護開源軟件及開源社區,致力于提高人們對開源軟件的認識和采用。
OSI于1998年2月成立,創始人為Bruce Perens和Eric S. Raymond。
2、自由軟件基金會(FSF),維護著“自由軟件”(Free Software)的定義以及其認可的許可證列表,旨在促進人們對計算機軟件研究、分發、創建和修改的自由。FSF推崇copyleft的分享方式(如GPL規定的那樣),不過,自由軟件大多不是copyleft的。
FSF于1985年10月由Richard stallman建立。其主要工作是執行GNU計劃,開發更多的自由軟件。
這兩個組織都是民間組織,都是非營利組織。
Perens曾希望OSI可以向普通人(非黑客)介紹自由軟件的原則,但是Richard Stallman不這樣認為,他覺得OSI在理念上和自己有很大不同,認為OSI太過實用化,而不是像FSF這樣強調自由。
不過,在我看來,兩者可能強調的方面不一樣,但效果是類同的。開源軟件和自由軟件的差別不大,并沒有本質上的不同。后面我們會看到這一點。
“源碼可得”就是開源嗎?
對于完全不懂開源的人,他們只能從字面上去理解,他們認為,源碼放出來了就是開源軟件。
當然不是這樣了。
一個軟件,它的源碼可以在互聯網上免費得到,不代表他就是開源軟件或者自由軟件,這種只能叫source available,可翻譯為“源碼可得”、“源碼可用”、“有源軟件”1等等。
一個源碼可得的軟件,究竟是什么性質,要看它的許可證是怎樣的。
許可證就是一個書面協議,軟件作者(或所有者)通過許可證,規定用戶可以或不可以做哪些事,比如用戶能否復制、能否修改、能夠再次發布該軟件等等。
Black Duck統計過,對于源碼可得軟件,目前有大約2600多種許可證。這些許可證的絕大多數都不符合“開源”的定義2,然而,20個最常用的許可證覆蓋了98%的源碼可得軟件,所以,我們只需要了解那些常用的許可證即可。
被使用最多的許可證是下面這9個(OSI統計3),其中又以前6個為最甚。
1、Apache License 2.0 (Apache-2.0)
2、3-clause BSD license (BSD-3-Clause)
3、2-clause BSD license (BSD-2-Clause)
4、GNU General Public License (GPL)
5、GNU Lesser General Public License (LGPL)
6、MIT license (MIT)
7、Mozilla Public License 2.0 (MPL-2.0)
8、Common Development and Distribution License 1.0 (CDDL-1.0)
9、Eclipse Public License 2.0 (EPL-2.0)
你只需要搞懂前面那幾個就可以了,比如Apache、GPL、MIT、BSD。
仔細看看這些許可證你就知道,它們都賦予用戶充分的權利,并且要求不多,大多只是要求保留其版權、商標這些。最能引起爭議的GPL,也只不過要求公開衍生作品的源碼而已。
有人會問,我在github上,看到有很多軟件不帶許可證,這種算什么?
對于一個不帶任何許可證的軟件,我們就不知道它允許用戶有什么權利,也就是說,復制、修改、分發它的權利都是不確定的,只有聯系作者本人才能確定有什么權利。(當然,既然他已經把源碼放在互聯網上了,你看一看的權利還是有的。)
如果該軟件放在Github的公有(public)庫中,則表明軟件發布者已經接受了Github的服務條款,該條款賦予了其他Github用戶一些基本權利,比如允許他們查看該項目庫或fork等。
定義!定義!
OSI對開源軟件的定義放在這里:https://opensource.org/docs/definition.php ,里面有十個標準,這里不一一列舉
簡單地說,開源軟件,就是必須提供源代碼,允許修改和再發布,允許別人銷售或者免費送出,不區別對待任何人和任何領域,不以各種不一致的方法限制他人使用、復制、修改和再發布。
FSF對自由軟件的定義放在這里:https://www.gnu.org/philosophy/free-sw.html ,FSF提出4項自由,如果一個軟件提供了下面這4項自由,它就是自由軟件。
自由度0:用戶可以按照自己的意愿,自由地運行該軟件,而不論出自何種目的。
自由度1:用戶可以自由地學習該軟件,可以按照自己的意愿修改該軟件。
自由度2:用戶可以自由地分發該軟件的拷貝,這樣就可以幫助他人。
自由度3:用戶可以自由地分發該軟件修改后的拷貝,這樣,他人可以從中受益。
當然,因為涉及修改,自由度1和自由度3都暗含了對開放源代碼的要求。
定義中所謂“自由”,意味著這些行為(運行、學習、修改、分發)不必事先征得任何人的許可,也不必為此額外支付任何費用。
FSF還強調,自由軟件允許商業用戶、商業開發和商業發布。商業和自由并不矛盾,錢可以收,但用戶的自由不可剝奪。由于源碼是開放的,許可證又給予了他人種種自由,所以并不存在那種因商業秘密或專利保護所帶來的暴利
自由軟件的商業收費主要是復制軟件的成本費、對軟件提供維護的維保費、培訓費等服務性費用,掙不了什么大錢。
但某些開源軟件的企業版就不一樣了,企業版通常并不開源,它們不是開源軟件也不是自由軟件,它們用的是商業許可證,即便給你源碼,也會有很多限制。
從上面的定義可以看出,開源軟件和自由軟件其實差不多的。連FSF都在官網上承認了這點4:
“開源軟件和自由軟件或多或少是同一類軟件,雖然并不是完全相同:開源所接受的一些許可證我們看來限制過多,還有一些我們認可的自由軟件他們不認可。但不管怎樣,差異是很小的:幾乎所有的自由軟件都是開源軟件,幾乎所有的開源軟件都是自由軟件。”
在OSI的官網上5,維護著OSI認為符合開源軟件定義的許可證列表,上面那9個都是符合開源軟件定義的許可證。
在FSF的官網上6,維護著FSF認為符合自由軟件定義的許可證列表,上面那9個都是符合自由軟件定義的許可證。
你還可以在SPDX這個網站獲取分類信息7,它維護了一個有接近400個許可證的列表,里面列出了哪些是FSF認可的,哪些是OSI認可的。
此外,還可以維基百科的“Comparison of free and open-source software licences”詞條中查看。8
什么是copyleft
現在我們知道,使用Apache許可證的軟件是自由軟件,那它是copyleft軟件嗎?
答案:不是。
copyleft不好翻譯,目前有“版權開放”、“版權屬左”、“左版”、“著佐權”、“版權左派”,“版責”等多種翻譯,但并沒有被普遍接受和采納的。
先說一下什么是copyrigh。
copyright即版權,亦稱著作權,是指作者對其作品的權利。從字面上看,copyright尤其關注copy的權利(right),一個軟件賣給某用戶后,除非作者同意,用戶是不能隨意復制(比如說讓你在這個機器上用,你就不能在另外一臺機器上再裝一套)的,除此之外,除非作者許可,也不能修改、不能對外發布等等。
所以,傳統上,一般我們都能看到這樣的表述:Copyright © 2004 XXXX. All rights reserved. 此即“版權所有”,就是說版權擁有者對其作品的權利都是保留的,僅僅開放他所許可的內容。
下面是一個版權聲明的樣例。
copyleft要大方的多,基本上所有權利都讓渡給用戶了,Richard Stallman曾說明過Copyleft一詞的由來:
“1984或1985年,DonHopkins(一個很有想像力的家伙) 給我寫了一封信。在信封上他寫了一些逗趣的話, 其中包括:copyleft —all rights reversed(copyleft-反轉所有權利)。于是,我就用copyleft一詞以命名當時我正考慮的軟件發行概念。” 9
和自由軟件一樣,copyleft也沒有很嚴格的定義,都屬于很寬泛的概念。 FSF對copyleft的定義: “copyleft是一種通用的方法,通過它,使某個程序成為自由軟件,并要求其衍生程序(對該程序進行修改和擴展后產生的程序)也是自由軟件。”10
Copyleft is a general method for making a program free software and requiring all modified and extended versions of the program to be free software as well.
從該定義看,copyleft軟件天然是一個自由軟件,但比自由軟件多了一項對用戶的要求,就是copyleft許可證要求修改后的copyleft軟件,也必須以copyleft軟件發布。這就是人們常說的“傳染”,你用了一個開源軟件,你也必須把自己的修改和補充都開源出來。
注:本文中,copyleft許可證是指滿足copyleft定義的許可證,如GPL許可證。copyleft軟件是指采用copyleft許可證的軟件,如linux(采用GPL許可證)。
值得注意的是,copyleft并不是說沒有版權,copyleft仍然是有版權的,只不過除版權外,所有其他權利都已開放,也即left給世人,有人把這個形象的說為all rights released。
在我看來,作者只給自己留了一個版權,所以copyleft就是“版權僅留”。
copyleft給了程序員自由,也限制了他們的自由(不得對修改閉源),在FSF看來,限制程序員的自由,是為了給世人更多的自由,所以這是正義的。
copyleft要保障自由軟件能始終給人們自由,一個copyleft軟件,從生到死,從源頭到支流,應該永遠都是自由的。從上游到下游,自由順暢地流動,毫無阻塞,如遇阻塞,則可立即以違背copyleft許可為名發起控訴。
FSF說:“商業軟件通過版權剝奪了用戶的自由,我們使用版權來給予他們自由。這就是為什么我們把copyright改稱copyleft”。
FSF還專門說明為什么不直接把軟件放到公共領域中(版權人完全放棄了版權及一切權利,作品就進入公共領域即public domain),FSF認為,把軟件放在公共領域內,會有人通過修改部分或極少量的方式,將衍生品私有化,從而減少了人們應有的自由。
在Stallman的哲學理念中,信息資產(包括程序、軟件)就像數學公式、定理一樣,應該是公有的,而不應是私有財產。像操作系統、編譯器、數據庫、瀏覽器、TCP/IP協議等等所有這些,都應該開源,讓任何人都可以使用和改進,而且改進后的東西仍應公有。
從本質上講,其觀念是全地球人共同擁有軟件生產資料(主要指軟件,如gcc)、共同生產并共同擁有勞動產品(如Linux),這在本質上是左派(left)的要求,和右派(right)倡導的私有制截然對立。
現在你可以思考一下,是誰更害怕自由?
一些copyleft許可證
最著名的copyleft當然非GPL莫屬。
LGPL也是copyleft的,但相對要弱一點,如果你的軟件僅僅是鏈接glibc(采用LGPL),就不用開源自己的代碼。
AGPL是很強的copyleft許可證,只要你用自由軟件提供云服務,即便你不發布,也要公開源代碼。
Watcom-1.0許可證(Sybase Open Watcom Public License 1.0)是更強的Copyleft許可證,只要你“部署”(該許可證對部署有定義),你就要公開源代碼,即便你并不提供云服務,只是自己公司內部用用。
copyleft的概念本身比較寬泛,不僅可以用于軟件,也可以用于文檔。GFDL是GNU提出的自由文檔許可證,使用了GFDL的文字作品,允許他人自由使用、修改、轉載等,包括可以商業使用,但條件是衍生作品也必須使用GFDL。
CC-BY-SA也是符合copyleft定義的,和GFDL有點類似,但并不互相兼容,因為兩者都要求衍生作品使用自己的許可證。具體可以看一下這篇文章:“Copyleft和GFDL許可證”11。
為什么不支持自由呢!
最后,為了對比,我們看一個專有軟件(和開源軟件、自由軟件、copyleft軟件相對立的)的許可證。了解一下專有軟件對用戶自由的限制。
在微軟的軟件許可條款中,有一部分專門描述對用戶的權利限制12:
SCOPE OF LICENSE.
The software is licensed, not sold. Microsoft reserves all other rights. Unless Applicable law gives you more rights despite this limitation, you will not (and have no right to):
1.work around any technical limitations in the software that only allow you to use it in certain ways;
2.reverse engineer, decompile or disassemble the software;
3.remove, minimize, block, or modify any notices of Microsoft or its suppliers in the software;
4.use the software in any way that is against the law or to create or propagate malware; or
5.share, publish, distribute, or lend the software, provide the software as a stand-alone hosted solution for others to use, or transfer the software or this agreement to any third party.
翻譯過來就是:
許可范圍。
本軟件授予使用許可,而非出售給使用者。Microsoft保留本協議未明確授予的所有權利,除非適用法律賦予您權利,否則您不得(也無權)做以下這些事:
1.不得繞過本軟件的技術限制,你只能按照本軟件所允許的方式使用本軟件;
2.不得實施反向工程,不得反編譯、反匯編本軟件;
3.不得刪除、最小化、阻攔、修改Microsoft或其供應商在軟件中的任何聲明;
4.不得以任何違法的方式使用該軟件;不得創建或傳播惡意軟件;
5.不得共享、發布、分發或出租本軟件;不得將本軟件單獨作為托管方案提供給他人使用;不得將本軟件或本協議轉讓給任何第三方。
看到沒有,即便只是一個二進制文件,專有軟件都要設置設種種限制,目的是保護其盈利的能力。
而自由軟件不僅給你源代碼,還賦予你種種自由,目的是促進整個人類的自由。
有什么理由不去珍視和支持這種自由呢!
文末奉上這張圖,一圖看懂不同類型軟件之間的關系,來自FSF。13
現在,你的心里是不是亮堂多了。
開源軟件、自由軟件其實差不多的,copyleft則有著更強烈的理想信念。
不管怎樣,選一個你喜歡的許可證,開干吧!
注:題圖來自《硅谷》第5季劇照
參考: