(My intention in this post is to help by pointing out the source of the dissonance/misunderstanding/disagreement, and not to antagonize
anyone.)
my bet is 99.99% of linux users have never read a line of source. And of that 0.01 only 0.01% actually understand it. And how many of those actually have the skill to fix it ?
This shows
the fundamental misunderstanding those comfortable with proprietary software development have with open source projects:
The number of users is irrelevant.
In fact, increasing the number of users can be a huge
negative cost. I'll try to explain why below, but fundamentally, the projects do not need more users.
Open source projects are not socialist or communist at all, but
market-competitive, almost
capitalistic (except for accumulation of capital).
Absolutely everything has a cost, but it isn't money: it is
skilled developer time and effort. Until you understand this, you cannot understand how and why open source projects succeed or fail.
Now, free_electron is quite right in saying that many users repeat the same argument without understanding what it means, but that itself does not mean the sentence is invalid. It is the same thing as equating bikeshedding flamewars like "vi vs. emacs" or "Debian vs. Fedora" with technical arguments (like why the systemd architectural design is horribly weak). They are all opinions, but one often based on social or personal reasons, and the other on technical reasons. Do not judge opinions
prima facie; discuss and examine and judge them based on the reasoning behind those opinions instead.
Open source projects live and die by
skilled developer effort spent. You can consider developer skill "voltage", and combined effort spent "amperes", with analogous "power" being the resources available to the project. End users who do not contribute are a liability, a net negative, not a net positive. This (and many technical people having not-so-good social skills) is also why many open source projects are not welcoming change requests or bug reports lacking sufficient detail. As I've said many times before, the key is to
contribute first, showing that oneself is willing to spend the necessary time and effort, although some assistance from the higher-voltage/more experienced developers might be needed to get there. This is how it works. If you can get away from thinking of end users as a positive resource, and see contributor and developer skill, time, and effort spent as that same resource in open source projects, you can understand things much better.
Now, the Linux kernel has a couple of billion users. 0.01% of 0.01% is one out of hundred million, so if the estimate was correct to even the magnitude (power of ten), that would mean just twenty people understand the Linux kernel. Based on
Linux kernel CREDITS file currently listing over 600 persons, the estimate has to be off by at least one order of magnitude, possibly more.
Furthermore, even a relatively stupid drive-by debugger like myself can fix many types of bugs in the Linux kernel. I have, and have also helped other members even here to deal with kernel-specific issues. Even Linus Torvalds has commented that the kernel complexity already exceeds what a single person can fully grasp. These are the reasons that caused
Git to be created two decades ago, after all. Because of certain iron-clad rules (like absolutely no fixed kernel internal APIs; everything is subject to change), and the modular build facility (based on
Kconfig configuration language), nobody
needs to understand everything, and it is sufficient to understand the specific subsystem and how it interacts with (depends on, and is depended on by) other subsystems. That understanding has to be
abstract; just memorizing some API is not sufficient. It is also this kind of modular design that currently allows some driver development in Rust, a completely different programming language than the C used for the Linux kernel otherwise.
As the complexity of the software grows, so does the complexity of the possible bugs. Historically, C has not supported any kind of compile-time range checking, but this is already changing with GCC. For example, consider the
counted_by variable attribute, which lets you associate a size variable with a pointer, so that the compiler can detect simple buffer overruns (especially off-by-one errors) at compile time without any runtime overhead. Because of the limitations of C, many bugs in the Linux kernel have been difficult to detect: they require a relatively high skill level and very high conscientiousness to discover — noting that that bug-hunting time is taken out of more fun development time, and is thus not very interesting to most high-skilled developers. With the recent advancement in LLM tools, the conscientiousness and time needed is much reduced, so more serious bugs are reported. (Note, however, that the
skill required is not reduced. Even the Linux kernel security mailing list is battling with low-quality LLM-assisted bug reports.)
Finally:
All code has bugs. This is a practical fact arising from the complexity involved in the entire process (from human-written text or instructions, to machine-executable binaries). Security bugs are the weirdest bunch of them, simply because many people do not understand information security at all, and thus the intersection of capable developers and those understanding information security is pretty small. There are only a few software developers like
DJB that can write non-trivial code with practically zero security issues when first written; but even those require
maintenance due to compilers and conventions changing underneath the code. (The common assumption that
pointer → int → pointer conversion chain is lossless was a painful one, when transitioning from 32-bit to 64-bit architectures, for example.)
The fallacy that catches most proprietary developers is the belief in security through obscurity. Anyone can nowadays use e.g. Ghidra to decompile binaries and investigate key parts of the code, and exploit any approach that relies on obscurity. Even in microcontrollers, disabling read-back and having bus encryption is not a foolproof method: it just makes the reverse engineering process more expensive, much like patent protections for example. (A patent by itself is worth nothing, unless you have the resources to defend it in court, and take possible infringers into applicable court.)
To circle back to the topic at hand, major Linux vulnerabilities, the way to estimate the general security of the project is to examine the security bugs themselves, and find out how skilled a developer is needed to discover that bug in the first place. Statistically, from comparing the number of bugs to the number of lines of code, we already know that the Linux kernel is very much on the low side in bug
density; the question that remains is how much time and effort is needed to find a new security bug in the Linux kernel. Indeed, the Linux kernel, and many other open source projects core to many Linux distros, could use more skilled developer contributions, definitely! It's just that the number of
users is absolutely irrelevant here.