according to http://classpath.org, they added a special exception to the GPL:
Old ClassPath Exception Clause:
"As a special exception, if you link this library with other files to produce an executable, this library does not by itself cause the resulting executable to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License."
This exception was added at the behest of Cygnus (RedHat) because they:
1) Contribute a lot of code to classpath through their involvement in the gcj project.
2) Want to be able to use Classpath in the embedded space, where 'linking' is more likely to be at a binary compiled level instead of a normal interpreted (not linked til runtime) class-relationship. It is my understanding that for the latter, the GPL was completely sufficient an non-viral. The main concern in the embedded space is that it is very hard to distribute source code there. this basically frees the embedded developer of having to distribute the source with every device. The source for the ClassPath project itself and modifications to the ClassPath source itself would still be available, however. This is my understanding of the intent. I may be wrong on the some details. If you really want to know the nitty gritty of it, there are plenty of discussions about it on the ClassPath mailing list.
New ClassPath Exception Clause:
"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."
Here is some explanation of it from the firstname.lastname@example.org MailingList by EtienneGagnon:
> Couldn't any gcj application be thought of as being "based on" the
> libgcj library? How do we know precisely what the difference between
> being "based on" and simply "using" the library is?
I'll try to answer this one. "Based on" means that you included some of Classpath's source code ("as is" or modified ) in your application. The simple act of linking with a library is considered "using" the library. Linking, here can be interpreted as "binary linking" (runtime) or even some form of compile-time linking like using Classpath as the class library for compiling your application to bytecode using Jikes.
The terms used in the Classpath exception take their source in the GNU licenses "literature". So, in the GNU LGPL preamble you can read:
[... Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. ...]