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?