隨著 Facebook 連續(xù)發(fā)布使用 MIT 許可協(xié)議的 React v15.6.2 版和 v16 版,最近一段時(shí)間搞得沸沸揚(yáng)揚(yáng)的 React 許可協(xié)議事件終于塵埃落定了,不過很多吃瓜群眾可能還搞清楚怎么回事,這里我就來(lái)講一講來(lái)龍去脈。
1React 到底惹了什么麻煩?
一切都要從開源軟件的許可協(xié)議 (license) 說起。
搞開源軟件,并不是說把源代碼公布出去就完事,還有很多問題要考慮。比如,源代碼有 bug 害得用戶損失了一個(gè)億算誰(shuí)的責(zé)任,有人想繼續(xù)修改源代碼重新發(fā)布怎么辦,涉及到軟件專利怎么辦……為了解決這些問題,開源軟件往往要隨源代碼包含一個(gè)許可協(xié)議,當(dāng)然,要是每個(gè)開源軟件開發(fā)者都起草自己的許可協(xié)議,那他們估計(jì)也沒多少時(shí)間寫代碼了,所以,往往是采用現(xiàn)成的開源軟件許可協(xié)議。
現(xiàn)成的開源軟件許可協(xié)議很多,和這起事件相關(guān)的三個(gè),也是開源軟件中很常用的三個(gè),就是 BSD、MIT 和 Apache v2。
Facebook 曾經(jīng)默認(rèn)對(duì)自己開源出來(lái)軟件采用 BSD 許可協(xié)議,但是,在 2015 年的時(shí)候,F(xiàn)acebook 給自己開源軟件增加了一個(gè)專利附屬條款,React 也就隨之改為包含這個(gè)專利附屬條款的 BSD 許可協(xié)議,這也就是這起事件的源頭。
Facebook 為什么要增加這個(gè)條款呢?因?yàn)?BSD 和 MIT 這兩種許可協(xié)議都是沒有專利相關(guān)內(nèi)容的,換句話說,雖然源代碼是授權(quán)出去了,但是代碼中如果涉及到一些專利問題,就扯不清了,軟件專利這事情糾纏起來(lái)是非常狗血的,于是 Facebook 用這個(gè)專利附屬條款來(lái)做自我防御。
在這里可以看見專利附屬條款的內(nèi)容,滿文都是搞法律人才寫得出的詞匯,冗長(zhǎng)而且晦澀,但可以簡(jiǎn)單一點(diǎn)解釋,以 React 為例,就是這樣:Facebook 擁有 React 中的一些專利,但是 Facebook 不會(huì)利用這些專利來(lái)找用戶你的麻煩,不過,如果用戶你有一天利用“任何專利問題”來(lái)找 Facebook 的麻煩,那么 Facebook 有權(quán)立刻停止授權(quán)你使用 React。
這里我們首先認(rèn)識(shí)到,用什么許可協(xié)議,完全是開源軟件貢獻(xiàn)者的決定,其他人如果想強(qiáng)制要求 Facebook 用什么許可協(xié)議不用什么許可協(xié)議,就和要求微軟開源 Windows 和 Office 源代碼一樣可笑。
Facebook 在 2015 年做了這個(gè)許可協(xié)議更改之后,招來(lái)一些非議,但是也沒有引起大風(fēng)波,直到幾年后,在今年 7 月份,開源組織 Apache 軟件基金會(huì)將 Facebook 的這種帶專利附屬條款的 BSD 列為 Category X,這個(gè) Category X 就是 Apache 基金會(huì)的黑名單,如果哪個(gè)開源軟件是基于這個(gè)黑名單上的許可協(xié)議,那就不能在 Apache 基金會(huì)的開源項(xiàng)目中使用,這是為了防止軟件依賴樹被“污染”。要知道,BSD 協(xié)議本身不在 Category X 黑名單上,所以 Apache 這個(gè)決定就是針對(duì) Facebook 的專利附屬條款,害怕這個(gè)附屬條款會(huì)給 Apache 帶來(lái)麻煩。
這個(gè)決定導(dǎo)致基于 React 的很多 Apache 項(xiàng)目不得不重寫。
Apache 這么一搞,一下子把 Facebook 推到風(fēng)口浪尖,大批大批開發(fā)者請(qǐng)?jiān)赶M?Facebook 更改 React 的許可協(xié)議,畢竟,誰(shuí)也不希望有朝一日自己的軟件被停止使用。
面對(duì)這些請(qǐng)?jiān)福現(xiàn)acebook 一開始是拒絕的,依然認(rèn)為包含專利條款的 BSD 許可協(xié)議是最好的選擇。
然后,在 9 月份,WordPress 的創(chuàng)始人 Matt 也表示 WordPress 也會(huì)離開 React,值得一提的是,Matt 在聲明中盛贊 React 是一個(gè)了不起的軟件,并且說這樣做是為了規(guī)避風(fēng)險(xiǎn)。
WordPress 的決定應(yīng)該是推動(dòng) Facebook 做出改變的最主要原因,要知道,這世界上每四個(gè)網(wǎng)站就有一個(gè)是用 WordPress 構(gòu)建的,WordPress 不用 React 影響太大,所以,F(xiàn)acebook 終于發(fā)表聲明,表示會(huì)在新版 v16 中放棄原有的帶專利附屬條款的 BSD 許可協(xié)議,轉(zhuǎn)而采用 MIT 許可協(xié)議。
事實(shí)上,既然做了這個(gè)決定,就不用等 v16 了,React 在 v16 發(fā)布之前發(fā)布了 v15.6.2,作為 v15 的收官之作,已經(jīng)改為 MIT 許可協(xié)議。
2事情到此為止了,然而,真的到此為止了嗎?
我們重新回顧一下這個(gè)事件,期間有不少人渾水摸魚謾罵 Facebook,各種曲解那個(gè)專利附屬條款,各種夸大 Facebook 會(huì)利用這個(gè)條款整治其他公司的可能性,所以,這里需要重新審視一下這個(gè)條款。
首先要知道,這個(gè)條款是一個(gè)防御性的法律措施,為的是防止有人利用專利問題起訴 Facebook,條款中是 Facebook 先授權(quán)用戶使用專利,然后再防止用戶因?yàn)閷@麊栴}反訴 Facebook。
事實(shí)上,自從實(shí)施這個(gè)條款以來(lái),F(xiàn)acebook 還從來(lái)沒有利用這個(gè)條款取消某個(gè)組織或者個(gè)人對(duì)自己的開源軟件的使用許可,React 也得到廣泛的應(yīng)用,Microsoft、AirBnB 等大型公司都在大量使用 React。當(dāng)然,Microsoft 是 Facebook 的股東,AirBnB 也沒有和 Facebook 有商業(yè)競(jìng)爭(zhēng),可是,就連 Twitter 也在使用 React,Twitter 可是和 Facebook 有最直接的競(jìng)爭(zhēng)關(guān)系,他們都不怕,還有什么好怕的呢?
所以說,覺得 Facebook 會(huì)利用這個(gè)條款來(lái)打擊競(jìng)爭(zhēng)對(duì)手,那真是想多了。
當(dāng)然,擔(dān)心惹上麻煩而棄用 React 的 Apache 和 WordPress,也完全應(yīng)該理解他們的做法,因?yàn)樗麄兊能浖恢皇亲约河茫且l(fā)布出去,被千百萬(wàn)其他用戶使用,這樣牽扯到的就不只是 Facebook 和 Apache、WordPress 之間的關(guān)系,還要應(yīng)對(duì)這世界各色各樣用戶的法律需求。法律上的事情,小心無(wú)大錯(cuò)。
React 已經(jīng)改為 MIT 許可協(xié)議了,問題就徹底解決了嗎?
很可惜,也許解決了一個(gè)問題,但是誕生了新的問題。
前面已經(jīng)說過,BSD 和 MIT 許可協(xié)議都不包含專利保護(hù)內(nèi)容,但是 Apache v2 許可協(xié)議有相關(guān)內(nèi)容, Apache v2 對(duì)于專利問題的處理可以這么解釋:如果你起訴這個(gè)開源軟件中用到的專利,那么從你起訴那一刻起,對(duì)你的許可協(xié)議就取消了。
乍看一眼,似乎和 Facebook 的專利附屬條款一樣的嘛,其實(shí),關(guān)鍵區(qū)別就是專利的范圍,Apache v2 保護(hù)專利的范圍是開源軟件中用到的專利,而 Facebook 專利附屬條款針對(duì)的是“任何專利”。
理論上說,如果某個(gè)農(nóng)業(yè)公司告 Facebook 侵犯了他們水稻基因培育的專利,根據(jù)專利附屬條款條款 Facebook 可以要求這個(gè)農(nóng)業(yè)公司不許用 React,這個(gè)農(nóng)業(yè)公司的官方網(wǎng)站如果用 React 寫的話就麻煩了,這個(gè)虛構(gòu)的故事聽起來(lái)就有點(diǎn)扯,但也看出這個(gè)專利條款的殺傷力很大。
這樣一看,Apache v2 似乎是一個(gè)關(guān)于專利問題更好的選擇,但是 Facebook 選擇了 MIT,一個(gè)同樣沒有專利保護(hù)內(nèi)容的許可協(xié)議。
Facebook 為什么選擇 MIT 呢?這個(gè)問題外人無(wú)法回答,只能猜測(cè),最大的可能就是,MIT 是 github 上最受歡迎的許可協(xié)議,所以干脆從善如流,就選最熱的許可協(xié)議好了,省去很多口水。
那 Facebook 為什么不選擇 Apache v2 呢?很可能 Apache v2 并不滿足 Facebook 的要求。
好了,現(xiàn)在 React 換成 MIT 許可協(xié)議了,雖然看不見那個(gè)煩人的“專利附屬條款”,但是專利的問題依然存在,如果將來(lái)某個(gè)組織和 Facebook 產(chǎn)生了專利沖突,怎么辦呢?那時(shí)候,就看誰(shuí)的專利池里貨更多,就看誰(shuí)能請(qǐng)到更厲害的律師,就看誰(shuí)更有錢打曠日持久的官司。
這么一看,似乎還真不如最初帶一個(gè)專利附屬條款的 BSD。
這是開源世界對(duì) Facebook 的勝利嗎?首先,這不是一場(chǎng)戰(zhàn)爭(zhēng),這只不過是開源軟件世界中的一次討論,所以用不上“勝利”這個(gè)詞匯。
在這場(chǎng)大戲中,除了 Facebook、Apache 和 WordPress 這幾個(gè)主角,還有眾多的開發(fā)者參與其中作為群眾演員。
大家有訴求,發(fā)出自己的聲音,這沒有問題,很多開發(fā)者都有禮有節(jié)地向 Facebook 請(qǐng)?jiān)福牵部梢月牭胶芏鄻O其刺耳的聲音,對(duì) Facebook 各種侮辱批斗。
如果覺得觀念不合就要批斗,這和專制有什么區(qū)別?
不管怎樣,F(xiàn)acebook 選擇用什么樣的許可協(xié)議,都是他自己的事情,你可以請(qǐng)求或者建議他做出改變,但是靠謾罵和中傷就是沒素質(zhì),難道真的以為 Facebook 是被罵才做出改變的嗎?好好說話不行嗎?整個(gè)事件中最大的推動(dòng)力量是 WordPress 而不是口出穢言的噴子。
React 是一個(gè)非常優(yōu)秀的軟件,F(xiàn)acebook 作為這個(gè)軟件的創(chuàng)造者應(yīng)該受到尊敬,當(dāng)我們?cè)谙碛脛e人的開源成果時(shí),應(yīng)該想的是自己能夠做什么來(lái)幫助別人,而不是見風(fēng)就是雨的嘲笑中傷挖井的人。
不管怎樣,React 將會(huì)繼續(xù)演進(jìn),作為目前最受歡迎的 UI 庫(kù)之一,讓我們共同為 React 社區(qū)的繁榮努力奮斗吧。