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?
Is Linux's monolithic nature (part of) the problem with ARM drivers?
linux kernel;arm
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 