Java ME Fragmentation vs Android Fragmentation

java.gifJames Gosling (the original designer of Java) has an interesting post on comments to his previous blog entry about Google, Oracle and Java.

When asked why Android works well across many phones while Java ME didn’t, he says that…

"Today’s high end phones have an incredible amount of RAM and CPU, which makes interoperability hugely easier for Android."


"Differences will creep in as the Android world ages: version skews, different bug fixes, and the handset makers attraction to ‘added value’ and ‘product differentiation’ will all take their toll without strict governance"

While I agree and have previously written about difference creep, I am not sure how more powerful phones necessarily make phones more interoperable.

I worked at Symbian for a year, on the Symbian Java VM, towards the end of it’s life and these are the things that I think are the main contributors to Java ME fragmentation…

– Differences in hardware. Almost all smartphones (not just Android phones) have converged on a very similar high specification. I’d say this similarity of phones has aided Android interoperability as opposed to them necessarily being powerful.

– Differences in JVM implementation. Different Java ME phones use a variety of JVMs that have interpreted the JSRs (specifications) in different ways. Android has one JVM so there are no differences across phones for a given JVM version.

– Bugs in JVM implementations. Again, the variety of Java ME JVMs implementing the same specification allows different ones to exhibit different bugs.

– Differences between successive versions of JVMs. Java ME and Android both suffer from this but Android less so because some phones can be upgraded to later OS (and JVM) versions.

– Additions to the official SDK APIs. This is part of the difference creep ("added value" and "product differentiation") James refers to. On any platform, additional APIs tend to be ignored by the majority of developers as they restrict the market for an application. Very few apps need or use these APIs. There’s a disincentive to use them.