平時我們在日常開發生活都在大量和開源軟體打著交道,例如安卓、Linux、Github、Docker等,而其中開源協議比如MIT、Apache也是耳熟能詳,但是真正對開源協議的了解相信對大部分人來說都是一知半解。而近來頻繁冒出一些事件讓我們對開源協議產生了更大的疑問。
谷歌撤銷了華為的android許可證,華為手機將無法訪問android更新,不能使用goole的服務框架美國商務部產業安全域性(BIS)將 28 家中國實體加入實體清單,包括海康威視、大華股份、科大訊飛、曠視科技、商湯科技等多家科技企業,Docker 更新了最新《服務協議》,禁止禁運國家和被列入「美國實體清單」、「特別指定國民清單」、「被拒絕人清單」、「未核實清單」和「防擴散為清單」的組織和個人使用帶有該服務協議連結的 Docker 網站和所有相關網站大家的疑惑都是,這些不都是開源的嘛?為什麼還能受到影響?接下來,我將為大家詳細介紹開源協議的種類和這些事件背後的真正原因。
首先開源許可證可以分為兩大類:Copyleft和Permissive。
Copyleft和CopyrightCopyleft中文可以理解為著作傳、著佐權,它是一種利用Copyright(版權)體制來保障使用者軟體自由使用權利的許可方式,可以了解為允許他人使用、傳播但加了一些少規則。
不知道是什麼?Copyleft的標誌就是一個反寫的C套上圓圈(即反轉的著作權標誌©)。
Copyright(版權)是可以通過法律的形式授予,一般在網站上使用會搭配All Rights Reserved(保留所有相關著作權利)來使用,而Copyleft則是在基於Copyright的基礎之上表達自由和免費。
PermissivePermissive License(寬鬆式許可證)允許使用者不經許可可以隨意複製、修改和釋出,但是並不要求分發時必須使用相同的許可證,使用者可以在修改程式碼後選擇閉源,常見的Apache、BSD、MIT屬於Permissive許可證。
一句話說:這種型別的許可證,在你拿到原始碼後,基本上可以為所欲為。
MIT(The MIT License)MIT是許多軟體許可條款中,被廣泛使用的其中一種。與其他常見的軟體許可協議相比,MIT是相對寬鬆的軟體許可協議。MIT許可協議之名源自麻省理工學院(Massachusetts Institute of Technology),MIT內容與三條款BSD許可協議內容頗為近似,但是賦予軟體被許可人更大的權利與更少的限制。
你可以使用,複製和修改軟體你可以免費使用軟體或出售唯一的限制是,它是必須附有MIT授權協議一句話說:只用申明一下,想怎麼用怎麼用。
案例:PuTTY、Ruby on Rails、Lua、jQuery
BSD(Berkeley Software Distribution)BSD也被稱為伯克利Unix或Berkeley Unix和MIT類似,1970年代由伯克利加州大學的學生比爾·喬伊建立。BSD許可證非常寬鬆,它允許無限制地重用全部或部分軟體,以整合到自由軟體或所有者中。1979年加州大學伯克利分校釋出了BSD Unix,被稱為開放原始碼的先驅,BSD許可證就是隨著BSD Unix發展起來的。
BSD 程式碼鼓勵程式碼共享,但需要尊重程式碼作者的著作權。BSD 由於允許使用者修改和重新發布程式碼,也允許使用或在BSD 程式碼上開發商業軟體釋出和銷售,因此是對 商業整合很友好的協議。而很多的公司企業在選用開源產品的時候都首選BSD 協議,因為可以完全控制這些第三方的程式碼,在必要的時候可以修改或者二次開發。
如果在釋出的產品中包含原始碼,則在原始碼中必須帶有原來程式碼中的BSD協議如果再發布的只是二進位制類庫/軟體,則需要在類庫/軟體的文件和版權宣告中包含原來程式碼中的BSD協議不可以用開原始碼的作者/機構名字和原來產品的名字做市場推廣案例:FreeBSD、Nginx、Chromium、Django
Apache2.0Apache許可證是由Apache軟體基金會(ASF)釋出的開源軟體許可證。這是一個由強大社群支援的流行且廣泛部署的許可證。Apache許可證允許您自由使用,修改和分發任何Apache許可產品。但是,在這樣做時,您需要遵循Apache許可的條款,Apache 協議也是個相對寬鬆與 MIT 類似的協議,但它簡單指明了作品歸屬者對使用者專利上的一些授權。
一句話說:可以保護你專利的一些權利,同時讓別人免費使用你程式碼中的專利。
案例:Android Open Source Project (AOSP)、Apache、Swift、Hadoop、SVN、Kubernetes、OpenOffice、Hadoop、Spark、Docker
GPL(GNU General Public License)GPL是被廣泛使用的自由軟體許可證,給予了終端使用者執行、學習、共享和修改軟體的自由。GPL允許自由地“使用、複製、修改和釋出”,但修改和釋出後的軟體也必須是可以自由“使用、複製、修改和釋出”的。因此 GPL 大大限制了商業軟體使用GPL授權的軟體,如果非法使用,將面臨起訴的風險。
由於不允許修改後或者衍生的進行釋出和銷售,所以如果用了它,該產品也必須採用也就是開源和免費。
GPL 分為兩個版本一個是 V2,一個是 V3,作品帶上這個協議之後,別人想分享的話也得加上這個協議,對程式碼作出比較大的更改也是需要附帶說明。
一句話說:基於GPL元件編寫的任何軟體都必須以開源的方式進行釋出。
案例:Linux核心、MySQL、GCC,Emacs
AGPL(GNU Affero General Public License)AGPL是對GPL的補充,如果使用了AGPL程式碼的軟體是一個網路應用,那麼這個軟體的所有原始碼和修改程式碼也必須開源,除非購買了該AGPL程式碼的商業授權。
案例:MongoDB
LGPL(Lesser General Public Licence)LGPL它對作品的使用保留了更少的權利,適合一些程式碼庫或者框架使用。
通常,LGPL 適用於一些類庫,它允許這些類庫能夠被非GPL或非開源軟體引用。
案例:7-Zip
MPL(Mozilla Public License)MPL自由、開源、詳細的軟體許可證,由Mozilla基金會開發並維護。該協議融合了BSD許可證和GNU通用公共許可協議的特性,追求平衡專有軟體和開源軟體開發者之間的顧慮。
MPL許可證出現的最重要原因就是,Netscape公司認為GPL許可證沒有很好地平衡開發者對原始碼的需求和他們利用原始碼獲得的利益。
如果修改了MPL的原始碼或者衍生了新的程式碼,並且以原始碼方式釋出的檔案,則所有修改後及衍生的程式碼也必須遵循MPL許可證如果使用者自有的原始碼通過專用介面訪問MPL的原始碼及類庫,則包含專用介面的程式碼必須遵循MPL許可證,使用者自有原始碼不必遵循MPL許可證使用者獲得MPL程式碼中的專利許可,但是不能使用其原始商標案例:Mozilla Firefox、 Apache Flex
了解完這些開源協議的基本概念之後,我們可以回頭來看文章開頭提到的幾個案例的原因了。
案例一:谷歌撤銷了華為Android許可證去年,谷歌母公司Alphabet停止與華為相關的業務和服務,涉及硬體、軟體和技術服務方面,包括旗下智慧手機作業系統安卓。可是上面我們提到安卓系統是Apache2.0開源協議的,這是怎麼回事?
安卓系統分為開源、不開源兩部分:
第一,開源版安卓系統。即AOSP(Android Open-Source Project),意為Android 開放原始碼專案,是免費使用的,但不內嵌GMS,華為等手機廠商都用AOSP。AOSP提供了安卓底層架構,手機廠商可以修改和定製。
第二,不開源的GMS移動服務(Google Mobile Service),GMS需要谷歌認證,並向其繳納授權費,GMS包含常用的谷歌套件,如谷歌商店、搜尋、地圖等應用,這些應用與Google簽訂商業協議,同樣不開源。
而谷歌暫停合作的是GMS移動服務,並非開源版本的安卓系統。
案例二:Docker 更新網站服務協議,禁止“禁運國家”和被列入美國“實體清單”的組織和個人使用遵循該服務協議的Docker網站及其所有相關網站與服務Docker 是一個虛擬環境容器,可以將你的開發環境、程式碼、配置檔案等一併打包到這個容器中,併發布和應用到任意平臺中。它與虛擬機器類似,但 Docker 容器更加輕量級,能夠更高效地利用伺服器。
實體清單是什麼?1997年2月,美國商務部首次釋出實體清單,以此明確告知美國出口商,在未得到許可證時,不得幫助這些實體獲取受本條例管轄的任何物項。而有關許可證的申請應按照《美國出口管制條例》(Export Administration Regulations,EAR)第744部分規定的審查標準接受審查,且向此類實體出口或再出口有關物項不適用任何許可例外的規定。
此外,根據EAR規定,實體清單內容的增加、刪除和更改都必須經“終端使用者審查委員會”投票決定。該委員會由美國商務部牽頭,包括國務院、國防部、財政部等部門代表。確定增加實體清單需要多數委員會成員投票通過,而確定刪除或更改實體清單則需要全體成員投票通過。
因此受限制的是 Docker 商業版及 Docker 的其它服務,比如 Docker Hub。
但是我們又產生了疑問,開源協議如果還受到國家管控,那麼開源的精神還有什麼價值?其實不然,開源專案一般來說有3個約束。
出口管制:國家出於政治、經濟、軍事和對外政策的需要,制定的商品出口的法律和規章,以對出口國別和出口商品實行控制,美國出口管制條例(EAR,Export Administration Regulations),主要規定是否能從美國出口貨物到外國,以及是否可以從外國再出口到另一個外國。按照EAR 的規定,所有公開可獲得的原始碼(不含加密軟體以及帶加 密功能的其他開源軟體),都不被出口管制,公開可獲得的帶加密功能的原始碼,被出口管制,但不會被限制出口,需提前登記備案。司法管轄權:司法管轄權又稱為審判權,是指法院或司法機構對訴訟進行裁決和判決的權力開源許可證:當下常用開源許可證(如BSD、MIT、GPL)都是 圍繞程式碼的版權宣告,以及修改後是否可以閉源等問題展開的,早期的開源許可證如MPL 1.1等,在協議中指定了其司法管轄權在美國加州,但現在皆已棄用,當下常用的開源許可證保護的是智慧財產權,其自身與出口管制和司法管轄權並無關聯。我們可以從最後一條看到,開源許可證保護的是智慧財產權,其自身與出口管制和司法管轄權並無關聯!也就是說Docker案例也是屬於正常範疇。
長期以來,中國使用者以使用開源為主,對開源社群貢獻較少。但近年來,國內開源社群對國際開源專案的貢獻已經日趨矚目,華為、阿里、百度、騰訊等公司為首的公司和個人已經在國際各開源專案中佔據了越來越重要的角色。