My question is related to GPLv3 and GCC runtime exception. I need to include GCC source code in my project.
I am an author of an embedded library that is intended to be built using GCC C++ compiler from GNU ARM Embedded Toolchain.
During the build process, linker complains that certain functions from GCC compiler are undefined. I realized that I need include two files from GCC source code, mutex.cc
and future.cc
, to have my project build.
The two files, mutex.cc
and future.cc
, are part of GCC C++ STL implementation. The license inside of those files says GPLv3 and include the GCC runtime library exception.
Normally, the code from those files would be included in the prebuilt GCC stdlibc++ library. However, for the GNU ARM Embedded Toolchain, those files are excluded in the tool's build configuration (technically, the files are included, just the required functions are excluded due to conditional build). The two files are not delivered with the released binary version of GCC. I needed to download them from GCC source code repository.
End users, in order for their project to build, need to include source code of my library and the two GCC files in their build. My library does not modify the two files, does not add or remove functionality. The files will stay as they are. If they were linked with stdlibc++, I would not need the source code.
As I understand GCC runtime exception allows the end users not to publish source code (closed-source?) of their product even if some parts of GCC code is included during the compile or build process.
Now,
- What is the situation when the end user has to include this code explicitly? Is the exception still triggered or this automatically force him to use GPLv3?
- If answer to 1 is GPLv3 is needed - What if I rebuild the GNU ARM Embedded Toolchain, including the required files and publish my modification with GPLv3 with GCC runtime exception? Users would need to use my version of the compiler. Will this still force users to use GPLv3?
- If answer to 1 is no, GPLv3 is not needed - Can I release my library as MIT and, for simplicity, include the two files in my repository? Is dual license possible? Is dual license needed?
- The code in the two files is simple. I could potentially provide my implementation of the files. What would I need to avoid doing this to avoid GPLv3?
- Is there any other way for the user to use those two files without falling into GPLv3?