Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2850095
  • 博文数量: 486
  • 博客积分: 10129
  • 博客等级: 上将
  • 技术积分: 6227
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-13 14:14
个人简介

人生有起有落,奋斗吧 官方网站:www.flameschen.com

文章分类

全部博文(486)

文章存档

2021年(1)

2020年(1)

2017年(17)

2016年(21)

2015年(3)

2014年(1)

2012年(1)

2011年(1)

2010年(5)

2009年(30)

2008年(31)

2007年(75)

2006年(299)

分类:

2009-05-14 06:32:05

此次引入Solaris来进行比对,也是从一方面希望能够从分析数据中客观地反映出Solaris,相比Linux而言,和BSD有更近的血亲关系。
关于参与比对的麒麟操作系统内核,我们将从发布版本中获得的四个版本的内核拿来进行比对,Kylin 2.0.0, Kylin 2.0.14, Kylin 2.0.21, Kylin 2.0.21 lsb。需要说明的是,官方网站上发布了2.0.14和2.0.18。其中Kylin 2.0.0是来自于麒麟系统安装盘的引导部分,通过uname –a显示出的版本是2.0.0。Kylin 2.0.21虽然是官方网站给出的光盘镜像的版本号,可是启动后,通过uname –a得到的版本号却是2.0.18,这点可能是麒麟开发组在版本管理上的混乱所导致的。
下面就是分析后得到的数据表;
 
原始内核\目标内核
汇编行数
fb 5.0
fb 5.2
fb 6.0
k 2-0
k 2-14
k 2-21
k 2-21 lsb
l 2.6.16
nb 2.1
nb 3.0
ob 3.7
ob 3.8
os 5.11
freebsd_5.0
913,353
-
36.79%
13.72%
40.53%
30.43%
30.43%
40.53%
6.46%
11.24%
11.37%
10.91%
10.87%
5.02%
freebsd_5.2
1,048,418
32.53%
-
14.00%
48.18%
34.02%
34.02%
48.18%
5.75%
11.02%
10.91%
10.95%
10.94%
4.55%
freebsd_6.0
1,271,723
9.58%
11.24%
-
12.63%
13.19%
13.14%
12.63%
6.61%
16.65%
16.22%
15.89%
16.24%
5.21%
kylin_2.0.0
1,120,079
31.92%
41.94%
14.55%
-
91.06%
91.06%
100.00%
5.38%
10.83%
10.31%
10.20%
10.35%
4.35%
kylin_2.0.14
1,190,443
23.55%
29.98%
24.61%
85.60%
-
100.00%
85.60%
5.04%
10.63%
10.64%
10.30%
10.44%
4.06%
kylin_2.0.21
1,190,562
23.52%
29.95%
21.04%
85.57%
99.99%
-
85.57%
5.03%
10.72%
10.63%
10.29%
10.44%
4.06%
kylin_2.0.21_lsb
1,120,079
31.92%
41.94%
14.55%
100.00%
91.06%
91.06%
-
5.38%
10.83%
10.31%
10.20%
10.35%
4.35%
linux_2.6.16
666,204
9.47%
9.71%
13.13%
5.38%
5.38%
5.39%
5.38%
-
11.89%
12.09%
12.21%
12.07%
6.30%
netbsd_2.1
1,503,585
6.49%
7.42%
13.68%
8.06%
8.18%
7.97%
8.06%
5.20%
-
53.35%
17.53%
16.72%
4.10%
netbsd_3.0
1,616,659
6.19%
7.11%
12.65%
7.54%
7.90%
7.89%
7.54%
4.98%
24.40%
-
13.96%
14.61%
3.73%
openbsd_3.7
1,228,137
7.95%
9.58%
16.54%
9.27%
9.97%
9.71%
9.27%
6.43%
20.77%
18.44%
-
88.89%
5.20%
openbsd_3.8
1,260,707
7.72%
8.84%
16.52%
8.88%
9.53%
9.52%
8.88%
6.29%
20.65%
18.47%
84.56%
-
5.00%
OpenSolaris_5.11
396,534
11.87%
12.00%
16.84%
12.50%
12.46%
12.46%
12.50%
13.37%
15.90%
15.82%
16.66%
16.49%
-
 
从数据表中反映出来的血亲关系来看,Kylin 2.0的内核和FreeBSD 5.x的血亲关系最近,在30.43%-48.18%之间,和FreeBSD 6.0的关系稍远,在14.55%-24.61%之间。而和其他的操作系统关系都比较疏远。和NetBSD、OpenBSD的相似度在10%左右,而同Linux的相似度只有5.38%,
与OpenSolaris的相似度虽然比NetBSD和OpenBSD还高,达到了12.50%,但是这个绝对数值不应该视为OpenSolaris与麒麟的关系更接近。因为,OpenSolaris的代码行数仅有396,534行,仅相当于NetBSD的1/4。在相似度计算公式中,分母较小,容易致使结果的相似度较大,因此不应该说麒麟内核和Solaris更相似,应该说麒麟内核同Solaris,NetBSD和OpenBSD的相似度相当。
另外,我们可以注意到OpenSolaris和FreeBSD 6, NetBSD, OpenBSD的相似度略高于其他系统内核,但是都比较低。我们从这个不大的差异中可以感觉到Solaris同BSD的或近或远的关系。其实虽然Solaris代码已经不是基于BSD构建的Unix了,但是由于SVR4中也吸收了BSD的部分代码,因此Solaris在相似度上,还是客观的体现了和BSD偏近的关系。
从数据中我们还可以看到麒麟的这几个内核的相似度很高。Kylin 2.0.0和Kylin 2.0.21 lsb的相似度是100%,Kylin 2.0.14和2.0.21的相似度也是接近100.00%。其中的具体差异行数如下:
 
原始内核\目标内核
汇编行数
kylin_2.0.0
kylin_2.0.14
kylin_2.0.21
kylin_2.0.21_lsb
kylin_2.0.0
1,120,079
 -
170,553
170,641
0
kylin_2.0.14
1,190,443
101,029
 -
145
101,029
kylin_2.0.21
1,190,562
101,328
26
 -
101,328
kylin_2.0.21_lsb
1,120,079
0
170,553
170,641
 -
 
我们可以看出其实光盘引导用的内核同安装后的/boot/kernel_lsb/ 目录下的内核是相同的。而Kylin 2.0.21和2.0.14相比仅仅修改了几十行代码而已,变动很小,从数值上看,变动主要是增加了一些代码。而从2.0.0到2.0.14变动稍大一些。
在后面的分析中,我们没必要对很相似的内核一起进行重复分析,因此,将基于Kylin 2.0.0和Kylin 2.0.21这两个麒麟内核进行分析。
从现在的结果我们已经可以看出麒麟和FreeBSD的5.x版本有很近的血亲关系,最高达到了与FreeBSD 5.2的48.18%的相似度,这种相似性甚至已经明显超过了和FreeBSD具有很近的同源关系的NetBSD, OpenBSD。即使是最初基于NetBSD的代码而建立的OpenBSD,在与其渊源极深的NetBSD比较时,最高也不过20.77%的相似度。
至此,我们基本上可以确定麒麟操作系统内核中有大量的FreeBSD 5.x 的源代码。为了进一步确定麒麟操作系统和FreeBSD的相似性到底有多少,我们接下来将针对Kylin内核和FreeBSD的内核作比较。
 
2.2.4 Kylin与FreeBSD各个版本间的内核相似度分析
 
这次我们针对Kylin和FreeBSD这两个操作系统的内核进行相似度的比对。参与比对的将包括Kylin的2个典型内核和FreeBSD 5.x全系列内核,具体是Kylin 2.0.0, Kylin 2.0.21, FreeBSD 5.0, FreeBSD 5.1, FreeBSD 5.2, FreeBSD 5.2.1, FreeBSD 5.3, FreeBSD 5.4, FreeBSD 5.5 beta4。
 
原始内核\目标内核
汇编行数
fb 5.0
fb 5.1
fb 5.2
fb 5.2.1
fb 5.3
fb 5.4
fb 5.5.b4
kylin_2.0.0
kylin_2.0.21
freebsd_5.0
913,353
-
28.61%
36.79%
36.65%
21.07%
18.91%
18.67%
40.53%
30.43%
freebsd_5.1
958,699
27.24%
-
38.18%
38.37%
13.76%
17.92%
15.98%
28.94%
26.11%
freebsd_5.2
1,048,418
32.53%
33.77%
-
99.80%
32.80%
29.46%
32.09%
48.18%
34.02%
freebsd_5.2.1
1,049,592
40.04%
33.49%
99.69%
-
32.89%
28.95%
29.13%
48.15%
34.47%
freebsd_5.3
1,161,593
14.72%
16.87%
29.49%
28.01%
-
98.03%
95.49%
57.94%
50.48%
freebsd_5.4
1,174,287
14.38%
12.49%
26.92%
26.94%
96.97%
-
98.91%
56.24%
51.88%
freebsd_5.5.b4
1,187,447
14.46%
14.74%
26.34%
26.56%
94.43%
97.80%
-
39.47%
50.16%
kylin_2.0.0
1,120,079
31.92%
20.99%
41.94%
41.97%
60.26%
59.04%
42.59%
-
91.06%
kylin_2.0.21
1,190,562
23.52%
16.68%
29.95%
29.93%
52.04%
50.87%
50.35%
85.57%
-
 
Kylin 2.0.0和FreeBSD 5.3的相似度达到了60.26%,与FreeBSD也达到了59.04%的相似度。我们可以注意到,即使是FreeBSD的5.0 – 5.3版本之间的相似度也没有超过40.04%。5.3、5.4和5.5的高相似度前面已经解释了,应该是5.x系列的内核趋于稳定了,因此修补较多增添新的特性较少所致。
按照麒麟开发人员的解释,麒麟操作系统内核服务层使用的是FreeBSD 5.0的代码。可是,从我们的分析数据可以明显看出,Kylin 2.0.0和FreeBSD 5.0的相似度有40.53%,而与FreeBSD 5.3的相似度达到了60.26%,因此我们有理由相信麒麟使用的是FreeBSD 5.3或者5.4的代码。
当然,我们可以理解为这是开发人员的声明[3]中的一个笔误,他想说FreeBSD 5.x,而不是FreeBSD 5.0。但是,另一方面,如果说仅仅是外围服务层使用的是FreeBSD的话,那么麒麟与FreeBSD 5.3的相似度不应该高过FreeBSD自家不同版本之间的相似度。既然麒麟2.0.0内核与FreeBSD 5.3达到了60.26%的相似度,那么我们可以肯定地说,麒麟操作系统内核源代码至少有一半以上使用的是FreeBSD 5.3的源代码。
 
2.2.5 Kylin与FreeBSD 5.3, 5.4不同编译配置下的内核相似度分析
为了能够进一步了解麒麟操作系统内核同FreeBSD内核的相似度,接下来,我们将对FreeBSD 5.3和5.4在不变动任何源代码的情况下,重新进行编译,增加一些在Kylin 2.0中出现的模块。这样做的是希望在不修改FreeBSD代码的前提下,看看不同的编译配置是否能够使得FreeBSD与麒麟操作系统内核的相似度更高。
这次,我们在FreeBSD的内核编译配置文件GENERIC中增加如下三个选项:

options COMPAT_LINUX
options LINPROCFS
device           sound
 
 
因为麒麟内核的一个亮点就是可以做到和Linux的二进制兼容,所以这主要是增加FreeBSD的Linux兼容性。其实事实上FreeBSD已经可以很好的兼容Linux二进制代码了,按照FreeBSD的内核设计,它完全可以同时支持多种ABI(应用程序二进制接口),并支持同时运行不同系统可执行文件。通过加载COMPAT_LINUX模块,FreeBSD就已经做到了和Linux可执行文件间的二进制兼容,可以执行大部分Linux程序[17]
而LINPROCFS模块则是模拟了Linux的进程文件系统,也就是我们在Linux下见到的/proc目录,很多Linux的程序需要用到这个系统,因此加载这个模块后,可以让Linux更好的在FreeBSD上运行[18]
最后增加了sound设备,因为我们通过分析,发现Kylin内核里面加载了各种声卡驱动。需要提及的是,麒麟系统启动比较慢,有可能也是因为编译了过多的不必要的模块进内核所导致的。
 
原始内核\目标内核
汇编行数
freebsd_5.3
freebsd_5.3_1
freebsd_5.4
freebsd_5.4_1
kylin_2.0.0
kylin_2.0.21
freebsd_5.3
1,161,593
-
97.47%
98.03%
73.12%
57.94%
50.48%
freebsd_5.3_1
1,198,401
93.78%
-
80.82%
98.07%
56.49%
56.64%
freebsd_5.4
1,174,287
96.97%
94.55%
-
96.58%
56.24%
51.88%
freebsd_5.4_1
1,210,928
91.68%
97.05%
94.56%
-
55.66%
55.29%
kylin_2.0.0
1,120,079
60.26%
61.19%
59.04%
60.17%
-
91.06%
kylin_2.0.21
1,190,562
52.04%
57.02%
50.87%
54.38%
85.57%
-
 
通过比对,我们可以看到,随着增加了Linux兼容性和声卡驱动模块后,Kylin 2.0与FreeBSD的5.3、5.4的相似度均有小幅提高。其中Kylin 2.0.0内核和FreeBSD 5.3的相似度为61.19%。我们有理由相信,随着更多合适的内核模块的加入,Kylin 2.0和FreeBSD的内核相似度有可能会进一步提高。
实际上,经过内核模块的比对,我们也发现了Kylin内核中出现了很多疑似是FreeBSD的其他模块,但是由于每次编译和比对要花费大量的时间,因此,我没有能够一一的加以测试。如果有兴趣的朋友可以进一步测试麒麟系统内核与不同的内核配置文件之间的相似度。
 
2.2.6 同一份FreeBSD 5.3代码,不同编译配置下的内核相似度分析
 
接下来,我们将在不修改任何FreeBSD 5.3内核源代码的前提下,尝试用不同的内核编译配置文件对FreeBSD 5.3内核进行编译。希望能够通过这样的尝试看出,同一份源代码,在不同配置文件下能够产生最低多低的相似度,换句话说,就是使相似度下降多少百分比。
在测试中,由于编译和比对的时间太慢,所以,我只用3个不同的内核配置文件编译内核,这相对于可能出现的内核数量是一个很小的比例。因此,我不能够得出最低使相似度下降的百分比,但是我能够得出至少可以使相似度下降多少百分比。换句话说,我能够测试出一个相似度可能被降低的范围,但是实际能够降低的范围比这个还要大。
 
原始内核\目标内核
汇编行数
freebsd_5.3
freebsd_5.3_1
freebsd_5.3_2
freebsd_5.3_3
freebsd_5.3
1,161,593
-
97.47%
72.01%
71.62%
freebsd_5.3_1
1,198,401
93.78%
-
96.95%
94.32%
freebsd_5.3_2
1,256,264
66.54%
45.25%
-
98.11%
freebsd_5.3_3
1,271,301
67.10%
89.43%
96.95%
-
 
我只是很少的修改了几个内核编译选项,我尽量使生成的内核大小不要差异太大。最后选定了3个比较合适的内核配置文件,它们与FreeBSD 5.3默认配置的内核差异从71.62%到97.47%。我们可以看到仅仅将内核配置文件稍加改动,就可以使同一份源代码编译出来的内核文件降低将近30%的相似度。可以预知的趋势是,随着改动的增大,将能够降低更多的相似度。
既然在不变动源代码的情况下,就可以将相似度降低到70%左右,那么仅仅是服务层采用FreeBSD 5.3代码的麒麟系统内核本应该有相当低的相似度,但是分析数据却得到了61.19%高相似度,因此麒麟操作系统内核的自主代码的比例确实是一个比较值得关注的问题。
 
2.3 结论
 
经过这次分析,我们比较了麒麟操作系统内核同FreeBSD, NetBSD, OpenBSD, Linux和Solaris内核的相似度。在发现麒麟内核与FreeBSD 5.x有30.43%-48.18%的相似度后,将麒麟内核与FreeBSD 5.x各个版本进行了比对。通过比对看到麒麟系统与FreeBSD 5.3默认内核达到了60.26%的相似度,在经过微小调整内核配置文件后,相似度又得到了进一步的提高,达到了61.19%。在继续调整内核配置文件之后,这个相似度还有进一步提升的空间。
随后,我们在不修改FreeBSD 5.3源代码的情况下,仅仅通过配置文件的变动,就使内核相似度降低到了71.62%,而且还有可能降的更低。
经过分析,我们可以看出麒麟操作系统与FreeBSD 5.3具有血亲关系,而且麒麟系统相对于FreeBSD 5.3的改动,还没有FreeBSD 5.3相对于FreeBSD 5.2.1改动大。从61.19%的相似度,我们可以认定,麒麟操作系统中至少有60%的代码是来自于FreeBSD 5.3的源代码。
由于简单的修改配置文件就可以使相同代码相似度降低到71.62%,而我们最终所得到的61.19%又是仅仅是麒麟内核同FreeBSD 5.3内核相似度的最小值,因此,实际的麒麟操作系统与FreeBSD 5.3在源代码上的相似度很有可能会达到甚至超过90%。
我们可以推测(但不确定)麒麟操作系统内核可能是通过以下几个步骤产生的。
首先是在FreeBSD 5.3内核源代码的基础上进行了部分的修改,可能是为了增强与LSB的兼容性。
然后,开发了Keta内核模块,来实现Kernel-based静态页面web加速器。
最后,以FreeBSD的默认内核配置文件GENERIC为基础,编译了更多的可选模块进内核。这么做的目的可能是为了让内核更具有通用性。
如果确实如此,那么生成的麒麟操作系统内核与其说是一个新的操作系统内核,不如说是被麒麟开发者打了内核补丁的FreeBSD 5.3更为恰当。
阅读(2421) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~