I wrote a software simulation for my Bachelor's Thesis. For a statistical routine for the simulation, I adapted code from an LGPL v2.1 or later licensed library, without including the library, just the rewritten routines that I adapted for my use. For another statistical routine, I rewrote part of a GPL v3 library code in another language, again without including the library. For a graphical interface, I git cloned an MIT licensed library and used its headers, as well as adapted a part of its example code to render my simulation. For a fast math library, I downloaded an MPL2 licensed header-only library and included its headers. This makes the entirety of the project compilable and runnable without any shared libraries.
I need to publish this code for transparency and in order for my results to be reproducible by others. The way I understand it from reading the copyright notices, I can use the MPL2, MIT and LGPL v2.1 or later code from GPL v3 code, but I cannot use GPL v3 code from anything else but GPL v3. Since I need to license my GPL v3 code modifications as GPL v3 and only my code (not any adapted code or other library code) uses this GPL v3 code, there is no interaction between GPL v3 code and the library code that I am using. There is also no interaction between any two libraries' code (one library does not call the other), each library only interacts with code written by me.
Therefore, I was thinking of doing the following:
- Keep the original licenses for the code that I did not write myself (the libraries themselves)
- For any files that have code that I modified or adapted (GUI code, statistical routines), also keep the original licenses (each such file contains code adapted from only 1 library)
- License the entire project GPL v3 since the other libraries can be used from GPL v3 but not the other way around
My questions are the following:
- Can I have a copy of the libraries inside my project's source as I described (with their original licenses and attribution intact), or since I did not create them I must rewrite my code to use shared libraries and not include their sources?
- Is licensing the entire project GPL v3 feasible in this way, or does it conflict with the other licenses? If conflicts exist, what are other licensing paths that I could take? Should I license the entire project or should I license each file written entirely by me?
- Am I missing something? Do I need to do anything else besides preserving the copyright notices and licensing my code?
I personally do not care what license the code that I wrote has as long as the code is open source so that other people can download it, run it and reproduce the results. I simply want the entire project to have a license that is good from a legal perspective and compatible with the licenses of the libraries that it uses. It would be much better if I do not have to change my code to use shared libraries since everything was compiled together until now and is stable and the results are deterministic. This may not be the case with shared libraries that changed things such as order of calls to the random generator that is passed to them. Furthermore, the GPL v3 library did not expose what I needed and is in an inconvenient language, so I need to rewrite that in any case.
Thank you in advance!