For Linux based devices (including Android devices), a lot of the problem is lack of support for the device in Linux mainline. Devices that are supported in Linux mainline generally get updates pretty much forever (think your laptop). Of course, getting mainline support is a lot of work that is costly.