What is the main reason that you can't upgrade your phone to new Android version?
Is it the lack of drivers, or simply hardware limitation? Are there other aspects?
Android Enthusiasts Stack Exchange is a question and answer site for enthusiasts and power users of the Android operating system. It only takes a minute to sign up.Sign up to join this community
Somebody needs to write and test the drivers and core apps. That's all.
Most applications that are written for Dalvik (i.e. most apk programs) are pretty portable across different Android versions, but not so much for core programs that were written in C, the Linux kernels and drivers, and the Dalvik VM itself. At the very least, these programs need to be recompiled; occasionally, the new Android version may require new capabilities from the drivers, and someone will need to write the code for them.
Additionally, for official releases, manufacturers and carriers often adds value-added customizations; these customizations need to be ported, tested, and often debugged against the new framework. In deciding whether to write upgrades, manufacturers (and to certain extent, carriers) faces a dilemma, they make better profit by selling to you a new device instead of writing upgrades for free, but poor upgrade history will put off customers as well; so they will often drop support for older phones and only write one or two version upgrades at most.
Hardware limitation has never been a problem for upgrades. While it's certainly true that certain new features might have a much higher hardware demand than older phones can conveniently handle (e.g. Live Wallpapers), these features are usually either disabled or left to give sub-optimal experience.
Other limitation is space limitation. Some phones have very small internal memory, and Android tends to get larger for every upgrade. To port newer versions for these phones, some sacrifices has to be made; whole libraries may be left out (e.g. who needs the NFC on a G1?). These modifications needs to be written and tested.
Your device will run any version of Android, even if your carrier or manufacturer won't have a official update available you can check out XDA-Developers and get an unofficial ROM, that are a lot better in my opinion.
For an example, the HTC G1 that everyone knows that is a bit slow and out-dated, but was the first device to get an unofficial port of Android Honeycomb for it, even if it was made only for tablets the developers manage to get the screen resolution working and the other stuff that wasn't compatible.
Another example I that I have: I had a HTC Touch Pro2 that by stock runs Windows Mobile 6.1, I've installed a unofficial ROM first(called Simplicity ROM), so I was running the latest build of Windows Mobile 6.5 and within Sense 2.5, so I bought my first Android phone. And some time after the XDAndroid developer team released a Android port for my device, and now I use it too, but on Android.
My first Motorola Milestone is running a custom Android 2.3 Gingerbread ROM, even that my carrier haven't released any official ROM for it. It runs very stable and it's a lot better than the 2.1(stock default) and the 2.2(custom too). So there are no problems if you can flash custom ROMs.
Right now Gingerbread and Honeycomb use hardware acceleration for graphics. While it could be done without, phones that lack GPUs that can do this will not see these version.
To be Google Certified devices must be able to launch core apps within a certain amount of mili-seconds.