主流開源協議之間有何異同?

GPL, Apache License, BSD.. 等等,這些開源協議有什麼異同?
具體一些講,利用這些協議下的類庫等,我來開發自己的商業軟體(或者非商業但不希望開源的軟體),有哪些限制?


GPL協議、LGPL協議與BSD協議的法律區別。

簡而言之,GPL協議就是一個開放源代碼協議,軟體的初始開發者使用了GPL協議並公開軟體的源程序後,後續使用該軟體源程序開發軟體者亦應當根據GPL協議把自己編寫的源程序進行公開。GPL協議要求的關鍵在於開放源程序,但並不排斥軟體作者向用戶收費。雖然如此,很多大公司對GPL協議還是又愛又恨,愛的是這個協議項下的軟體歷經眾多程序員千錘百鍊的修改,已經非常成熟完善,恨的是必須開放自己後續的源程序,導致競爭對手也可以根據自己修改的源程序開發競爭產品。

正因大公司對GPL協議在商業上存在顧慮,因此,另兩種協議被採用的更多,第一種是LGPL(亦稱GPL V2)協議,可以翻譯為更寬鬆的GPL協議。與GPL協議的區別為,後者如果只是對LGPL軟體的程序庫的程序進行調用而不是包含其源代碼時,相關的源程序無需開源。調用和包含的區別類似在互聯網網網頁上對他人網頁內容的引用:如果把他人的內容全部或部分複製到自己的網頁上,就類似包含,如果只是貼一個他人網頁的網址鏈接而不引用內容,就類似調用。有了這個協議,很多大公司就可以把很多自己後續開發內容的源程序隱藏起來。

第二種是BSD協議(類似的還有MIT協議)。BSD協議鼓勵軟體的作者公開自己後續開發的源代碼,但不強求。在BSD協議項下開發的軟體,原始的源程序是開放源代碼的,但使用者修改以後,可以自行選擇發布源程序或者二進位程序(即目標程序),當然,使用者有義務把自己原來使用的源程序與BSD協議在軟體對外發布時一併發布。因為比較靈活,所以BSD深受大公司的歡迎。


烏克蘭程序員Paul Bagwell的分析圖,方便大家直接查看。http://sosuny.iteye.com/blog/1026575


剛好最近研究了一下開源協議協議,分享給大家。


為什麼要添加開源協議?

首先是對作者的保護,防止知識成果被惡意利用。

  • 開源協議中一般都包含免責聲明(禁止代碼的作者承擔代碼使用後的風險及產生的後果),比如你開源了一個破解智能鎖的代碼,如果有人利用這個去盜竊導致他人損失,你是無需承擔責任的。

其次是對使用者的保護,方便使用者。

  • 使用者一看就知道自己允許進行哪些操作,不允許進行哪些操作。
  • 未添加協議的代碼默認是作者保留所有權利的(對此不同國家的法律可能稍微存在區別),這就像一顆定時炸彈,如果你在項目中使用了這一份沒有協議的代碼,原作者只要能證明你未經許可使用了他的代碼,是能夠起訴你的。

如何選擇合適的開源協議?

雖然開源協議種類眾多,但最常用的也就幾種而已,使用率比較高的三種協議就是上面圖中所示,如果想了解更多的開源協議和相關問題可以參照我寫的一篇文章和這個網站:

程序員不可不知的版權協議

選擇一個開源軟體協議


GitHub 提供了一個很贊的幫助網站,提供了各主流許可證的協議文本,並對它們作了詳細的介紹和比較:

choosealicense.com

寬容許可證

MIT、
BSD 許可證都源自大學,體現了簡單、開放和包容的特點。儘管 MIT、BSD、Apache
三者都支持閉源的後續開發,提供了很大的靈活性和使用空間,但我更傾向於推薦採用 Apache 2
許可證,因為後者對一些開源協議常用術語作出了準確的定義,而且協議文本看上去也更為成熟,考慮更為周到。

MIT

MIT 許可證是史上最為簡潔和慷慨(permissive)的開源協議之一。應用案例有:JQuery、Rails 等。

MIT 許可證

BSD

BSD 許可證與 MIT 差不多,也非常簡單、慷慨。

ISC 許可證
BSD 2-clause 許可證
BSD 3-clause 許可證

Apache

Apache 2 的效力與 MIT 近似,區別主要在於前者額外提供了一份簡易的專利許可授權,明確禁止商標使用權以及要求明確指明所有修改過的文件(state changes)。應用案例有:Apache 家族、SVN、NuGet 等等。

Apache 2.0 許可證


  1. GPL、LGPL 傳染性開源,編譯的代碼里用了這裡的代碼,都必須開源
  2. 其它License,最好都在產品上說明使用了,署名保留原作者就ok

But,即使是最具傳染性的GPL、LGPL也是可以通過編譯成獨立二進位的方式來規避的。參考 Android ,在爭議中逃離 Linux 內核的 GPL 約束


日常選擇必備圖,看了阮一峰前輩和 Paul Miller 的博客發現有點不一樣,自己又繪製了一副。

本寶寶的博客——開源許可證快速選擇


推薦阮一峰的BLOG:http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html


綜合比較GPL/LGPL/Apache/MIT/BSD這五個開源許可協議:GPL/LGPL側重於代碼及衍生代碼的開源與免費使用;Apache重視專利權;MIT/BSD鼓勵代碼共享重用。所有許可協議都保護原作者的版權。 詳細信息可以參考:開源許可協議


推薦參考:
如何快速選擇開源軟體協議


五種開源協議的比較(BSD,Apache,GPL,LGPL,MIT)


鏈接里的圖描述最流行的六種開源許可證----GPL、BSD、MIT、Mozilla、Apache和LGPL的區別
http://sosuny.iteye.com/blog/1026575


我嘗試說的簡單點,有很多細節請看wiki

1.GPL 是最嚴格的,如果你使用了GPL的代碼,就必須沿襲這個協議,做出來的產品,無論商業不商業,必須開源. (可看看LGPL)
2.BSD很寬容,你要修改,你要閉源都可以,但至少要在代碼上保留原作者的信息,注釋等等.閉源的話要在版權聲明上附上BSD協議.
3.Apache License , 類似BSD

以上協議都是可以用於商業開發


推薦閱讀:

AWS 和 GAE 有什麼不同?
知乎和 42 區有什麼不同?
庫里與湯普森的三分技術有哪些不同?
大家有什麼一直寫錯的字?

TAG:A和B有什麼不同 | 開源軟體 | 開源 | 開源許可證 |