golicenseGo 二進(jìn)制程序許可證掃描程序
golicense 是一個(gè) Go 二進(jìn)制程序的依賴項(xiàng)和許可證掃描工具,從已編譯的 Go 二進(jìn)制文件中掃描和分析 OSS 依賴項(xiàng)和許可證。golicense 僅適用于使用 Go 模塊編譯的 Go 二進(jìn)制文件,它可以輸出所有依賴項(xiàng)、依賴項(xiàng)的版本和它們各自的許可證(如果知道的話)。
golicense 可以快速且準(zhǔn)確地輸出依賴項(xiàng)列表,因?yàn)樗褂脕碜?Go 編譯器的元數(shù)據(jù),來確定嵌入在已編譯 Go 二進(jìn)制文件中的準(zhǔn)確的依賴項(xiàng)集。注意:這不包括最終二進(jìn)制文件中未使用的依賴項(xiàng)。例如,如果一個(gè)庫依賴于函數(shù)“F”中的“foo”,但從未調(diào)用過“F”,那么依賴項(xiàng)“foo”將不會(huì)出現(xiàn)在最終的二進(jìn)制文件中。
警告:二進(jìn)制文件本身必須被信任且未被篡改,才能提供準(zhǔn)確的結(jié)果。修改已編譯二進(jìn)制文件的依賴信息很簡(jiǎn)單。這是與基于源的依賴分析相同的硬幣的另一面,其中源不能被篡改。
特征
- 列出依賴項(xiàng)及其關(guān)聯(lián)的許可證
- 針對(duì)允許/拒絕列表的交叉引用依賴許可證
- 以終端和 Excel (XLSX) 格式輸出報(bào)告
- 如果檢測(cè)不正確,請(qǐng)手動(dòng)指定特定依賴項(xiàng)的覆蓋。
例子
下面的示例golicense從最近的構(gòu)建中運(yùn)行。
安裝
要安裝,請(qǐng)從版本頁面golicense下載適合您平臺(tái)的版本。
您還可以使用 Go 1.11 或更高版本使用標(biāo)準(zhǔn)從源代碼編譯 go build。請(qǐng)確保啟用 Go 模塊(GOPATH 未設(shè)置或 GO111MODULE設(shè)置為“on”)。
用法
golicense與一個(gè)或兩個(gè)必需的參數(shù)一起使用。在單參數(shù)形式中,列出了依賴項(xiàng)及其許可證。在兩個(gè)參數(shù)的形式中,可以給出一個(gè)配置文件來指定一個(gè)允許/拒絕許可證列表等等。
$ golicense [flags] [BINARY] $ golicense [flags] [CONFIG] [BINARY]
您還可以傳遞多個(gè)二進(jìn)制文件(但前提是您提供了 CONFIG)。
配置文件
配置文件可以為報(bào)告指定允許/拒絕許可證列表、特定依賴項(xiàng)的許可證覆蓋等。配置文件格式為HCL或 JSON。
例子:
allow = ["MIT", "Apache-2.0"] deny = ["GNU General Public License v2.0"]
{ "allow": ["MIT", "Apache-2.0"], "deny": ["GNU General Public License v2.0"] }
支持的配置:
-
allow(array<string>) - 允許許可證的名稱或 SPDX ID 列表。 -
deny(array<string>) - 被拒絕許可證的名稱或 SPDX ID 列表。 -
override(map<string, string>) - Go 導(dǎo)入標(biāo)識(shí)符的映射,以通過 SPDX ID 轉(zhuǎn)換為特定許可證。這可用于設(shè)置golicense無法檢測(cè)的進(jìn)口許可證,以便報(bào)告通過。 -
translate(map<string, string>) - Go 導(dǎo)入標(biāo)識(shí)符的映射以轉(zhuǎn)換為備用導(dǎo)入標(biāo)識(shí)符。示例:“gopkg.in/foo/bar.v2”到“github.com/foo/bar”。如果映射鍵開始和結(jié)束,那么它被視為正則表達(dá)式。在這種情況下,地圖值可以使用\1、\2等來引用捕獲組。
Excel (XLSX) 報(bào)告輸出
如果-out-xlsx指定了標(biāo)志,則生成 Excel 報(bào)告并將其寫入指定路徑以及終端輸出。
$ golicense -out-xlsx=report.xlsx ./my-program
Excel 報(bào)告包含依賴項(xiàng)列表、它們的版本、檢測(cè)到的許可證以及是否允許許可證。依賴項(xiàng)按字母順序列出。如果一切正常,依賴項(xiàng)的行將具有綠色背景,如果許可證未知,則為黃色背景,或者紅色背景是許可證被拒絕。示例屏幕截圖如下所示:
