12

This is a question that stems out from here: Do I have to release my code as GPL when a Java Library is GPL

It seems that the Java System libraries are licensed with a class path exception. After [attempting] to read what the class path exception is, it remains very unclear.

What is a class path exception?

2 Answers 2

7

Some of the OpenJDK code is covered by the classpath exception, documented as follows (the second paragraph constitutes the exception):

Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.

As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.

The exception means that you can link the relevant code with other code and use the license you wish, as long as you respect the license of code (modules, libraries etc.) which isn't covered by the classpath exception. As I understand it this effectively means that the license covering the code placed under the classpath exception has no effect on its use (and redistribution once linked), only on its modification.

The classpath exception is just a way of allowing users of this implementation of the Java platform (compiler, VM and libraries) to use it for projects without affecting the resulting licenses. This is typical of compilers and platforms, since most compiler and platform authors don't want their use to restrict the licenses which can apply to projects using them.

The OpenJDK itself is covered by the OpenJDK assembly exception:

Linking this OpenJDK Code statically or dynamically with other code is making a combined work based on this library. Thus, the terms and conditions of GPL2 cover the whole combination.

As a special exception, Sun gives you permission to link this OpenJDK Code with certain code licensed by Sun as indicated at http://openjdk.java.net/legal/exception-modules-2007-05-08.html ("Designated Exception Modules") to produce an executable, regardless of the license terms of the Designated Exception Modules, and to copy and distribute the resulting executable under GPL2, provided that the Designated Exception Modules continue to be governed by the licenses under which they were offered by Sun.

This just means that you can use the OpenJDK under the terms of the GPL version 2, including code in the OpenJDK which isn't covered by the GPL.

6
  • It's unfortunate that they use the terms "linking" and "static and dynamic linking" as I don't think those terms are ever used in Java development/textbooks/documentation.
    – Scooter
    Commented Oct 17, 2017 at 6:30
  • @Scooter, linking is well-defined in the Java world, see sections 12.1.2 and 12.3 of the JLS. It’s not mentioned as often as linking in the C/C++ world, true, and that’s perhaps unfortunate; and the static/dynamic distinction is rather irrelevant. Commented Oct 17, 2017 at 6:50
  • Is it theoretically possible and allowed remove this classpath exception when you fork openjdk?
    – Ini
    Commented Jan 6, 2019 at 20:23
  • 1
    @Ini see the last two sentences of the exception. Commented Jan 7, 2019 at 9:35
  • 1
    @Ini “this exception” refers to the whole paragraph which starts with “As a special exception” (“the second paragraph constitutes the exception” in my introductory text). And yes, you can copy or modify and remove the exception (although if it’s a plain copy, there wouldn’t be much point). Commented Jan 7, 2019 at 10:36
4

That is an exception used for the GPL. The GPL is pretty strict and demands that even linked code is put under the GPL. That also applies to compiler or programming languages released under the GPL.

For instance the GCC, the GNU Classpath project and OpenJDK use the GPL as license. Unmodified it would mean, every program developed with these tools would be subject to the GPL, as they link to the GCC runtime library or the Java classpath. To avoid that, these projects use a linking exception.

In the case of the GNU Classpath project and OpenJDK these linking exceptions are called classpath exceptions, as they make an exception regarding linking the classpath.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.