0

My knowledge about the kernel is rather limited, so please excuse if this question is on the wrong premises to start with.

On an x86 based computer like my laptop, I can install every Linux distribution that I want. There might be minor issues with WLAN cards or graphics cards, but all in all I can install every version of the Linux kernel.

Systems like Android phones and the Raspberry Pi with ARM processors cannot really do that, one has to get a special kernel. And the chip manufacturers seem to only hand out a compiled version of their drivers with one particular version of the Linux kernel. Android phones rarely get updates and the software seems stuck to the hardware like an in-car entertainment system.

The manufacturers say that maintaining their driver for different versions of the kernel would be too much work, that porting it to new versions would be too difficult. But why do they have to bundle it so tightly to a particular version that Android users cannot sensibly get an update with reasonable effort? It works on x86, right?

I wondered whether the drivers were integrated into the kernel too tightly and perhaps some breakdown into independent modules would help. Then the device manufacturers can still ship their code compiled (such that the competition cannot infer the design of their devices) but it works with different Linux versions. Since Android and Desktop Linux distributions use newer kernels for newer releases, not having those drivers for that kernel release prevents one from upgrading the whole system.

Where is the root cause for Android devices still being stuck on ancient versions?

closed as too broad by roaima, G-Man, Mongrel, Shadur, countermode Feb 8 '17 at 11:45

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

2

Copyright, patents, and other intellectual property issues is really the root cause. The hardware manufacturers won't release full details, but they will provide a binary blob. Unfortunately, the internal workings of the kernel aren't exactly stable, so for each version the binary blob has to be updated. Providing updates doesn't generate additional revenue for the manufacturer, so why pay a software engineer to make changes all the time? Same issue with the old VMWare kernel modules (at least they were open and could be patched) and NVidia-provided drivers for their video cards.

Linus has said that he doesn't care about a stable internal interface. If hardware manufacturers want their stuff to always work, they should open their code and let it get integrated into the main kernel tree.... here's a nice (old) post on it by Greg Kroah-Hartman kroah.com/log/linux/stable_api_nonsense.html

  • “Unfortunately, the internal workings of the kernel aren't exactly stable” – that seems to be the root technical cause. If there was some stable internal driver API, it would not be a problem to use the same binary blob for lots of kernel releases, right? With a microkernel, there must be such an interface? – Martin Ueding Feb 8 '17 at 11:55
  • 1
    Except Linus has said that he doesn't care about that. If hardware manufacturers want their stuff to always work, they should open their code and let it get integrated into the main kernel tree.... here's a nice (old) post on it by Greg Kroah-Hartman kroah.com/log/linux/stable_api_nonsense.html – ivanivan Feb 8 '17 at 12:02
  • 1
    The article is great! So supporting the closed-source drivers of device manufacturers over releases would require a stable API which would require old APIs to be retained. Then several parallel APIs would have to be provided, making it a mess rather quickly and substantial changes very hard. So I have to live with older Android versions but can have fast moving code on the desktop. – Martin Ueding Feb 8 '17 at 12:18
  • Yup. Unfortunately, the only tablet device I know of that used a Real Linux Kernel (and a Debian base and could point to Debian mirrors) was the old Nokia 770 and family with the Maemo OS. – ivanivan Feb 8 '17 at 12:23

Not the answer you're looking for? Browse other questions tagged or ask your own question.