|By Richard Monson-Haefel||
|December 25, 2007 10:30 AM EST||
Ed Burnette wrote a rebuttal to my essay on "Why Microsoft Loves Google Android", which was high-spirited. Reputation bashing aside, I like high-spirited debates. My favorite quote these-days is, "Argue as if you were right, listen as if you were wrong" by Karl Weick. It's a good ground rule for any debate. It allows you to be passionate while also giving serious consideration to your opponent's arguments.
I want to apologize for my imprecise language in my original post. Ed’s misunderstanding of my thesis makes it clear to me that I didn’t explain myself very well, and I must admit that I used terminology inconsistently. I’d like to take another try at it, and this time I’ll make sure that I clearly explain the subtleties of forks, platform compatibility, and platform fragmentation. I also want to make it clear that I’m not trying to bash Android. I like Android. I’m just saying that Android is a threat to Java standards.
Is Android a fork?
First let me differentiate the Java Programming Language from the Java Platform. The Java Programming Language is a programming language syntax. The Java Platform includes the Java Language, but it’s much more than that. The Java Platform is a three-legged stool consisting of the core Java APIs (packages, frameworks, and libraries), the Java bytecode (the compiled, executable format), and the Java Virtual Machine (the runtime system that executes bytecode). Note that the language syntax is actually the least important aspect of the Java Platform. Other language syntaxes (e.g., Groovy, JRuby, JPython) can be used to write Java bytecode applications that execute in the JVM.
In order to qualify as a Java-compatible platform, a platform must implement all three of these legs as required by the Java SE or Java ME specifications. (I'm leaving Java EE out of this because it’s not germane to this discussion.) If a software distribution does not depend on or implement all three legs of the stool (APIs, bytecode, and virtual machine) then it’s not a Java Platform – it’s a fork.
Android uses the Java programming language and some of the Java ME and SE APIs, but it uses a different executable format (i.e., not bytecode) and a different virtual machine (i.e., not a JVM). You cannot take Java bytecode generated using a Java ME or Java SE environment and execute it on Android. Therefore it is a fork. That is not a value statement; it’s a fact. Perhaps "fork" is an overloaded term these days. If there is a better word for implementing some, but not all, of the required parts of a software platform – any platform - then please tell me.
May. 1, 2016 05:00 PM EDT Reads: 932
May. 1, 2016 04:00 PM EDT Reads: 877
May. 1, 2016 01:45 PM EDT Reads: 1,200
May. 1, 2016 01:30 PM EDT Reads: 783
May. 1, 2016 01:30 PM EDT Reads: 1,558
May. 1, 2016 01:00 PM EDT Reads: 1,738
May. 1, 2016 12:45 PM EDT Reads: 784
May. 1, 2016 12:15 PM EDT Reads: 2,316
May. 1, 2016 12:00 PM EDT Reads: 1,116
May. 1, 2016 11:45 AM EDT Reads: 1,485
May. 1, 2016 11:00 AM EDT Reads: 1,087
May. 1, 2016 09:45 AM EDT Reads: 994
May. 1, 2016 09:45 AM EDT Reads: 919
May. 1, 2016 07:30 AM EDT Reads: 965
May. 1, 2016 07:00 AM EDT Reads: 834
May. 1, 2016 06:30 AM EDT Reads: 2,494
Apr. 30, 2016 04:15 PM EDT Reads: 1,693
Apr. 30, 2016 02:30 PM EDT Reads: 1,726
Apr. 30, 2016 02:15 PM EDT Reads: 1,467
Apr. 30, 2016 01:15 PM EDT Reads: 689