開源定義是什么?為什么OSI不接受SSPL?
前言
大家都知道,Elasticsearch是大名鼎鼎的開源搜索引擎,但你知道嗎,它現在已經不是開源軟件了,這是怎么回事呢?
今年年初,Elastic公司把其主打產品Elasticsearch搜索引擎和Kibana可視化平臺的許可證都改了,從Apache 2.0換成了SSPL(服務器端公共許可證),而SSPL是MongoDB在2018年推出的一種偽開源許可證。幾天后,AWS宣布了分支(fork)作為回應,也就是說,AWS要自己另整一套了,而且,AWS還說,自己玩的才是真開源。1。
Elastic為什么要這么做?SSPL是個啥?為啥就不是開源的?
Elastic在官網上是這么解釋的:2
在過去三年中,市場不斷發展,社區逐漸認識到,開源公司只有更好地保護自己的軟件,才能保持高水平的投資和創新。隨著以 SaaS 作為交付模式的轉變,一些云服務提供商利用了開源產品的優勢,將其作為一項服務對外提供,而不向社區提供任何回饋。這種做法轉移了本可以再投資到產品上的資金,損害了用戶和社區的利益。
從即將發布的 Elastic 7.11 版開始,我們將把根據 Apache 2.0 許可授權的 Elasticsearch 和 Kibana 源代碼變更為雙重授權許可模式(即 SSPL + Elastic 許可),以便用戶選擇適合自己的許可。SSPL 是 MongoDB 原創的一個可獲得源代碼的許可,它既體現了開放原則,同時又起到了保護作用,防止公共云提供商在不向社區提供任何回饋的情況下將開源產品作為一項服務對外提供。SSPL 雖然允許免費隨意地使用及修改產品源代碼,但有一個基本要求,也就是,在 SSPL 協議下,如果您將產品作為服務對外提供,則必須同時公開發布任何修改以及您自己管理層的源代碼。
簡單地說,就是ELastic看見一些云廠商用Elasticsearch和Kibana賺了大錢,但沒有給自己帶來回饋,很不爽,決心改許可證。
因為按照Apache 2.0許可證,人家不回饋,也是合規合法的,所以必須要改許可證,強制要求云廠商回饋。
云廠商豈能就范?
SSPL是偽開源許可證?
在OSI的官網上3,明確說SSPL是偽開源許可證(fauxpen source license)。
OSI(Open Source Initiative)即開放源代碼促進會,于1998年2月成立,創始人為大名鼎鼎的Bruce Perens和人稱黑客長老的Eric S. Raymond。它維護著開源定義(OSD)以及其認可的開源許可證列表4。OSI的目標是促進和保護開源軟件及開源社區。
OSI這個聲明,其實就是對著Elastic來的,它說:
雖然那些切換到偽開源許可證的公司聲稱,他們的產品在新許可證下繼續保持“開放”(open),但新許可證實際上剝奪了用戶權利。
Elastic公司的這個舉動,并不意味著開源許可模式的失敗或不足,只能說明Elastic目前的商業模式和開源許可證的設計不一致,他們需要的是專有許可證(雖然也是源碼可用的)。
OSI說,SSPL的管理方曾經提出申請,試圖獲得OSI認證,當他們發現這不太可能時,主動撤下了申請。
我專門找來SSPL看了看,其實和GPL差不多,就只有個別一兩條有點區別,總體上,還是給人源碼、讓人修改、讓人發布的。但在OSI看來,這是不夠的。
那什么樣的許可證,才能被稱為開源許可證?
OSI是在官網上明確給出過開源定義(The Open Source Definition)的,也即OSD。所以看一個許可證是不是開源的,就看是否符合OSD了。
我以前介紹過的MIT、Apache 2.0(以下簡稱Apache)、GPL v2、v3,都是滿足OSD的,也即都是開源許可證。
下面就學習一下OSD吧。
開源定義
一個軟件,是不是開源軟件,要看它的許可證有什么樣的條款,只要許可證滿足以下10條要求,它就是開源的。
以下,“該軟件”、“該程序”、“該作品”,指的都是許可證所保護的軟件。“被許可人”、“接收者”、“用戶”指的都是使用該軟件的人(包括法人)。“發行”、“發布”、“分發”都是一個意思。
OSD1. 分發自由
許可證不應限制任何人將該軟件作為某軟件發行版的一部分售出,或免費送出,不應該對這種銷售收取版稅或其他費用。
人話說:不應該限制別人賣你的軟件,也不該限制別人免費送。如果人家賣了你的軟件,你也不能向人家要錢。
1. Free Redistribution
The license shall not restrict any party from selling or giving away the software as a component of an aggregate software distribution containing programs from several different sources. The license shall not require a royalty or other fee for such sale.
點評:我只能說,不要錢,這一點還是挺高尚的,很多人做不到,比如改了許可證的那些。
說實話,這條乍一看還是有點費解的,什么component、aggregate、software distribution、several different sources,想說什么呢。后來我才想明白,OSD是來自The Debian Free Software Guidelines (DFSG)的,而Debian,是一個Linux發行版,在Linux發行版里面,天然會有很多的自由軟件和開源軟件。所以,在OSI看來,大凡一個開源軟件,似乎或多或少都在某個發行版中,哪怕是原作者自己搞的發行版。
OSD1沒有明說,對于單獨一個開源軟件,是否適用這條,但看那個意思,應該也是適用的。我咨詢了若干業內人士的觀點,他們都說,即便不是任何軟件發行版的一部分,也是讓人賣的。從這點看,OSD寫得并不嚴謹。
現在看一下MIT、Apache、GPL是不是都符合這條:MIT在第一段,Apache在第3條,GPL v2第1條,GPL v3第4條,都明確寫了可以賣源碼或者目標碼的。
此外,GPL v3在第4、5、6條里說(第5、6條引用了第4條),如果以源碼形式分發,源碼可以隨意收費。但如果賣的是目標代碼,源碼就只能頂多收復制費,避免有些人賣目標時不想交出源碼(目標代碼收費尚可,源碼收天價)。
OSD2. 源代碼
軟件必須附有源代碼,并且必須允許以源碼形式或目標碼形式發布。如果發布時沒有帶源碼,則必須要有一種廣為宣傳的方式,讓人能夠以不超過合理的復制費用獲得源代碼,最好是能通過互聯網免費下載。故意混淆源代碼是不允許的,所提供的源代碼,必須是程序員在修改程序時最樂意使用的那種形式。基于同樣的道理,預處理過的、或者翻譯過的源碼,都是不允許的。
人話說:程序必須附帶源碼,不帶源碼的不叫開源軟件。如果發布時不帶源碼,那必須讓人能免費或以很便宜價格得到源碼。給源碼,就要大大方方地給,不能摳摳索索。
- 2. Source Code
- The program must include source code, and must allow distribution in source code as well as compiled form. Where some form of a product is not distributed with source code, there must be a well-publicized means of obtaining the source code for no more than a reasonable reproduction cost, preferably downloading via the Internet without charge. The source code must be the preferred form in which a programmer would modify the program. Deliberately obfuscated source code is not allowed. Intermediate forms such as the output of a preprocessor or translator are not allowed.
點評:注意對于再次發布的要求,是必須允許以源碼或目標碼形式發布,而不是必須帶源碼,這就使得MIT、Apache這種許可證滿足這條,因為這類寬松許可證,對別人再次分發時帶不帶源碼,是不作要求的。(GPL則是強制要求的。)
OSD3. 衍生作品
要必須允許別人修改和衍生該作品,并且必須允許它們以相同的許可證分發。
人話說:要能讓人改,還得讓人能分發,如果你不想讓別人以別的許可證分發,至少也得允許按你的許可證分發。
- 3. Derived Works
- The license must allow modifications and derived works, and must allow them to be distributed under the same terms as the license of the original software.
點評:不讓人改,那不是開源。不要那么封閉嗎。
MIT、Apache、GPL都允許修改和衍生,而且也都允許以相同的許可證再次發布。MIT在第一段中說允許sublicense,Apache在第2條允許sublicense,這就表明允許使用相同的許可證。GPL v2的第6條、GPL v3的第10條,則說下游自動獲得GPL許可。
注意:sublicense,根據Black's Law Dictionary,是指“A license or contract granting to a third party a portion or all of the rights granted to the licensee under an original license。”也即sublicense是指被原始許可的人,可以向第三方進行再次許可,許可的內容是他獲得的全部或部分權利。
OSD4. 原作者源碼的完整性
可以要求“源碼不可改動”,但只能在“源碼+補丁”這種分發場合下。許可證必須明確允許分發修改后源碼構建的軟件。許可證可以要求衍生作品帶有不同的軟件名稱或版本號。
人話說:可以要求修改的代碼能和原作者的代碼清晰劃分出來;允許別人分發修改后的代碼;可以要求他用別的名字或版本號(不做此要求當然更好)。
- 4. Integrity of The Author's Source Code
- The license may restrict source-code from being distributed in modified form only if the license allows the distribution of "patch files" with the source code for the purpose of modifying the program at build time. The license must explicitly permit distribution of software built from modified source code. The license may require derived works to carry a different name or version number from the original software.
點評:這條是一個妥協。OSI原本是鼓勵“允許任意修改”的。但考慮到有些開源作者非常在意完整性,所以OSD允許在許可證中加一些這類要求,避免因別人低質量的修改,污染了原作者的名譽。
OSD5. 不歧視個人或團體
不得歧視任何個人或群體。
人話說:不能說只給什么人用,不能給什么人用。尤其不能說,不給中國人用,這是堅決不可以的。
考慮到法律問題,在OSD的注解(annotated OSD)5中,專門提到了出口限制的問題,注解說:“一些國家(包括美國)對某些類型的軟件有出口限制。許可證可以做出警告,提醒被許可人有義務遵守法律,但許可證本身可以不包含這種限制。”
- 5. No Discrimination Against Persons or Groups
- The license must not discriminate against any person or group of persons.
點評:這是OSI人文主義精神的表現,對所有人一視同仁。只不過,不管在哪,法律還是要遵守的。
OSD6. 不歧視任何領域
不得限制說不讓在某個領域使用該程序。例如,不能說不讓商用,不能說不讓用于基因研究。
人話說:不能只讓這個行業用,不讓那個行業用。尤其不能說,不讓商用,不讓云服務用。
- 6. No Discrimination Against Fields of Endeavor
- The license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.
點評:一個不讓商用的軟件,一定不是開源軟件。因為OSI明白商業的價值。
下面舉個例子,美國在2018年有一個Abolish ICE活動,在這個活動中,有人違反了OSD6。
ICE是美國911恐怖襲擊之后成立的部門,主要用于移民相關的國內調查和執法和調查,有羈押和遣送非法移民的權力,ICE采取了一種被稱作”親子分離“的政策,就是一旦抓住非法移民,就把大人和孩子分開關押,很多孩子因此和父母完全失去聯系,還有數百名兒童徹底和父母失聯,流入美國兒童收養系統。這種政策激起了巨大的社會反感,Abolish ICE運動因此開始。
在Abolish ICE過程中,人們發現ICE科技水平頗高,而且一線互聯網和軟件公司都在為他們提供服務,從軟件到AI,基本上各種高科技用全了,抓人效率前所未有的高。而這些軟件,絕大多數是基于開源軟件和自由軟件開發的。所以除了抗議各大廠商之外,開源社區中開始有了“能不能想個辦法不讓ICE用我們寫的程序”相關討論。
javascript包管理工具lerna成為了第一個行動者,他們修改了自己的開源協議,把包括微軟、亞馬遜在內的一堆公司列入了“因協助ICE而禁止使用”范圍。但這顯然是不符合OSD6的,Eric Raymond為此發表文章:“非歧視條款是開源軟件的核心價值”。一天之后,lerna恢復了原始的MIT許可證,并且為此道歉。
—以上摘自“圍繞RMS、開源、自由軟件的兩場'戰爭'”6
OSD7. 許可的分發
軟件重新分發時,所有接收者都獲得許可證所描述的關于該軟件的權利。任何接收者都不必執行額外的協議以獲取這些權利。
人話說:開源軟件是有一個傳播過程的,原作者發布給第一批用戶,第一批用戶又發布給第二批用戶,以此類推,可以不斷流轉下去。在這個再分發過程中,原作者給任何接收者的權利,中間人不能加碼,不能要求被分發人執行額外協議才能獲取。
- 7. Distribution of License
- The rights attached to the program must apply to all to whom the program is redistributed without the need for execution of an additional license by those parties.
點評:一個開源軟件,原作者所賦予用戶的權利,在傳遞過程中,不能附加額外要求。
從Annotated OSD來看,這條是用來確保自由傳遞的,防范有人把一個開源項目給閉源了。仔細看看GPL v2的第6條就知道,這條大概是從GPL中提煉出來的精神。
GPL v2第6條、GPL v3的第10條,都明確表達了這樣的意思。
但對于MIT和Apache這種寬松許可證,如果再次分發時還用原協議,那是滿足OSD7的,但如果再次分發時讓人給閉源了或者換許可了(也即MIT和Apache是允許他人加碼的),就不滿足這條了,所以這兩個許可證對OSD7的滿足是很弱的。
所以我覺得,OSD7寫得也不夠嚴謹。
OSD8. 許可不能針對特定產品
許可證賦予接收者的權利,不應該和特定軟件發布版綁定。不論該程序是從哪個軟件發布版中得到,它的用戶都擁有與原始軟件發布版一樣的權利。
人話說:比如,假設有個軟件叫wu-ftpd,它的許可證不能說,“如果您從Kali Linux發行版中拿到本軟件,您的權利是1、2、3,如果從Rcoky Linux中拿到,您的權利是3,4,5,只有在wu-ftpd網站下載的本軟件,您才擁有所有的權利”。
- 8. License Must Not Be Specific to a Product
- The rights attached to the program must not depend on the program's being part of a particular software distribution. If the program is extracted from that distribution and used or distributed within the terms of the program's license, all parties to whom the program is redistributed should have the same rights as those that are granted in conjunction with the original software distribution.
點評:開源不和具體產品綁定,開源是傲然獨立于世的。
OSD9. 許可證不能限制其他軟件
許可證不得對一起分發的其他軟件加以限制。例如,許可證不能要求在同一媒介上發布的所有其他程序都必須是開源軟件。
人話說:比如,wu-ftpd不能對放在同一張光盤上的Li-httpd、mi-gui這些軟件提出要求,因為那就不是你的軟件,你沒有權利提出這些要求。
- 9. License Must Not Restrict Other Software
- The license must not place restrictions on other software that is distributed along with the licensed software. For example, the license must not insist that all other programs distributed on the same medium must be open-source software.
點評:做好自己的事,不要要求別人。
OSD10. 不能以專門的技術或界面完成授權
許可證的任何條款都不能以任何專門的技術或界面風格為條件。
人話說:在進行許可時,不能要求用戶必須點擊一個“我同意”、“我接受”這樣的方框,因為在傳統上,軟件的分發是通過ftp、cd、web鏡像形式的,這些場合下,用戶根本沒有點擊的地方,如果許可證必須要求人們點擊,人們就不能用他們習慣和喜愛的方式發布軟件了,這是很令人惱火的。
- 10. License Must Be Technology-Neutral
- No provision of the license may be predicated on any individual technology or style of interface.
點評:對用戶好一點,不要搞形式主義。
總體評價
有朋友問,OSD為什么選這10條,而不是別的10條?
我回答,選這10條,體現了OSI初創人員(以及他們所代表的開源人)的道德優越感:我們就是要提供免費的源碼,而且是無差別的提供,我們要把開源推進到每個國家、每個地區,推進到每個領域、每個行業,我們要讓開源造福社會、造福人類,我們不歧視、不限制,我們推崇自由、平等,我們要的是全人類的繁榮和進步!
差不多就這個意思吧。
有人說開源和道德無關,我說,這10條顯然反映了道德,至少是人文主義的道德。
有人說這背后有陰謀(商業陰謀,政治陰謀),我就不想說啥了。
為什么SSPL不是開源協議
現在仔細看看SSPL,全文在這里:
https://spdx.org/licenses/SSPL-1.0.html
我看了看,除了第13條,基本上GPL v3是一模一樣的(但沒有GPL闡述自由精神的那段“序言”)。
畢竟人人都愿意站在巨人肩上。
那么這個體現SSPL獨特性的第13條是什么樣的?
SSPL 13. Offering the Program as a Service
- SSPL 13. Offering the Program as a Service
- If you make the functionality of the Program or a modified version available to third parties as a service, you must make the Service Source Code available via network download to everyone at no charge, under the terms of this License. Making the functionality of the Program or modified version available to third parties as a service includes, without limitation, enabling third parties to interact with the functionality of the Program or modified version remotely through a computer network, offering a service the value of which entirely or primarily derives from the value of the Program or modified version, or offering a service that accomplishes for users the primary purpose of the Program or modified version.
- “Service Source Code” means the Corresponding Source for the Program or the modified version, and the Corresponding Source for all programs that you use to make the Program or modified version available as a service, including, without limitation, management software, user interfaces, application program interfaces, automation software, monitoring software, backup software, storage software and hosting software, all such that a user could run an instance of the service using the Service Source Code you make available.
這條的正經翻譯:
如果您使用本程序或本程序的修改版本,以服務的形式提供給第三方,你就必須按照本許可相關條款,通過網絡下載形式,免費向所有人提供“服務源代碼”。本條款所說的“以服務形式提供給第三方”,是說第三方能夠通過計算機網絡與本程序或修改版本的功能進行遠程交互,所提供服務的價值,全部或主要來自本程序或修改版本,或者,提供給用戶的服務,來自于本程序或修訂版本主要用途的履行。
所謂“服務源代碼”,是指本程序或修改版本的源碼,以及您用來使本程序或修訂版本成為可用服務的所有相關程序的源碼,包括但不限于管理軟件,用戶界面,應用程序接口,自動化軟件,監視軟件,備份軟件,存儲軟件和宿主軟件,也即所有你用來使用戶獲取服務實例的源碼。
這條的人話翻譯:
如果你不分發本程序(包括本程序的修改版本,下同),而是把它弄成一個服務,放到網上讓人使用,那你必須把這個服務相關的源碼免費讓人下載。這里說的服務相關源碼,不僅僅是本程序的源碼,還包括能讓這個服務很好跑起來的其他相關軟件的源碼,比如管理軟件、用戶界面、應用程序接口、自動化軟件、監控軟件、備份軟件、存儲軟件和宿主軟件。總之,這一整套軟件的源碼都要提供,因為它們聯合起來才能為用戶提供完整的服務。
本質要求:
你用了我的程序,讓他跑成一個服務,那么,你要把所有能讓本程序跑成服務的源碼都貢獻出來,這樣,別人也能依此提供服務。
也就是說:
如果你把它弄成了服務,你就要大方地把整個配方(包括前后臺)都交出來。
評價:
說實話,這個有點狠,“本程序”是提供了服務,但整個配套都要提供,是要的多了一點,因為那些配套的東西,要花費的工作成本也許要比“本程序”多得多!
這明顯是違背了OSD9,你管好自己就行了,不應該要求別人太多!
當然,許可證這東西,就是一個愿打,一個愿挨,如果有人愿意接受SSPL,我們也樂見其成。
不過大多數情況下,廠商估計都不會接受的。所以,改SSPL,那就是告訴別人,你們要么交錢買商業版,要么自己建分支玩吧。
也即pay me or fork this!
此句來自faker.js的維護者 Marak,他傷透了心之后,在github項目下發帖子7,決定“我不再免費為世界500強公司工作了,要么給我一份年薪六位數的合同,要么 fork 這個項目然后自己維護去”。這個帖子的標題就叫做“No more free work from Marak - Pay Me or Fork This”。—摘自《開源社區的暗面》8
讓我感到有趣的是,第一個回帖子的居然是asim,此人就是當年和華為叫板的go-micro維護者9,看來Marak也是說到他心坎上了。
我覺得,以前吧,大家玩開源,都是你弄個東西,我弄個東西,大家其樂融融就把一個完整的開源世界搭起來了,大家就覺得,這就是我們的理想社會,我們也沒想著賺錢,我們就是不和那幫閉源的資本家玩,我們就是要弄一個人人平等、人人奉獻、人人自由、自給自足的和諧世界。但現在可好,自己用共產主義精神做出來的東西,又讓資本家給拿過去賺錢了,這心態上立刻就不是滋味了。
幾句多余的話
有一次,我給人瞎出主意。
因為看到一些開源作者,發現自己的開源作品被商業使用,他們心里很不舒服,各種吐槽10。
我就說,你如果不舒服,可以改協議啊,比如你用的是MIT,你在MIT里加一句:
“凡是將本作品或本作品衍生品用于商業用途的,請主動將合理估值的10%,打到我的賬號上來:1XXXXX”
這樣,還是不是開源協議了,我當時還猶豫了一下。
后來一看OSD1,就知道這是在收版稅(royalty)了,這當然不是開源協議了。
不過,這也沒關系,你覺得怎么舒服怎么來,不是說非要道德綁架讓你做開源的。
當然你要權衡一下,這樣改,會不會產生你最愿意看到的效果。
說實話,這次Elastic改許可證,包括之前MongoDB、CockroachDB、RedisLabs、TimescaleDB、Graylog這些改許可證,我都沒有什么太多感覺,畢竟他們都是公司,都是要盈利的嘛!先用免費獲得用戶,然后開始分情況適度收費,也屬于一種常見套路吧。像極了我們曾經可以免費使用的互聯網應用,后來紛紛收各種會員費一樣。
這個世界不可能要求每個人都無私奉獻,也不會是非黑即白,不會是只有開源和非開源,每個主體都有權利找到一種自己覺得合適的方法,讓他覺得自己的付出值得。
我想,如果區塊鏈發展到更成熟的階段(NFT和DAO都是有益的嘗試),作者能夠根據源碼使用情況自動獲得回報,那一定會給開源帶來革命性的變化。
非要OSI同意了才算開源軟件嗎?
是不是開源,只有OSI說了算?
這個怎么說呢,Open Source這兩個單詞的組合是他們提出的,他們曾經還試圖把Open Source注冊成商標呢。“開源”這個翻譯,當然是從Open Source來的。
所以,OSI說一個東西是不是開源,顯然更權威一些。
不過,你硬要說中文的“開源”,不是OSI的Open Source,我也攔不住你。
那就看大家認不認了,至少就我所見,整個業界,都還是認可OSD的。
BTW:我國的木蘭寬松許可證就是獲得了OSI的認證的,是正經八百的開源許可證11。
- https://mp.weixin.qq.com/s/_1Dbc6FyUQUvOqk6nFKMTw
- https://www.elastic.co/cn/blog/licensing-change
- https://opensource.org/node/1099
- https://opensource.org/licenses/category
- https://opensource.org/osd-annotated
- https://mp.weixin.qq.com/s/Kr0FzkpA-EHT51F7PVX76A
- https://github.com/Marak/faker.js/issues/1046
- https://mp.weixin.qq.com/s/2kYb93_V3TMdgKFAV3HG4Q
- https://mp.weixin.qq.com/s/y6rysKAifxefqfhSzcQcHg
- https://mp.weixin.qq.com/s/IiM63raAH38rEoSUScR-eQ
- https://opensource.org/licenses/MulanPSL-2.0
本文轉載自微信公眾號「微月人話」,可以通過以下二維碼關注。轉載本文請聯系微月人話公眾號。