当前位置: 首页 > 后端技术 > Java

开源库许可扫描工具简述

时间:2023-04-01 15:46:57 Java

开源软件的代码是开源在github等公共代码仓库的,给人一种我们可以随意使用开源软件的错觉。其实开源软件是有许可协议的,就是友好协议,比如Apache协议,可以用在商业软件中,是不开源的,而像GPL这样的协议,一旦使用就必须开源。商业软件产品难免会大量使用开源组件,但大部分都不是开源的,所以上线前需要检查组件的许可,比如是否依赖GPL。最终上线前可能会使用外部商业软件进行扫描,如BlackDuck、Fossa,但在小型创业公司或商业银行扫描前,可以使用开源软件进行预扫描。下面简单介绍一下被调查的开源许可证扫描软件。《LinuxFoundationEnterpriseOpenSourceGuide》提供了与开源项目相关的组件,从中可以找到与license相关的开源工具,包括LicenseFinder、scancode-toolkit和fossilology。测试过程中发现scancode-toolkit和fossilology对本项目代码的license格式进行了检查,不符合我们的需求。LicenseFinder在测试的时候出现了“failedtoexecutemvn”的问题,所以无法使用。Linux基金会推荐的开源项目在这个需求之前就被抹杀了。使用maven插件,license-maven-plugin,结果很香。使用方法在《使用maven自动检测license》这篇文章中写的很清楚。其实LicenseFinder的底层源码也依赖license-maven-plugin。使用gradle构建的项目,可以考虑LicenseGradlePlugin,还有谷歌发布的插件。oss-licenses-plugin插件的基本原理是下载并扫描依赖库的pom文件或META_INF文件夹下的LICENSE.md。很少有依赖项目没有版本说明。这部分在license-maven-plugin的结果中有具体说明。这时候可以手动去maven仓库中查看。测试中发现这样的包在maven仓库中其实并没有license,因为依赖库信息是从maven仓库下载的。要点个人认为license-maven-plugin的扫描方式和数据来源可靠,扫描结果可以作为license依赖的支撑数据。