8

When looking at kernel version numbers installed in /boot using a work in progress command (find /boot/vm* -printf "%A@ %p\n") I see:

1469098968.0000000000 /boot/vmlinuz-3.13.0-92-generic
1477523408.0000000000 /boot/vmlinuz-3.2.0-113-generic
1476549941.0000000000 /boot/vmlinuz-4.4.0-43-generic
1477008540.0000000000 /boot/vmlinuz-4.4.0-45-generic
1470540722.0000000000 /boot/vmlinuz-4.6.3-040603-generic
1471805944.0000000000 /boot/vmlinuz-4.7.1-040701-generic
1472208664.0000000000 /boot/vmlinuz-4.7.2-040702-generic
1473382012.0000000000 /boot/vmlinuz-4.7.3-040703-generic
1474853146.0000000000 /boot/vmlinuz-4.7.5-040705-generic
1475960925.0000000000 /boot/vmlinuz-4.8.1-040801-generic
1477145804.0000000000 /boot/vmlinuz-4.8.4-040804-generic

What are the proper names for "w.xx.y-zzz" that follows the vmlinuz prefix?

The proposed duplicate link (What does the fourth number in the release version mean?)states the second segment is called the ABI Number. The answer below by muru states the fourth segment is the ABI Number however I believe both are wrong based on the links provided in my own answer below.

Keep in mind this question is about ALL four segments w.x.yy-zzz and not just the fourth segment zzz.

6
  • Ubuntu and mainline kernels are mixed here. So the question makes no sense.
    – Pilot6
    Oct 29, 2016 at 17:35
  • 1
    @Pilot6 that is focused on fourth segment, but I was more interested in first three segments, ie Kernel Version, Major Revision and Minor Revision are the important terms for everyday usage. Oct 29, 2016 at 17:43
  • 1
    Your answer is wrong. Kernel 3.19 and 4.0 are not different "kernel versions". They are just consecutive kernel versions. And 4.1 is not a "major revision" of 4.0. The duplicate answer gives the correct explanation that "4.4.0" is the "base kernel version".
    – Pilot6
    Oct 29, 2016 at 17:51
  • @Pilot6 I've revised my question. The ABI number in the duplicate is defined as the second segment. The ABI number in muru's answer below is defined as the fourth segment. Both ABI's I believe wrong with the link provided in the answer below: ABI timeline. Oct 30, 2016 at 1:04
  • You mixed Ubuntu and manually installed mainline kernels in one system. That is why you have -040804, etc. It looks like you did not understand that Ubuntu kernels and mainline kernels are different.
    – Pilot6
    Oct 30, 2016 at 7:42

2 Answers 2

10

Calling w the version, x the major revision and y the minor revision is semantic versioning using change significance. Linux hasn't used that semantic versioning in a long time. Until 2003, Linux used odd-even versions (odd numbers are unstable, even numbers are stable). And then came 2.6, which lasted a geological age in software terms (till 2.6.39, 8 years).

Then, pretty much arbitrarily, Linus bumped the version to 3.0. And that ended all of that semantic versioning's applicability to Linux versions. And when 3.20 was due, Linus switched to simply incrementing w whenever x got large enough that he ran out of fingers and toes to count it.

So, now, the kernel version is just w.x, the y from upstream indicates a patch released - Ubuntu just keeps it 0, and z, as already noted, is the ABI number.

3
  • 1
    Ubuntu versioning is slightly different. The patch versions are not displayed.
    – Pilot6
    Oct 29, 2016 at 18:22
  • @Pilot6 ah, yes. Corrected.
    – muru
    Oct 29, 2016 at 18:24
  • Love Linus comment running out of fingers and toes. Ironically I felt odd-numbers as "lucky". I had 4.8.1 and 4.8.3 installed and felt installing 4.8.4 would be "unlucky". No problems with 4.8.4 so far though. Oct 29, 2016 at 18:46
7

Kernel Version . Major Revision . Minor Revision - Patch

Using w.xx.y-zzz and looking at the fourth file listed /boot/vmlinuz-4.4.0-45 we can say:

  • w = Kernel Version = 4
  • xx= Major Revision = 4
  • y = Minor Revision = 0
  • zzz=Patch number = 45

If someone is using 4.8.0, which Ubuntu 16.10 ships with, and encounters screen flickering they might say "I used the previous version 4.4.0-45" (which Ubuntu 16.04 uses) to fix the problem.

In layman's terms, this is correct but technically it was a downgrade four major revision levels (4.8.y-z) to (4.4.y-z). Technically speaking, to move from kernel version 4.8 to a previous kernel version it would have to be 3.2 or 3.13 using the file listing shown in the OP.

Segment name changes after Kernel 3.0

The above definitions come from: (Kernel Version Numbering) published May 9, 2006 but are now obsolete.

As the duplicate comment link (What does the fourth number in the release version mean?) states, the new names are:

<base kernel version>.<ABI number>.<upload number>-<flavour>

The proposed duplicate appears to be wrong because the second segment in the kernel version number seems to have nothing to do with ABI. In the other answer posted in this thread the fourth segment is tied to ABI but that doesn't seem right either. Here's the top of the list of ABI changes from (Linux Kernel ABI Timeline):

                ----- Symbols -----
Version Date    Added Removed Total
4.8.1   2016-10-07  141 50  1470
4.7.2   2016-08-20  170 42  881
4.6.1   2016-06-01  159 52  924
4.5.6   2016-06-01  146 41  994
4.4.5   2016-03-10  87  40  994
4.3.6   2016-02-20  166 51  1231
4.2.8   2015-12-15  213 75  1768
4.1.19  2016-03-05  204 88  1760
4.0.9   2015-07-21  159 53  822
3.19.8  2015-05-11  207 44  1146
3.18.28 2016-03-05  147 56  867
3.17.8  2015-01-08  165 46  688
3.16.7  2014-10-30  155 55  943
3.15.10 2014-08-14  129 98  1051
3.14.64 2016-03-10  279 91  1019
3.13.11 2014-04-23  140 99  822
3.12.56 2016-03-04  171 77  994

ABI number

From wiki.ubuntu we learn:

ABI stands for Application Binary Interface. For the kernel, this boils down to the exported functions that modules (AKA drivers) can use to do things in kernel space. Most of these exported functions are available directly from the kernel (vmlinux), but a good portion is also exported from other modules. These functions allow modules to make use of subsystems in the kernel for memory management, device interfaces, filesystems (VFS), networking stacks, etc.

Summary of Linux Kernel Version Numbering

From perhaps the most definitive source (wikipedia.org - Linux Kernel Version Numbering) we learn:

The Linux kernel has had three different numbering schemes. To summarize:

  • The first scheme was used in the run-up to "1.0". The first version of the kernel was 0.01. This was followed by 0.02, 0.03, 0.10, 0.11, 0.12 (the first GPL version), 0.95, 0.96, 0.97, 0.98, 0.99 and then 1.0.[303] From 0.95 on there were many patch releases between versions.
  • After the 1.0 release and prior to version 2.6, the number was composed as "a.b.c", where the number "a" denoted the kernel version, the number "b" denoted the major revision of the kernel, and the number "c" indicated the minor revision of the kernel.
  • In 2004, after version 2.6.0 was released, the kernel developers held several discussions regarding the release and version scheme[304][305] and ultimately Linus Torvalds and others decided that a much shorter "time-based" release cycle would be beneficial.
4
  • @MarkKirby thank you very much. I'll change "patch" to ABI in the answer. Oct 29, 2016 at 17:33
  • 3
    This answer is fundamentally wrong. Kernel version 4.4 does NOT mean (kernel version 4, major revision 4). It is kernel version 4.4. Linux kernel versions differ from other software. In ubuntu kernels the "y" is always 0, etc. So all is wrong.
    – Pilot6
    Oct 29, 2016 at 17:50
  • @Pilot6 reading the answer in the duplicate... I'm getting that feeling as you suggest. However Linux itself gave me the Major/Minor/Patch: linfo.org/kernel_version_numbering.html Oct 29, 2016 at 17:51
  • 1
    @WinEunuuchs2Unix Linus threw out the version-major-minor thing the day 3.0 came out and they switched to more rapid version number changes.
    – muru
    Oct 29, 2016 at 17:53

Not the answer you're looking for? Browse other questions tagged .