Hi everybody,
I’ve been unable to make sense or gain better understanding of the Android update system, so I’m asking here.
Coming from the linux desktop, there’s two main parts of the system: the kernel and the userland. I could simply update the kernel without updating userland and vice-versa.
But does it work the same way on Android? Why are we so dependent on OTA updates from the individual manufacturer? I understand that microcode is proprietary and can come only from the device manufacturer, but aren’t kernel updates and userland decoupled from this (for devices which support project treble and GKI)? Can’t I just run a different FOSS launcher, get the upstream GKI kernel and run it with the microcode offered by the manufacturer?
What consists of an Android “version”? Can’t I just not update the microcode beyond what the manufacturer provides, and instead keep updating the kernel (by “kernel” I mean GKI and not the actual linux kernel) and userland and in essence keep updating my android version?
I’m probably missing some fundamental understanding of android here, which is why decided to ask here. Thanks for your help!
You can’t update the kernel because your phone isn’t running mainline Linux. The device manufacturers (which in this case mostly means chip manufactures) don’t upstream their code. All the device specific kernel drivers are only in special device specific branches. You can get the code for the drivers (because GPL) and do the work to mailine it yourself. In fact that’s what Postmarket OS does to get “proper Linux” running on phones.
I don’t understand: If I keep the proprietary driverss of the vendor in place and just upgrade to the latest GKI by Google, shouldn’t that be OK in theory? Unless the KMI itself changed and everything breaks.
Is that also how custom ROMs like LineageOS do it? My phone (Nothing Phone 1) isn’t supported anymore and it has really annoying issues that I’d like to fix by becoming the maintainer for that ROM but I have no idea how that whole thing works and where to find how to do this.
By Kernel I mean GKI