Kernel quality control, or the lack thereof
lwn.net
lwn.net
I switched to FreeBSD as a result of my time reading LKML. The BSDs seem, at least to me, to be more designed rather than thrown together; but maybe I just haven't spent enough time watching their sausage get made.
Hopefully now that a senior kernel developer (Chinner) is saying some of these things publicly, things can get better. But a culture change of the magnitude needed will not come quickly.
However saying that no testing happens in Linux kernel is dishonest, to say at least: there is automated tests maintained by big corporations like LTP [1] or autotest [2], thousands of people run different versions of unstable/mainline kernels with different configurations, security researches does multiple tests like running fuzzers and reporting issues, multiple opensource projects run tests in current versions of Linux kernel (that in the end also serves as a test of kernel itself), etc etc.
Linux is basically the kind of project that is big enough and impactful enough that naturally gets testing for free from the community.
That makes intuitive sense, but is it really true? Is Linux being throughly tested by the community?
>>But anything less than 100% coverage guarantees that some part of the code is not tested...
> And anything less than 100% race coverage similarly guarantees a hole in your testing. As does anything less than 100% configuration-combination coverage. As does anything less than 100% input coverage. As does anything less than 100% hardware-configuration testing. As does ...
There's just no substitute for rigorous unit and/or functional tests, constructed with an eye toward what can happen instead of just what commonly does happen in the most vanilla usage. Unfortunately, UNIX kernel development - not just Linux - has never been strong on that kind of testing. Part of the reason is the inherent difficulty of doing those sorts of tests on such a foundational component. Part of it is ignorance, which I mean as simply "not knowing" and not as an insult. Part of it is macho kernel-hacker culture. Whatever the reasons, it needs to change.
Not that I wouldn't want a featured Unix-like kernel with a comprehensive[1] test suite (and I don't know any major OS that have this, not Windows, macOS or Linux), however I think this is fine.
Common setups works fine, uncommon configurations may have some problems, with possible workarounds. Most people will not run mainline kernels anyway, so a workaround is acceptable.
[1]: What I mean by comprehensive is basically having tests for every possible configuration, that is basically impossible anyway. Probably the closest thing we can get is formally proven OS, however I don't think we will even have a general purpose OS formally proven.
Agreed. Expecting 100% across the entire kernel would be totally unreasonable. OTOH, coverage could be better on a lot of components considered individually.
Any component as complex as XFS is going to have tons of bugs. I don't mean that as an insult. I was a filesystem developer myself for many years, until quite recently. It's the nature of the beast. The problem is how many of those bugs remain latent. All the common-case bugs are likely to be found and fixed pretty quickly, but that only provides a false sense of security. Without good test coverage, those latent less-common-case bugs start to reappear every time anything changes - as seems to have been the case here. That actually slows the development of new features, so even the MOAR FEECHURS crowd end up getting burned. Good testing is worth it, and users alone don't do good testing.
[1]: different from what the name may suggest, xfstests is run in other filesystems too. Here is an example of xfstests ported to ZoL (ZFS on Linux): https://github.com/zfsonlinux/xfstests
[0]: I have had more than my fair share of user land problems, but I have come to expect that on any platform.
But that's because I intentionally stay on the "happy path" that's been tested by millions of others. I avoid changing any kernel settings and purposely choose bog-standard hardware (Dell).
When you're on the other side, you're not just maintaining the happy path. You're maintaining every path! And I'm sure it is unbelievably complex and frustrating to work with.
-----
Personally I would like software to move beyond "the happy path works" but that seems beyond the state of the art.
I also think there is a big component of this:
Operant Conditioning by Software Bugs
https://blog.regehr.org/archives/861
Over time you get trained not to do anything "weird" on your computer, because you know that say opening too many programs at once can cause a lockup. Or you don't want to aggressively move your mouse too much when doing other expensive operations. (This may be in user space or the kernel, but either way you're trained not to do it.)
There is another post that I can't find that is about "changing defaults". I used to be one of those people who tried to configure my system, but I've given up on that. The minute you have a custom configuration, you run into bugs, with both open source and commercial software.
The kernel has thousands of runtime and compile-time options, so I have no doubt that there are thousands upon thousands of bugs available for you to experience if you change them in a way that nobody else does. :)
Operant conditioning by software bugs is totally a thing, but for this particular example I was trained into exactly opposite behaviour. I do move my mouse a lot during very resource-intensive computations, because that lets me gauge the load on my system (is there UI animation lag? is there cursor movement lag?), and in extreme cases, it can tell me when there's time to do a hard reboot. I've also learned through experience that screensavers, auto-locking, and even auto-poweroff of the screen can all turn what was a long computation into forced reboot, so avoiding long inactivity periods is important.
This conditioning comes from me growing up with Windows, but I hear people brought up on Linux have their own reason - apparently it used to be the case (maybe it still is?) that some computations relying on PRNG would constantly deplete OS's entropy pool, and so just moving your mouse around would make those computations go faster.
Your lens is probably too small, Paul does a great job quantifying bug probability to more human terms in the above presentation.
I ran all OS dev and support in an environment with 10000 FreeBSD systems and 3000 Linux systems in high scale production. The ratio of kernel panics was similar (although Linux tended to exhibit additional less rigorous failure modes due to more usage of work queues and other reasons). You could expect at least a couple faults per day depending on the quality of hardware and how far off the beaten path your system usage is at this scale. The big benefit I found with FreeBSD is that I could understand and fix the bugs, and I was generally intimidated by doing so on Linux.
You might classify that as userland, but it manifests as hard lockups on suspend, resume, monitor disconnect or reconnect.
Because the Linux kernel for sure is going crazy in my new laptop. The lack of AMD support is mindblowing, to say the least.
[1] https://linux.slashdot.org/story/12/11/07/1634237/amd-closes...
Using a Dell Inspiron with AMD Ryzen CPU and AMD Vega 8 GPU.
Sometimes it just does not boot.
Sometimes it works fine for some hours, and totally locks up when I click a button in Firefox.
I don't know why you'd be surprised by this. The top kernel on kernel.org's front page is literally just Linus's personal tree. "Upstream" is context-sensitive but "mainline" has always been Linus's personal tree.
In reality, what matters to most users is what goes in to Debian stable or RHEL, and those kernels are far from just "works for me" tested.
For years FreeBSD development was very stagnant while Linux exploded in popularity and support. The comparison is silly.
Not saying which one is better, I guess everyone has preference. Although I really wish FreeBSD is more widely deployed and used.
Does the maintainer merge the code after just reading over the code and checking it compiles, never having executed it?
My assumption has always been there's little testing in such a situation - but I can't square that with the fact the kernel seems to work so well :)
It's a collaborative project. If support for your HW gets broken, you can bug someone to fix it or fix it yourself.
What I do to keep my HW working is fetch -rc1, test it, and send fixes.
I've spent a few months upstreaming a subsystem earlier last year, something that had been tested in the field, at customers, and I had to literally gut it to fit the priesthood's way of doing things. Ultimately the result that went into the kernel was technically /inferior/ to the original source, and any rant about /that/ was pointedly ignored.
I'm not even going to mention the device tree binding, which has become as bad as the high days of XML where the format took a life of it's own and requires it's own maintainers. It's completely bonkers.
I think since a lot of maintainers became 'professionals' they no longer use linux. They just juggle patches all day and talk between themselves and their clique. And as long as it fits the big tech company that pay them, it doesn't matter if it's actually /useful/ to anyone else.
I had to keep an old kernel for quite a while before that one was fixed.
It seems that a lot of the quality control happens with the distributions, not with the upstream software itself. I doubt that SLES would have seen this bug, but because I was running Tumbleweed I have to expect breakage like that.
[0] http://lkml.iu.edu/hypermail/linux/kernel/1704.3/02043.html
I did some fuzzing on filesystem tools a few years ago. xfsprogs was... "interesting". Interesting in that it was seemingly impossible to find anyone to report bugs to. They had a bug tracker, but it didn't work, submitting bugs resulted in an error. I think there was also a mail address that bounced. I think in the end my bug reports reached noone who could care about them.
- https://bugzilla.kernel.org/show_bug.cgi?id=135461
- https://bugzilla.kernel.org/show_bug.cgi?id=135451
No response...
It's exceedingly rare that a maintainer of anything would scoff at all patches from users to help fix things.
Submitting a request which says “can you clarify if this filesystem behaviour is expected?” then bringing it up two years later saying “this has been unstable for a while” does not seem like “complaining” or “beating a dead horse”.