Richard Monson-Haefel, an analyst at the Burton group, just posted a sarcastic and inaccurate analysis of Android on the company's blog. In his article, called "Why Microsoft Loves Google's Android", Monson-Haefel claims that Microsoft should be "secretly celebrating" Google's introduction of Android. "Android is perhaps the best thing to happen to Microsoft since they won the browser wars in the 1990’s," he writes.
[ READ: Richard Monson-Haefel responds, still gets it wrong ]
Monson-Haefel, who proclaims himself "one of the world's leading authorities on Enterprise JavaBeans (EJBs)", served on the JCP Executive Committee which oversees Java specifications. Perhaps with this background, he feels he's doing Sun and the JCP a favor by attacking Android, but he's not. In fact, he has managed to get things twisted around so badly I felt compelled to write this rebuttal. I hardly know where to begin. For example he writes:
"To put it bluntly: Android as it is currently defined is a fork of the Java ME [micro edition] platform. Android is similar to the Java ME, but it's a non-conformant implementation. Android is not compliant with Java ME nor is it compliant with Java SE [standard edition]. In fact, it’s not really Java. Although it uses the Java programming language, the core APIs and the virtual machine are not consistent with the Java ME or SE platform - it’s a fork."
Right up front he's invoked the dreaded f-word of open source. Even if Android were a fork, as I've pointed out before forks aren't necessarily bad. But Android is no fork. Earlier in the article Monson-Haefel says that Java ME is "terribly fragmented". You can't fork something that is already fragmented.
Furthermore, Android does not have a line of code in common with Sun's Java ME. Being a derivative of or improvement upon an earlier version is one of the prerequisites of a fork. And besides, he says that "it's not really Java". How can something that is not Java be a fork of Java? It can't. You don't hear him calling Microsoft .NET a fork of Java, even though under his logic maybe it should be.
"From a marketing perspective the Java platform's greatest strength is standardization and multi-vendor (e.g. IBM, Oracle, SAP, etc.) support. In comparison, Microsoft .NET is a portrayed as a proprietary platform that locks-in organizations to the Microsoft platform. That's the marketing message which has been used by Java proponents for a decade and it has been extremely successful. But now, with the introduction of Android, the solidarity around the Java platform could crumble."
How in the world can you look at the 30+ vendors lined up for the Open Handset Alliance and say that is not "multi-vendor"? And speaking of solidarity around the Java platform, take a look at the Sun/IBM relationship and you'll see it's pretty crumbly already. Some see this is a weakness, but others as a strength (innovation through competition).
"If Android, as it’s currently defined, is successful then Java will no longer be consistently implemented at a fundamental level.
... Java ME is a standard that has a wealth of functionality and is supported by dozens of vendors, but it's implemented inconsistently across mobile devices."
(emphasis mine) I wonder if saying two completely contradictory things in the same article is some kind of requirement for being a successful analyst. That way, at least half of what you say will come true.
"If Android succeeds then Java on mobile devices will loose (sic) its hold on the market. Android may win, but Java ME will loose."
First of all the Android programming model is fundamentally Java. It's a subset of Java SE with some mobile and user interface stuff added on (with Linux underneath). Technical distinctions that say Android is not Java are just splitting hairs. Android doesn't claim to be Java but even Sun CEO Jonathan Schwartz calls it Java.
Now, Java ME is also a subset of Java SE with some mobile and UI stuff added. A much more restricted subset, and a much more brain dead UI, I have to say. If Android supplants Java ME, this does not harm the Java community. Especially, as Monson-Haefel argues in the next couple of paragraphs, if:
"Sun has been moving toward unifying the Java ME and Java SE platforms for a while now. ... Just take a look at JavaFX Mobile, which Sun Microsystems announced earlier this year. It's based on the full Java SE platform, not Java ME. In a nutshell Sun Microsystems isn't betting on Java ME for the long-haul, they are betting on Java SE."
Ok, so we're supposed to be upset that Android may supplant Java ME, but a slow transition from ME to SE has been underway for a while now. The Android VM and API is far closer to Java SE, so... what was the problem again?
"How do you sell people on Java? You tell them that it’s a standard used across mobile, desktop, and server applications. You tell people that the skills your enterprise developers gain writing desktop and server-side applications will translate directly to the mobile platform."
You mean like EJBs? I didn't think so. Every platform and API has its place. If you look at all the APIs ever approved by the JCP, it's incredibly huge. Only a tiny fraction of it is applicable on a mobile platform. Instead of splintering Java into ME and SE universes (which were quite different), Google had the smart idea of trimming a little off of SE and adding some things SE doesn't have. Mobile, desktop, and server programming are thus much closer under this model.
"Unfortunately Android undoes all that. It tells the industry that Java is not consistent across computing platforms and that using the Java language, but not the APIs or virtual machine is just fine as long as the end result is a workable solution."
Ah, well we wouldn't want to focus on pragmatic and workable solutions, now would we?
"That leads us to the assumption that if it works for the mobile industry then why not the desktop or the server-side? Why can't other vendors introduce platforms that use the Java programming language and some of the Java APIs, but is otherwise inconsistent with the Java platform? What's the harm of IBM or Oracle having their own version of Java as long as it works?"
I don't know where Mr. Monson-Haefel has been for the last few years but this has already happened. IBM has J9, BEA has JRockit, and Apache has Harmony, to name a few. If companies want to use the Java trademark, though, they have to pass an extremely rigorous compatibility suite created by Sun.
"Java's greatest strength today is uniformity and ubiquity. Take away uniformity and you end up with many different kinds of Java and so there is no real ubiquity. Take away ubiquity and there is very little incentive to choose the Java platform over other options like Microsoft .NET. In fact, Microsoft .NET starts looking a lot more attractive because it is consistently implemented; not Balkanized. If .NET is just as powerful as Java, why choose a solution such as Java that is inconsistently implemented across vendors? The strongest marketing asset that Java has today, 'write once, run anywhere (WORA)' standardization, is effectively lost."
If Mr. Monson-Haefel had done a little research first before making blanket statements like this, he would know that Microsoft .NET Compact Framework is not the same as regular .NET. Compared to the desktop version, the Compact Framework has some things trimmed out and some other things added in that are specific to mobile devices. Sound familiar? Android takes the exact same approach.
There is still one overall "Java platform", regardless of what the language on top is (Java, JRuby, Groovy, etc.) or the particular flavors of the API (ME, SE, EE, GWT, Android), how the code is compiled and run (JIT, AOT), or even what the bytecodes look like. The Java platform is much bigger than any one hardware platform or vendor.
Android represents an incredibly positive new injection of resources and excitement into the Java, Linux, and open source communities. It's unfortunate that a respected analyst like Mr. Monson-Haefel fails to recognize this fact.