精英联盟总队|最详细的Linux简史——Linux大神带你领略它的前世今生( 二 )


Linux内核发展简史Linux内核从最初发布的0.01版直到4.4.x版 , 经历了“史前时代”“奇偶时代”“快速演进时代”和“极速演进时代”四个阶段(如图1所示) 。
精英联盟总队|最详细的Linux简史——Linux大神带你领略它的前世今生图1 Linux内核版本演进图
1. 史前时代(0.01~1.0.0)
版本更迭过程为:
精英联盟总队|最详细的Linux简史——Linux大神带你领略它的前世今生其中重要的版本有:

  • 0.01:第一个版本;
  • 0.02:第一个公开发布的版本;
  • 0.11:《Linux内核完全注释》使用的版本 。
2. 奇偶时代(1.0.0~2.6.10)
这个时期的版本号用a.b.c表示 , 其中a为主版本号 , b为次版本号 , c为修订号 。
版本号变更的原则是:发生重大改变时升级主版本号 , 发生非重大改变时升级次版本号;次版本号为奇数表示开发版 , 次版本号为偶数表示稳定版;稳定版和开发版在修订号上各自升级演进 , 开发版达到稳定状态时 , 发布下一个稳定版 。
比如1.0.x在尽量不引入新功能的前提下不断升级;同时1.1.x在不断开发新功能的状态下不断升级;当1.1.x的开发到足够稳定时 , 转变成1.2.x成为稳定版;同时新的开发版1.3.x诞生……
稳定版:1.0.x, 1.2.x, 2.0.x, 2.2.x, 2.4.x, 2.6.x
开发版:1.1.x, 1.3.x, 2.1.x, 2.3.x, 2.5.x
其中重要的版本有:
  • 1.0.0:第一个正式版本 , 支持模块化 , 开始支持网络;
  • 1.2.0:开始支持非X86架构;
  • 2.0.0:开始支持对称多处理(SMP);
  • 2.2.0:开始被各种发行版大规模应用;
  • 2.4.5:开始有“中国制造”的代码(如LVS等);
  • 2.4.18:《深入理解Linux内核(第2版)》所使用的版本;
  • 2.6.0:开始响彻天下:完全可抢占 , O(1)调度器 , SYSFS , X86_64支持 , NUMA支持 , NPTL支持……
3. 快速演进时代(2.6.11~2.6.39)
从2.6.11开始 , Linux内核界发生了两件大事:第一件大事是抛弃了BitKeeper , 转而开始用git管理源代码;第二件大事是抛弃了奇偶版本法 , 转而使用a.b.c.d表示 , 其中a为主版本号 , b为次版本号 , c为主修订号 , d为次修订号 。 主修订号c的升级既包括新特性引入 , 也包括缺陷修订(Bugfix) , 次修订号d的升级只包括Bugfix 。
这个阶段开发速度加快 , 版本号即便第三段相邻 , 差别也很大 。 在奇偶时代 , 2.4.5和2.4.6的差异不是很大;而在快速演进时代 , 2.6.36和2.6.37的差别会非常大 , 甚至堪比2.4.x和2.5.x之间的差异 。
在演进如此迅速的时代 , 如果继续采用奇偶版本法会有什么问题?
首先 , 2.7版本开发持续时间会很长 , 不到2.8发布时 , 2.7加入的新特性无法得到利用 。 其次 , 2.7版本新特性同样很难后向移植(Backport)到2.6 , 因为代码差异太大 。
这个阶段的重要版本有:
  • 2.6.11.0:《深入理解Linux内核》第三版所使用的版本;
  • 2.6.20.0:开始支持KVM虚拟化技术;
  • 2.6.23.0:开始支持龙芯2E , 引入CFS调度器;
  • 2.6.24.0:i386和x86_64合并成x86架构 , 缺省使用SLUB内存分配器;
  • 2.6.33.0:开始支持龙芯2F , 在MIPS系列处理器上支持内核压缩;
  • 2.6.38.0:引入AutoGroup机制 , 大幅提升桌面应用体验 , 引入透明巨页(THP) 。
4. 极速演进时代(3.0~5.x)
在快速演进阶段 , 内核版本号的a.b一直保持为2.6没变 , 完全可以合二为一 。 与此同时 , 参与Linux内核开发的个人与单位越来越多 , 开始进入极速演进时代 。 在这个阶段 , 版本号回归a.b.c表示法 , a为主版本号 , b为次版本号 , c为修订号 。