I have an idea for a modern compiler project which will involve, at least at the start:
- A driver program.
- A set of libraries that implement the compiler, much like LLVM/Clang.
- A runtime library that users can link with to enable the various features of the language.
What I want to achieve here is:
- to stop anyone (or company) taking the project and slapping it under a more restrictive licence and saying that it's all GPLv3 including all the libs unless you pay them.
- to allow the user to statically link with the runtime lib, i.e. iOS originally only allowed static linking, also embedded devices use static linking.
- to allow the linking to the compiler libs to create new tools and not to restrict the distribution of said tools.
- to enforce the sharing of contributions back to the project.
I've been talking with a few people and someone brought up the issue of CLA's and that he would never sign one because it means the company controlling the project would basically get free work and they would profit by then doing whatever they wanted with it. I kind of agree with that sentiment and would like to do this without requiring the CLA, much like Linus does.
Which licence(s) should I choose? Should I dual licence? What would be the implications of this?
I was looking at MPL 2.0 initially, but I'm not sure if this would cover this project enough. Maybe some form of dual licencing, GPLv3 (with linking exception) and BSD or Apache 2.0 or MPL 2.0?
Edit: I forgot to mention one thing about the GPL runtime exception that is one reason for starting this project in the first place, the rule of the IR from GCC. One thing I want to do is to produce SPIR-V as a target, which is an IR. As this would not be using GCC, this should not apply, right?