Subject: *GPL oddity with java
From: Roger Fujii <rmf@lookhere.com>
Date: Sun, 29 Aug 2004 03:33:45 -0400

Having spent a little too much time thinking about this recently, I figure 
I'd ask for a 2nd/3rd... opinion.

I think I pretty much understand the mechanism used for *GPL.
However, the application of these licenses to java has always
been very unclear.  FSF had in the space of ~1 year had 4
positions on the application of LGPL to java:

  (the ambiguous default) 
  (LGPL not allowed)       http://article.gmane.org/gmane.comp.jakarta.poi.devel/5900
  (default (reiteraton) )  http://developers.slashdot.org/comments.pl?sid=71522&threshold=0&commentsort=0&tid=117&mode=thread&cid=6467558
  (explictly allowed (#2)) http://interviews.slashdot.org/interviews/03/02/20/1544245.shtml?tid=117&tid=123

therefore, they are not necessarily the best source to figure what applies.

So, the best thing to do is read the licenses.  Here are the givens:
   we have: non-*GPL app A
            LGPL unmodified jar B,
            GPLed version of B called C (keep the same API).
   Java has a compiler, and a runtime-linker/interpreter - the
      only linking phase is done at execution time.
   The copyleft state is binary (it either applies or not applies ) to A.

If B does NOT trigger a copyleft of A, then the following is true:

#1 http://www.fsf.org/licenses/gpl-faq.html#OOPLang doesn't apply.
   That is, object extension doesn't cause derivation (as *any*
   derivation would no longer make it "a work that uses the library"
   thus causing a copyleft of A to occur).

   Section 5, p2 doesn't apply, since we haven't linked, nor created
   an executable (not that java needs one), nor does it contain any
   portions of B - at least, not until we try to execute it.
   Java bytecodes are like C .o files. 

   A fulfills the definition of "work that uses the library" 
   in isolation (sec 5, p1), so you do not have to exercise
   Section 6, not that section 6 would be of any use, as
   we do not have to combine or link with the Library anyway
   until runtime.
  
#2 If B does trigger a copyleft of A, then the only possible trigger
   would be that object extension DOES cause a derivation.

Now, here's the query.  If #1 is true, then it seems like GPLed C 
cannot trigger a copyleft of A.  Why?  A has no derivative
code, and the only possible cause (object instantiation) is
ruled out (since it would force #1 to be false, which we say is
true in this case).  

If #2 is true, the LGPL becomes equivalent to GPL since you
can't exercise Section 6 of the LGPL (since it is a derived
work, and not a "work that uses the library").

So, one of the licenses doesn't do what you think it is supposed
to do.  Any flaw in this reasoning?

-r