We currently issue leJOS NXJ with a Mozilla Public License 1.0 license for historical reasons. Lots of code comes from the RCX version of leJOS and that was issued under MPL 1.0.
We bundle a lot of jar files with leJOS which have different licenses. We include the license and the source for these products in our distribution. Some people on the forum have suggested this is not legal but according to Charles Manning, it is. A particular example is bluecove-gpl which has a GPL license.
Use of code with different licenses
We have some code that was issued with GPL, such as the printf code in the firmware and David Anderson's libnxt code, some of which we still retain.
Some of our Java code is indirectly derived from Sun's openjdk code, or previous versions of Sun's java code. There is not much of this and very little is a direct copy, as we have mainly written the Java classes from scratch to work with leJOS native methods and leJOS restrictions. However, we do not strictly follow "clean room" procedures.
Some of the firmware code is indirectly derived from LEGO's open source MINDSTORMS NXT firmware. However, none of it is a direct copy - we have just examined the LEGO code and got ideas from it. Again, we have not followed strict "clean room" procedures.
We do not use any of the librcx code, which was the original reason for using MPL 1.0 for leJOS.
The options for the preferred license are GPL, LGPL, or something like Sun's openjdk GPL license with CLASSPATH exception.
The main issue between GPL and LGPL is whether we wish to allow our libraries to be used in proprietary products. We could issue some code in GPL and some in LGPL. My understanding is that MPL 1.0 is closer to LGPL than to GPL.
If we want to use openjdk, I think we need to issue our Java code as GPL with a classpath exception.
What we would need to do to relicense
In order to relicense our code, we would need to obtain the permission of the authors. David Anderson started this process and got the permission of eveyone other than Paul Andrews, who he failed to make contact with. Paul's contributions to the NXT version are limited to code copied drom the RCX version. He made significant contributions to the VM and some of the Java classes (e.g.Poll.java).
If we want to use openjdk code, we probably need to use a GPL license with a CLASSPATH exception, at least for the Java parts of our code. As we probably cannot use Sun's license for our Java code, we would probably have to write our own license.
We should probably have headers on every source file expressing copyright and saying which license it uses, particularly if some files come directly from openjdk, or are derived from openjdk code. Adding such headers to every source file would be time consumimg.
Strictly, we probably need to display messages on startup of the various components giving copyright and licensing information.
The benefits of relicensing
- We would have a much more modern license.
- We could use openjdk code.
- We could get rid of any worries about the legality of the use of some of our code.
Why we haven't relicensed
- I don't think any active member of the team understands these issues very well.
- No active team member is an expert on drafting licenses, and it looks like we need our own license.
- We have managed not managed to contact Paul Andrews
- It looks like a lot of work, particularly if we have to add headers to all files