Why Linux/GNU might never succeed on a large scale


I've always wanted to talk about the Linux kernel and how well it supports various hardware devices and recently I got a perfect opportunity when I was asked the following question:

"Why can't computer manufacturers work with Linux, FreeBSD and other open source developers to make their hardware work properly first time? I think we all know the answer: Microsoft has a very tight grip over the computer manufacturers and they produce everything for Windows only and dare not offer alternatives in case Microsoft increases the price of Windows or withholds technical information".

And here's my answer.

Microsoft doesn't actually force anyone to only support Windows and nothing else. If they did that that would be grounds for a massive lawsuit.

In reality, independent hardware vendors might be reluctant to support the Linux kernel due to the following reasons:

  • They cannot control their code in the Linux kernel — the Linux kernel comes with certain quality and style requirements which means drivers need to be rewritten for inclusion.
  • Linux developers regularly perform massive code changes and break APIs. These new APIs sometimes require heavy modification of the code which means a new round of QA for each new kernel release which costs a lot of money. This situation further increases the cost of maintenance (which IHVs would like to reduce to zero). Compare that to three supported Windows releases: 7, 8.1 and 10. Also consider the fact that only the display driver model substantially differs between these three Windows versions.
  • Many hardware devices don't have proper spec sheets and documentation, or such things cannot be published due to laws (e.g. HDMI algorithms, various TPMs devices, etc. etc. etc.) or out of a fear of competition which means open sourcing the drivers is not an option.
  • Linux kernel developers love to say, "release your specs and we'll write the code for you" and while it's true, too often they don't have the resources to properly debug the code on a multitude of different devices and devices combinations. More often than not they don't even have the necessary hardware! They don't have the resources to verify the code after large API changes. Consider this silly example: the mic on my laptop has been totally broken for the past five major kernel releases now (4.8-4.12) for more than a year and what I hear from Takashi Iwai (person number one in ALSA) is, "go debug the code". Just like that. So, you want to use Linux on your device? Go become a low level C programmer. Or go pay someone to do the job (if you manage to find such a person — it's not that easy I'll tell you). Linux/GNU will never be used on more than 10% of devices in the world with such an attitude. Please just don't count Android in. Android is not Linux even though it contains a highly modified Linux kernel.

Supporting Windows on the other hand is easier, cheaper and safer.

The open source development model works for standard devices like motherboards (sans ACPI and software suspend), PCI network interface cards, pointing devices, keyboards, USB buses, etc.

It's often impossible to apply to GPUs (Radeon/Intel open source drivers don't support many hardware features of respective GPUs), proprietary RAID/storage controllers, Wi-Fi adapters (which too often contain proprietary algorithms to boost the radio signal), cameras (proprietary algorithms to improve image quality), hardware sensors (proprietary algorithms to poll hardware and extract precise data), various devices which implement encryption, protection and central management and many other classes of devices (again due to laws and/or intellectual property).

This problem could have been solved if the Linux kernel had provided stable APIs/ABIs for at least five to seven years. Alas, Linus Torvalds et al. will never change their mind. You might have heard about the most successful open source company, Redhat. These guys distribute their enterprise distro with an old fixed kernel version they actually maintain, support and provide stable APIs/ABIs for at least 10 years. Enterprise loves RHEL.

We still might be happy that Linux supports so much hardware, yet we need remember that this support might be either incomplete, or limited, or buggy or any combination of above unless we're talking about the already mentioned standard devices (say, a 105 keys US keyboard without multimedia keys). You're going to laugh but a lot of keyboards (right, keyboards) aren't properly supported under Linux.

This problem can be perfectly seen in the world of Android: most Android devices run the same very old kernel version. The same very old version which Google alone supports and maintains. And Google are thinking of replacing it with their own alternative.

To summarize: in a world of "closed source" hardware it's near impossible to have a fully working open source operating system which supports all these devices properly unless you allow proprietary closed source code to exist in your kernel. It's quite possible that in a distant future Linux/GNU or some other open source operating system will run everything perfectly just because hardware vendors will run out of ideas how to differentiate their devices and all devices will have full documentation, spec sheets and support. We can only hope.


© 2017 . Last revised . The most current version can be found here.

All rights reserved. You can reproduce the entire text verbatim, and you must retain the authorship and provide a link to this document.

blog comments powered by Disqus

Return to the main page.

free counters
Viewable With Any Browser Valid HTML5! Valid CSS!

Back to top