引子
目前公般,百度已經(jīng)要求外部產(chǎn)品線停止使用 React / React Native 等 Facebook 下涉及特定專利條款的開源產(chǎn)品险掀,給半年時(shí)間來「轉(zhuǎn)型」薄湿,推薦使用 Vue 或者自研的 San 作為替代方案鸭廷。內(nèi)部產(chǎn)品如果是新產(chǎn)品枝缔,則不能使用 React布疙。
另外百度內(nèi)部在自研 React Native 的替代方案。
何為React?? ?React.js? ? 萌芽于 Facebook 內(nèi)部開發(fā) Instagram 的項(xiàng)目中灵临,是一個(gè)用來構(gòu)建用戶界面的優(yōu)秀 JS 庫(kù)截型,于 2013 年 5 月開源。
由于 React的設(shè)計(jì)思想極其獨(dú)特儒溉,屬于革命性創(chuàng)新宦焦,性能出眾,代碼邏輯卻非常簡(jiǎn)單顿涣。所以赶诊,越來越多的人開始關(guān)注和使用,認(rèn)為它可能是將來 Web 開發(fā)的主流工具园骆。
但是在 2016 年 7 月舔痪,React.js 開源許可協(xié)議中的附加專利條款(Additional patent grant)引起了激烈爭(zhēng)論。
請(qǐng)看 React 官方團(tuán)隊(duì)的描述:React is?BSD?licensed. We also provide an additional?patent grant.
即:BSD 許可證 + 專利許可證锌唾。
BSD Lisense :?en.wikipedia.org/wiki/BSD_li… 锄码,沒有異議。
問題就出在了專利許可條款:github.com/facebook/re… 晌涕,節(jié)選原文如下:
The license g ranted hereunder will terminate, automatically and without notice,
if you (or any of your subsidiaries, corporate affiliates or agents) initiate
directly or indirectly, or take a direct financial interest in, any Patent
Assertion:(i)against Facebook or any of its subsidiaries or corporate
affiliates,(ii)against any party if such Patent Assertion arises in whole or
in part from any software, technology, product or service of Facebook or any of
its subsidiaries or corporate affiliates, or(iii)against any party relating
to the Software.
注意:
由i和ii可以清楚的看出:你不能基于 React 做任何構(gòu)成與 Facebook (包括其合作方或客戶)直接或間接競(jìng)爭(zhēng)的事情滋捶。如果你采取法律行動(dòng)或者以其他方式挑戰(zhàn) Facebook,那么你使用 React 的許可會(huì)被立即撤銷余黎。
由iii可以看出:你也不能與其他使用 React 的公司發(fā)生法律糾紛重窟,否則你使用 React 的許可也會(huì)被撤銷。
(節(jié)選出處 http://elevenbeans.github.io/2017/08/29/Explaining-React-s-license/ )
也許坐在辦公桌前的你只是看個(gè)熱鬧惧财,但是手中用著大量開源代碼的我們巡扇,有必要提升開源使用的習(xí)慣和素養(yǎng)了。
你看垮衷,強(qiáng)如百度也中招了厅翔,替換開發(fā)技術(shù)框架的成本可是非常高的。
正文
開源協(xié)議
開源軟件(Open source software)對(duì)我們來說越來越不陌生搀突,開源軟件一方面讓我們享用到了“免費(fèi)的午餐”刀闷,另一方面有效的利用和學(xué)習(xí)開源軟件,也能促進(jìn)我們開發(fā)軟件時(shí)的效率仰迁、提升軟件質(zhì)量甸昏。但是在使用和借鑒開源軟件的時(shí)候,我們不得不關(guān)心一下它對(duì)使用者的諸多限制徐许,比較常見的方式即協(xié)議授權(quán)(licence)施蜜,這些協(xié)議中明確說明了使用者應(yīng)該遵循的原則。
現(xiàn)在開源協(xié)議眾多绊寻,通過Open Source Initiative組織批準(zhǔn)的開源協(xié)議有50多種花墩,本文介紹其中一些常見的協(xié)議
BSD開源協(xié)議是一個(gè)給予使用者很大自由的協(xié)議悬秉。開發(fā)者可以自由使用和修改源代碼,也可以講修改后的源代碼作為開源或者專有軟件再發(fā)布冰蘑。但是有一下幾個(gè)要求:
如果再發(fā)布的產(chǎn)品中含有源代碼和泌,則在源代碼中必須帶有原來代碼中的BSD協(xié)議。
如果再發(fā)布的只是二進(jìn)制類庫(kù)/軟件祠肥,則需要再類庫(kù)/軟件的文檔和版權(quán)申明中包含原有代碼中的BSD協(xié)議武氓。
不可以用開源代碼的作者/機(jī)構(gòu)名字和原來產(chǎn)品的名字做市場(chǎng)推廣。
BSD 代碼鼓勵(lì)代碼共享仇箱,但需要尊重代碼作者的著作權(quán)县恕。BSD由于允許使用者修改和重新發(fā)布代碼,也允許使用或在BSD代碼上開發(fā)商業(yè)軟件發(fā)布和銷售剂桥,因此是對(duì)商業(yè)集成很友好的協(xié)議忠烛。而很多的公司企業(yè)在選用開源產(chǎn)品的時(shí)候都首選BSD協(xié)議,因?yàn)榭梢酝耆刂七@些第三方的代碼权逗,在必要的時(shí)候可以修改或者二次開發(fā)美尸。
Apache Licence 2.0(Apache-2.0)
Apache Licence是著名的非盈利開源組織Apache采用的協(xié)議。該協(xié)議和BSD類似斟薇,同樣鼓勵(lì)代碼共享和最終原作者的著作權(quán)师坎,同樣允許源代碼修改和再發(fā)布。但是也需要遵循以下條件:
需要給代碼的用戶一份Apache Licence堪滨。
如果修改了代碼胯陋,需要再被修改的文件中說明。
在衍生的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協(xié)議袱箱,商標(biāo)遏乔,專利聲明和其他原來作者規(guī)定需要包含的說明。
如果再發(fā)布的產(chǎn)品中包含一個(gè)Notice文件犯眠,則在Notice文件中需要帶有Apache Licence按灶。你可以再Notice中增加自己的許可症革,但是不可以表現(xiàn)為對(duì)Apache Licence構(gòu)成更改筐咧。
使用這個(gè)協(xié)議的好處是:
永久權(quán)利 一旦被授權(quán),永久擁有噪矛。
全球范圍的權(quán)利 在一個(gè)國(guó)家獲得授權(quán)量蕊,適用于所有國(guó)家。假如你在美國(guó)艇挨,許可是從印度授權(quán)的残炮,也沒有問題。
授權(quán)免費(fèi) 無版稅缩滨, 前期势就、后期均無任何費(fèi)用泉瞻。
授權(quán)無排他性 任何人都可以獲得授權(quán)
授權(quán)不可撤消 一旦獲得授權(quán),沒有任何人可以取消苞冯。比如袖牙,你基于該產(chǎn)品代碼開發(fā)了衍生產(chǎn)品,你不用擔(dān)心會(huì)在某一天被禁止使用該代碼
Apache Licence也是對(duì)商業(yè)應(yīng)用友好的許可舅锄。使用者也可以再需要的時(shí)候修改代碼來滿足并作為開源或商業(yè)產(chǎn)品發(fā)布/銷售鞭达。
我們很熟悉的Linux就是采用了GPL。GPL協(xié)議和BSD, Apache Licence等鼓勵(lì)代碼重用的許可很不一樣皇忿。GPL的出發(fā)點(diǎn)是代碼的開源/免費(fèi)使用和引用/修改/衍生代碼的開源/免費(fèi)使用畴蹭,但不允許修改后和衍生的代碼做為閉源的商業(yè)軟件發(fā)布和銷售。這也就是為什么我們能用免費(fèi)的各種linux鳍烁,包括商業(yè)公司的linux和linux上各種各樣的由個(gè)人叨襟,組織,以及商業(yè)軟件公司開發(fā)的免費(fèi)軟件了幔荒。
GPL協(xié)議的主要內(nèi)容是只要在一個(gè)軟件中使用(“使用”指類庫(kù)引用芹啥,修改后的代碼或者衍生代碼)GPL 協(xié)議的產(chǎn)品,則該軟件產(chǎn)品必須也采用GPL協(xié)議铺峭,既必須也是開源和免費(fèi)墓怀。這就是所謂的”傳染性”。GPL協(xié)議的產(chǎn)品作為一個(gè)單獨(dú)的產(chǎn)品使用沒有任何問題卫键,還可以享受免費(fèi)的優(yōu)勢(shì)傀履。
由于GPL嚴(yán)格要求使用了GPL類庫(kù)的軟件產(chǎn)品必須使用GPL協(xié)議,對(duì)于使用GPL協(xié)議的開源代碼莉炉,商業(yè)軟件或者對(duì)代碼有保密要求的部門就不適合集成/采用作為類庫(kù)和二次開發(fā)的基礎(chǔ)钓账。
其它細(xì)節(jié)如再發(fā)布的時(shí)候需要伴隨GPL協(xié)議等和BSD/Apache等類似。
LGPL是GPL的一個(gè)為主要為類庫(kù)使用設(shè)計(jì)的開源協(xié)議絮宁。和GPL要求任何使用/修改/衍生之GPL類庫(kù)的的軟件必須采用GPL協(xié)議不同梆暮。LGPL允許商業(yè)軟件通過類庫(kù)引用(link)方式使用LGPL類庫(kù)而不需要開源商業(yè)軟件的代碼。這使得采用LGPL協(xié)議的開源代碼可以被商業(yè)軟件作為類庫(kù)引用并發(fā)布和銷售绍昂。
但是如果修改LGPL協(xié)議的代碼或者衍生啦粹,則所有修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須采用LGPL協(xié)議窘游。因此LGPL協(xié)議的開源代碼很適合作為第三方類庫(kù)被商業(yè)軟件引用唠椭,但不適合希望以LGPL協(xié)議代碼為基礎(chǔ),通過修改和衍生的方式做二次開發(fā)的商業(yè)軟件采用忍饰。
GPL/LGPL都保障原作者的知識(shí)產(chǎn)權(quán)贪嫂,避免有人利用開源代碼復(fù)制并開發(fā)類似的產(chǎn)品
MIT是和BSD一樣寬范的許可協(xié)議,源自麻省理工學(xué)院(Massachusetts Institute of Technology, MIT),又稱X11協(xié)議艾蓝。作者只想保留版權(quán),而無任何其他了限制力崇。MIT與BSD類似斗塘,但是比BSD協(xié)議更加寬松,是目前最少限制的協(xié)議亮靴。這個(gè)協(xié)議唯一的條件就是在修改后的代碼或者發(fā)行包包含原作者的許可信息逛拱。適用商業(yè)軟件。使用MIT的軟件項(xiàng)目有:jquery台猴、Node.js朽合。
MIT與BSD類似,但是比BSD協(xié)議更加寬松饱狂,是目前最少限制的協(xié)議曹步。這個(gè)協(xié)議唯一的條件就是在修改后的代碼或者發(fā)行包包含原作者的許可信息。適用商業(yè)軟件休讳。使用MIT的軟件項(xiàng)目有:jquery讲婚、Node.js。
MPL(Mozilla Public License 1.1)
MPL協(xié)議允許免費(fèi)重發(fā)布俊柔、免費(fèi)修改筹麸,但要求修改后的代碼版權(quán)歸軟件的發(fā)起者 。這種授權(quán)維護(hù)了商業(yè)軟件的利益雏婶,它要求基于這種軟件的修改無償貢獻(xiàn)版權(quán)給該軟件物赶。這樣,圍繞該軟件的所有代碼的版權(quán)都集中在發(fā)起開發(fā)人的手中留晚。但MPL是允許修改酵紫,無償使用得。MPL軟件對(duì)鏈接沒有要求错维。
EPL (Eclipse Public License 1.0)
EPL允許Recipients任意使用奖地、復(fù)制、分發(fā)赋焕、傳播参歹、展示、修改以及改后閉源的二次商業(yè)發(fā)布隆判。
使用EPL協(xié)議犬庇,需要遵守以下規(guī)則:
1.當(dāng)一個(gè)Contributors將源碼的整體或部分再次開源發(fā)布的時(shí)候,必須繼續(xù)遵循EPL開源協(xié)議來發(fā)布,而不能改用其他協(xié)議發(fā)布.除非你得到了原“源碼”O(jiān)wner 的授權(quán);
2.EPL協(xié)議下,你可以將源碼不做任何修改來商業(yè)發(fā)布.但如果你要發(fā)布修改后的源碼,或者當(dāng)你再發(fā)布的是Object Code的時(shí)候,你必須聲明它的Source Code是可以獲取的,而且要告知獲取方法蜜氨;
3.當(dāng)你需要將EPL下的源碼作為一部分跟其他私有的源碼混和著成為一個(gè)Project發(fā)布的時(shí)候,你可以將整個(gè)Project/Product以私人的協(xié)議發(fā)布,但要聲明哪一部分代碼是EPL下的,而且聲明那部分代碼繼續(xù)遵循EPL械筛;
4.獨(dú)立的模塊(Separate Module),不需要開源。
各協(xié)議分析圖
烏克蘭程序員Paul Bagwell飒炎,畫了一張分析圖,說明應(yīng)該怎么選擇笆豁。阮一峰對(duì)圖進(jìn)行了漢化郎汪,如下圖:
(節(jié)選自?http://yansu.org/2013/04/23/opensource-licenses.html)