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?
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.
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.
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.