首页 > 系统 > Linux > 正文

开源社区正挑战Linux内核开发的极限速度

2024-08-27 23:57:32
字体:
来源:转载
供稿:网友

开源社区正以极快的速度向Linux内核中添加新功能,同时又在努力让修补bug的步伐跟上去。放慢开发速度看上去是不太可能的……

Linux内核的最新版本已于本月发布,它展现了一系列令人眼花缭乱的变化。2.6.23版内核的发布距离上一次内核更新只有三个月,它添加了适合商用的新功能,包括对虚拟化技术更好的支持、对极其重要的调度器(scheduler)的更新以及新的设备驱动程序和bug补丁。

每隔两三个月就能从Linux Torvalds负责维护的“代码树”上看到大量的变化,这显示出Linux内核的开发速度在不断加快。到目前为止,这个开发过程产生了不可否认的高质量可靠代码。

但你也许没想到,Torvalds正在把开源开发的速度推向新的极限。随着Linux内核的规模和复杂度不断增大,这种快速迭代的更新对负责测试和修改bug的志愿者社区带来了极大压力。

Torvalds无法放慢速度,原因有两个。首先,Linux不能在技术上落后,否则就会失去要求越来越苛刻的商业用户。因此新内核中增加了钩子(hook),可以利用Intel和AMD处理器内嵌的最新虚拟化功能。其次是因为Linux需要推动开发者社区的发展。不断增加新功能可以使开发者不感到厌倦,否则他们就可能转移到其它项目,另外也能在现有开发者年老或退出的时候吸引新人才。

Linux非正式而又难以预测的新功能路线图就源自于上述压力,这也是Linux在添加新功能的同时保证系统质量和稳定性的持续驱动力。这个已有16年历史的开源项目还能在下一个16年中继续这样的发展吗?“没有任何其它开源项目能像Linux这样规模庞大和发展迅速,”IBM公司一直关注 Linux内核开发进展的副总裁Dan Frye说,“这是一个敢为天下先的开发者社区。”

商业用户正是依赖于这种匆忙的开发过程去改善Linux的许多方面,不仅包括虚拟化技术,还包括电源管理和安全等诸多方面。内核的这些快速变化要想体现在红帽和Novell推出的Linux商业发行版中,可能需要长达两年的时间。大多数用户都使用这些公司推出的Linux系统,因此获得了一个相对于Linux内核疯狂发展的缓冲区。尽管如此,内核的发展仍将决定Linux的未来。

Linux平均每天增加2000行代码,尽管Trovalds的目标是限制加入内核的代码数量,以便让它尽可能高效。Linux的模块化内核是这个操作系统的核心,负责处理所有的通用任务,例如内存管理、CPU调度请求和输入输出。它的周围是数百个附加软件包,用来完成更具体的任务,例如在 Linux和Windows系统之间传输文件,或是对文件进行配置以便通过Apache Web服务器显示出来。但是内核必须不断发展,以便处理更多的功能和硬件,满足更多用户的需求。Linux在1991年刚诞生时只是操作系统爱好者写出的 10250行代码,目前的代码则超过了八百万行。

有人认为,Linux内核平均每小时增加86行代码的速度正在超越软件开发的极限。Linux的一位关键维护者Alan Cox已经警告说,一些设备驱动程序的修改在加入内核之前应该经过更多的测试。Andrew Morton是一位杰出的Linux开发人员,在被Torvalds任命为Linux内核的负责人之后有了“内核上校”的绰号。他对Linux未经修改的 bug问题也发表了坦率的看法。“我希望开发者能用更多的时间去修补bug,而用更少的时间去添加新功能,”Morton说,“这是我的个人意见”。

然而在最近于英国剑桥举办的Linux内核峰会上,Torvalds说自己在过去犯了过于谨慎的错误。他认为缓慢的内核发布将导致Linux的发展受阻,因为各种新功能都等着被添加到内核中。如果没有及时获得内核维护者和受信任的开发高手的反馈,社区的贡献者们就会失去继续提交代码的兴趣。 (Torvalds没有对我们的采访要求做出回应。)

在加快Linux内核的开发速度上,Torvalds有些做过了头。他依赖于一个基本的开源思想:相对于更有组织的软件测试,大量用户对频繁发布的代码进行测试更有可能发现软件的缺陷。添加到内核中的新代码一旦在某些硬件上无法运行,或跟其它程序——不论是内核中的还是内核外的——发生冲突,就会导致Linux出错。当新代码出现bug的时候,人们都指望当初提交这些代码的开发者去解决bug,但他们通常没去解决。

内核开发人员Jonathan Corbet在Linux基金会发布的一份资料上透露,在剑桥的这次峰会上,Morton说自己真想任命一个“惹人烦的家伙”担任Linux内核的bug 管理员,他希望这个人能够找到bug的来源,然后“把那些不愿修改bug的开发者痛扁一顿”。Natalie Protasevich是目前被任命的bug管理员。在Morton看来,Protasevich给Linux内核的bug清理工作带来了更多的纪律,尽管她缺乏自己更喜欢的那种强硬风格。Linux内核的Bugzilla数据库一度记录了超过1500个bug,目前已经减少到1400个。

“在快速的开发过程与完备的代码审阅之间,正在形成一种极其微妙的平衡,”Intel公司负责Linux和开源技术的主管Dirk Hohndel说。即使在目前这种飞快的开发进度中,开发者想添加或用户有需求的功能也不是样样都能加进内核。

Linux的商业用户对这个过程可能感到沮丧。对于欧洲的旅行服务商Amadeus公司来说,Linux是其减少IT基础设施成本的战略关键。该公司负责技术和战略规划的副总裁Fred Bessis说,通过淘汰大型机系统,然后在“廉价的硬件”上运行Linux,该公司减少了大约10%的设备开支。该公司采用Linux已有超过十年的经验,它了解Linux目前的状况,也目睹了潜在有用的新功能通往Linux商业版本的漫长过程。

Amadeus公司的高级系统程序员Holger Weisbrodt说,新的硬件和驱动很快就能在内核中使用,但新的bug诊断和调试工具“需要很长时间才能被加进内核”。他希望Linux内核开发者能对常用的bug调试工具更加关注。

Linux新版内核的开发过程就展示了这种不可预测性,具体表现在它所包含的两个新功能上:新的调度器和改善了的虚拟化支持。这两个功能与内核完全沿着不同的开发路线,分别都有自己的风险和复杂性。

要能忍受批评

一个新功能要想被采用,可能会经历漫长而充满挫折的过程,Linux内核近期最重要的收获——新的调度器——就是其中一个例子。这个内核调度器想把Unix系统的公平和分时特性与实时操作系统的抢占和快速中断特性结合在一起,前者能处理更多的任务和用户,而后者能快速响应突发的事件。在商业化的操作系统中,这两个特性往往被作为不同的功能来实现,而Linux试图把它们同时实现。

内核代码的贡献者们已经花费了许多年进行调度器的开发,但其中一名开发者——澳大利亚的医生Con Kolivas今年夏天在整个开源社区掀起了一阵波澜,因为他在《澳大利亚个人电脑》杂志上发表了一篇引起热烈讨论的文章,讲述了自己为什么沮丧地退出了 Linux开发。

他此前为2.6.23版内核编写了称为“-ck patchset”的代码,由Ingo Molnar负责审阅。Molnar是红帽公司的一名开发人员,此前对多个调度器的开发做出了贡献,因此成为调度器领域受信任的专家之一。他发现 Koliva提交的代码在调度的实时性方面存在缺陷,于是基于这段代码编写了他自己的多用途调度器版本。这种对别人的代码修改后再发布的做法是通用公共协议(GPL)所倡导的,内核的维护者会尽力向代码的最初贡献者表示敬意。但Kolivas此前已经得知自己的代码没被接受,因此对这件事感到有些恼怒。

Kolivas遇到了对每个开发者都会造成障碍的一种问题。他的设计思路是根据任务的不同类别去使用不同的调度器。Torvalds及其伙伴则信奉通过基本功能把事情一次做好,反对采用多种替代方式去做同样的事。他们认为这样能让软件的维护更简单,并让内核不同子系统之间的交互更容易预测。 Tornalds运用自己的影响力推广了这种架构原则,而在讨论新代码的邮件列表上,参与者也大多信奉这一原则。正是在这个列表进行的讨论中, Kolivas所写的代码经历了并不少见的惨败。“在Linux内核的邮件列表上,讨论者对其他开发者所写代码发表的言论可能比较刺耳,如果有人在一个商业公司里说同样的话,他很可能被解雇,”一直订阅该邮件列表的红帽公司产品管理负责人Joel Berman说。

包含在2.6.23版内核的调度器叫做“完全公平调度器”(Completely Fair Scheduler),如果考虑到调度器开发过程中发生的各种妥协,这个名字实在有点儿讽刺。不仅是Kolivas感到生气,还有其他人想让调度器获得更好的实时性能,他们希望在明年能把这方面的改进添加到内核中。

快速发展的虚拟化技术

与围绕调度器所发生的长期争论相比,Avi Kivity的经历就简单多了。这位来自以色列的开发者提交了一个称作KVM的虚拟化引擎,其中包含了12000行的庞大代码包。代码贡献者在提交一个补丁的时候,如果能让内核开发人员和维护者知道自己的名字,会对自己更有利。但是“KVM的到来非常突然,”Morton说,“此前我从来没有听说过 Kivity本人或他的Qumranet公司”。

Kivity把自己描述为内核邮件列表上的“长期潜水员”,非常喜欢读上面的内容,也熟悉高手之间的攻击和争论,但自己并没有提交过太多代码。他按照自己领会到的Linux内核标准去设计KVM,让熟悉内核文件系统的Linux高手们及时了解代码的最新进展,并及时答复内核维护者提出的问题和评论。KVM满足了Linux的一个重要需求,因为随着虚拟化技术受到越来越多的关注,Linux内核终于具有了相应的功能,可以利用Intel和AMD公司的芯片提供的虚拟化接口。KVM还巧妙地利用了内核调度器和内存管理器,对操作系统中的其它模块几乎没有影响。结果在去年秋天,KVM提交不到三个月就被加进了Linux内核。

Morton说,添加的代码如果来自一位不知名的开发者和一个刚创立的公司,就会带来一定的风险,因为两者都可能消失,进而导致没人对这些代码非常熟悉。但考虑到这些代码的独立性,即使它们的开发被终止,其它开发者也能很方便地把它们从内核中移除。

即使像KVM这样的代码被放进了内核,它们要想被添加到红帽企业级Linux和SUSE企业服务器这两个最主要的企业版Linux,也要延后一两年时间。(像红帽的Fedora和Novell的OpenSUSE这类“社区发行版”,其内核就更新得比较快。)这主要是为了进行广泛的测试和为技术支持做准备。许多企业级用户都对企业版Linux的稳定性感到满意,而不愿意使用功能最多的最新内核。

不论如何,Linux在各种操作系统的竞争中跑在了前列,因为有一大批开发者正把各种新功能加进内核。这些代码贡献者可能是为了获取名声或满足好奇,有时则是为了得到薪水。在最近的28个月里,共有11个新内核被发布,其中可以识别的个人贡献者从479人增加到了838人。按照一般估计,每个在代码中留名的开发者平均获得了大约三到四个人的帮助。这意味着大约有三千人参与了Linux内核的每一次迭代更新。

Linux的发展就是依赖于这个志愿者社区,尽管内核的维护者、也就是领导Linux各个子系统开发的高手们是由一些公司支付薪水,比如 Google、惠普、IBM、Novell和红帽。正是因为存在这个社区,Morton才会说在开发速度和可靠性之间没有一种“绝对的折衷”,因为只有让新功能尽快加入内核,才能在添加到商业发行版之前得到更好的测试。

然而与来自商业公司的代码相比,这样的开发还是存在缺陷。“我不想把这种情况叫做‘不可预测’,但它确实无法保证一个交付日期,”Intel公司的Hohndel说,“因为Linux的代码一旦编写好就会被提交。”

在接下来的两到三个月内,Torvalds将发布2.6.24版内核。这个版本包含的许多新功能是由数百名全新面孔的人员开发和测试的,他们没有参与过这个月发布的2.6.23版内核的开发。无法预知在新版本内核的诸多功能中,最后有多少会加入经过商业测试的Linux发行版。这实在不能算作人们通常所指的产品“路线图”。但起码到目前,这种开发方式还没有驶向错误的方向。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表