第三方开源库license扫描工具简述

开源软件的代码开源在github这类公开的代码仓库,这给人一种错觉,让我们以为可以随意的使用开源软件,其实开源软件有license协议,友好的协议比如Apache 协议,可以在商业软件中使用,不开源,而像GPL协议,一旦使用就必须开源。
商业软件产品不可避免会使用大量的开源组件,但大部分情况不开源,所以在上线前有必要检查组件的license,比如是否依赖GPL。最终上线前可能使用外部商业软件进行扫描,比如Black Duck和Fossa,但是在小创业公司或者让商业银行扫描前,可以采用开源软件进行预扫描,下面简单介绍调研的开源license扫描软件情况。
"Linux基金会企业开源指南"提供了开源项目相关的组件,从中找到license相关的开源工具,包括LicenseFinder、scancode-toolkit、fossology。测试中发现,scancode-toolkit、fossology是对本项目内代码的license进行格式检查,不满足我们的需要。LicenseFinder在测试过程中有”执行mvn失败“的问题,因此也无法使用。Linux基金会推荐的开源项目在这次需求前全军覆没了。
采用maven的plugin,license-maven-plugin,结果很香。使用方法,这篇文章里写的很清楚 ”利用 maven 自动化检测 License“。其实,LicenseFinder底层源码也依赖了license-maven-plugin。
使用gradle构建的项目,可以考虑License Gradle Plugin, 另外还有google发布的plugin,oss-licenses-plugin
plugin基本的原理都是,下载并扫描依赖库的pom文件或者META_INF文件夹里的LICENSE.md。极少数依赖项目里没有版本说明,这部分在license-maven-plugin的结果里有特别说明,这时可以手动到maven仓库里查看。在测试中发现这样的包其实在maven仓库里也没有license,因为依赖库信息就是从maven仓库下载的。
【第三方开源库license扫描工具简述】个人认为license-maven-plugin的扫描方法以及数据源是可靠的,扫描结果能作为license依赖情况的支持数据。

    推荐阅读