回答:
Java言語仕様を実装するコンパイラーを記述したり、Java仮想マシン仕様を実装するJVMを記述したりできますが、正式に「Java」と呼びたい場合は、TCK(テクノロジー互換性キット)、Oracleからのライセンスの支払い。
ただし、他の関係者がこれを簡単に行うことはできません。ApacheにはJVM(Apache Harmony)の独自の実装がありますが、以前はSunでしたが、現在はOracleがTCKを利用できるようにすることも、Apacheがライセンスを取得することもできませんでした。
ずっと前に、Microsoftには独自のバージョンのJava(実際には「Java」と呼ばれていました)がありました。彼らはそれを変更してWindows固有のものにしようとしましたが、もちろんSunはそれを好みませんでした。訴訟が発生し、Microsoftは敗北し、独自のJavaバージョンを終了し、.NETを作成しました。これは、Javaの仕組みと同じように機能するまったく異なるものです...
Androidに関する訴訟はこれにまったく基づいていません。GoogleはAndroidがJavaだと言っているわけではありません。その訴訟は特許に関するものです。オラクルは、独自のJVM実装で多数のアイデアとコンセプトに関する特許を取得しており、GoogleはOracleから特許ライセンスを取得せずにAndroidで同じ特許アイデアを使用していると主張しています。
さて、私が理解しているように、仕様を好きなように実装できます。正当に「Java」と呼ぶには、ライセンスを取得して互換性キットを渡す必要があります。
Androidは「java」ではありませんが、java言語を使用します。TCKを渡すことさえ試みません。