आप एक कंपाइलर लिख सकते हैं जो जावा लैंग्वेज स्पेसिफिकेशन को लागू करता है या एक JVM लिखता है जो जावा वर्चुअल मशीन विनिर्देश को लागू करता है, लेकिन जब आप आधिकारिक तौर पर इसे "जावा" कहना चाहते हैं, तो आपको यह साबित करना होगा कि यह TCK के परीक्षणों को पास करके संगत है। प्रौद्योगिकी संगतता किट) और ओरेकल से लाइसेंस के लिए भुगतान करते हैं।
ओरेकल हालांकि अन्य पार्टियों के लिए ऐसा करना आसान नहीं बनाता है। Apache का JVM ( Apache Harmony ) का अपना कार्यान्वयन है, लेकिन पहले Sun, अब Oracle, TCK को उपलब्ध कराने में सहयोग नहीं कर रहा है और न ही Apache को लाइसेंस मिल रहा है, जिसके कारण Apache और Oracle के बीच बहुत अधिक नाराजगी है।
बहुत पहले Microsoft के पास जावा का अपना संस्करण था (जिसे वास्तव में "जावा" कहा जाता था)। उन्होंने इसे विंडोज-विशिष्ट बनाने के लिए बदलने की कोशिश की, जिसे सन ऑफ कोर्स पसंद नहीं आया। एक मुकदमा था, माइक्रोसॉफ्ट हार गया, अपने स्वयं के जावा संस्करण को छोड़ दिया और .NET बनाया, जो पूरी तरह से अलग बात है कि बहुत कुछ काम करता है जैसे कि जावा कैसे काम करता है ...
Android के बारे में मुकदमा इस पर आधारित नहीं है; Google यह नहीं कह रहा है कि Android जावा है। वह मुकदमा पेटेंट के बारे में है; ओरेकल के पास अपने स्वयं के जेवीएम कार्यान्वयन में कई विचारों और अवधारणाओं पर पेटेंट है और दावा कर रहा है कि Google ओरेकल से पेटेंट लाइसेंस प्राप्त किए बिना एंड्रॉइड में समान पेटेंट विचारों का उपयोग कर रहा है।