I've started writing a framework in C (you may have heard of it: Raphters). Someone contacted me to ask whether I could re-license it because it would be useful in embedded products, but clause 4d (the clause that says, and I'm paraphrasing, you must allow modified versions of the library to be re-linked against your executable) would make that difficult. I like LGPL because it prevents people making modifications and keeping them secret, but I don't want to prevent people using Raphters in their embedded products. What do you suggest?

  • I own the copyright for the entire project. Commented Apr 15, 2011 at 15:24

5 Answers 5


What you're talking about is called a GPL Linking Exception, the common one being the GNU Classpath exception:

Classpath is distributed under the terms of the GNU General Public License with the following clarification and special exception. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.

As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obliged to do so. If you do not wish to do so, delete this exception statement from your version.

As such, it can be used to run, create and distribute a large class of applications and applets. When GNU Classpath is used unmodified as the core class library for a virtual machine, compiler for the Java language, or for a program written in the Java programming language it does not affect the licensing for distributing those programs directly.

I know that the FreeRTOS license has a similar exception, specifically because they want people to be able to use it in embedded projects.

  • +1 but note that if the FSF puts out another version of the GPL, updating the linking exception can be painful (depending on what they changed). I doubt that's likely in the immediate future, however.
    – user131
    Commented Apr 15, 2011 at 15:30
  • @Tim Post: I'm not advocating the exception, I'm just answering the question. :) One of the goals of v3 of the GPL was to plug the hole of distributing GPL'd stuff on embedded devices, making the code available, but not allowing someone who purchased the device to make changes to that code and install it on said device. (The whole anti-TiVo-isation thing). I happen to agree with that purpose of the GPLv3, as I believe it supports innovation to be able to hack the stuff you buy. Commented Apr 15, 2011 at 15:38

If your intention is to prevent people from making modifications to the code and keeping them secret, but not to restrict what kind of projects people can use your code in, then you ought to consider relicensing or at least dual-licensing your library under the MPL, which does exactly that.

  • The trouble with MPL is that it's not GPL compatible. Commented Apr 15, 2011 at 16:09
  • 1
    Dual licensing under MPL and LGPL would be a good idea though. Commented Apr 15, 2011 at 16:12
  • @dan: That's not a problem if you dual-license it, allowing people to use it either under the terms of the MPL or the LGPL. Commented Apr 15, 2011 at 16:13

You could offer the software under two or more licenses.

I know some places do this (e.g. one license for non-commercial use, another--or one-off licenses--for commercial use), but I don't know the legal ramifications.


Assuming you have the copyright, and therefore can license as you please, you can always specifically allow additional permissions. There is a section of the Gnu FAQ that shows how to add an extra permission (in that case, to allow linking with a proprietary program). You would want to allow makers of embedded software to not have to comply with clause 4d.

The LGPL doesn't have a framework to force other distributors to convey that additional permission, but as long as you're offering it it doesn't matter much.

This is, I believe, in the GPL spirit. The anti-Tivoization clauses of GPLv3 don't apply in cases where the device's software cannot be altered in the field.


If all those who own the copyright on the code agree, that code can be licensed in any way. As a similar example, I sometimes sell photos I've taken that are available under a Creative Commons license. Anybody can freely use one of my CC-by-SA photos according to those terms. If they want to use other terms, they can get the same image under a different license agreement.

This does become an encumbrance if other people commit to your codebase without assignment of copyright to you. MySQL, for example, doesn't insert any code into their product unless they own that code. It is available to everybody by the GPL, but they also have the right to license the code any other way they choose. Contrast this with the Linux kernel which has untold contributions and can never been altered to a non-public license.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.