An Empirical Study of License Conflict in Free and Open Source Software論文分享
作者信息:
吳敬征
中國(guó)科學(xué)院軟件研究所博導(dǎo)
研究領(lǐng)域:
軟件安全與漏洞挖掘、開源軟件與供應(yīng)鏈安全、智能系統(tǒng)與機(jī)器學(xué)習(xí)、操作系統(tǒng)與指令集研究、網(wǎng)絡(luò)安全與隱蔽通信。
實(shí)驗(yàn)室名稱:智能軟件研究中心
六大領(lǐng)域:智能理論、操作系統(tǒng)、開源生態(tài)、編譯技術(shù)、智能安全、智能測(cè)評(píng)
四大系統(tǒng):面向國(guó)產(chǎn)通用處理器和智能加速芯片的操作系統(tǒng)及工具鏈;面向 “RISC-V + AIoT” 的原生操作系統(tǒng)及工具鏈;開源軟件可靠供應(yīng)鏈管理平臺(tái);智能無人系統(tǒng)仿真測(cè)試平臺(tái)
通過搜集和整理相關(guān)數(shù)據(jù)發(fā)現(xiàn),在過去五年中,吳敬征主要是在信息安全領(lǐng)域發(fā)表了一系列CCF A類論文,如圖所示。通過分析,他的研究領(lǐng)域跨越了從傳統(tǒng)的安全漏洞挖掘到新興的IoT、機(jī)器學(xué)習(xí)安全應(yīng)用、開源軟件等多個(gè)領(lǐng)域,這充分展示了他在信息安全領(lǐng)域中對(duì)多樣性和前沿技術(shù)的深入洞察和貢獻(xiàn)。進(jìn)一步分析其近5年的發(fā)表記錄,單獨(dú)抽取出了他在開源軟件相關(guān)研究方面的專業(yè)成就,其中包括本次討論的論文以及兩篇在《軟件學(xué)報(bào)》上發(fā)表的關(guān)于軟件供應(yīng)鏈的關(guān)鍵研究成果。
接下來,從背景介紹、‘DIKE’工具的設(shè)計(jì)方法、‘DIKE’工具的評(píng)估、總結(jié)與個(gè)人思考分別介紹。
背景介紹
FOSS(自由開源軟件)在軟件項(xiàng)目中很普遍,但受到基于開源許可證類型的法律條款的規(guī)范。
目前的許可證評(píng)估工具只能識(shí)別軟件中許可證的名稱和數(shù)量,缺乏確保安全和正確使用,以及提供兼容性和風(fēng)險(xiǎn)的全面分析的能力。
下來,我們進(jìn)行論文內(nèi)容部分的介紹,在開源許可證沖突問題研究中,現(xiàn)有的研究主要集中識(shí)別和管理開源軟件中使用的許可證、許可證語義分析,F(xiàn)OSSology、Ninka、Licensefinder、FindossLicense可以識(shí)別項(xiàng)目中使用的開源軟件的許可證類型。Open Digital Rights Language (ODRL)、Qualipso project、FOSS-LTE提供了編碼機(jī)制,實(shí)現(xiàn)對(duì)許可證靈活的定義和解釋。雖然市場(chǎng)上有以上許可評(píng)估工具可以利用,但這些工具都有明顯的局限性,存在有限的可區(qū)分特征和許可證數(shù)量。這就會(huì)導(dǎo)致在某些情況下,可能難以區(qū)分不同的許可證類型或許可證之間的差異。其次以前的工作側(cè)重于識(shí)別許可證名稱并列出在文件或代碼片段上識(shí)別的信息并沒有分析許可證之間的兼容性,以及很多是通過手工檢查的,適用性不高。
由此,作者等人在此基礎(chǔ)上提出了DIKE,一種自動(dòng)化的許可證沖突分析工具,分別實(shí)現(xiàn)了許可證檢測(cè)、沖突分析、解決方案提供等功能。接下來詳細(xì)介紹下DIKE的設(shè)計(jì)。
本文對(duì)此,確立了三個(gè)研究問題,開源項(xiàng)目中許可證的使用情況,以及開源項(xiàng)目是否存在許可沖突,以及如何解決許可沖突問題。
下來是DIKE框架,DIKE框架主要由許可證分析器、許可證嗅探器、解決方案的引擎三個(gè)組件組成,第一個(gè)是License Analyzer許可證分析器,負(fù)責(zé)許可證條款提取和責(zé)任認(rèn)定,通過從外部知識(shí)構(gòu)造許可條款責(zé)任知識(shí)庫。第二個(gè)許可證嗅探器,主要負(fù)責(zé)檢測(cè)軟件的許可證條款。而解決方案的引擎,則是識(shí)別許可證沖突,并提供解決方案。接下來,對(duì)每一塊的內(nèi)容進(jìn)行具體介紹。
許可證分析器首先通過分析許可證文本特征構(gòu)建多分類術(shù)語識(shí)別模型,術(shù)語是事先定義好的,如圖呈現(xiàn)的,12種常見的許可證條款,然后基于二元分類,輸出責(zé)任術(shù)語和可能值,最終構(gòu)建包含許可證條款、責(zé)任的知識(shí)庫。下面將進(jìn)行展開描述。
許可證分析器要做的就是對(duì)許可證文本進(jìn)行語義分析,提取出整個(gè)文本中的重要信息。先介紹下許可證分析器的注意力機(jī)制的思想。
注意力機(jī)制需要明確的是q,k,v三個(gè)指標(biāo),q查詢的對(duì)象,v被查詢的對(duì)象,目的是要計(jì)算Q和V里事物的重要度,自注意力機(jī)制它是需要q,k,v是同源的,也就是來源于同一文本,而注意力機(jī)制則q,v來源可不相同。比如說本論文中涉及到的標(biāo)簽注意力機(jī)制,Q指的是標(biāo)簽,v指的是文本,相當(dāng)于再找于Q而言,K里面重要的信息。通過注意力機(jī)制和標(biāo)簽注意力機(jī)制來計(jì)算詞與詞和詞與標(biāo)簽之間的關(guān)系。
下來再說下由將詞向量轉(zhuǎn)變?yōu)槲谋鞠蛄可婕暗降腖STM方法,LSTM能夠?qū)W習(xí)長(zhǎng)期的依賴關(guān)系,存儲(chǔ)部分詞向量,并逐次流通每個(gè)詞,也就是將詞的表示組合成句子的表示,在這個(gè)過程中,決定去掉哪些信息,以及添加哪些新的信息,并不對(duì)信息進(jìn)行更改處理,但因?yàn)闃?biāo)簽具有特定的語義,它們通常是對(duì)文本內(nèi)容的隱式描述,需要知道標(biāo)簽前后的句子信息,而lstm識(shí)別不了從后到前的信息,所以本文使用Bilstm,可以更好地捕捉雙向的語義依賴。Bilstm通過兩個(gè)lstm組成而成,一個(gè)是正向去處理輸入序列,一個(gè)是反向處理序列,處理完成后將兩個(gè)lstm輸出拼接起來。介紹了以上先驗(yàn)知識(shí)后,說下DIKE許可證分析器的具體原理。
因?yàn)楸疚脑诮忉宮ethod這部分,是非常模糊的,這里主要參考github中l(wèi)san倉庫提供的代碼來看的,Embeddings 和 Label Embed: 是文本數(shù)據(jù)的詞向量和標(biāo)簽的詞向量,將文本數(shù)據(jù)的詞向量w1,w2,w3…,wn,經(jīng)過線性變換,然后通過BiLSTM,用于捕捉單詞之間的關(guān)系,生成隱藏狀態(tài),即表示整個(gè)句子的嵌入矩陣 H。自注意力機(jī)制和標(biāo)簽注意力機(jī)制: 通過對(duì)隱藏狀態(tài)應(yīng)用兩個(gè)線性層和激活函數(shù)(tanh),然后進(jìn)行 softmax 操作,構(gòu)建了自注意力機(jī)制和標(biāo)簽注意力機(jī)制。這兩個(gè)機(jī)制生成了與文本內(nèi)容和標(biāo)簽相關(guān)的注意力分布。這樣,每個(gè)詞都會(huì)有兩個(gè)來源的信息,即來自句子內(nèi)部上下文的自注意力信息和來自標(biāo)簽的有針對(duì)性的標(biāo)簽注意力信息。通過這種加權(quán)融合的方式,將兩個(gè)信息源融合成一個(gè)綜合的表示,用于最后的模型預(yù)測(cè)。然后對(duì)生成的每個(gè)條款做出相應(yīng)的判斷,作者這里使用ALBERT進(jìn)行二值分類,最后輸出責(zé)任項(xiàng),這里的Y/N,個(gè)人覺得是用于描述許可證條款的嚴(yán)格性。也就是說,責(zé)任值Y表示對(duì)某個(gè)特定條款是需要嚴(yán)格遵守,而N表示更為寬松的遵守標(biāo)準(zhǔn)。之后便構(gòu)建了包含“許可證條款責(zé)任”的許可證知識(shí)庫。對(duì)于許可證嗅探器,主要由四個(gè)部分組成,通過對(duì)查詢對(duì)象切分,將包含許可證的文本轉(zhuǎn)化為具有潛在模式的數(shù)字序列,下一步進(jìn)入到潛在許可證的檢測(cè),這里涉及到了下邊所列的三種匹配方法,第一種方法是哈希值匹配,通過兩個(gè)文本之間的哈希值來計(jì)算相似度,但是我們都知道通過哈希值計(jì)算兩個(gè)文本之間的相似度本身會(huì)存在哈希沖突的問題:不同的文本可能具有相同的哈希值,其次是哈希函數(shù)對(duì)于處理變化長(zhǎng)度的文本相似度不夠靈活(這主要是雖然不同項(xiàng)目中使用相同的許可證,許可證的文本可能根據(jù)具體的項(xiàng)目和使用情況進(jìn)行微調(diào)或修改),準(zhǔn)確性不是很高。第二種方法是AC自動(dòng)機(jī)方法,接下來對(duì)該算法進(jìn)行介紹。
AC自動(dòng)機(jī)算法主要實(shí)現(xiàn)的功能是將所有預(yù)定義的模式創(chuàng)建確定性有限自動(dòng)機(jī),也就是將預(yù)定義的許可證規(guī)則事先存放好,通過只掃描一次語句,就找出所有出現(xiàn)在這段文本中所包含的預(yù)定義模式中的許可證規(guī)則。這個(gè)過程中涉及到兩大步驟,首先是Trie樹的構(gòu)建,第二個(gè)是Fail指針的構(gòu)建。
關(guān)于具體算法思路的介紹,我們可以參考作者:LDLD是程序猿,所發(fā)布的視頻:https://www.bilibili.com/video/BV1Ag41117YU/?spm_id_from=333.337.search-card.all.click&vd_source=cfcf36bdc0f04fcf31bb5ffddf34985a
下來說下第三種匹配精確匹配,首先該方法被分為了兩個(gè)階段,第一個(gè)階段使用的是詞袋模型,比如這里是三條評(píng)論,把所有的數(shù)據(jù)都放進(jìn)去,然后把所有的單詞組合起來構(gòu)成一個(gè)字典,針對(duì)每條評(píng)論根據(jù)這個(gè)字典進(jìn)行索引,把每條評(píng)論轉(zhuǎn)換成相應(yīng)的數(shù)據(jù)向量的形式,數(shù)值代表的是出現(xiàn)的次數(shù),那之后系統(tǒng)通過比較它們之間的共同元素比例等方法進(jìn)行排序。之后為了評(píng)估該匹配結(jié)果的質(zhì)量,使用相似性和包含關(guān)系一起排序,從而確定最優(yōu)匹配結(jié)果。(這個(gè)例子,是參考網(wǎng)上所給出的,具體鏈接還在搜尋中…)
介紹完三種匹配算法之后,我們得到針對(duì)每個(gè)文本通過每一種匹配算法分別確定了最佳的許可證匹配,進(jìn)入第二階段,考慮到在進(jìn)行許可證匹配的過程中,可能會(huì)有一些文本描述或規(guī)定在整個(gè)文本中,但實(shí)際上并不屬于真實(shí)的許可證信息。比如,文本的開頭可能包含了一些通用的描述,如“禁止軟件商用”,但這并沒有提供詳細(xì)的、具體的商業(yè)使用權(quán)利的信息,也不屬于真實(shí)的許可證規(guī)定。這些描述被視為“負(fù)面規(guī)則”(negative rules),因?yàn)樗鼈兠枋隽艘恍┫拗疲]有提供完整的許可證信息。在匹配過程中,系統(tǒng)會(huì)將與這些“負(fù)面規(guī)則”完全匹配的部分排除,以確保最終的匹配結(jié)果更準(zhǔn)確地涵蓋真實(shí)的許可證規(guī)定。第三步,因?yàn)槊糠N算法可能對(duì)相同的文本匹配到不同的許可證,最后根據(jù) similarity、inclusion 和 overlap 這三個(gè)指標(biāo),從每個(gè)文本所匹配的許可證中選擇最匹配的許可證。最后輸出每個(gè)文本的最佳許可證。
針對(duì)該項(xiàng)目的每個(gè)文本確定好它們的許可證之后,之后通過遞歸掃描、組織關(guān)系來展示項(xiàng)目的目錄結(jié)構(gòu),并表示每個(gè)文件采用的許可證信息,可以直觀地查看每個(gè)許可證在軟件中的分布,從而更好檢測(cè)它們的沖突關(guān)系。
結(jié)合第一階段的許可證分析器識(shí)別出的許可證知識(shí)庫,第二階段許可證嗅探器中得到的整個(gè)軟件的許可證分布情況,進(jìn)行許可證沖突檢測(cè)。首先對(duì)該軟件項(xiàng)目中涉及到的許可證的條款進(jìn)行比對(duì),如果兩個(gè)不同的許可證中存在相同的術(shù)語,其中一個(gè)許可證對(duì)該術(shù)語的規(guī)定是 “Y”,而另一個(gè)許可證對(duì)該術(shù)語的規(guī)定是 “N”,那么這種情況被視為可能存在沖突。這時(shí)候需要考慮許可文件在許可結(jié)構(gòu)樹中的位置進(jìn)行進(jìn)一步的判斷。在許可結(jié)構(gòu)樹中越靠近葉子節(jié)點(diǎn)越嚴(yán)格,如果說可能沖突的這兩個(gè)許可證不在一個(gè)層級(jí)關(guān)系,那就不存在沖突。還有就是項(xiàng)目中明確指定的主要許可證,或者項(xiàng)目聲明中提到的特定許可證。如果某個(gè)術(shù)語在項(xiàng)目聲明的許可中被允許,那么即使在其他許可證中存在不同的規(guī)定,也不會(huì)被視為沖突。這種情況下,項(xiàng)目聲明的許可具有更高的優(yōu)先級(jí),規(guī)定更具有約束力。通過這樣的約束條件,檢測(cè)出了軟件項(xiàng)目中的許可沖突問題。然后并提出了兩種解決沖突許可證的方法:代碼替換和許可證替換。對(duì)于許可證替換,首先評(píng)估沖突許可證的組合,并創(chuàng)建一個(gè)包含所有嚴(yán)格必需條款的列表。然后,在許可證知識(shí)庫中搜索一個(gè)包含這些條款集并具有嚴(yán)格責(zé)任的許可證,以替換沖突許可證的組合。
舉個(gè)例子,比如說許可證A規(guī)定為:“作者對(duì)于因使用軟件而產(chǎn)生的任何損害概不負(fù)責(zé)?!痹S可證 B 的責(zé)任規(guī)定為:“作者對(duì)于因使用軟件而引起的任何直接或間接損害,包括但不限于數(shù)據(jù)丟失、利潤(rùn)損失等,概不負(fù)責(zé)。”許可證 B 的責(zé)任規(guī)定更為嚴(yán)格。然后找出沖突許可證之間較為嚴(yán)格的條款構(gòu)建一個(gè)列表,并找出一個(gè)能夠兼容所有這些嚴(yán)格條款的許可證作為替代許可證。對(duì)于代碼替換,如果代碼是關(guān)鍵的,開發(fā)人員應(yīng)根據(jù)其功能重新組織它或用具有相同功能但沒有許可證沖突的代碼替換它。如果代碼非關(guān)鍵且不影響軟件功能,可以考慮刪除。
關(guān)于評(píng)估部分,就簡(jiǎn)單來說下,對(duì)于論文所提的DIKE框架的效果,本文通過三個(gè)任務(wù)進(jìn)行驗(yàn)證,一是基于許可證條款提取任務(wù),DIKE現(xiàn)在擁有3256個(gè)開源許可證數(shù)據(jù)集上獲得0.886的F1值,二是基于責(zé)任確認(rèn)的條款任務(wù),DIKE設(shè)計(jì)的二元分類模型獲得了0.948的fl值。三是手動(dòng)分析任務(wù):在三組隨機(jī)對(duì)照試驗(yàn)中,許可分析器分析了知識(shí)庫中的50個(gè)許可證,三位作者手動(dòng)標(biāo)注了相關(guān)條款及其對(duì)應(yīng)責(zé)任,同時(shí)交叉驗(yàn)證了這些結(jié)果。然后,將手動(dòng)分析結(jié)果與許可分析器的處理結(jié)果進(jìn)行了比較。在三次試驗(yàn)中,手動(dòng)分析的平均術(shù)語數(shù)為262,許可分析器分析的平均術(shù)語數(shù)為259。許可分析器準(zhǔn)確分析的平均術(shù)語數(shù)為201,準(zhǔn)確率為76.7%,F(xiàn)1分?jǐn)?shù)為0.772。
下來說下研究結(jié)果,針對(duì)研究問題一,針對(duì)許可證的使用情況,作者在 GitHub 上收集了超過 1,000 顆恒星的 16,341 個(gè) FOSS 項(xiàng)目。關(guān)于許可證的使用情況:84.4%的項(xiàng)目使用許可證,并得到左邊所示的圖,可以看到不同許可證的使用情況。針對(duì)問題二,在開源項(xiàng)目中是否存在許可證沖突?利用DIKE基于RQ1收集的數(shù)據(jù)來檢測(cè)許可沖突。結(jié)果表明,4448個(gè)項(xiàng)目包含沖突,這超過了觀察到的總數(shù)的四分之一(27.2%),從上圖可以看出許可證沖突主要發(fā)生在MIT、Apache-2.0和GPL家族之間。主要是因?yàn)镚PL具有強(qiáng)傳染性,同時(shí)這也意味著使用GPL的項(xiàng)目更容易導(dǎo)致許可證沖突。針對(duì)問題三如何解決沖突問題在之前已經(jīng)說明。
這里來說下個(gè)人的思考。
作者的核心貢獻(xiàn):主要來說兩點(diǎn),其實(shí)在2019年作者的團(tuán)隊(duì)就已經(jīng)提出lsan這個(gè)算法,然后之后并將基于該算法提出了一種自動(dòng)且有效的工具DIKE,用于識(shí)別許可證條款及其責(zé)任,并構(gòu)建了擁有3256種獨(dú)特許可證的許可證知識(shí)庫。這個(gè)意義還是蠻大的,從提出到落地。作者不僅僅是在識(shí)別許可證這一沖突問題,為此還提出了解決方案,對(duì)于這些實(shí)際存在許可沖突的項(xiàng)目,作者在github上發(fā)起了issue,幫助作者能夠及時(shí)識(shí)別該問題并解決,從而避免隨著項(xiàng)目不斷龐大,帶來的后果愈發(fā)嚴(yán)重的問題。
關(guān)于未來目標(biāo)的話,作者提到,因?yàn)楝F(xiàn)有的許可證知識(shí)庫還是靜態(tài)的,希望未來能夠持續(xù)不斷地更新許可證知識(shí)庫的內(nèi)容。
在讀論文的過程中,注意到了一些問題,以下是一些建議:
關(guān)于論文的普適性,有兩點(diǎn)需要考慮:
論文使用了12種常見許可證條款進(jìn)行分類檢測(cè)沖突,但這些條款可能無法覆蓋所有可能的沖突情況。在實(shí)際應(yīng)用中,許可證沖突可能涉及更多的條款和復(fù)雜的組合。建議進(jìn)行進(jìn)一步的研究和擴(kuò)展,以包含更多許可證條款和沖突情況,從而提高分類檢測(cè)的全面性。
有些許可證會(huì)存在可兼容的特殊條款的情況,使得原本不兼容的許可證能夠與其他許可證合并。這種情況在實(shí)際中占有相當(dāng)大的比例。因此,僅通過條款的沖突來確定項(xiàng)目的許可證沖突可能缺乏普適性。建議在研究中考慮這一點(diǎn),并尋求更全面的方法來判斷許可證沖突。文章來源:http://www.zghlxwxcb.cn/news/detail-829060.html
以上就是這篇論文的分享,謝謝觀看!文章來源地址http://www.zghlxwxcb.cn/news/detail-829060.html
到了這里,關(guān)于An Empirical Study of License Conflict in Free and Open Source Software論文分享的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!