Você pode escrever um compilador que implementa a especificação da linguagem Java ou uma JVM que implementa a especificação da Java Virtual Machine, mas quando você oficialmente deseja chamá-la de "Java", deve provar que é compatível passando nos testes do TCK ( kit de compatibilidade de tecnologia) e pague por uma licença da Oracle.
A Oracle não facilita para outras partes fazer isso, no entanto. O Apache possui sua própria implementação da JVM ( Apache Harmony ), mas anteriormente a Sun, agora Oracle, não está cooperando na disponibilização do TCK nem permite que o Apache obtenha uma licença, o que levou a um grande ressentimento entre o Apache e o Oracle.
Há muito tempo, a Microsoft tinha sua própria versão do Java (que era realmente chamada de "Java"). Eles tentaram alterá-lo para torná-lo específico do Windows, o que a Sun obviamente não gostou. Houve um processo, a Microsoft perdeu, saiu da própria versão Java e criou o .NET, que é uma coisa completamente diferente que funciona muito parecido com o funcionamento do Java ...
O processo sobre o Android não é baseado nisso; O Google não está dizendo que o Android é Java. Esse processo é sobre patentes; A Oracle possui patentes em várias idéias e conceitos em sua própria implementação da JVM e alega que o Google está usando as mesmas idéias patenteadas no Android sem obter uma licença de patente da Oracle.
Bem, pelo que entendi, você pode implementar a especificação como quiser - para poder legitimamente chamá-la de "Java", é necessário licenciar e aprovar o kit de compatibilidade, o que aparentemente não é trivial.
O Android não é "java", embora use a linguagem java. Nem tenta passar no TCK.
fonte