Does Java license allow other companies to create their own versions of Java language or just implement it accurately? Same question about JVM.

I heard about Sun suing Microsoft for changing their .NET version of Java implementation and Java for Google Android, but I just can't grasp the whole concept as a totality.


You can write a compiler that implements the Java Language Specification or write a JVM that implements the Java Virtual Machine specification, but when you officially want to call it "Java", you have to prove it is compatible by passing the tests of the TCK (technology compatibility kit) and pay for a license from Oracle.

Oracle doesn't make it easy for other parties to do this, though. Apache has their own implementation of the JVM (Apache Harmony) but previously Sun, now Oracle, is not cooperating in making the TCK available nor let Apache get a license, which has led to a lot of resentment between Apache and Oracle.

Long ago Microsoft had their own version of Java (that was indeed called "Java"). They tried to change it to make it Windows-specific, which Sun of course didn't like. There was a lawsuit, Microsoft lost, quit their own Java version and created .NET, which is a completely different thing that just happens to work a lot like how Java works...

The lawsuit about Android isn't based on this at all; Google isn't saying that Android is Java. That lawsuit is about patents; Oracle has patents on a number of ideas and concepts in their own JVM implementation and is claiming that Google is using the same patented ideas in Android without getting a patent license from Oracle.

  • 2
    Apache wanted the TCK and licensing for free, which is what Sun refused (as is their right). Microsoft IMO was shafted by Sun as what they did was in line with the language spec, they created a library on top of Java to make interfacing with Windows easier. It was just poor timing that Sun was pushing out Swing at the same time. Sun cashed in on the anti-MS sentiment in US politics at the time and won. – jwenting Apr 27 '11 at 8:14
  • what do you mean by 'officially call it java'? can i modify the jvm and sell it? can i name it 'VM with java support'? – piotrek Aug 4 '12 at 23:29
  • 1
    @jwenting - what MS did was completely not in line with the Java spec. It wasn't just a "library on top of" (which would have been fine), it was a completely incompatible implementation (it didn't pass Sun's compliance tests which was a requirement to use the Java trademark). Regardless of the political situation, Sun was definitely in the right on that one. – mikera Sep 27 '12 at 9:18
  • @mikera except that MS never called it Java for that very reason... – jwenting Oct 1 '12 at 4:49
  • 1
    The problem was that MS added methods to existing Java classes, making code compiled against them incompatible with the standard classes. This would of course create lock in while the premise of Java is that it was supposed to run unchanged on any platform unchanged. – Peter Kriens May 7 '14 at 9:31

Well, as I understand it, you can implement the specification all you like - to be able to legitimately call it "Java" you have to license and pass the compatibility kit, which apparently isn't trivial.

Android is not "java" although it uses the java language. It doesn't even attempt to pass the TCK.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.