golicenseGo 二进制程序许可证扫描程序

联合创作 · 2023-10-02 02:31

golicense 是一个 Go 二进制程序的依赖项和许可证扫描工具,从已编译的 Go 二进制文件中扫描和分析 OSS 依赖项和许可证。golicense 仅适用于使用 Go 模块编译的 Go 二进制文件,它可以输出所有依赖项、依赖项的版本和它们各自的许可证(如果知道的话)。

golicense 可以快速且准确地输出依赖项列表,因为它使用来自 Go 编译器的元数据,来确定嵌入在已编译 Go 二进制文件中的准确的依赖项集。注意:这不包括最终二进制文件中未使用的依赖项。例如,如果一个库依赖于函数“F”中的“foo”,但从未调用过“F”,那么依赖项“foo”将不会出现在最终的二进制文件中。

警告:二进制文件本身必须被信任且未被篡改,才能提供准确的结果。修改已编译二进制文件的依赖信息很简单。这是与基于源的依赖分析相同的硬币的另一面,其中源不能被篡改。

特征

  • 列出依赖项及其关联的许可证
  • 针对允许/拒绝列表的交叉引用依赖许可证
  • 以终端和 Excel (XLSX) 格式输出报告
  • 如果检测不正确,请手动指定特定依赖项的覆盖。

例子

下面的示例golicense从最近的构建中运行。

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"] }

支持的配置:

  • allowarray<string>) - 允许许可证的名称或 SPDX ID 列表。
  • denyarray<string>) - 被拒绝许可证的名称或 SPDX ID 列表。
  • overridemap<string, string>) - Go 导入标识符的映射,以通过 SPDX ID 转换为特定许可证。这可用于设置golicense无法检测的进口许可证,以便报告通过。
  • translatemap<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 报告包含依赖项列表、它们的版本、检测到的许可证以及是否允许许可证。依赖项按字母顺序列出。如果一切正常,依赖项的行将具有绿色背景,如果许可证未知,则为黄色背景,或者红色背景是许可证被拒绝。示例屏幕截图如下所示:

Excel 报告

浏览 5
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报