Latest version of the Debian/JAVA FAQ
Javier Fdz-Sanguino Pen~a writes:
> I'm attaching the latest revision I've had time to make to the
> Debian/JAVA faq.. I appreciate new contributions, of course,
It might be worth to add some explicit comments on the SCSL,
and why free software has a problem with Java2. Here's a rough
draft. Paul Fisher, Tim Wilkinson and others might have better
comments to share.
x. Java Licensing
x.x. What is the SCSL?
The SCSL is the "Sun Community Software License" that can
be found <here>. It is not compatible with Open Source for
several reasons, and agreeing to this license (e.g. by
downloading source covered by the SCSL) will make it
impossible for you to contribute to free software
clean-room implementations. According to Sun, this includes
using documentation and API specifications available only
To quote one open source developer, the SCSL is "about as
free as the former Soviet Union".
x.x. Why is (some) free software not implementing Java2?
Sun has made public statements in connection with their legal
strategy in the Sun-Microsoft lawsuit that indicate that the
company considers the published specifications of Java2 to be
intellectual property that can not legally be used by persons
involved in efforts to create Java2 clean-room implementations.
For this reason, some open source projects have decided to not
implement Java2 any time soon. One example is Kaffe. Some
projects (like the Japhar/Classpath project) have decided to
challenge Sun's legal position and are going ahead with Java2.
Here's alos a pet peeve of mine:
x.x. GPL or LGPL?
Java uses dynamic linking at runtime. Using the reflection
API and class loading, the linking can be completely data
driven, specifying classes and methods by name. This moves
the legal issues of using GPL'ed Java code into the user's
hands, as a violation of the GPL can not be proven from the
executable itself. Unlike plugins, Java classes do not even
have to have a specific structure to be used in such ways.
By using native methods and selecting DLL's at runtime,
this problem might also affect native code.
Example: a GPL'ed Java dependency checker using the
reflection API. Java's runtime linkage, in particular the
reflection API, blurrs the lines between code and data
even more than e.g. native plugins.
If you want to write Java code that can be used without
the user having to worry about licensing issues, consider
using the Lesser GPL (LPGL). If you want to avoid seeing
your classes and packages being used by non-free software,
put them under the GPL.