麒麟操作系统内核同其他操作系统内核的相似性分析(2)
734211
40295
12975
-
358820
freebsd_6.0
1,271,723
791490
805184
905427
907359
753022
766311
622653
-
上表中所列出的是FreeBSD的各个版本之间的差异行数,即前面所说到的c。左边列出的是原始内核,顶端列出的是目的内核。左边给出了原始内核的行数。
差异行数和相似度具有相同的含义,毕竟相似度也是通过差异行数计算出来的,因此在以后的叙述中,我们将只列出相似度对比的表格。
下面就是FreeBSD各个版本之间的内核相似度比较。
原始内核\目的内核
汇编行数
freebsd_5.0
freebsd_5.1
freebsd_5.2
freebsd_5.2.1
freebsd_5.3
freebsd_5.4
freebsd_5.5.b4
freebsd_6.0
freebsd_5.0
913,353
-
28.61%
36.79%
36.65%
21.07%
18.91%
18.67%
13.72%
freebsd_5.1
958,699
27.24%
-
38.18%
38.37%
13.76%
17.92%
15.98%
16.60%
freebsd_5.2
1,048,418
32.53%
33.77%
-
99.80%
32.80%
29.46%
32.09%
14.00%
freebsd_5.2.1
1,049,592
40.04%
33.49%
99.69%
-
32.89%
28.95%
29.13%
14.05%
freebsd_5.3
1,161,593
14.72%
16.87%
29.49%
28.01%
-
98.03%
95.49%
25.31%
freebsd_5.4
1,174,287
14.38%
12.49%
26.92%
26.94%
96.97%
-
98.91%
31.54%
freebsd_5.5.b4
1,187,447
14.46%
14.74%
26.34%
26.56%
94.43%
97.80%
-
76.88%
freebsd_6.0
1,271,723
9.58%
12.07%
11.24%
11.18%
32.13%
32.08%
44.41%
-
由于操作系统是逐步发展而来的,因此从5.0-5.5 beta 4都是在前者的基础上,修补前者中出现的bug,并增添新的特性而产生的。我们可以从这个FreeBSD的相似度表中看到这种传承关系。我们可以看出,基本上是越靠近当前版本相似度越高,而离当前版本越远相似度就越低。其中有一些特例的情况,5.1和5.2似乎比较特殊,可能是由于某种原因在5.1中策略有所调整,而在5.2.1或者5.3中又逐渐的恢复回来。
5.2.1和5.2的相似度达到了99.80%,这是正常的,由于在5.2之后,有一系列关键服务,如wu-ftp, OpenSSH和XFree86等的缓冲区溢出的漏洞被揭露出来,致使FreeBSD出于安全考虑而在5.2发布后仅一个月多的时间就立即发布了新的版本,因此5.2.1和5.2的内核上的差异实际上很低,主要是在外围程序上修补了很多安全漏洞[15]。但是出乎我意料的,我没想到在很容易被干扰而降低相似度的情况下,竟然可以达到这么高的相似度,说明这种分析方法对于代码相似度分析在一般情况下是有效的。究其原因,应该是因为FreeBSD的前后传承关系,所以不同的版本虽然代码有不少变动,但是默认的内核配置文件变动不大,因此才有可能出现这种比较高的相似度。另外我们也可以看出,FreeBSD在5.3以后,包括5.4和5.5的内核变动量都不大,由此可以感觉到5.x的系统可能已经基本成熟。
FreeBSD 6.0与5.3以前版本的相似度都不太高,主要是因为6.0已经是和5.x属于不同的代码分支,相对于5.x来说代码有了较大的变化。而另一方面,6.0的分支是在5.4版本发布后建立的,因此,6.0的内核与之前内核的相似度偏低,却和FreeBSD 5.3, 5.4, 5.5 beta 4的相似度较高。
总体上,基本符合版本相近,代码相近的客观事实,分析方法是成功的。
2.2.2 FreeBSD、NetBSD和OpenBSD的内核相似度分析
NetBSD和FreeBSD一样,也是从美国加州伯克利大学的4.3BSD和386BSD衍生出来的Unix操作系统。它以设计简洁、代码规范和高可移植性的特点而著称。从服务器到嵌入式设备都有它的身影[10]。而OpenBSD则是从NetBSD 1.0衍生而来的[11]。因此OpenBSD和NetBSD相对FreeBSD而言具有更近的血亲关系。
原始内核\目标内核
汇编行数
freebsd_5.3
freebsd_6.0
netbsd_2.1
netbsd_3.0
openbsd_3.7
openbsd_3.8
freebsd_5.3
1,161,593
-
25.31%
16.55%
16.61%