随着开源众包开发模式的普及,开源软件已成为软件供应链的重要组成部分。Linux是当前使用最广泛、影响力最大的开源软件。由于Linux内核庞大(如Linux5.13含72210个文件,30947449行代码)、迭代快、开发者众多,不同版本之间的继承度和差异迄今缺乏深入的量化统计。本文使用“重睛鸟代码溯源及安全审查系统”,对迄今66个Linux内核三级版本进行代码继承度比对,量化Linux内核进化过程。根据我们的了解,这是业内第一次对版本间继承关系的代码级量化统计。结合检测结果和对各版本变更记录的分析,我们认为Linux3.0(2011年)是Linux步入成熟期的拐点,而Linux4.12(2017年)是Linux趋于稳定完善的里程碑版本。
为量化不同Linux版本之间的继承程度,软件溯源分析、代码识别无疑为有效实现途径之一。软件溯源分析是通过代码指纹提取和匹配来实现代码的识别,经过对两个程序的相似性进行计算,来判断它们之间的继承关系。代码溯源检测系统的研发最早起源于欧美发达国家,近几年该检测行业才在国内小成规模。国外代码溯源检测系统以美国、以色列、荷兰等为主要代表,开发的工具包括由美国著名的“Blackduck”、惠普的“HPFortify”和以色列的“Checkmarx系列”代码检测工具等。国内在该领域起步较晚,目前以“Hobot软件成分分析平台”、“重睛鸟代码溯源及安全审查系统”和“开源卫士”为主要代表。因采用的分析技术不同,各检测系统或工具在应用方向上不尽相同。
本文使用“重睛鸟代码溯源及安全审查系统”,对迄今66个Linux内核三级版本进行代码继承度比对,量化Linux内核进化过程。根据我们的了解,这是业内第一次对版本间继承关系的代码级量化统计。 表1从相似代码行数占比、相似文件容量占比和相似文件数量占比三个方面,展示了版本间的继承情况。
图1:Linux5.13与Linux5.12代码比对结果展示
图2:Linux5.13与Linux5.12代码级代码溯源检测详情
图3:Linux临近版本继承性分析
由图3可知,三种相似度随时间的变化趋势接近,在绝对比例上存在少许差距。版本间相似度在发布初期上下波动幅度较大,后期随着版本的不断演进趋于稳定。其中,Linux3.0版本之前,各版本间经常出现较大的差异性,如Linux2.2.0与Linux2.1.0的相似代码行数占比只有10.57%,显示在系统功能建设方面进行了很大的改动。同样,Linux3.0与Linux2.6.0的相似代码行数占比只有7.17%,这两个间隔8年,经历39个版本迭代,在各方面都有很大提升,如 Btrfs文件系统整理、sendmmsg函数调用、支持CleanCache、支持Berkeley Packet Filter实时过滤等,在一定程度上解释了Linux2.6.0与Linux3.0之间的显著差异性。经前期震荡,从Linux3.0版本开始,Linux内核系统趋于稳定,版本间具有很高的继承性(平均92.36%),且继承性呈缓慢上升趋势,显示出Linux内核已经迈入成熟阶段。Linus Torvalds曾指出,Linux 4.12是Linux 4.9之后最重大的版本更新,其主要更新包括新增支持AMD Radeon RX Vega显卡,Nvidia GeForce GTX 1000 “Pascal”加速支持,启用BFQ和 Kyber block I / O调度器等。表1的数据印证了Linus Torvalds 的表述。Linux4.12版本对Linux4.11的继承性显著低于临近版本的继承性(相似文件占比86.25%)。Linux4.12之后,继承度普遍在平均值以上微微震荡上行。结合检测结果和对各版本变更记录的分析,我们认为Linux3.0(2011年)是Linux步入成熟期的拐点,而Linux4.12(2017年)是Linux趋于稳定完善的里程碑版本。
“重睛鸟代码溯源及安全审查系统”是由国家超级计算无锡中心、无锡江南计算技术研究所、清华大学、中科院计算所等单位联合研发的一款完全自主研发、面向主流语言的代码溯源及安全审查大数据平台,主要功能包括:软件源代码溯源分析、自主度评估、开源漏洞检测与预警、开源许可证合规性分析。平台建设了国内最大的源代码领域的安全大数据库,覆盖500多万个开源项目、1700多亿行源代码、1500多个许可证协议、20多万条漏洞信息,构建了国内最大的代码多级特征库,以及覆盖操作系统,数据库,中间件,办公软件等基础软件常用开源组件的安全漏洞库。平台支持分析结果多层次可视化展示,可用于提高软件的可控性与安全性。“重睛鸟代码溯源及安全审查系统”的结果展示概要如图4所示:图4:“重睛鸟代码溯源及安全审查系统”检测结果概览