作為前端,你需要了解的開源協議知識
來自專欄百度外賣前端
作者 百度外賣—王琬璐 @meiyu 百度外賣—游茹玉 @ryyou
轉載請標明出處
作為前端工程師,開發中在所難免會用到一些開源框架,而每個框架都有自己的開源協議,每個開源協議之間有什麼差別呢? 如果你要開源一個項目,又應該選擇哪種開源協議呢?
許多開發者,對於開源協議的認知很少,本文從這些常用的前端框架入手,介紹開源常用開源協議的基礎知識。
什麼是開源協議?
根據 開源協議 在維基百科的定義:
開源許可是一種計算機軟體和其他產品的許可類型,允許使用、修改或在定義的條款和條件下使用、修改或共享的源代碼、藍圖和設計。這允許終端用戶和商業公司對源代碼、圖紙或設計進行審查和修改,以滿足自己的定製、好奇心或故障排除的需要。開源許可的軟體大多是免費的,儘管這並不一定是必須的。許可證只允許非商業的重新分配或修改個人使用的源代碼,通常不被認為是開源許可。然而,開源許可可能會有一些限制,尤其是對軟體的起源的表達,比如要求保留作者的名字和代碼中的版權聲明,或要求重新分配授權軟體只有在相同的許可(如copyleft許可證)。一組流行的開源軟體許可證是由開源計劃(OSI)根據其開源定義(OSD)批准的。
為什麼要選用開源協議?
在 GcsSloop 寫的文章 程序員不可不知的版權協議 中給出了很好的概括。
- 首先是對作者的保護,防止知識成果被惡意利用。開源協議中一般都包含免責聲明(禁止代碼的作者承擔代碼被使用後產生的風險及後果),比如你開源了一個破解智能鎖的代碼,如果有人利用這個去盜竊導致他人損失,你是無需承擔責任的。
- 其次是對使用者的保護,方便使用者。使用者一看就知道自己允許進行哪些操作,不允許進行哪些操作。未添加協議的代碼默認是作者保留所有權利的(對此不同國家的法律可能稍微存在區別),這就像一顆定時炸彈,如果你在項目中使用了這一份沒有協議的代碼,原作者只要能證明你未經許可使用了他的代碼,是能夠起訴你的。
當前主流開源許可證(GPL、BSD、MIT、Mozilla、Apache、LGPL)和它們的異同?
相關概念解析:
協議和版權信息(License and copyright notice):在代碼中保留作者提供的協議和版權信息
聲明變更(State Changes):在代碼中聲明對原來代碼的重大修改及變更公開源碼(Disclose Source):代碼必需公開。如果是基於LGPL協議 下,則只需使用的開源代碼公開,不必將整個軟體源碼公開庫引用(Library usage):該庫可以用於商業軟體中責任承擔(Hold Liable):代碼的作者承擔代碼使用後的風險及產生的後果商標使用(Use Trademark):可以使用作者的姓名,作品的Logo,或商標附加協議(Sublicensing):允許在軟體分發傳播過程中附加上原來沒有的協議條款等
當前前端主流框架選取的開源協議
縱觀比較常用的前端框架,用的最廣泛的便是 MIT 開源協議。
- Vue: MIT https://github.com/vuejs/vue/blob/dev/LICENSE
- React:MIT https://github.com/facebook/react/blob/master/LICENSE
- Element: MIT https://github.com/ElemeFE/element/blob/master/LICENSE
- Ant Design:MIT https://github.com/ant-design/ant-design/blob/master/LICENSE
列舉的框架開源協議都是 MIT 。那麼為什麼選擇 MIT 呢?
MIT是一種簡短而簡單的許可,只需要保留版權和許可通知。許可的作品、修改和更大的作品可以在不同的條件下分發,並且沒有源代碼。MIT允許別人用作者的代碼做任何事情,但必須保證作者的所有權,並且作者無須承擔代碼使用產生的風險。其中,要重點說一下 React 的開源協議,從 github 的提交歷史來看,React 的開源協議經歷了一個動蕩的過程。從 LICENCE 的提交歷史看,Facebook 對專利的重視程度可見一斑。去年知乎上一個《如何看待百度要求內部全面停止使用 React / React Native?》的文章引起了前端界的熱議,事情的起因是大家發現了 Facebook 專利許可證上的描述暗藏玄機。在技術開源的世界,對於開發者而言,許可證就是他們使用開源軟體的 「用戶協議」。而 Facebook 的開源方式跟其他家都不太一樣,別家一般用的都是開源社區公認通用的許可證,而 Facebook 使用的是兩個許可證,第一個是通用的 BSD 許可證,第二個是自己寫的專利許可證 (patent grant)。
而在 React 的開源協議中這麼寫到:意思就是:
當發生下列情況時,facebook 有權益吊銷你的 React 使用權:- 與 facebook 及其附屬機構發生利益衝突
- 同任何一個和 facebook 有關的組織發生了法律糾紛
- 同任何與 React 有關的組織發生利益衝突
翻譯成大白話就是:如果你覺得 Facebook 侵犯了你的知識產權,同時你的核心產品是基於 React 實現,如果你想起訴 Facebook,就要權衡一下了,因為根據條款它有權利吊銷你的 React 使用權。或者說你用 React 做了一個產品並且在某些領域對 Facebook 構成了利益衝突,那麼它就可以強制你的產品下線。
可以說,一旦你開始使用 React 去構建你的核心產品,你的公司就被 facebook 埋下了一顆定時炸彈,並且,炸彈的引爆按鈕就握在 facebook 手中。其實這種事情,從去年就在前端技術圈開吵,後來愈演愈烈,形勢每況日下:開源社區在更多 Facebook 開源的熱門項目中發現了相同的許可證模式和條款。開發者認為 Facebook 的這種許可證模式正在毒害社區,污染開源精神。而且 Apache 軟體基金會宣布所有使用 Apache 開源協議的軟體都不得使用帶有 Facebook BSD + 專利許可證模式的組件。
不過 Facebook 最後還是意識到了這些問題,修改了開源協議。如何為我們的項目選擇一個開源協議?
首先,我們要清楚我們選擇開源的目的是什麼?
作為個人,在開源的情況下,我們可以幫助他人,也可以獲得他人的幫助,還是一個提升個人代碼質量的好方法,同樣,也是一個展示自己能力的好方法。世界上開源軟體協議的種類非常之多,並且同一款協議有很多變種,協議太寬鬆會導致作者喪失對作品的很多權利,太嚴格又不便於使用者使用及作品的傳播,所以開源作者要考慮自己對作品想保留哪些權利,放開哪些限制。 作為公司,代碼開源後,會提升公司的地位,樹立一個良好的品牌形象,也可以幫助公司發掘潛在員工。那麼,我們如何選擇適合我們的開源許可證呢?
由一張圖直觀了解如何選取所需要的開源許可證。(原著:烏克蘭程序員Paul Bagwell,翻譯:阮一峰)
舉例來說:
- 如果我只是想專心的寫代碼,那麼可以選擇 MIT ,MIT在保證了作者的所有權的前提下允許別人使用作者的代碼,且作者不需要承擔使用時的風險。
- 如果我想保護我的代碼、專利,那麼可以選擇 Apache ,Apache 與 MIT 的區別就是提供了專利貢獻者的授權,使用者需要明確這一點。
Github 專門發布了一個網站 Choosing an OSS license doesn』t need to be scary 來幫助開源項目開發者。
- 我想要一個簡單寬鬆的許可證建議: MIT 許可證。這是一個寬鬆的、簡明扼要的許可證,只要用戶在項目副本中包含了版權聲明和許可聲明,他們就可以拿你的代碼做任何想做的事情,你也無需承擔任何責任。使用該許可證的項目:jQuery、Rails
- 我比較關心專利建議: Apache許可證。這類似於 MIT 許可證,但它同時還包含了貢獻者向用戶提供專利授權相關的條款。使用該許可證的項目:Apache、SVN和NuGet
- 我關心項目的共享改進
建議:GPL( V2或 V3)許可證。這是一種 copyleft 許可證,要求修改項目代碼的用戶再次分發源碼或二進位代碼時,必須公布他的相關修改。V3版本與V2類似,但其進一步約束了在某些限制軟體更改的硬體上的使用範圍。
使用該許可證的項目:Linux、Git - 我的開源項目不是代碼建議: Creative Commons。這是一個相對寬鬆的版權協議。它只保留幾種了權利(some rights reserved)。使用者可以明確知道所有者的權利,不容易侵犯對方的版權,作品可以得到有效傳播。作為作者,你可以選擇以下1~4種權利組合:1) 署名(Attribution,簡寫為BY):必須提到原作者。2) 非商業用途(Noncommercial,簡寫為NC):不得用於盈利性目的。3) 禁止演繹(No Derivative Works,簡寫為ND):不得修改原作品, 不得再創作。4) 相同方式共享(Share Alike,簡寫為SA):允許修改原作品,但必須使用相同的許可證發布。
- 更多選擇Licenses - http://ChooseALicense.com,這裡提供了Apache/ GPL/ MIT/ Artistic/ Eclipse/ BSD/ LGPL/ Mozilla/ No License/ Public Domain Dedication 協議的適用情形、許可內容、禁止內容,及協議全文。
如何為代碼添加開源協議?
GitHub
- 首先需要註冊一個 GitHub 賬號,並登錄
- 在 GitHub 上選擇創建一個新的 repository
3. 進入創建 repository 頁面後,輸入基本信息後,點擊右下角的 Add a license 選擇開源協議,默認是 none。對應的 license 可以直接選擇,也可以輸入自己想要的 license
4. 點擊最下方 Create repository,就創建成功了。
5. 創建成功後,代碼庫中就可以看到自動生成了一個 LICENSE 文件。
參考文獻
選擇一個開源軟體協議
程序員不可不知的版權協議
開源許可證都有什麼區別,一般開源項目用什麼許可證?
都在封殺 React/React Native ,那我到底還該不該繼續學呢?
React開源協議之爭知多少?
how to choose a license
推薦閱讀:
※React填坑記(四):render !== hydrate
※用Markdown格式寫一份前端簡歷
※前端日刊-2018.01.06
※前端頁面熱更新實現方案
※木犀互聯網技術周刊(第三十二期)