开源治理是个大话题,我们今天不对开源治理的定义做探究,我们可以简单理解为解决开源社区、开源项目、开源企业的各类问题的动作称为开源治理。

为什么要做开源治理呢?这要从开源的发展现状来说了。这些年来开源的热度可谓是持续增长,并且开源软件已经基本覆盖了关键技术领域,包括操作系统、云计算、大数据、人工智能等。但是同时我们也要看到因为开源许可证合规性风险和开源漏洞风险所造成的诉讼案件和纠纷也不断出现,企业就纷纷开始关注开源治理。2006年位于德国GmbH的D-Link德国分部因违反GPL开源许可协议被Linux有名开发者Welte起诉并且受到了惩罚。2016 年底,Artifex 公司因Hancom 违反AGPL开源许可协议向美国加利福尼亚北部地区法院发起诉讼。开源治理中必不可少的一环就是配套的开源治理工具了,市面上已经存在了不少的开源治理工具,但是这些工具具体有哪些功能?扫描原理是什么?扫描结果又是否相同?今天我们就来盘点一下。

目前市场上已经存在一些用于对开源代码组成及安全性分析的开源治理工具,总体来说可以分为以下三种类型:

  1. 工具扫描开源软件源代码,进行源代码片段式比对来识别组件并识别许可证类型。此类工具扫描后得出的组件信息需人工确认。

  2. 工具不扫描开源软件源代码,对文件级别提取特征文件,生成二进制包,通过对二进制包进行比对来识别组件并确定许可证类型。此类工具扫描后得出的组件信息是自动确认的。

  3. 工具不扫描开源软件源代码,通过扫描包配置文件读取信息,进行依赖识别从而识别组件并识别许可证类型。此类工具扫描后得出的组件信息是自动确认的。

这三种识别技术的识别速度是依次增快的,并且组件物料清单的完整性也是依次增高的。源代码片段对比识别的组件数量较多但是误报率较高,另外两种技术的误报率较低但是识别出来的组件数量较少。

我们选取了kubernetes 1.16.2版本来进行开源治理工具扫描对比。目前kubernetes是一个开源中主流的容器编排软件,市场占有率超过80%,国内开发的容器编排软件基本基于kubernetes开发。

此次共使用代码扫描工具共计6个,均使用工具的SaaS版本进行扫描。为保证公立性,我们仅展示扫描结果,不做扫描结果评价及对工具扫描能力评价。

工具A扫描结果:611个开源组件数,有版本信息(当前版本,最新版本),有依赖项扫描,0个安全漏洞,无许可证分类统计,有许可证风险分级,扫描耗时11分钟,支持本地扫描,自动确认

工具B扫描结果:270个开源组件数,有版本信息(当前版本,最新版本),有依赖项扫描,2个安全漏洞,有许可证分类统计,有许可证风险分级,扫描耗时2分钟,支持本地扫描,自动确认

工具C扫描结果:68个开源组件数,有当前版本,无最新版本,有依赖项扫描,5个安全漏洞,有许可证分类统计,无许可证风险分级,扫描耗时51分钟,不支持本地扫描,需手动确认

工具D扫描结果:915个开源组件数,有当前版本,无最新版本,有依赖项扫描,17个安全漏洞,无许可证分类统计,无许可证风险分级,扫描耗时18分钟,支持本地扫描,自动确认

工具E扫描结果:112个开源组件数,有组件版本信息,有依赖项扫描,6个安全漏洞,有许可证分类统计,有许可证风险分级,支持本地扫描,自动确认

工具F扫描结果:无开源组件数统计,无开源组件版本信息,有依赖项扫描,只做许可证扫描,无安全漏洞扫描功能,有许可证分类统计,无许可证风险分级,扫描耗时10分钟,支持本地扫描,需手动确认

kubernetes( 1.16.2)扫描结果如下表所示:

特别鸣谢开源治理工具支持厂商

(排名不分先后,与上表A-F不是一一对应关系)

注1:我们所选取的k8s软件较大,可能不适用每个工具的使用场景。

注2: 扫描结果可能受网络和电脑硬件配置要求的影响。

注3:各工具扫描结果,开源组件数并不是越多越好,可能会误报;开源组件数也并不是越少越好,可能会漏报,开源最接近真实的才是最准确的,当然k8s真实的开源组件数量我们目前还无法准确得到。

注4:每家算法实现方法不同,有些扫描源码,有些扫描二进制码;有些直接上传到云端进行扫描,有些需要本地部署客户端,有些需要集成到开发环境使用;有些侧重漏洞信息,有些侧重开源许可证信息。

注5:各家扫描时间并不一定在同一维度上比较,我们只是模拟用户体现时间,有些包含了拉取国外镜像的时间,所以时间差异比较大,耗时长短不能表示工具好用与否,与扫描对象和应用场景直接相关。

声明:本文来自云计算开源产业联盟,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。