作為前端,你需要了解的開源協議知識

作為前端,你需要了解的開源協議知識

來自專欄百度外賣前端

作者 百度外賣—王琬璐 @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 github.com/vuejs/vue/bl
  • React:MIT github.com/facebook/rea
  • Element: MIT github.com/ElemeFE/elem
  • Ant Design:MIT github.com/ant-design/a

列舉的框架開源協議都是 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 來幫助開源項目開發者。

  1. 我想要一個簡單寬鬆的許可證建議: MIT 許可證。這是一個寬鬆的、簡明扼要的許可證,只要用戶在項目副本中包含了版權聲明和許可聲明,他們就可以拿你的代碼做任何想做的事情,你也無需承擔任何責任。

    使用該許可證的項目:jQuery、Rails
  2. 我比較關心專利

    建議: Apache許可證。這類似於 MIT 許可證,但它同時還包含了貢獻者向用戶提供專利授權相關的條款。

    使用該許可證的項目:Apache、SVN和NuGet
  3. 我關心項目的共享改進

    建議:GPL( V2或 V3)許可證。這是一種 copyleft 許可證,要求修改項目代碼的用戶再次分發源碼或二進位代碼時,必須公布他的相關修改。V3版本與V2類似,但其進一步約束了在某些限制軟體更改的硬體上的使用範圍。

    使用該許可證的項目:Linux、Git
  4. 我的開源項目不是代碼

    建議: Creative Commons。這是一個相對寬鬆的版權協議。它只保留幾種了權利(some rights reserved)。使用者可以明確知道所有者的權利,不容易侵犯對方的版權,作品可以得到有效傳播。作為作者,你可以選擇以下1~4種權利組合:

    1) 署名(Attribution,簡寫為BY):必須提到原作者。

    2) 非商業用途(Noncommercial,簡寫為NC):不得用於盈利性目的。

    3) 禁止演繹(No Derivative Works,簡寫為ND):不得修改原作品, 不得再創作。

    4) 相同方式共享(Share Alike,簡寫為SA):允許修改原作品,但必須使用相同的許可證發布。
  5. 更多選擇

    Licenses - ChooseALicense.com,這裡提供了Apache/ GPL/ MIT/ Artistic/ Eclipse/ BSD/ LGPL/ Mozilla/ No License/ Public Domain Dedication 協議的適用情形、許可內容、禁止內容,及協議全文。

如何為代碼添加開源協議?

GitHub

  1. 首先需要註冊一個 GitHub 賬號,並登錄
  2. 在 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
前端頁面熱更新實現方案
木犀互聯網技術周刊(第三十二期)

TAG:前端開發 | 前端入門 | 前端開發框架和庫 |