LGPL and Java - More confused than ever

(Back in 2003 I ran a moderately popular tech blog on the Radio UserLand platform. This is an archived version of a post from that blog. You can view an index of all the archived posts.)

Friday, 18 July 2003

After reading the various comment threads, and seeing Andy and David's exchange in a bit more context, I'm more confused than ever.

As quoted by Andy, Roy wrote:

What the FSF needs to say is that inclusion of the external interface names (methods, filenames, imports, etc. defined by an LGPL jar file, so that a non-LGPL jar can make calls to the LGPL jar's implementation, does not cause the including work to be derived from the LGPL work even though java uses late-binding by name (requiring that names be copied into the derived executable), and thus does not (in and of itself) cause the package as a whole to be restricted to distribution as (L)GPL or as open source per section 6 of the LGPL.

and Andy asked:

Is this statement true with regards to the use of LGPL Java libraries by non-LGPL Java libraries?

To which David replied:

If I understand the statement correctly, yes -- that's exactly what section 6 is for.

Seen in context, my reading is that LGPL does not infect Java code that simply references, invokes methods of, or extends an LGPL'ed class. Brad Kuhn's comments mentioned in the slashdot "update" seem to be reiterating that position. I see this as saying all of my examples are not infectious. Joe's comments on that post focus on the word "distribute" in what may be a clarifying way (i.e., the in-memory, late-bound version of code that combines LGPL and non-LGPL code is not distributed, it is assembled at runtime, and therefore not in violation).

I hesitate to ask but the question seems inevitable: what does it mean to apply aspects to LGPL'ed code? If I hook in code to a cut-point in some LGPL'ed code, is my cut-point code infected? Does it matter if my AOP-system is implemented with byte-code manipulation, reflection or composition? Does it matter if this happens at runtime or at compile time? It seems that it would, and that feels like a fairly arbitrary distinction in some ways.

IANAL and this makes my head spin. I'm going back to writing code. Someone let me know when there's a clear answer here. (Unfortunately I think it may take a court to decide that. Let's hope it never comes to that.)

This page was generated at 9:56 PM on 15 Jan 2016.
Copyright © 1999 - 2016 Rodney Waldhoff.