目前实际生产环境中使用广泛的是哪个linux内核版本?
https://www.zhihu.com/question/377943676
说道生产环境,大多数都是CentOS或者Debain或者Ubuntu.鉴于CentOS本身不做研发,这里尊重一下Linux的开发主力红帽,使用RHEL称呼它。此外广大Android手机也搭载了Linux内核,这里一并讨论(主要是高通的Soc),路由器上的Linux内核资料较少就不讨论了。
Wikipedia上的Linux版本时间线Linux的版本号命名一直在变化。上个世纪的1.x版的Linux是不维护旧版的,新版内核发布后所有人都会升级到新版的内核,因为当时的Linux内核功能的确不完整,没有人会用老内核。
2.0之后,Linux开始维护旧版本的内核,而且小版本号是偶数的内核是稳定版,奇数的内核不是稳定版。2.0.x系列维护了8年,2.2.x维护了5年,2.4.x维护了10年,2.6.x维护了12年。其中2.6系列最为特殊,因为新功能的开发也是在2.6系列上进行的,所以2.6.x里也有功能上的更改。这里面2.6.16.x是第一个非官方的LTS版本,会backport补丁,这个版本支持从2006年到2008年,2.6.27.x是第二个非官方LTS,支持从2008年到2012年。
2.6.32是第三个LTS,从2009年支持到2016年,这个版本被Debian6和RHEL6选中,因此生命周期很长,最终版本号是2.6.32.71,比最终的2.6.39还要长命(虽然后面又有2.6.33 2.6.34 2.6.35这3个LTS)。
这也能介绍为什么比较老的书会将Linux2.6,因为那时的内核版本号要看第3第4位。
到了11年,linus觉得2.6版本号膨胀下去也不是个法,因此在Linux 20周年的附近开启了3.x时代。3.x时代官方发布了LTS的模型,一些版本会作为长期支持版不断的backport安全补丁,剩下的版本则会在新版内核发布后不久被抛弃。
Linux Foundation Backs Long-Term Support Kernelswww.phoronix.com3.x时代的LTS版本的选择比较乱。3.0是一个LTS,但是只维护了2年,2011-2013.
3.2是Debian7和Ununtu12.04选中的LTS版本,2012-2018
3.4也是一个LTS,2012-2016。后面就开始乱了,3.10是第10个LTS,也是RHEL7的内核版本,虽然Linux社区从2013年维护到2017年,但是红帽还是能给这个版本续命到几年后的。
3.12是一个LTS,2013-2017,3.14也是LTS,2014-2016.
Ubuntu 14.04使用3.13,C社自己维护内核,同时使用HWE安装更新版本的内核以支持新硬件。
3.16是Debian8选择的LTS,现在唯一还在Linux官方支持内的3.x系列内核,会支持到2020年6月。
3.18是第14个LTS,众所周知,大量的2015年到2018年的Android手机使用这个内核(基本上所有14nm的Soc都在使用),虽然2019年5月发布3.18.140之后Linux不再更新此版本内核,但是AOSP仍在维护这版内核。(只是又有多少手机厂商会给2年前的手机发内核补丁呢,Google在发布Oreo的时候要求内核>=4.4, 高通给820升级到了4.4,但我没见有哪家厂商的820升级内核了)
4.x时代实际上紧跟着3.x时代。4.1是LTS,2015-2018.
4.4是一个超级LTS(SLTS),发布于2016年,SLTS面向生命周期在25-50年的产品,因此4.4预计被Linux的CIP团队维护到2026年,甚至到2036年。Ubuntu16.04 也在使用此内核。钉子户的sdm835的Android也广泛使用4.4内核
从4.4开始,LTS的版本似乎就是5个小版本号一个LTS了。
4.9被Debian9选中,Linux官方支持从2016年12月到2023年1月。sdm845使用4.9内核
4.14被Linux官方支持从2017年12月到2024年1月,高通855使用4.14内核。
Ubuntu18.04使用4.15内核,也是自己维护补丁。
REHL8 使用Linux4.18
4.19则是第二个SLTS版本,也是Debian10选择的版本。高通865的Android使用此版本内核。Linux基金会还发了一个新闻稿来宣布CIP选择出第二个SLTS:Civil Infrastructure Platform Announces New Super Long Term Support Kernel that Advances Automation, Machine Learning and Artificial Intelligence
5.4则预计是Ubuntu20.04的内核
纵观这么多版本,也只有红帽有人力财力自己维护一个内核,保证在打上安全补丁的同时还能backport一些功能和驱动,同时又不破坏ABI.
对于一本讲驱动开发的书,面向Linux2.6的确是比较落后了,因为Linux变动最大的就是驱动的API了,面向userspace的部分变动倒不是很大。很多子系统,比如drm, usb, fs, 恐怕这几年大的架构变动都能让驱动代码重写两遍了。