痞子衡嵌入式:開源軟體協議(MIT/BSD/Apache/LGPL/MPL/GPL)

痞子衡發表於2016-10-11

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家講的是關於開源軟體協議基本知識

  牛頓曾說過:“如果我比別人看得更遠,那是因為我站在巨人的肩上”。在軟體開發中如果說也存在巨人的肩膀讓我們站,我想這個巨人應該就是開源軟體。一個優秀的軟體開發人員應該能夠善於學習和利用開源軟體來加速自己的開發,而為了正確地使用開源軟體,我們必須要了解開源軟體協議,今天我們就來聊一聊開源軟體協議這個話題。

1.開源軟體是什麼?

痞子衡嵌入式:開源軟體協議(MIT/BSD/Apache/LGPL/MPL/GPL)

  所謂“開源軟體”(open-source software),字面上理解就是開放原始碼的軟體,即在軟體發行的時候,附上軟體的原始碼,並授權允許使用者更改/自由再散佈/衍生著作權。

  開源軟體通常是有copyright(著作權)的,它的License(許可證)可能包含這樣一些額外的限制: 刻意的保護它的開放原始碼狀態,著者身份的公告,或者開發的控制。

  提及開源軟體,通常會想到兩個形容詞:免費、自由。開源軟體大多是免費的(但也並不排斥商業收費),開源軟體的使用往往也是相對自由的(自由度取決於其License)。因此常常會與開源軟體造成混淆和誤解的有另外兩個概念:“免費軟體”、“自由軟體

  • 免費軟體:免費提供給使用者使用的軟體,通常並不包含公開其原始碼的內容。
  • 自由軟體:在反著作權,倡導軟體這種知識產品應該免費共享的思想下誕生的軟體,當然必須是要開放原始碼的。一個專用的名詞copyleft(著佐權)就是用來形容這種軟體。

  除了前面介紹的3種型別軟體之外,還有一種概念:“商業軟體”,即被用作商品以達到營利目的收費軟體,這種軟體一般不會包含原始碼,並且受各種嚴苛的版許可權制。

  從上面的介紹可以看出,自由軟體與商業軟體是完全對立的,而開源軟體就是自由軟體與商業軟體的折中,它既繼承了“自由軟體”所提倡的知識共享的理念,同時又允許人們以專利的形式從知識產品中謀取利益,從而保護了人們生產、創造知識產品的積極性。

2.為什麼會存在開源軟體?

  在講為什麼會存在開源軟體之前,我們應該先講講商業軟體(私有軟體)到底有哪些弊端,下面是兩點可能存在的弊端:

  • 不利於軟體社會價值的發揮:如果一個軟體已經開發完成,即意味著對軟體開發所需要投入的社會資源已經全部付出了,底下就應該是軟體回報社會的時候了,但軟體私有限制了軟體對社會的貢獻度,導致一定程度的資源浪費。
  • 不利於對軟體的使用和開發:從使用者角度來看:軟體私有是不利於其被進一步使用的,如果現有軟體有不完善的地方,使用者無法基於現有軟體作少許改動以實現進一步需求;而從開發角度來看:軟體私有意味著開發軟體的只能是特定的一群人,很難輕易採集到廣大使用者和二次開發者對軟體發展的意見。

  既然存在開源軟體,說明軟體開源肯定能帶來好處,那具體能幫我們解決什麼問題呢?

  • 從使用者使用的角度:使使用者能根據自己的需要來使用、定製軟體。
  • 從軟體本身的角度:開源,讓更多的人蔘與,更有助於軟體的完善,開發出更優秀的軟體。
  • 從軟體行業的角度:極大的提高軟體開發的生產力,我們能夠自由的複用別人的開發成果,而避免重複勞動。

  總之,軟體開源的目的是為了讓軟體能得到最大範圍的使用。

3.一大波開源軟體協議

痞子衡嵌入式:開源軟體協議(MIT/BSD/Apache/LGPL/MPL/GPL)

  前面講到,開源軟體都是有License的,猜一下,迄今為止,世界上一共有多少種開源軟體License?據粗略統計有上百種(GNU組織整理的開源協議清單),而通過OSI(Open Source Initiative)組織批准的開源軟體協議目前也有60多種(OSI組織批准的開源協議清單

  雖然有這麼多開源軟體協議,但我們只需要瞭解其中最常用的幾種就足夠了,常用的開源軟體License有如下6種:

  • MIT(The MIT License):源自麻省理工學院,又稱“X條款”(X License)或“X11條款”(X11 License)。
  • BSD(Berkly Software Distribution):源自加州大學柏克利分校,最初是用於該校發表的各個4.4BSD/4.4BSD-Lite版本。
  • Apache(Apache License):著名的非盈利開源組織Apache採用的協議。
  • LGPL( Lesser General Public License):GNU組織制定的寬鬆通用公共許可證。
  • MPL(The Mozilla Public License):Netscape的Mozilla小組為其開源軟體專案設計的軟體許可證。
  • GPL(General Public License):GNU組織制定的通用公共許可證,由斯托曼撰寫,最初用於GNU計劃。

4.看懂常見開源軟體協議

  前面介紹了6種常見開源協議的名稱及由來,要去了解每個License具體限制(開放原始碼狀態,著者身份的公告,開發的控制),我們可以去一句一句去讀晦澀的License原文,但是還有更簡單的方式迅速區分它們,下面是用於迅速區分的的5個特性:

  • 閉源允許:基於開源軟體進行二次開發的衍生軟體是否可以閉源?
  • 版權宣告:修改過的開源軟體檔案是否必須放置原開源軟體版權說明?
  • 品牌推銷:衍生軟體是否可以用原開源軟體的品牌影響力進行推廣?
  • 繼承機制:基於開源軟體開發的新增檔案是否也需要採用原開源軟體的License?
  • 改動申明:對開源軟體檔案的修改是否需要提供說明文件?

  按照以上5個特性,我們可以迅速將6種開源軟體協議分類,詳見下圖:

痞子衡嵌入式:開源軟體協議(MIT/BSD/Apache/LGPL/MPL/GPL)

  從開源軟體的個人使用靈活角度來看:MIT是最自由最沒有限制的,MIT協議的開源軟體作者只想保留版權,其他方面任你自由發揮;而GPL限制是最嚴苛的,如果你用了GPL開源軟體,那麼你的軟體也必須同樣以GPL協議方式開源。

  從開源軟體的社會傳播影響角度來看:GPL最能推動知識共享,任何基於GPL開源軟體開發的新成果,都能被大眾輕易借鑑和分享;而MIT僅有助於分享開源軟體本身的成果,基於MIT開源軟體開發的新成果往往被二次開發者私有。

5.常見開源軟體協議之間相容性

  如果你已經瞭解了前面介紹的內容,那麼你現在應該能夠輕鬆搞定基於單一開源軟體的二次開發的License問題,但在實際使用中,你的專案可能會存在引用多個開源軟體,此時便涉及到開源軟體協議之間的相容性問題,即需要考慮兩個核心問題:

  • 多個開源軟體是否可以一起組合使用?
  • 多個開源軟體的使用最終如何確定License?

  開源軟體協議從使用限制強弱上來看,可以分為三大類:放任型、弱保護型、強保護型;一般來講強限制協議可以向下相容弱限制協議(這意味著軟體最終License取決於強限制協議),但存在限制條件完全對立的兩個協議則無法相容(這意味著軟體開發不能同時引用這兩個開源軟體)。下圖很好地說明了6種常見開源軟體協議之間的相容性情況。

痞子衡嵌入式:開源軟體協議(MIT/BSD/Apache/LGPL/MPL/GPL)

  箭頭從A框到B框代表,A框和B框中的協議是相容的(兩種開源軟體可以組合使用),且最終License取決於B框中協議;而如果兩個框之間沒有單向的箭頭貫通,即意味著兩個框中的協議不相容(兩種開源軟體不可以組合使用)。

  舉例說明:MIT->BSD->Apache->LGPLv3->GPLv3是一個單向通路,這個通路上的任意兩個及以上的開源軟體都可以組合使用,軟體最終License取決於通路上箭頭最末端開源軟體協議。MPL<-BSD->Apache是一個雙向鏈路,鏈路兩端的MPL和Apache協議是不相容的,所以無法組合使用。

6.如何選擇開源軟體協議?

  介紹到這裡,開源軟體協議這個話題也就基本結束了,其實你應該知道該如何選擇合適的開源軟體協議了,底下該是你去各大開源社群盡情淘你所需要的開源專案了,還在等什麼?不過記住,如果找到了合適開源專案,請記得瀏覽一遍其License內容,說不定你會遇到驚喜,比如下面的這個WTFPL 2.0協議:

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
                    Version 2, December 2004

Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>

Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  0. You just DO WHAT THE FUCK YOU WANT TO.

  至此,關於開源軟體協議基本知識痞子衡便介紹完畢了,掌聲在哪裡~~~

參考資料

[1]. 開源軟體,自由軟體,免費軟體三者的區別

[2]. 科普:你該認識的四種常見開源許可證

[3]. 9個主流的開源許可協議(整理)

[4]. 如何選擇開源許可證?-阮一峰

[5]. The Free-Libre / Open Source Software (FLOSS) License Slide

[6]. 最牛最暴力的開源協議:WTFPL

相關文章