[SDL] SDL and embedded device LGPL issue
slouken at devolution.com
Mon Jan 30 06:53:31 PST 2006
Here's my stance on this.
SDL's use of the LGPL is twofold:
1. Allow end users to use custom versions of the library, to support bug
fixes and improved hardware support and other enhancements.
2. Allow any improvements made to the library for one project to benefit the
community as a whole.
The redistribution of SDL applications falls under section 6 of the LGPL
(quoted below.) If you read it, you'll notice that you can either link
with the library as a shared object, or provide object or source code for
your application along with any non-standard utilities required to relink
your application. You'll also notice that you have to provide these upon
request, but do not have to distribute them with your application.
In embedded environments, I interpret this to mean that you must provide
all of the pieces necessary for someone to relink your application with
a custom version of the SDL library, assuming they have a standard development
kit for the platform. This includes any custom tools required by the build
process, and source or object code to both your application and the SDL
You'll notice that there really isn't any special distinction between
embedded and non-embedded environments. In both cases, if you link with
a shared object you're fine. If you link with a static object you must
provide any custom tools and machine readable object or source code needed
for someone who has a standard development environment to link with a
custom version of the library.
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.
-Sam Lantinga, Senior Software Engineer, Blizzard Entertainment
More information about the SDL