不根據協議使用開源軟體可能面臨的風險
2003 年 Linksys 公司(同年 3 月被思科收購)推出 WRT-54G,這款路由器採用了基於 Linux 的韌體,而 Linux 使用的是 GPL 開源協議,所以思科迫於壓力,開放了 WRT-54G 的原始碼,這使得愛好者們知道了路由器韌體的實現方式,進而促成了各種相關開源專案的繁榮,其中就包括 OpenWRT
Android 和 Linux 核心 的關係
Android 使用了 Linux 核心,而 Linux 核心採用的是 GPL 的開源協議,所以 Google 修改了 Linux 核心,使得驅動程式可以在 Linux 核心的上層執行,這樣上層的程式碼可以繞過GPL協議。這也使得所有 Android 上的開源驅動,不經過修改無法直接用在 Linux 核心上,造成了Linux 核心的分裂,所以 Linux 核心開發小組撤下了 Android 所貢獻的程式碼
而非核心部分,Android 開源專案 (AOSP) 許可提到了:
對於使用者空間(非核心)軟體,相比其他許可(例如寬通用公共許可證 (LGPL)),我們更傾向於 Apache 2.0(以及 BSD 和 MIT 等類似許可)
我們為自己的程式碼首選 Apache 2.0
因為 AOSP 採用了 Apache 2.0 協議,所以任何人都可以基於 AOSP 開發自己的 Android 系統,而且不需要開源,國內的一些定製 Android 系統都是基於 AOSP,具體可以參考定製Android韌體列表。雖然 AOSP 是開源的,但是 Google 移動服務 GMS(Google Mobile Service)是閉源的,GMS 中包括,如果手機廠商想要使用 GMS,就必須向 Google 支付授權費。GMS 包含了 Google 自家的App 和服務,除此之外海外 Android 平臺釋出的 App 嚴重依賴 GMS,沒有 GMS 可能導致軟體無法使用等問題,Google 禁止華為對 GMS 的使用,導致華為手機海外出貨量大幅下降
常見開源協議
可以參考這張很經典的圖,來自 如何選擇開源許可證? - 阮一峰
下面由緊到鬆介紹一下幾種常見的開源許可
GPL
GNU GPL (GNU General Public License) 是很常見一個開源協議,允許使用者自由複製、自由分發、自由修改,也可以用來盈利,但是需要保證修改後的專案以及派生作品也使用 GPL 協議,這是因為 GPL 是屬於Copyleft 授權方式
Copyleft 條款源自自由軟體運動,在自由軟體許可證中增加 Copyleft 條款之後,該自由軟體除了允許使用者自由使用、散佈、改作以外,Copyleft 條款更要求作者所許可的人對改作後的派生作品要使用相同許可證授予作者
LGPL
由於 GPL 遵循 Copyleft,所以導致商業軟體無法將 GPL 授權的軟體整合在自己的軟體裡,所以就有了GNU LGPL (GNU Lesser General Public License) ,LGPL 允許商業軟體通過類庫引用的方式使用 LGPL 類庫而不需要開源專案的程式碼,如果是修改或者衍生,則修改的程式碼或衍生的程式碼都必須採用 LGPL 協議
MPL
MPL (Mozilla Public License) 由 Mozilla 基金會開發並維護,可以自由使用,出售,並可自由的重新發布,MPL 允許在其授權下的原始碼與其他授權的檔案進行混合,但 MPL 授權下的程式碼檔案必須保持 MPL 授權,並且保持開源
Apache Licence 2.0
非盈利開源組織 Apache 採用的協議,允許程式碼修改、再發布,但 每修改一個檔案都必須放置版權宣告
BSD
BSD (Berkeley Software Distribution license) 允許使用者修改和重新發布程式碼,也允許使用或在 BSD 程式碼上開發商業軟體釋出和銷售,所以商業公司比較喜歡選擇 BSD 相關的專案,但是 不允許使用開原始碼的作者、機構名字、原來產品名做市場推廣
MIT
MIT 是最寬鬆的開源協議之一,除了軟體中必須包含許可宣告外沒有任何限制
開源協議的選擇
GitHub 推出了一個“如何選擇許可證”的網站 choosealicense.com
通過 GitHub 的 Advanced Search,可以根據開源協議進行搜尋,這裡例舉一些使用對應開源許可的專案:
GPL : Linux、Ansible (自動化運維工具)、Clash、Telegram for Android
LGPL: Go Ethereum(以太坊的官方 Go 實現)
MPL: Consul
Apache Licence 2.0: TensorFlow、Kubernetes、TypeScript、Spring Framework、Spring Boot、OkHttp、MyBatis、Dubbo、TiDB
BSD: Homebrew、Flutter、Flask、Redis、Jupyter
MIT: Vue、React、Angular、Electron、jQuery、axios、Gin
參考資料
從“中國 GPL 訴訟第一案”聊聊開源軟體的 license 許可證
開源路由器韌體歷史
Linksys
開源韌體的前世今生
openwrt,ddwrt,tomato這些路由器韌體是怎麼開發出來的? - denglj的回答 - 知乎
最流行的開源協議什麼,如何選擇合適的開源協議?
五種開源協議(GPL,LGPL,BSD,MIT,Apache)
“十四五”軟體業開源生態加快構建
再談Android的許可證
Android - 維基百科
Android 通用核心
可以把Android理解成是Linux的一個發行版本嗎?像ubuntu那樣?
linux和Android的關係
Android 正在毀掉開源,受影響的不只是華為
Mozilla公共許可證
GNU通用公共許可證 - 維基百科
GNU寬通用公共許可證
Copyleft
【開源協議】BSD、Apache2、GPL、LGPL、MIT