Linux 4.0-rc1 out
lkml.iu.edu
lkml.iu.edu
Linus has emitted the most elegant description of the Internet that I've ever seen.
Makes total sense :)
Much in the same manner as the AI in I, Robot.
Images and more reading: http://www.pagetable.com/?p=64
mate_2015.02.15.051456.utc-smplayer-2009-terminator-salvation-mp4_16-9.jpg
It might also be close to the end of humanity, but at least it finally terminated Windows.
Basically, some programs had issues working with Linux 3.x version numbers, so the kernel can lie to these and say that its version isn't, say, 3.0, but actually 2.6.40. This was implemented by just taking the kernel minor version number and adding 40 to it and tacking that on to "2.6."
So, the problem here is that version 4.0 has that same code, so it's also going to fake-report its version as 2.6.40 when using the UNAME26 personality.
[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.g...
How much useful code there is that cant be recompiled I dont know, but I am sure people have some, and they probably dont want to run it in an old unsupported distro.
By calling personality(2) with PER_LINUX | UNAME26, uname(2) will from then on pretend that you're actually running linux 2.6.something.
This is meant as a workaround for software you don't have the source code to and which does some crazy checks for the version, assuming it doesn't support anything but 2.6.
Here's the source of a little wrapper utility you can use to invoke such broken software with:
http://mirror.linux.org.au/linux/kernel/people/ak/uname26/un...
if kernel_version.startswith('2.4.'): DO_A else: DO_B
On the other hand, if you check for 2.6 instead of checking for 2.4... Well when it encounters 3.0 the code falls back to 2.4 behavior.
if kernel_version.startswith('2.6.'): DO_B else: DO_A
Sadly a number of binary only RAID tools don't really get updated much and have these problems. There is a program in util-linux named uname26 that you can run these tools under which gives them the 2.6.40+ version numbers.
This is just one of those tricks operating systems have to resort to from time to time, its like how Microsoft is skipping Windows 9 because of how many programs execute version.startswith('Windows 9') and assuming that means Win95/Win98.
> like how Microsoft is skipping Windows 9 because of how many programs execute version.startswith('Windows 9') and assuming that means Win95/Win98.
Has this been confirmed, or is it just internet speculation?
https://searchcode.com/?q=if%28version%2Cstartswith%28%22win...
I have not seen a single case proposed that would actually break.
So far, the arguments against it seem to have been "major numebr should go with a major new feature or breaking of compatibility", which just shows how little people know. We don't break compatibility, and we haven't done feature-based releases since basically forever.
And you'd end up with very large numbers for the minor numbers, which Linus seems to dislike.
"Uh, 2.something."
"Well, that's a span of 15 years right there. 2.what?"
"Uh, 2.6.something."
"Okay, that's a start. That narrows it down to a span of 8 years, almost a factor of two in improvement."
If they were to adopt semantic versioning, they'd NEVER bump the major version number in a hundred years. Think about this: when was the last time that changes to the Win32 API broke your application? Linux is also like that.
Even though for all of them the user space api wouldn't break. So yeah, I think the people harping on semantic versioning don't quite understand the reason its not a good fit for an os kernel.
I have no idea what Oracle or whoever will do if 2.0 ever does come out. But I doubt it ever will.
Once matured, kernels tend to never break backwards compatibility (or try very hard not to), and rarely track bug fixes with individual numbering. Often many changes are lumped into a single version update, because so many changes are already happening across many different subsystems.
I suppose also, now that I think about it, Semantic Versioning works much better for smaller scoped and smaller scale projects (like well scoped and designed libraries). The kernel is such a large piece of software almost like a collection of libraries hidden behind a single set of matures APIs that incrementing counters for every bug fix or tiny change doesn't make sense---and as has been established, major numbers would just never bump.
Why not go for a release number (e.g. r85) and a patch number for hotfixes (e.g. r85.2)?
Best would be to just go and use a year.month number. 2014.12, 2014.02, 2015.04. But ultimately, it's just a semi-unique identifier with a lot of context that one should be aware of. (And it's not like you can go and buy a Linuks 4 in stores right now, or just put it into your requirements.txt. So confusion is very minimal, it's just a "tag".)
The latest mainline 3 version of the Linux kernel is: 4.0-rc1
The latest mainline 3 version of the Linux kernel is: 3.19
The latest stable 3.18 version of the Linux kernel is: 3.18.7
The latest longterm 3.14 version of the Linux kernel is: 3.14.33Linux keeps getting more features all the time, so an asymptotic numbering scheme doesn't make as much sense.