Puoi scrivere un compilatore che implementa la specifica del linguaggio Java o scrivere una JVM che implementa la specifica Java Virtual Machine, ma quando vuoi chiamarla ufficialmente "Java", devi dimostrare che è compatibile passando i test di il TCK (kit di compatibilità tecnologica) e pagare una licenza da Oracle.
Oracle non rende facile per le altre parti farlo, però. Apache ha la propria implementazione della JVM ( Apache Harmony ) ma in precedenza Sun, ora Oracle, non ha collaborato per rendere disponibile il TCK né consentire Apache ottiene una licenza, che ha portato a molti risentimenti tra Apache e Oracle.
Molto tempo fa, Microsoft aveva la sua versione di Java (che in effetti era chiamata "Java"). Hanno provato a cambiarlo per renderlo specifico per Windows, cosa che ovviamente a Sun non piaceva. C'è stata una causa, Microsoft ha perso, ha abbandonato la propria versione di Java e ha creato .NET, che è una cosa completamente diversa che funziona molto simile a come funziona Java ...
La causa su Android non si basa affatto su questo; Google non sta dicendo che Android è Java. Quella causa riguarda i brevetti; Oracle ha brevetti su una serie di idee e concetti nella propria implementazione JVM e afferma che Google utilizza le stesse idee brevettate in Android senza ottenere una licenza di brevetto da Oracle.