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


在含义上 , 新的a相当于之前的a.b , 新的b相当于之前的c , 新的c相当于之前的d 。 次版本号b的升级既包括新特性引入 , 也包括缺陷修订(Bugfix) , 修订号c的升级只包括Bugfix 。
关于每个版本的Linux内核都引入了什么新功能 , 可以参考官方的内核发行概述:
LinuxVersions - Linux Kernel Newbieskernelnewbies.org
这个阶段的重要版本有:

  • 3.6.0:开始支持龙芯1号;
  • 3.8.0:引入调度实体负载跟踪机制(PELT) , MIPS系列处理器开始支持透明巨页;
  • 3.10.0:Radeon系列显卡开始支持高清视频解码(UVD);
  • 3.13.0:NUMA调度性能大幅度改进;
  • 3.14.0:MIPS系列处理器开始支持FP64/O32;
  • 3.15.0:开始支持龙芯3A1000 , 开始支持MIPS向量扩展(MSA);
  • 3.16.0:开始引入快速排队读写锁(qrwlock) 。
  • 3.17.0:开始支持龙芯3B1500 , 开始支持MIPS硬件页表遍历器(HTW);
  • 3.18.0:开始支持用GCC5编译内核;
  • 4.0.0:开始支持在线补丁(LivePatching)和内核地址净化器(KASan);
  • 4.2.0:开始引入快速排队自旋锁(qspinlock) , 代码量达到2000万行;
  • 4.5.0:MIPS开始支持IEEE754-2008标准 , 引入CGroup_V2;
  • 4.7.0:开始龙芯3A2000 , MIPS开始支持可变长ASID、48位虚拟地址空间、可重定位内核和内核地址空间布局随机化(KASLR) , CPUFreq增加schedutil策略;
  • 4.8.0:开始支持龙芯1C , 完善支持软件MIPS KVM , 内存页回收从基于管理区重构为基于NUMA节点;
  • 4.9.0:MIPS开始引入通用内核 , 引入TCP拥塞控制算法BBR;
  • 4.12.0:MIPS支持48位虚拟地址空间和硬件虚拟化(KVM/VZ) , LivePatching使用每进程一致性模型(原来是全局一致性模型);
  • 4.13.0:开始支持龙芯3A3000 , MIPS开始支持qspinlock/qrwlock;
  • 4.15.0:开始支持RISC-V , X86引入KPTI(对付Meltdown漏洞)和Retpoline(对付Spectre漏洞);
  • 5.0.0:调度器引入EAS(节能感知)特征 , 块设备层全面切换到多队列模型(blk-mq) , AMDGPU显卡驱动支持FreeSync , 全面支持零拷贝网络 。
Linux内核的开发模式目前 , Linux内核开发处于极速演进时代 。 在代码仓库管理上 , 有主线仓库(Mainline)、稳定仓库(Stable)、未来仓库(Linux-next)和子系统仓库(Subsystem , 如Linux-mips)4大类 , 其关系如图2 。
精英联盟总队|最详细的Linux简史——Linux大神带你领略它的前世今生图2 Linux内核的四类代码仓库及其关系
绝大多数开发者所贡献的代码首先要接受子系统管理员(Maintainer)的审核 , 才能进入某个特定的子系统仓库;在进入子系统仓库以后 , 会通过未来仓库进行二次审核;二次审核通过以后 , 最后将进入主线仓库(偶尔也有跳过未来仓库 , 从子系统仓库直接进入主线仓库的情况) 。 可以说 , 代码进入子系统仓库以后才仅仅处于Alpha状态;进入未来仓库以后才算达到Beta状态;如果进入了主线内核 , 就相当于达到RC状态或者Final状态 , 算是被官方采纳了 。 通过这种多层次的严格审核 , Linux内核的代码质量得到了极大的保证 。
下面分别介绍这4类代码仓库 。
1. 主线(Mainline)仓库
主线仓库是最重要的仓库 , 其升级规则是在次版本号上面升级演进 , 两个正式版之间会发布若干个候选版(RC版) , 如:
精英联盟总队|最详细的Linux简史——Linux大神带你领略它的前世今生某一个正式版和下一个候选版之间的时期叫做合并窗口期 , 比如3.0至3.1-rc1之间就是3.1的合并窗口 。 只有在合并窗口里面才允许增加新特性 , 其他阶段只允许缺陷修订(Bugfix) 。 也就是说 , 如果开发者想让某个新特性进入到3.1内核 , 那么必须保证在3.1-rc1之前进入 , 否则就只能等待3.2的合并窗口了 。