开源社区争论话题之一:内核真相

来源:互联网 发布:手机淘宝网商城 编辑:程序博客网 时间:2024/05/17 09:21
自由和开源软件社区的特点非常多,不过其中最突出的一点无疑是其热衷于争论。其中在开源世界争论中一个最核心的话题就是Linux内核,围绕它的争论从未停止过,实际上,自从1991年Linux创始人李纳斯·托沃兹(Linus Torvalds)创建首个Linux内核以来,内核问题就一直是人们探讨和争论的焦点,尤其在其重要性、规模和安全性等三个方面。

  内核的重要性

  作为Linux之父和内核开发的协调者,李纳斯·托沃兹自然对内核问题有着独到的见解。最近这个开源先驱从几个不同的方面谈论了内核问题。

  托沃兹表示,“首先,完全从个人角度讲,我认为系统编程(尤其是内核编程)比其它方面的软件工程都更有意义,因此我认为,内核无疑是最重要的,它可以完成其它软件所不能完成的任务:它是硬件和‘普通程序’的衔接者。”

  不过托沃兹补充说,当然,“内核就是操作系统的核心,一切围绕它进行,这并非我自己的观点。内核与你进行的所有操作都有关系,这意味着,如果在内核中存在一个性能问题或安全问题,当然,运行在其上面的任何程序从底层上来说也是有问题的。”

  《掌握vi和Vim编辑器》一书的作者艾尔波特·汉纳(Elbert Hannah)对托沃兹的观点表示赞同,他表示,“内核对Linux的重要性是决定性的,Linux的心脏和灵魂就是内核,没有Linux内核,就没有所有其它事物,没有运行在它上面的所有东西。”

  内核还是维持和保护运行在Linux中的软件的“交通警察”,汉纳表示,“内核是管理员,确保每个软件获得属于自己的处理器能量。内核是基础,其它软件依靠它才能生存。”

  但是,对于普通开发者和用户来讲,内核又应该是透明的,可以不予关注。

  托沃兹表示,同时“从用户角度来看,内核本身又是‘相对不重要的’,内核所要完成的是如何让其它软件更好的完成自己的任务,而不是阻碍它们,不能让自己变成其它软件的限制者。因此内核在非常重要的同时,最终它对普通用户来说应该是尽量透明的。”

  从一定程度上来讲,内核在开发方面已经实现了这个要求。

  来自蒙特利尔的开源顾问格哈德·麦克(Gerhard Mack)表示,“内核作为Linux的心脏是极端重要的,但是我认为在Linux世界中的开发应该将关注点放在进一步扩大产品组合和提高用户界面和应用上,Linux内核在性能方面已经足够优秀,因此我认为那些天才程序员最好多开发一些Linux更缺乏的东西。”

爆增千倍 内核体积惹争议

  当17年前首次发布Linux 0.01版时,它包含大约10000行代码;而到了去年秋天,内核代码已经超过了1000万行。

  尽管这1000万行代码中包含一些空白行和注释行,内核的规模也已经成为众多观察家关注的目标,其中有很多人指责内核已经变得非常笨重和臃肿。

  托沃兹承认,内核体积本身不是什么问题,但是它却可以带来一些其它挑战,其中最大的一个问题是,如何维护如此庞大的代码,而同时又不能牺牲质量。

  如果内核体积过大,升级开发将非常困难,越小的项目维护起来越容易。“而对于一个大项目,不可避免的会碰到一个问题,没有一个人能够对其完全了解,这势必会给维护带来极大的挑战。”

  内核体积肯定是一个潜在的问题,托沃兹补充说。“这将使得人们进入这个项目的门槛大大提高,因为它的复杂性会让人们望而却步,而且会让人们在排查故障时面临更大的挑战。”

  托沃兹表示,另一方面“我不得不说我们花费了太多的精力来争论这些问题,我们的开发模式已经很好的升级,而且我们拥有大量的开发者,我认为他们实际上非常具有创新精神,不会沉陷于多余的问题中。”

  此外,“尽管内核的复杂性有所增加,我们保持了一个模块化非常好的体系架构,多数复杂的功能模块采取了类似驱动程序的方式,虽然比较复杂,但多数复杂度仅限于‘本地’。这使得它们可以更容易的被管理,举例来说,你必须非常熟悉一个硬件,才能为其编写驱动,但是在为它编写驱动时你无需考虑其它硬件。”

  麦克同样认为,内核体积增长不是什么问题,因为没有多少人真正关心其体积大小。

  麦克表示,绝大多数内核程序包是架构代码和设备驱动程序;如果它的体积过于庞大,人们可以编写一个脚本来将内核按架构进行分拆,也可以移除某些老的或很少用到的驱动。

  尽管有多种方法可以让内核实现“瘦身”,但是Slashdot博客马丁·埃斯皮诺萨(Martin Espinoza)认为这样做的必要性不大,现在存储空间已经不再是什么障碍,几乎没有人还在使用软驱,将内核存储在一个非常小的容量设备上的时代已经过去了。磁盘空间和内存都如此便宜,相对来说Linux内核的体积还是非常小的。

  汉纳表示,“我不再继续认为Linux仅适合小存储空间模式,当时的32M已经是一个较大的空间,这似乎与Linux一直奉行的‘run lean, run clean’理念有些背道而驰。”

  但是,“在我看来,这可能是Linux历史上最具幻想性的想法之一,”汉纳表示,按照所有的标准来说,Linux“仍然继续非常苗条和干净,但是李纳斯预见到存储空间将变为类似日用品的东西,这个预测在今天成为了现实。”

  汉纳表示,“随着Linux复杂性增加,它的体积势必就会增长,但是它的增长趋势依然非常平稳。更多的风险和伤害来自于软件中粗心和散漫态度的膨胀。Linux依然是当今最为简洁的操作系统之一,尤其是在考虑其服务范围的情况下。”

  来自教育行业的博客作者罗伯特·普森(Robert Pogson)表示,在他的PC上使用Linux时没有碰到过速度问题。存在问题的是其他瘦客户端设备,这类设备的CPU资源相对较低,因此需要一个精简版的内核。

  但是他表示,人们可以定制化一个内核,只添加所需的驱动,从而获得更优异的性能。总体来讲,不管内核开发者在做什么,他在使用内核中没有碰到过什么问题。

内核安全问题

  关注Linux的粉丝经常争论的另一个问题是安全问题。

  托沃兹表示,“内核开发者需要时刻牢记的问题之一就是安全性,但是漏洞是难以避免的,也就是说安全问题总会在内核中出现。我们一直非常重视安全性,但是不可能完全避免它。”

  他补充说,“好消息是我们具有好几层安全控制,核心代码一般更容易审查,而且相比普通设备驱动,有很多人对内核的关注更密切。”

  核心代码一般需要更加重视安全性,托沃兹解释说。它也完成类似验证缓冲区溢出问题的事情,因此底层文件系统或驱动一般不需要进行普通操作的大范围检查,因为这些已经由核心层来完成了。

  麦克表示,“我不认为内核的体积和复杂性增长会导致任何安全问题,内核大部分是非常模块化的,其接口设计使得驱动编写者更容易编程。他们用来扫描可能漏洞源的工具令我印象深刻。”

  普森表示,相比微软操作系统,Linux内核的安全问题要好的多。

  他表示,“在运行GNU/Linux的PC上,我目前还未看到木马和恶意软件,但在使用其它操作系统的计算机上每周都可以看到新恶意软件。我认为Linux在安全方面是最好的,但是永远保持警惕是非常有必要的。”

  由于多数攻击都是针对微软的,如果在同等条件下,Linux是否能够同样安全或比Windows更安全,目前还不清楚,汉纳表示。“我认为多数系统级安全问题被夸大了,多数严重的攻击来自于社会工程学攻击。”

  他指出,他尚未看到过非同寻常的Linux安全弱点,Linux在整体架构整合方面做的非常好,这一点可以保证实现更好的安全性。

  埃斯皮诺萨表示,从理论上来说,任何软件随着自身体积的增大,都将使其安全防护任务加重。

  然而,Linux内核的不同部分都有作者和维护者,在所有部分的代码中,都有很多人来保护其安全,因此Linux内核具有顶级安全性。

  埃斯皮诺萨称,体积难以衡量程序的质量。在Linux内核中,一个人或许无法了解所有事情,但是Linux是协作开发的自由、开源软件模范。