實施例包括用于發(fā)現(xiàn)軟件文件是否與許可證相關聯(lián)的方法、設備和系統(tǒng)。軟件執(zhí)行的一個方法包括把軟件劃分為多個函數(shù)(120),把每個函數(shù)變換為多個標志(140),以及把所述多個標志與對應于已知函數(shù)的一組標志相比較(150),所述已知函數(shù)受軟件許可證的約束。
【技術實現(xiàn)步驟摘要】
技術介紹
開放源軟件是公眾能夠免費獲取來研究、使用、甚至修改的源代碼或程序。這種代碼在公眾和軟件開發(fā)者之間免費共享。由于該軟件不是私有的,所以大批編程者能夠修改并完善該源代碼。經(jīng)修改的軟件被再發(fā)布給公眾和其它編程者,以供廣泛的軟件應用。通常,開放源軟件不是商業(yè)開發(fā)并為了贏利而發(fā)布的,原因在于源代碼是免費的。然而,與此同時,軟件常常受到許可證形式的約束。開放源許可證使得用戶能夠獲得免費的源代碼,但是提供了能夠限制源代碼使用、修改和再發(fā)布的條款。這樣的限制根據(jù)許可證的不同而變化,并且其范圍從無限制的到完全限制的。例如,一些許可證僅僅要求用戶保持原作者的姓名或者在實際源代碼中包括版權聲明。相對比而言,例如,其它許可證嚴格限制后續(xù)用戶控告專利侵權、收集派生作品特許權以及為軟件的修改版本授予許可證的權力。由于一些開放源許可證能夠是完全限制的,軟件開發(fā)者和公司在把重要資源投入使用或修改源代碼之前,必須復審并理解許可證的條款和條件。然而,該任務是非常困難的,原因在于代碼能夠包括一個或更多的受未知許可證約束的函數(shù)。作為一個例子,編程者能夠在不承認管理原始函數(shù)的許可證的情況下,修改或重用函數(shù)并且接著釋放該函數(shù)。例如,最初在一個許可證下釋放的函數(shù)在沒有許可證或者沒有參考原始許可證的情況下被重用并釋放。作為另一個例子,當私有代碼受到一個或多個許可證的約束時,能夠像開放源那樣被重用或分類。此外,非私有代碼或開放源代碼能夠隨私有軟件發(fā)布并由此違反開放源許可證。軟件代碼的各部分能夠由此受到一個或多個許可證的約束,即使這樣的許可證不是隨代碼再生的或以代碼為參考的。為了發(fā)現(xiàn)這樣的許可證,人們可以嘗試人工復審所有的源代碼并將其與已知受到一個許可證約束的代碼相比較。在假設代碼的增殖、修改以及遍及世界的發(fā)布的情況下,該任務將是困難甚至不可能完成的。附圖說明圖1是根據(jù)本專利技術一個示例性實施例的確定代碼是否受到一個或多個軟件許可證的約束的示例性流程圖。圖2是根據(jù)本專利技術一個示例性實施例的確定兩個函數(shù)是否相似的示例性流程圖。圖3A是根據(jù)本專利技術一個示例性實施例的比對(alignment)算法的第一示圖。圖3B是根據(jù)本專利技術一個示例性實施例的比對算法的第二示圖。圖3C是根據(jù)本專利技術一個示例性實施例的比對算法的第三示圖。圖3D是根據(jù)本專利技術一個示例性實施例的比對算法的第四示圖。圖3E是根據(jù)本專利技術一個示例性實施例的比對算法的第五示圖。圖4是根據(jù)本專利技術的示例性計算機系統(tǒng)的模塊圖。具體實施例方式根據(jù)本專利技術的實施例針對用于發(fā)現(xiàn)軟件文件是否與一個或多個許可證相關聯(lián)或者受到一個或多個許可證約束的設備、系統(tǒng)和方法。分析代碼(例如源代碼或編譯對象)的一部分或者該代碼中的函數(shù),以確定其是否是受到一個或多個許可證約束的代碼的相似派生品或修改。示例性實施例快速并準確地識別受到一個或多個軟件許可證約束的代碼,即使這樣的許可證沒有包括于所述代碼或者由所述代碼為參考也是這樣。即使文件包括超過數(shù)萬行的代碼,依然能在代碼中識別受到許可證約束的函數(shù)。這樣的識別自動發(fā)生而只需很少或完全無需人為干預。在一個示例性實施例中,復審一個或多個文件以確定這樣的文件是否受到任何許可證或其它限制條款和條件的約束或被其所管理。文件的數(shù)目能夠從一個文件到數(shù)十萬個不同文件而變化。每個文件最初被分為一個或多個函數(shù)。所述函數(shù)被用于檢查某些或特定術語的出現(xiàn)。這樣的術語被普通術語所替代。每個函數(shù)接著被變換為一組標志(token)。對應于每個函數(shù)的標志被與對應于已知或預先存在的許可函數(shù)的標志組相比較。換言之,源函數(shù)的標志被與來自受到一個或者多個許可證的約束的已知函數(shù)的標志相比較。這種比較顯示了源或候選函數(shù)與已知函數(shù)之間的相關性。確定是否存在匹配。如果存在匹配,則所述源函數(shù)(就像已知函數(shù)一樣)被一個或多個預先存在或已知的軟件許可證所管理。在一個示例性實施例中,一種比對矩陣將源或候選函數(shù)與已知函數(shù)相比較。特別地,所述矩陣將兩個符號序列互相比較。所述符號序列是從各個函數(shù)的標志組中得出的。系統(tǒng)確定兩個序列是否類似(即相似)。該確定的結果被記錄到日志中、保存和/或向用戶輸出。圖1是根據(jù)本專利技術一個示例性實施例的確定代碼是否受到一個或多個軟件許可證的約束的流程圖100。根據(jù)模塊110,接收或者獲取一個或多個文件(稱為候選、目標或源文件)或代碼。所述代碼包括源代碼、編譯對象和可執(zhí)行代碼,但是并不局限于此。例如,所述文件能夠作為一個或多個軟件發(fā)布包來進行發(fā)布。候選文件的數(shù)目從一個文件到數(shù)十萬個文件而分布,例如在開放源軟件包或開放源軟件發(fā)布中存在的文件。在這個時刻,確定是否任何目標文件是預先檢查過的。在一個示例性實施例中,每個包和檔案文件均被檢查并與預先檢查文件的知識基礎(knowledge-bases)相比較。例如,如果一個包的特定版本的源代碼已被處理過,則所述代碼不會被再次處理,原因在于所述包的結果是預先確定的。目標文件能夠被“打包(packed)”或存檔并且包括一個或多個嵌套或壓縮格式的其他文件。每個包和存檔文件被遞歸地解包直至不需要(例如,用數(shù)據(jù)、可執(zhí)行代碼和文本文件)進一步解包為止。對被解包的原始文件的參考被保存和記憶。在一個示例性實施例中,許多不同的文件格式是已知的或被用于遞歸解包。例如,這樣的文件格式包括zip、tar、ar、cpio、gzip、bzip2、rpm、deb、rar、jar、cabinet文件、postscript以及uuencode/uudecode等,但并不局限于此。如果存檔文件包含其它文件,則其被遞歸地解壓縮和解包。一旦確定再沒有文件需要解包,則解包終止。根據(jù)模塊120,代碼或目標文件被劃分或分割為函數(shù)。如此處所使用的,“函數(shù)”是執(zhí)行特定任務的程序或代碼的一部分。函數(shù)能夠返回一個值,或者執(zhí)行一個操作但不返回值。根據(jù)編程語言,函數(shù)具有不同的名字,例如子例程、方法、過程或子程序。此外,不同文件格式具有不同的方式來識別函數(shù)(例如,C語言中函數(shù)的符號與對象代碼中的符號不同)。根據(jù)模塊130,每個函數(shù)中的一個或多個特定術語被一個或多個普通術語所替代。例如,每個函數(shù)中的所有變量(即標示數(shù)量的符號或符號表示)被單詞“variable”或“var”或其它普通術語所替代。如另一個示例,每個函數(shù)中的所有數(shù)字被單詞“number”或“num”或其它普通術語所替代。根據(jù)模塊140,每個函數(shù)被變換為一個或多個標志。如此處所使用的,詞語“標志”表示文本、字符或具有含義的符號的分類塊。例如,標志由不可分割的字符或語義(lexeme)組成。語義根據(jù)一個函數(shù)被讀取和分類并且被提供一個含義,該過程稱為“標志化(tokenization)”。如此處所使用的,詞語“標志化”表示將輸入字符的串的一個或多個部分劃分界限并分類的過程。根據(jù)模塊130和140,根據(jù)特定的文件格式,函數(shù)被以不同的方式標志化。如所述,變量名被術語“variable”所替代并且術語“variable”在此后被看作一個關鍵詞標志。此外,數(shù)字被術語“number”所替代,并且術語“number”在此后被看作一個關鍵詞標志。標志化能夠基于語言特定的關鍵詞(例如,“if”或者“while”)、符號(例如,+、=、-、<、>等)和范圍(例如,()、{}、[]等)而發(fā)生。例如,本文檔來自技高網(wǎng)...
【技術保護點】
一種軟件執(zhí)行方法,包括:把軟件代碼劃分為多個函數(shù)(120);把每個函數(shù)變換為多個標志(140);把所述多個標志與對應于已知函數(shù)的一組標志相比較(150),所述已知函數(shù)受軟件許可證的約束。
【技術特征摘要】
...
【專利技術屬性】
技術研發(fā)人員:N克拉維茨,
申請(專利權)人:惠普開發(fā)有限公司,
類型:發(fā)明
國別省市:US[美國]
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。