Advertisement

Clarification about LGPL

Started by June 08, 2005 10:22 AM
3 comments, last by CodeMunkie 19 years, 5 months ago
I have just a quick question about the LGPL (GNU Lesser General Public License), to make sure I understand it after reading through the license. If I use a component, audio library for example, in one of my projects, but I do not alter the source code of the audio library, I am not required to release any source at all, correct? However.. If I use a component, the audio library, in one of my projects, but I alter the source code to provide greater functionality to my project, I am only required to release the source code to the altered sound library, correct? I believe this is how it goes.. I just want some clarification, I couldn't really find anything that answered my question while searching the forums. Thanks :)
That is mostly correct. For the benefit of others, here is the LGPL. Read section 6 which tells you exactly what you need to do to conform with the license when linking to an LGPL library:

Quote:
6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.

You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:


a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
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. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.


In other words, you basically have 4 requirements:

1) Give notice of all LGPL libraries you are using and the fact that they are covered under LGPL. This should be in your docs, program credits, splashscreens, etc.
2) Supply a copy of the LGPL itself (see link above).
3) Show the copyright notices of all LGPL libraries you use in addition to your own (again, in your docs, credits, splashscreens, etc).
4) This is where is says "pick one of the following". Your simplest option is b):
Quote: b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.

All this means is that if you dynamically link to the library, and made no changes to the library, you are done. No source code need be provided. You can tell people where you got the library in your docs and then they can compile their own shared library (dll, etc), and drop it in place of the one you supplied.

If you do make changes, you will have to use option a):
Quote: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)

This requires you to supply the source code for the library including your changes, and you will also need to look at Section 1 and 2 of the LGPL and make sure you conform there as well (changes must be clearly documented, must make available for free, etc).

Please note that I am not a lawyer, but this is my understanding of the license and is how I conform with it.
"When you die, if you get a choice between going to regular heaven or pie heaven, choose pie heaven. It might be a trick, but if it's not, mmmmmmm, boy."
How to Ask Questions the Smart Way.
Advertisement
Thanks. That's exactly what I needed to know.
I think that you would be best to ship a copy of the library source alongside your app.

I've noticed 'big' developers using LGPL libraries, do this. (SDL source is shipped with Neverwinter Nights and UT2004.)

As I read it, you must supply or offer to supply the library, whether or not you make changes.
-- Jonathan
If they shipped the source, then they probably made changes to the library. You could be extra safe and provide source, but as long as you dynamically link and make no changes, there is nothing that says you must provide source (see section 6.b).
"When you die, if you get a choice between going to regular heaven or pie heaven, choose pie heaven. It might be a trick, but if it's not, mmmmmmm, boy."
How to Ask Questions the Smart Way.

This topic is closed to new replies.

Advertisement