在全世界搞IT的程序員中間廣泛流傳著一句諺語:“開源使用一時(shí)爽,版本發(fā)布火葬場。”不明就里的吃瓜群眾們可能會(huì)問,開源軟件到底有什么毒,讓程序員們連禿頂都不怕,卻唯獨(dú)對它心有余悸呢?要回答這個(gè)問題,就要從開源軟件的定義說起。
所謂開源軟件,是一種源代碼免費(fèi)開放的軟件,任何組織都可以在其License(譯:許可)的規(guī)定下對其進(jìn)行使用、復(fù)制、傳播及修改,并可以將該修改形成的軟件再次發(fā)布。
這段話看似人畜無害,其實(shí)暗藏殺機(jī),關(guān)鍵點(diǎn)就是所謂的License。如果稍不注意,輕則破財(cái)消災(zāi),嚴(yán)重的就倒閉破產(chǎn)。
思科陰溝翻船,賠掉數(shù)千萬美元
舉個(gè)真實(shí)的案例,美國芯片巨頭Broadcom在某款802.11芯片中使用了License類型為GPL的linux系統(tǒng),隨后該芯片被另一家叫做Linksys的通信設(shè)備公司集成在了自家的WRT54G無線路由器中,再后來Linksys公司在2003年被業(yè)界巨頭思科收購。理論上,由于WRT54G使用的芯片采用了GPL License的Linux系統(tǒng),那么包括芯片源碼、集成了芯片的產(chǎn)品源碼都要免費(fèi)開源出去。顯然,思科不打算這么做。不久,思科就被FSF(自由軟件基金會(huì):業(yè)界最大的開源軟件維權(quán)組織)投訴,起初雙方互不讓步,經(jīng)過數(shù)年交涉,思科被迫開放了一百多款路由器的源代碼,并捐款數(shù)千萬美元給FSF基金會(huì)才把事件平息。

通過這個(gè)圖可以看出,License具有很強(qiáng)的傳染性,一旦產(chǎn)品中使用了GPL License的開源軟件,那么整個(gè)產(chǎn)品就會(huì)受到感染,哪怕產(chǎn)品被收購,收購方也要承擔(dān)對應(yīng)的開源義務(wù)。
主流的License

當(dāng)然,開源軟件的License并非都向GPL一樣“流氓”,目前主流的License主要分為BSD類、MPL類、GPL類,其中BSD類最寬松,MPL類次之,GPL類坑最多。
BSD類License
如Apache V2.0、BSD、MIT等,典型的項(xiàng)目有ACE、Tomcat、FreeBSD,這類開源軟件基本上允許開發(fā)者“想怎么用就怎么用”,不用履行開源義務(wù),是所有公司都非常喜歡的License類型,BAT以及華為、思科等等公司的產(chǎn)品集成了大量的這類開源軟件。
MPL類License
如CPL V1.0、EPL V1.0、MPL V1.0、CDDL V1.0等,典型的項(xiàng)目有JUnit、Eclipse、FireFox、OpenSolaris,這類開源軟件可以通過動(dòng)態(tài)或者靜態(tài)鏈接的方式使用,如果沒有對開源代碼進(jìn)行修改,則產(chǎn)品無需開放代碼;如果修改了部分開源代碼,只需開放修改部分的源代碼即可,因此MPL類License是相對友好的,相關(guān)的開源軟件在業(yè)界也流行甚廣。
GPL類License
如GPL V2 、LGPL V2等,典型的項(xiàng)目有Linux、Jboss、Openoffice、SDL,GPL類License對使用者約束甚多,其中LGPL V2 License相對寬松,如果產(chǎn)品通過動(dòng)態(tài)鏈接的方式使用,則不用履行開源義務(wù),靜態(tài)鏈接則不行。GPL V2 License的開源軟件,無論是通過動(dòng)態(tài)鏈接方式使用還是靜態(tài)鏈接方式使用,都需要對整個(gè)產(chǎn)品代碼開源,上面例子中的思科就是在這種License上中招的。不過GPL V2 License的開源軟件也不是不能用,一個(gè)比較好的方式是,將產(chǎn)品和開源軟件分在不同的進(jìn)程里,因?yàn)镚PL V2 License的開源軟件只能污染同進(jìn)程里的代碼。
BSD License也有坑,小心才能使得萬年船

事實(shí)上,即使開源軟件是最寬松的BSD類License,也要瞪大眼睛看清楚才能用,因?yàn)橛袝r(shí)候會(huì)有另外的坑等著你,典型的例子是馬克·扎克伯格的Facebook。幾年前,F(xiàn)acebook 曾在Git hub上發(fā)布了一系列開源項(xiàng)目,由于其先進(jìn)的技術(shù)和寬松的License(BSD)使得其項(xiàng)目廣受用戶歡迎。不過Facebook在BSD license之外,還額外增加一份專利授權(quán)l(xiāng)icense,將這些軟件可能存在的Facebook專利授權(quán)給用戶使用,但也正是這份專利icense ,給這些軟件的商業(yè)應(yīng)用埋下了“地雷”。如果某公司使用了該軟件,那么如果Facebook在其業(yè)務(wù)范圍內(nèi)與該公司有任何其他專利沖突,該公司則不得向Facebook發(fā)起專利訴訟,導(dǎo)致無法保護(hù)自身的專利,夠狠的吧,華為就差點(diǎn)踩到這個(gè)坑,后來公司法務(wù)部審核時(shí)識(shí)別到了風(fēng)險(xiǎn),及時(shí)踩了剎車才避免了損失。
有朋友說,既然開源軟件這么多坑,那我干脆不用不就完了,這個(gè)想法的初衷是好的,事實(shí)上并不可行。現(xiàn)代社會(huì)的科技產(chǎn)品,講究的是敏捷開發(fā)、快速迭代,一個(gè)很普通的產(chǎn)品可能涉及到網(wǎng)絡(luò)通信、文件系統(tǒng)、多媒體處理等等多個(gè)方面,如果這些都靠自己來實(shí)現(xiàn),那么可能這輩子都看不到產(chǎn)品上市的那一天了。
使用開源軟件的三個(gè)建議
大公司已經(jīng)有了一套規(guī)范的開源軟件使用流程,比如IBM、阿里、華為等等,整體來講,這些公司主要從三個(gè)方向著手來實(shí)現(xiàn)安全、高效、低風(fēng)險(xiǎn)的使用開源軟件。
(1)創(chuàng)建完善的開源軟件選型系統(tǒng),端到端跟蹤開源軟件的申請、使用和退庫,將風(fēng)險(xiǎn)擋在門外
(2)通過IT流程保證開源軟件漏洞和補(bǔ)丁的更新機(jī)制,確保所使用的開源軟件始終處于最安全的版本
(3)嚴(yán)格遵從license要求,履行l(wèi)icense的開源義務(wù)
結(jié)束語
隨著國內(nèi)中小型科技企業(yè)的逐步崛起,中國會(huì)孕育出更多的像華為、阿里、騰訊這種跨國科技巨頭,如何篩好、用好開源軟件,是所有科技企業(yè)需要思考的問題,這關(guān)系到企業(yè)能否有效保護(hù)自己的知識(shí)產(chǎn)權(quán)、能否快速推出有競爭力的產(chǎn)品,能否占領(lǐng)市場持續(xù)領(lǐng)先。