The TCK Trap 07 Dec 2010
You want to fork the OpenJDK. You look at the license, see that it is GPLv2, say “woot!” and start hacking. You add the important optimization to your fork which you need, and now want to release it.
If you don’t care about calling it Java, you can, under copyright law and the GPLv2, just cut the release, publish it, and go about your business. The catch is that there are tons of patents all over the JVM, and the GPLv2 does not include any patent protections. So, while you are clear from a copyright point of view, anyone that has contributed intellectual property to the JVM/JDK, ever, is free to sue both you and anyone using your distribution for infringing any patents they hold on their contributions. Aside from breaking the law, getting yourself, and your users, sued is not generally a good thing, so we look at option number two, passing the TCK.
Passing the TCK, which is a suite of tests used to verify correct implementation, grants you patent rights to everything folks have contributed to the Java spec over the years. So, you apply for the TCK and Oracle will give you the TCK at no charge, though it will be under NDA and will tell you that the TCK cannot be used to verify that your implementation is okay on embedded devices, such as mobile phones, kiosks, or cash registers.
You smile, nod, and run the TCK, tweak some stuff in your code and behold, it passes! Now you have a problem. You can make a release which includes the patent protections (you passed the TCK) for some usages, but not for other usages (say, in a kiosk or cash register, or mobile phone). If you say “you may not use this in those cases” you are violating the GPLv2, which does not allow you to put those kinds of restrictions on your release. If you don’t put those restrictions in place you are violating patent law and open yourself, and your users, up to patent infringement lawsuits as the TCK license you were granted specifically excludes certification on them.
So, you have a choice when you publish your release, you can violate copyright law and not abide by the GPLv2, or you can violate patent law and not have rights to patents you knowingly infringe.
Welcome to Java.