期待已久的 2.6 内核终于到来了。IBM Linux Technology Center 的 Paul Larson 暗中关注那些让 2.6 成为有史以来最好内核的工具、测试和技术 —— 从修正控制和回归测试到缺陷追踪和列表保持。
经过为期三年的积极开发,新 2.6 Linux 内核最近已经发布了,在这期间,Linux 内核的开发和测试方法发生了一些有趣的变化。当前,开发内核的方法在很多方面与三年前没什么不同。不过,一些关键变化已经使整体的稳定性和质量得到了提高。
源代码管理
历史上,从来没有出现过用于 Linux 内核的正式的源代码管理或修正控制系统。实际上,很多开发者实现了他们自己的修正控制器,但是并没有官方的 Linux CVS 档案库,让 Linus Torvalds 检查加入代码,并让其他人可以由此获得代码。修正控制器的缺乏,常常会使发行版本之间存在“代沟”,没有人真正知道加入了哪些改变,这些改变是否能很好地融合,或者在即将发行的版本中哪些新内容是值得期待的。通常,如果更多的开发者可以像了解他们自己所做的改变一样了解到那些变化,某些问题就可以得到避免。
使用 BitKeeper 的最大好处之一是补丁的融合。当多个补丁应用于同一基础的代码之上,并且其中一些补丁会对同一部分产生影响时,就可能会出现融合问题。一个好的源代码管理系统可以自动地完成其中一些更为复杂的部分工作,这样可以更快地融合补丁,并使更多的补丁加入到内核中。随着 Linux 内核开发者社区的扩大,非常需要修正控制器来帮助保持对所有改变的追踪。由于每个人都可以将这些改变集成到主要的 Linux 内核中,为保证补丁不会被遗忘并可以方便地融合和管理,BitKeeper 等工具是必不可少的。
非常有必要使用一个实时的、集中的档案库来保存对 Linux 内核的最新更新。每一个被内核接受的改变或者补丁都被作为一个改变集被追踪。终端用户和开发者可以保存他们自己的源文件档案库,并根据需要可以通过一个简单的命令用最新的改变集进行更新。对开发者来说,这意味着可以始终使用最新的代码拷贝。测试人员可以使用这些逻辑的改变集合来确定哪些变化导致了问题的产生,缩短调试所需要的时间。甚至那些希望使用最新内核的用户也可以直接利用实时的、集中的档案库,因为现在一旦他们所需要的部件或缺陷修复加入到内核中,他们就可以马上进行更新。当代码融合到内核时,任何用户都可以提供关于这些代码的即时反馈和缺陷报告。
并行开发
随着 Linux 内核的成长,变得更加复杂,而且吸引更多开发者将注意力集中到内核的特定方面的专门开发上来,出现了另一个开发 Linux 方法的有趣改变。在 2.3 内核版本的开发期间,除了由 Linus Torvalds 发行的主要的一个内核树之外,还有一些其他的内核树。
这种并行开发模型的优点是,它使得需要进行重大改变的开发者,或者针对一个特定的目标进行大量类似改变的那些开发者可以自由地在一个受控环境中开发,而并不影响其他人所用内核的稳定性。当开发者完成工作后,他们可以发布针对 Linux 内核当前版本的补丁,以实现到此为止他们所完成的改变。这样,社区中的测试人员就可以方便地测试这些改变并提供反馈。当每一部分都被证明是稳定的之后,那些部分可以单独地,或者甚至同时全部地,融合到主要 Linux 内核中。
在实际应用中测试
过去,Linux 内核测试方法围绕开放源代码开发模型进行。由于代码一经发布后就公开给其他开发者进行审查,因此从来没有出现过一个与其他形式的软件开发类似的正式的验证周期。这种方法背后的理论依据是“The Cathedral and the Bazaar”中所谓的“Linus 法则” ,这一法则的内容为“众人的眼光是雪亮的”。换句话说,高力度的审查可以找出大部分真正的大问题。
最早对 Linux 开始进行有组织测试的贡献者是 Linux 测试项目 (Linux Test Project,LTP)。这个项目的目的是通过更有组织的测试方法提高 Linux 的质量。这个测试项目的一部分是自动测试套件的开发。LTP 开发的主要测试套件也叫做 Linux 测试项目。2.4.0 内核发布时,LTP 测试套件只有大约 100 个测试。随着 2.4 和 2.5 版本 Linux 的发展与成熟,LTP 测试套件也正在发展和成熟。当前,Linux 测试项目包括超过 2000 个测试,而且这个数字还在增长!
另外一个名为开放源代码开发实验室 (Open Source Development Labs, OSDL) 的团队也为 Linux 测试做出了重要的贡献。2.4 内核发布后不久,OSDL 创建了一个叫做可扩展测试平台 (Scalable Test Platform,STP) 的系统。STP 是一个自动化的测试平台,让开发者和测试者可以运行 OSDL 硬件之上的系统所提供的测试。开发者甚至可以使用这个系统来测试他们自己的针对内核的补丁。可扩展测试平台简化了测试的步骤,因为 STP 可以构建内核、设置测试、运行测试,并收集结果。然后得到结果以进行深入地比较。很多人无法接触大型系统,比如具有 8 个处理器的 SMP 机器,而通过 STP,任何人都可以在像这样的大型系统上运行测试,这个系统 (STP) 的另一个好处就在于此。
追踪缺陷
自从 2.4 发布以来,对 Linux 内核的有组织测试最大的改进之一是缺陷追踪。过去,在 Linux 内核中发现的缺陷会报告给 Linux 内核邮件列表,报告给特定组件或者特定体系的邮件列表,或者直接报告给维护发现缺陷的那部分代码的个人。随着开发和测试 Linux 的人数的增加,这个系统的不足之处很快就暴露了出来。在以前,除非人们对缺陷的报告可以惊人地维持下去,缺陷经常被遗漏、遗忘或者忽略。
现在,OSDL 安装了一个缺陷追踪系统,来报告和追踪 Linux 内核的缺陷。系统经过了配置,这样当某个组件的缺陷被报告时,那个组件的维护者就会得到通知。维护者既可以接受并修复那个缺陷,或重新指定缺陷 (如果最终确定实际上那是内核另外一部分的缺陷),也可以排除它(如果最终确定并不是真正的缺陷,比如错误配置的系统)。报告给邮件列表的缺陷还有丢失的危险,因为越来越多的电子邮件涌向那个列表。然而,在缺陷追踪系统中,始终有对每一个缺陷及其当前状态的记录。
大量信息
在为将来的 2.6 Linux 内核进行开的过程中,除了这些自动化的信息管理方法之外,开放源代码社区的不同成员还收集和追踪了数量惊人的信息。
例如,在 Kernel Newbies 站点上创建了一个状态列表,来保持对已经提出的内核新部件的追踪。这个列表包含了以状态排序的条目,如果它们已经完成了,则说明它们已经包含在哪个内核中,如果还没有完成,则指出还需要多长时间。列表上很多条目的链接指向大型项目的 Web 站点,或者当条目较小时,链接指向一个解释相应部件的电子邮件信息的拷贝。
同时,“post-halloween 文档”告诉用户即将到来的 2.6 内核有哪些可期待的东西。post-halloween 文档的大部分讨论内容是用户需要注意的主要改变,以及需要更新的系统工具(为了利用它们)。关心这一信息人的主要是那些期望提前了解 2.6 内核中有哪些内容的 Linux 发行商,还有终端用户,这可以让他们确定为了能利用新部件是否有需要升级的程序。
在 Linux 社区中,开放源代码开发日益兴旺。致力于 Linux 内核和其他方面工作的编码者之间联系是松散的,这就使得团队可以成功地适应变化。在许多方面,相对于已经完成的很多单个的改进和缺陷修复而言,Linux 的开发和测试方法 —— 尤其是这些方法随时间的推移得到了改进 —— 对新内核的可靠性影响更为深远。
关于作者
Paul Larson 为 IBM Linux Technology Center 的 Linux Test 团队工作。过去一年中,他从事的项目包括 Linux 测试项目、2.5/2.6 内核稳定性和内核代码覆盖分析。可以通过 [email protected] 与他联系。