golicenseGo 二进制程序许可证扫描程序
golicense 是一个 Go 二进制程序的依赖项和许可证扫描工具,从已编译的 Go 二进制文件中扫描和分析 OSS 依赖项和许可证。golicense 仅适用于使用 Go 模块编译的 Go 二进制文件,它可以输出所有依赖项、依赖项的版本和它们各自的许可证(如果知道的话)。
golicense 可以快速且准确地输出依赖项列表,因为它使用来自 Go 编译器的元数据,来确定嵌入在已编译 Go 二进制文件中的准确的依赖项集。注意:这不包括最终二进制文件中未使用的依赖项。例如,如果一个库依赖于函数“F”中的“foo”,但从未调用过“F”,那么依赖项“foo”将不会出现在最终的二进制文件中。
警告:二进制文件本身必须被信任且未被篡改,才能提供准确的结果。修改已编译二进制文件的依赖信息很简单。这是与基于源的依赖分析相同的硬币的另一面,其中源不能被篡改。
特征
- 列出依赖项及其关联的许可证
- 针对允许/拒绝列表的交叉引用依赖许可证
- 以终端和 Excel (XLSX) 格式输出报告
- 如果检测不正确,请手动指定特定依赖项的覆盖。
例子
下面的示例golicense
从最近的构建中运行。
安装
要安装,请从版本页面golicense
下载适合您平台的版本。
您还可以使用 Go 1.11 或更高版本使用标准从源代码编译 go build
。请确保启用 Go 模块(GOPATH 未设置或 GO111MODULE
设置为“on”)。
用法
golicense
与一个或两个必需的参数一起使用。在单参数形式中,列出了依赖项及其许可证。在两个参数的形式中,可以给出一个配置文件来指定一个允许/拒绝许可证列表等等。
$ golicense [flags] [BINARY] $ golicense [flags] [CONFIG] [BINARY]
您还可以传递多个二进制文件(但前提是您提供了 CONFIG)。
配置文件
配置文件可以为报告指定允许/拒绝许可证列表、特定依赖项的许可证覆盖等。配置文件格式为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 导入标识符的映射,以通过 SPDX ID 转换为特定许可证。这可用于设置golicense
无法检测的进口许可证,以便报告通过。 -
translate
(map<string, string>
) - Go 导入标识符的映射以转换为备用导入标识符。示例:“gopkg.in/foo/bar.v2”到“github.com/foo/bar”。如果映射键开始和结束,那么它被视为正则表达式。在这种情况下,地图值可以使用\1
、\2
等来引用捕获组。
Excel (XLSX) 报告输出
如果-out-xlsx
指定了标志,则生成 Excel 报告并将其写入指定路径以及终端输出。
$ golicense -out-xlsx=report.xlsx ./my-program
Excel 报告包含依赖项列表、它们的版本、检测到的许可证以及是否允许许可证。依赖项按字母顺序列出。如果一切正常,依赖项的行将具有绿色背景,如果许可证未知,则为黄色背景,或者红色背景是许可证被拒绝。示例屏幕截图如下所示: