01背景
中國第一個(gè)關(guān)涉GPL協(xié)議的訴訟案件,數(shù)字天堂(北京)網(wǎng)絡(luò)技術(shù)有限公司起訴柚子(北京)科技有限公司侵犯計(jì)算機(jī)軟件著作權(quán)糾紛一案中,原告數(shù)字天堂公司起訴柚子公司發(fā)布的APICloud軟件抄襲了數(shù)字天堂公司HBuilder軟件中的三個(gè)插件的源代碼,侵犯其多項(xiàng)權(quán)利[1]。
而柚子公司辯稱,HBuilder軟件屬于應(yīng)遵循GPL協(xié)議開放源代碼的軟件,應(yīng)遵循開源,其構(gòu)建衍生軟件作品并不對數(shù)字天堂著作權(quán)造成侵犯。
也就是說,使用GPL協(xié)議的軟件為開源軟件,基于GPL協(xié)議作品產(chǎn)生的衍生作品也要遵循GPL協(xié)議,開放源代碼。
在一審及二審判決中,法院大篇幅引用GPL v3.0協(xié)議[2]的原文,論證GPL協(xié)議對涉案插件是否具有約束力。這相當(dāng)于默認(rèn)了GPL協(xié)議在中國同樣具有法律約束力,對于開源軟件許可協(xié)議在中國司法程序中的效力認(rèn)定具有重大參考意義。中國法院已經(jīng)開始認(rèn)同國際開源許可證的法律效力,中國絕不會成為開源許可協(xié)議違反行為的避風(fēng)港。
2021年《開源安全和風(fēng)險(xiǎn)分析報(bào)告》顯示,目前大約有65%的代碼庫中包含許可證沖突,26%的代碼庫使用了沒有許可證或定制許可證的開源代碼[3]??梢?,開源軟件許可證沖突、缺乏已知許可證是如今許多項(xiàng)目面臨的問題。
因此,我們在軟件審計(jì)時(shí)更要慎重,對于代碼庫中的開源軟件要謹(jǐn)慎判斷是否擁有相關(guān)許可證以及是否存在許可證沖突,規(guī)避不必要的法律風(fēng)險(xiǎn)。
02許可證的引入
研發(fā)人員在編寫代碼時(shí)引入無許可的開源軟件,主要有以下三種方式:
1.開源軟件創(chuàng)建時(shí)沒有分配許可證
未經(jīng)許可的開源組件被引入代碼庫最直接的方式,就是版權(quán)所有者在創(chuàng)建開源組件的時(shí)候沒有為其分配或選擇許可證。這里有一個(gè)常見的誤區(qū):缺乏許可證并不代表該組件可以毫無限制的進(jìn)行使用。依據(jù)版權(quán)保護(hù)法,沒有創(chuàng)作者的明確許可,任何人都沒有權(quán)利對其作品進(jìn)行使用、復(fù)制、散布和修改。也就是說,這部分開源組件一旦被使用,就要承擔(dān)著知識產(chǎn)權(quán)訴訟的危險(xiǎn)。
2.開源組件被修改后丟失許可信息
在開發(fā)過程中,開發(fā)人員經(jīng)常會對某些開源組件進(jìn)行修改,使其能夠執(zhí)行項(xiàng)目所需要的功能。然而,在修改這些組件時(shí),開發(fā)者很有可能會改變或者移除組件的頭文件及許可信息,造成許可證丟失。一旦缺失許可證,就無法清晰準(zhǔn)確地認(rèn)識我們的權(quán)利范圍。例如,我們不知道許可證是否提供了明確的專利授予、分發(fā)軟件時(shí)是否需要開源等等。即使在不知情的情況下違反了相關(guān)許可證協(xié)議,也要承擔(dān)相應(yīng)法律責(zé)任。
3.使用無許可信息的開源片段代碼
開發(fā)人員編寫代碼遇到問題時(shí),第一反應(yīng)就是去互聯(lián)網(wǎng)上搜索,看看前人是否遇到過類似的問題。因此,開發(fā)人員有時(shí)會從CSDN、Stack Overflow這樣的網(wǎng)站或論壇中摘取部分代碼,用于實(shí)現(xiàn)某些特定的功能。但是,從互聯(lián)網(wǎng)中獲取的片段代碼通常并不伴隨適用的許可條款。這就是說,即使是無許可的片段代碼,依舊面臨著許可證不合規(guī)的風(fēng)險(xiǎn)。
然而,關(guān)于片段代碼是否值得版權(quán)保護(hù)的問題一直存在爭議。有人認(rèn)為片段代碼只是純粹功能性代碼,不應(yīng)包含在版權(quán)保護(hù)的范圍內(nèi)。
例如,在Oracle與Google長達(dá)十年的版權(quán)之爭上,Oracle起訴Google侵權(quán),原因是Google在開發(fā)Android時(shí),使用Java語言并調(diào)用了Java庫中約20%應(yīng)用程序編程接口(API)的11000個(gè)聲明。此案最大的爭議點(diǎn)就在于API是否可以有版權(quán),因?yàn)橛胁糠諥PI在表達(dá)方式上僅有一種,Google認(rèn)為這些方法的實(shí)現(xiàn)不應(yīng)當(dāng)受到著作權(quán)保護(hù)。
盡管在2021年4月5日,美國最高法院最終判定Google勝訴,認(rèn)為其并未構(gòu)成侵權(quán)[4]。但并不意味著使用開源功能性片段代碼不存在風(fēng)險(xiǎn),我們要依據(jù)具體情況謹(jǐn)慎考慮,判斷是否能承擔(dān)相應(yīng)風(fēng)險(xiǎn)。
03思考
由此可見,在編寫代碼期間,無許可的開源軟件正在以程序員意想不到的方式引入到代碼庫中。據(jù)統(tǒng)計(jì),現(xiàn)如今應(yīng)用程序的70%由開源軟件組成,幾乎是五年前的兩倍[5]。日益增長的開源組件比例要求我們在代碼審計(jì)中一定要注意對其進(jìn)行許可證合規(guī)檢測,識別項(xiàng)目中使用了哪些第三方開源組件,是否擁有相應(yīng)的權(quán)限。
對于第三方開源軟件的審查是一件耗時(shí)耗力、成本高昂的事情。因此,使用自動化代碼成分分析工具(SCA-Software Composition Analysis)[6]幫助簡化許可證合規(guī)問題檢測,成為了許多優(yōu)秀開發(fā)團(tuán)隊(duì)的選擇,華為、阿里、百度等國內(nèi)大廠也紛紛購進(jìn)SCA工具。
此外,明確第三方組件不僅能夠規(guī)避不必要的許可證沖突,也會大大提升代碼的安全性。據(jù)統(tǒng)計(jì),大約有84%的代碼庫中至少包含一個(gè)未被修復(fù)的已知漏洞[7],而黑客們往往熱衷于利用這樣的漏洞。因此,明確項(xiàng)目中的第三方開源軟件,也有利于我們對這樣的問題做出預(yù)防和修補(bǔ)。
由于開源軟件的概念以及絕大部分的開源協(xié)議都來源于國外,英文的開源軟件許可協(xié)議在中國的法律效力問題始終存在疑慮,也并不重視開源軟件的合規(guī)問題。但時(shí)代終將向前,中國與國際接軌已是大勢所趨,防患于未然,才是一個(gè)軟件企業(yè)乃至國家行穩(wěn)致遠(yuǎn)的正道。
參考文獻(xiàn)
[1]數(shù)字天堂(北京)網(wǎng)絡(luò)技術(shù)有限公司與柚子(北京)移動技術(shù)有限公司等一審民事判決書(2015)京知民初字第631號
[2]柚子(北京)移動技術(shù)有限公司等與數(shù)字天堂(北京)網(wǎng)絡(luò)技術(shù)有限公司侵犯計(jì)算機(jī)軟件著作權(quán)糾紛二審判決民事判決書(2018)京民終471號
[3]2021 Open Source Security&Risk Analysis Report
[4]18-956 Google LLC v.Oracle America,Inc.(04/05/2021)
[5]Now Tech:Software Composition Analysis,Q2 2021 Forrester’s Overview Of 22 Software Composition Analysis Providers
[6]http://www.redrocket.cn/Home/Product_introduction/index.html?id=13
[7]http://www.eet-china.com/news/11464.html
如若轉(zhuǎn)載,請注明原文地址