Java and patents
The situation is a little complicated, but there are pieces of good news.
For a comparative analysis, see comparison of Java and C-sharp.
OpenJDK: the GPLv2 Java from Oracle
OpenJDK is has been distributed by Oracle under GPLv2. GPLv2 includes two implicit patent licences, so users of OpenJDK should be safe, and modified versions of OpenJDK should also be safe (even if they're heavily modified).
The protections in the GPL are unconditional. The software doesn't have to comply with any specifications in order to benefit from these protections.
In addition to GPLv2, OpenJDK comes with further permission (called the "Classpath exception") to link with other software. This further permission applies to OpenJDK with the exception of some libraries that are part of the JavaME specification and which are aimed at mobile phones. This further permission does not affect the patent protection or risks of Java. It's only impact is that it may limit the choice of licences for software that uses the JavaME libraries to which the Classpath exception doesn't apply.
What exactly was distributed under GPLv2
"Java" can mean many things. The language, "the" platform, the set of platforms. We know "Java" has been distributed by Oracle under the GPLv2 and/or CDDL, and is covered thus by an implicit patent grant, but it's important to look at how much "Java" is distributed by Oracle under these licences.
It seems the answer is: almost everything.
These software packages have been distributed by Oracle under GPLv2.
- Java Standard Edition (SE): Sun's OpenJDK.
- Java Micro Edition (ME): Sun's reference implementation "PhoneME"
- Java Enterprise Edition (EE): Oracle's GlassFish Server Open Source Edition 
- IDE: NetBeans
NetBeans and Glassfish are dual-licensed GPLv2 and CDDL, to the patent grants of both licences are available.
There are four "editions" of Java[reference needed]: Standard, Micro, Enterprise, and Card. The first three are in the above list. (Can you help? Anyone know of a version of Java Card distributed by Oracle under GPLv2?)
- libgcj (this includes both the core class libraries and the runtime for both running native and/or mixed interpreted byte code classes)
- boehmgc (the garbage collector)
- Eclipse Compiler for Java (ejc - transforms java source files to java byte code - can be used by gcj in newer versions)
- GCC (gcj can transform java source files to java byte code and either source or bytecode to native code directly)
- The GCC source package they link to includes GCJ, but the description they give is The GNU cc and gcc C compilers. Does the description restrict the coverage to exclude GCJ, or is the description just a non-exhaustive summary? It is just a non-exhausitve summary, it is the actual source that is covered. See the definition "Linux Environment Component" - shall mean any of the software packages whose released source code shall be identified on the OIN website, or a Predecessor Release or Successor Release of any of such packages, including bug fixes and error corrections thereto.
The Java Language Specification grant
This is a patent grant from Oracle, but only for implementations of Java that fully comply with the Java Language Specification. Supersets, subsets, and other modified versions don't qualify for this patent protection.
From the Java Language Specification:
Sun Microsystems, Inc. (SUN) hereby grants to you a fully paid, nonexclusive, nontransferable, perpetual, worldwide limited license (without the right to sublicense) under SUN's intellectual property rights that are essential to practice this specification. This license allows and is limited to the creation and distribution of clean room implementations of this specification that:
(i) include a complete implementation of the current version of this specification without subsetting or supersetting;
(ii) implement all the interfaces and functionality of the required packages of the Java 2 Platform, Standard Edition, as defined by SUN, without subsetting or supersetting;
(iii) do not add any additional packages, classes, or interfaces to the java.* or javax.* packages or their subpackages;
(iv) pass all test suites relating to the most recent published version of the specification of the Java 2 Platform, Standard Edition, that are available from SUN six (6) months prior to any beta release of the clean room implementation or upgrade thereto;
(v) do not derive from SUN source code or binary materials; and
(vi) do not include any SUN source code or binary materials without an appropriate and separate license from SUN.
SCO's Java patent
SCO, during bankruptcy, put a Java patent (called "Perk-Up" in some documents) up for sale. Groklaw reported in April 2010 that it was due to be sold to Allied Security Trust (AST) and that the bankruptcy courts had OK'd the proposed say. (Can you help? Did the sale go ahead?)
AST usually buys patents, licenses them to their members, and then sells them on. If AST sells this patent on, there could be a risk for everyone that isn't a member of AST. However, this patent has never been a source of threats or even speculation.
Related pages on ESP Wiki
- Free and Open Source Java - FAQ, Sun (Original was at http://www.sun.com/software/opensource/java/faq.jsp)
- AST expected to buy Java patents for $100,000, 16 Apr 2010, Groklaw
- "phoneME Project Licensing Page". https://phoneme.dev.java.net/licensing_page.html. "The majority of phoneME project code is released under the GNU General Public License Version 2 (GPLv2). Before downloading phoneME software, you should become familiar with the GNU General Public License Version 2 (GPLv2). Some binary components are also covered by the Binary License for phoneME Project."
- "Sun's patent grant for JAVA PLATFORM, STANDARD EDITION ("Specification")". http://java.sun.com/javase/6/jdk-6u21-doc-license.txt.