Re: LGPL Findings
James Carnegie <[email protected]> Thu, 15 Jan 2004 09:19:20 +0000
| Newsgroups | gmane.comp.java.enhydra.barracuda.general |
|---|---|
| Message-ID | <[email protected]> |
Still +1 from me for LGPL. On Thu, 2004-01-15 at 02:08, Christian Cryder wrote: > Hi folks, > > Sorry to be so long in getting back to the list with this, but it took me a > bit to collect the data. Last weekend I emailed Dave Turner, of the Free > Software Foundation (he's the LGPL guy mentioned in some of the links given > previously), to seek clarification from the horse's mouth on the LGPL > questions raised recently on the list. > > Here's his first response... > ------------------------------------------ > > My name is Christian Cryder, and I represent an open source project called > > Barracuda that is currently considering switching to the LGPL license. We > > have some concerns, and I'm hoping you can expand on your comments here: > > > http://lists.debian.org/debian-legal/2003/debian-legal-200307/msg00234.html > > > > Specifically, I understand your comments here to say that if a developer > > uses LGPL Java code (ie. via jars, import statements, method calls, etc), > > that the java developer's code does not qualify as a "derivative work" and > > thereby does not need to be LGPL'd. > > dt> I didn't say that. I said that the LGPL specifically allows this class > dt> of derivative works to be licensed under terms different than the LGPL. > > > My question then is, "what exactly would > > make code that uses the LGPL library fall into the 'derivative work' > > category?" > > > > -if I actually change the LGPL library source (ie. I modify its core > > functionality) and rebuild/rejar it (yes) > > dt> Yes. > > > -if I simply use import statements and invoke methods of objects in the > LGPL > > library (no) > > dt> Yes, that would be a derivative work, but would not need to be licensed > dt> under the LGPL. Section 5 of the LGPL permits this with no restrictions > dt> in the case where you are not distributing the LGPL library. Section 6 > dt> of the LGPL permits it with only minor restrictions in the case where > dt> you are distributing the library. > > > -but what if I _extend_ LGPL classes which were designed for that very > thing > > (???) > > dt> Extending classes also creates a derivative work. It seems to me that > dt> the boundary of a library in Java is usually the package or jar file > dt> boundary. So, if you add a class for loading PNG files to an image > dt> loading library, extending the base image loading class, that would need > dt> to be LGPL. But if you write a special image loader which (say) > dt> autodetects image types, and don't put it in the image loader's package, > dt> but in your program's package, then it need not be LGPL (so long as you > dt> follow the restrictions in section 6). > > > To make the issue more clear - Barracuda is a webapp framework which by > > design requires developers who use the framework to extend base classes > (ie. > > Java extension forms the backbone for developers to 'plug in' their > > application specific functionality). We want to ensure that this would not > > force the developer's application to be LGPL'd as well. > > dt> I think in that case, the LGPL would work as you want. > ------------------------------------------ > > Now, I followed this up with a couple of additional questions. Here's his > second response... > > ------------------------------------------ > > Thanks for answering my questions - I think you've cleared up most of my > > misconceptions, but I do have one followup. Right at the tail end of > section > > 6, I see this paragraph: > > > > For an executable, the required form of the "work that uses the > Library" > > must include any data and utility programs needed for reproducing the > > executable from it. > > > > I'm wondering exactly what this means for Java. We generate .jar files, > not > > executables. So, let's say I have 2 jars in a web application (think > > servlets) which I intend to sell/redistribute: > > > > a) SomeLib (LGPL) > > b) MyApp (custom Java code that uses SomeLib by extending abstract > > classes, implementing interfaces, etc) > > > > Now let's say the compiled code for each of these lives in its own jar > file > > (somelib.jar, myapp.jar). I understand that I need to provide the source > for > > SomeLib, along with a means to compile it, so the person who buys my app > can > > change the SomeLib implementation if they desire. Does the LGPL snippet > from > > section 6 (above) mean that I must also provide the source for MyApp? > > dt> No. That applies to the uncommon case of distributing statically linked > dt> binaries (impossible in Java). > > > Also, under what conditions does Section 2c kick in? > > > > c) You must cause the whole of the work to be licensed at no charge to > > all > > third parties under the terms of this License. > > > > I am assuming that if I create a custom version of SomeLib (ie. MySomeLib) > > and then use that in conjunction with MyApp, the MySomeLib portion of the > > resulting application must also be LGPL'd, but not MyApp. Yes? > > dt> Correct. > > > What I'm trying to understand is under exactly what circumstances MyApp > > would also be required to be LGPL'd (hopefully in neither of the above > > cases). > > dt> There are no such cases, unless MyApp were not in fact an app, but just > dt> a modified version of SomeLib. > ------------------------------------------ > > Ok, so the gist of all this is that I believe LGPL is in fact safe for Java > in all the cases we've thought of. Essentially, what it amounts to is that > anytime you use an LGPL library, you are creating a derivative work (even if > you are just importing etc). Now, just because its a derivative work doesn't > mean it has to be LGPL - you can still license your resulting app under > whatever license you want. The only real limitation is that if you choose to > distribute your app, all you have to do is make the LGPL'd portions > replaceable (and provide any customized source for those portions alone). > > The only time you would _ever_ have to license your resulting app as LGPL > would be if the whole thing (including the LGPL code) was a _statically > linked library_ - what as Dave says: "[The tail end of Section 6] applies to > the uncommon case of distributing statically linked binaries (impossible in > Java)." > > So let's say you extended Barracuda with your own custom version > (BarracudaOnSteroids.jar) and then created an app that used it. You would > have to release your custom Barracuda code as LGPL, but your proprietary app > could continue to be licensed/distributed as you see fit. > > The bottom line then: LGPL seems perfectly fine (and probably best) for what > we want it to do - it allows for commercial applications to be built on top > of Barracuda without infecting them, and yet it requires changes to the > library to remain in the public domain. > > SO...if anyone still has questions or comments, let's here them, but as for > me, I think I'm +1 on LGPL. > > Special thanks to David Turner of the Free Software Foundation for taking > time to explain all this to me... > > Christian > ---------------------------------------------- > Christian Cryder > Internet Architect, ATMReports.com > Project Chair, BarracudaMVC - http://barracudamvc.org > ---------------------------------------------- > "Coffee? I could quit anytime, just not today" > > _______________________________________________ > Barracuda mailing list > [email protected] > http://barracudamvc.org/lists/listinfo/barracuda