Linux 内核版本命名在不同的时期有其不同的规范,我们熟悉的也许是 2.x 版本奇数表示开发版、偶数表示稳定版,但到 2.6.x 以及 3.x 甚至将来的 4.x ,内核版本命名都不遵守这样的约定。本文就简单总结一下关于 Linux 内核版本号那点事:

Linux 内核版本号命名四个不同的阶段

  1. 从内核第一个0.01 版本发布到 1.0 版本。接下来是 0.02, 0.03, 0.10, 0.11, 0.12 (第一个 GPL 版本), 0.95, 0.96, 0.97, 0.98, 0.99,最后才到 1.0。

  2. 1.0发布之后,直到2.6版本之前,命名格式为 “A.B.C”:

    • 数字 A 是内核版本号,版本号只有在代码和内核的概念有重大改变的时候才会改变,历史上有两次变化:

      • 第一次是1994年的 1.0 版
      • 第二次是1996年的 2.0 版
      • 2011年的 3.0 版发布,但这次在内核的概念上并没有发生大的变化
    • 数字 B 是内核主版本号,主版本号根据传统的奇-偶系统版本编号来分配:奇数为开发版,偶数为稳定版
    • 数字 C 是内核次版本号,次版本号是无论在内核增加安全补丁、修复bug、实现新的特性或者驱动时都会改变
  3. 2004年 2.6 版本发布之后,内核开发者觉得基于更短的时间为发布周期更有益,所以大约七年的时间里,内核版本号的前两个数一直保持是“2.6”,第三个数随着发布次数增加,发布周期大约是两三个月。考虑到对某个版本的bug和安全漏洞的修复,有时也会出现第四个数字。

  4. 2011年5月29号,Linus 宣布为了纪念Linux发布 20周年,在 2.6.39 版本发布之后,内核版本将升到 3.0 。Linux 继续使用在 2.6.0 版本引入的基于时间的发布规律,但是使用第二个数——例如在3.0发布的几个月之后发布3.1,同时当需要修复bug和安全漏洞的时候,增加一个数字(现在是第三个数)来表示,如 3.0.18。

其它补充

  • 内核版本命名第一次使用第四个数字是在 2.6.8 的 NFS 代码中出现一个严重的错误需要立即修复,然而还没有足够多的其它改变可以发布一个新的版本(也就是2.6.9),所以,2.6.8.1 发布了,仅仅修正了那个错误。直到 2.6.11,这种版本命名策略被官方正式采纳。接着,这种通过改变第四个数字来显示修复主要bug和安全补丁而发布新内核的做法,成为一种普遍的做法。

  • 在正式发布之前,一般都冠以“待发布”(release candidates)字样,通过在内核版本的普通数字之后添加后缀 “rc”。

  • 有些时候,版本号后面有类似于 “tip”这样的后缀,表明另一个开发分支,这些分支通常(但不总是)是一个人开始发起的。举例来说,“ck” 代表 Con Kolivas,“ac” 代表 Alan Cox 等等。有时,字母和内核建立分支的主要开发领域相关,例如“wl” 表示该分支主要测试无线网络的。同时,不同的发行版也会根据需要有自己的后缀。

4.0 版本什么时候发布?

2013年11月3日,Linus Torvalds宣布发布Linux 3.12,同时还讨论了Linux 4.0发布计划:他考虑在Linux 3.19 之后发布Linux 4.0,和Linux 3.0发布策略相同,4.0并不代表着巨大变化,他只是想避免3.x 的版本号超过20,因为小版本号记忆起来比较简单。

下面是他在内核开发邮件中的原文:

we're getting to release numbers where I have to take off my socks to count that high again. I'm ok with3., but I don't want us to get to the kinds of crazy numbers we had in the 2.x series, so at some point we're going to cut over from 3.x to 4.x, just to keep the numbers small and easy to remember. We're not there yet, but I would actually prefer to not go into the twenties, so I can see it happening in a year or so, and we'll have 4.0 follow 3.19 or something like that.

按照 Linus 的发布 4.0 的预期以及现在每一个多月就更新一个版本的频率,大概在一年之内内核版本就可以变成 4.x。

内核版本分类

在 Linux 内核官网上你会看到主要有四种类型的内核版本,下图为我在2013.11.13 在官网的截图:

  1. mainline 是主线版本,目前主线版本为 3.12。
  2. stable 是稳定版,由 mainline 在时机成熟时发布,稳定版也会在相应版本号的主线上提供 bug 修复和安全补丁,但内核社区人力有限,因此较老版本会停止维护,而标记为 EOL (End of Life)的版本表示不再支持的版本。
  3. longterm 是长期支持版,目前还处在长期支持版的有五个版本的内核,分别为 3.10、3.4、3.2、2.6.34、2.6.32,长期支持版的内核等到不再支持时,也会标记EOL

查看机器使用的内核版本号

我们安装了不同的 Linux 发行版,那么如何去查看该发行版使用的内核版本号呢? 我们可以使用命令 uname -r 来查看:

[root@archlab-server2 ~]# cat /etc/issue
CentOS release 6.4 (Final)
[root@archlab-server2 ~]# uname -r
2.6.32-358.6.1.el6.i686

我测试的机器使用的是 CentOS 6.4 的发行版,显示的内核版本为 2.6.32。

参考资料

Linux 内核版本命名的更多相关文章

  1. Linux内核版本介绍与查询

    Linux内核版本命名在不同时期有着不同的规范,在涉及到Linux版本问题时经常容易混淆,主线版本/稳定版/长期支持版本经常搞不清楚,本文主要记录下内核版本命名的规则以及如何查看Linux系统版本信息 ...

  2. 【2016-08-21】Linux内核版本编号规则简介

    我们已经了解可以使用下面的几天命令来查看Linux内核版本及Ubuntu发行版本的信息: uname -r uname -a cat /proc/version lsb-release -a 等等 可 ...

  3. 查看Linux内核版本命令

    一.查看Linux内核版本命令(两种方法): .cat /proc/version .uname -a 二.查看Linux系统版本的命令(3种方法): .lsb_release -a即可列出所有版本信 ...

  4. 1.3查看Linux内核版本

    1.目前Linux内核主要维护的三个版本:Linux2.4.Linux2.6和Linux3.x,Android使用的是Linux2.6:Linux3.x是最新推出的Linux内核版本: 2.查看Lin ...

  5. 查看LINUX发行商版本与LINUX内核版本

    查看LINUX发行商版本:[root@server-mysql ~]# cat /etc/issue Red Hat Enterprise Linux Server release 6.3 (Sant ...

  6. 快速升级openwrt的linux内核版本

    一.分析 要升级openwrt的linux内核版本,关键是要制作内核配置文件 二.内核配置文件制作方法 2.1当前openwrt对应的某个开发板有对应的内核配置文件,比如此时的openwrt的linu ...

  7. Linux内核版本

    在Linux中找到/usr/src/kernels/目录,该目录下面有一个系统内核文件 例如:2.6.32-431.11.2.el6.x86_64 Linux内核版本规则 Linux内核版本有三组数字 ...

  8. 查看Linux内核版本

    您可能因多种原因需要确切知道GNU / Linux操作系统上运行的内核版本. 也许您正在调试与硬件相关的问题,或者了解影响旧内核版本的新安全漏洞,并且您想知道您的内核是否易受攻击. 无论是什么原因,从 ...

  9. 转: linux内核版本本地版本号的检查——setlocalversion

    转载:http://blog.csdn.net/adaptiver/article/details/7225980 1.   引子 编译2.6.35.7 kernel版本的时候发现,"2.6 ...

随机推荐

  1. WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】

    系列目录 上次的探讨没有任何结果,我浏览了大量的文章和个别系统的参考!决定用Cache来做,这可能有点难以接受但是配合mvc过滤器来做效果非常好! 由于之前的过滤器我们用过了OnActionExecu ...

  3. Java 哈希表运用-LeetCode 1 Two Sum

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  4. 网站实现微信登录之嵌入二维码——基于yii2开发的描述

    之前写了一篇yii2获取登录前的页面url地址的文章,然后发现自己对于网站实现微信扫码登录功能的实现不是很熟悉,所以,我会写2-3篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登 ...

  5. 现代3D图形编程学习-基础简介(1) (译)

    本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...

  6. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置

    前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...

  7. c#面向对象基础技能——学习笔记(五)委托技术在开发中的应用

    委托 delegate 1.是一种全新的面向对象语言的特性: 2.开发事件驱动程序变得非常简单: 3.简化多线程难度. 理解委托:可以理解成一个方法的指针.(接收的变量是方法) 步骤: 1.声明委托, ...

  8. 如何在一个页面添加多个不同的kindeditor编辑器

    kindeditor官方下载地址:http://kindeditor.net/down.php    (入门必看)kindeditor官方文档:http://kindeditor.net/doc.ph ...

  9. 使用Expression实现数据的任意字段过滤(2)

    上一篇<使用Expression实现数据的任意字段过滤(1)>, 我们实现了通过CriteriaCollectionHandler对象来处理集合数据过滤.通过适当的扩展, 应该可以满足一般 ...

  10. C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

    在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码,希望从更高一个层次,向大家介绍微信的应用 ...