嵌入式Linux中文站

Linux3.0:内核开发的模式与现状


        嵌入式Linux中文站-2011年7月22日,Linus亲自发布了Linux Kernel 3.0版本。虽然从内核的更新内容上跟普通的2.6.40没什么两样,不过版本号的修改,无疑在Linux内核20周年之际,被赋予了特殊的意义。

  20年走来,Linux内核早已不是一开始Linus单打独斗开发的模式。各个Linux相关企业的开发者和很多单独的、因为爱好而参与的开发者都被有序的组织在一起。

  下面,我们将以Linux Kernel 3.0为例,介绍一下现在的Linux内核是如何开发的。

  主干负责人:Linus Torvalds

  当下,Linux内核版本众多,每个主版本都有一个专人负责维护,叫做Maintainer。比如Kernel 2.6.32的负责人是Greg Kroah-Hartman(目前在Novell任职),Kernel 2.6.35的负责人是Andi Kleen(曾在Novell任职,目前在Intel开源技术中心)。而按照惯例,每一个最新的主分支,都是由Linus本人进行维护和发布。Linux 3.0也不例外。

  Maintainer的主要工作是将其他开发者提供的代码和补丁集成到一起,并在发布前测试修改各种bug。

  其他分支负责人

  其实Linux内核的开发模式就是一个树状模式,使用过Git的开发者们应该会比较了解。一般来说,开发者们如果要对Linux内核做一些修改,那么他首先会在Git上将Linus的主干代码复制一份,形成自己的分支。在Git系统上,每个开发者在建立的分支上进行的每一个变更都有一个单独的ID,当开发者认为自己进行的变更没有问题的时候,可以申请让主要分支的负责人将自己的变更“拉”入其负责的分支当中。

  说到这里就要说一下Linux内核目前的几个分支。最新的分支mainline里面包含最新的特性,但是由于缺乏测试,并不建议在生产环境中使用;标注stable的分支则是每一个之前发布的版本都有,进入stable之后的版本只会进行安全补丁和bug更新,不会再添加任何新特性。另外还有snapshot、linux-next等分支,里面包含了很多比较新的变更。大部分Linux发行版包含的内核都是来自stable分支,而有些发行版则会在这些分支上进行一些定制(比如红帽和Debian),当然也会有自己的负责人。

  可以说,Linux内核开发的分工模式就像一棵树一样,每一个开发者都有一条自己的分支,而且每一条分支都和主干有直接的联系。

  所以,Linux内核的开发者社区其实是一个扁平的结构,除了几条主干的负责人之外,其他上千开发者并没有什么明确的分工,大家主要以“为Linux内核贡献了多少代码”作为贡献多少的判定——也就是说,你有多少代码被接受并入了mainline或stable分支当中,你就是更加重量级的开发者。无论你的代码是关于CPU、显卡、网卡、虚拟化还是别的什么,全部一视同仁(当然,在主干维护者那里会有自己的优先级)。

  就Linux 3.0而言,在负责人Linus之下,开发者们以代码贡献情况的排名列表是:

Linux 3.0开发者们以代码贡献情况的排名列表

  左侧列表以提交变更的个数排名,右侧列表以提交变更的代码行数排名。简单的介绍一下名单里部分开发者的背景:

  K.Y.Srinivasan

  目前就职微软,贡献的变更主要针对Hyper-V虚拟驱动。虽然总共提交的变更数高居榜首(343个),但更改的代码数量只有11564行,因此没出现在右侧列表当中。

  David Miller

  目前就职红帽,贡献的变更主要针对网络子系统。

  Dan Williams

  目前就职于红帽,贡献的变更主要针对英特尔isci存储驱动,总共82466行代码。

  Jonathan Cameron

  目前在英国剑桥大学从事研究,贡献的变更主要针对工业化I/O(iio)子系统。

  Takashi Iwai

  目前就职于Novell SUSE部门,贡献的变更主要针对ALSA声卡驱动子系统。

         Larry Finger

  目前就职于Web托管网站Lwfinger.net,贡献的变更主要在于精简了rt2860sta和rt2870sta驱动的大量代码。

  Dmitry Kravkov

  目前就职于Broadcom,贡献的变更主要在于bnx2x驱动固件的更新。

  Vasanthakumar Thiagarajan

  目前就职于Atheros,贡献的变更主要在于精简了Atheros无线驱动的大量代码。

  Mauro Carvalho Chehab

  目前就职于红帽,贡献的变更主要在于移除了古老的Micronas drx397xD驱动的代码。

  这样一看,好像主要参与的开发者都来自Linux相关的公司;事实上也的确如此。在参与Linux 3.0开发的184名开发者当中,大多数来自下面列表中的几家公司:

参与Linux 3.0开发的企业

  相比之前版本的开发者参与情况,微软贡献代码数量攀升令很多人感到惊奇,不过考虑到Hyper-V应该没有那么多的变更需求,这种情况可能以后不会多见;来自非企业的开发者比重则在继续减少。

  好事还是坏事?

  站在商业化社会的角度看来,更多的企业雇员因为工作相关的原因参与Linux内核开发并非是一件坏事,这表示Linux内核作为商品的价值和可持续性。

  然而这样的后果就是,主分支对于变更的倾向性会越来越严重。Con Kolivas是一个典型的Linux爱好者,其本职工作在医院,和Linux开发没有任何关系。根据Con Kolivas的描述,他因为一开始使用Linux桌面遇到很大的性能问题而参与到社区当中,并开始自己学习内核开发;他编写的很多补丁(标注为ck的patch)都是针对Linux桌面性能优化的,而且在Linux桌面用户当中有很多受众;但是,这些补丁很少被并入到主分支当中去,因为分支维护者总是说有其他更加紧急重要的补丁需要拉入。Con Kolivas感觉终端用户在Linux内核开发的社区里面根本不受到重视,最终由于这份失落感而决定退出。

  从宏观的角度来看,Linux的主要应用领域在服务器,因此分支维护者将网络、存储、虚拟化驱动等补丁排在较高的优先级自然是无可厚非。不过从Linux桌面的角度来看,这样的发展方向无疑是很不利的,而发行版的开发者不得不自己想办法解决终端用户在桌面系统上的一些底层问题。

  这就引申到了另一个方向:在Linux桌面领域,我们需要一个与Linux内核领域不一样的贡献体系。

本文永久更新链接:http://embeddedlinux.org.cn/emb-linux/industry-news/201107/29-1410.html



分享:

评论