A library I used in my native Visual C++ application was GPLv3-licensed; I found the GPL acceptable, and thus I was planning to make my application GPL-licensed as well. The application depends on Visual C++ runtime DLLs, and I was planning to distribute them with the application. However, I noticed the following paragraphs in the FAQ (bold-facing by me):

You may link your program to these libraries [the Visual C++ (or Visual Basic) runtime library], and distribute the compiled program to others. When you do this, the runtime libraries are “System Libraries” as GPLv3 defines them. That means that you don't need to worry about including their source code with the program's Corresponding Source. GPLv2 provides a similar exception in section 3.

You may not distribute these libraries in compiled DLL form with the program. To prevent unscrupulous distributors from trying to use the System Library exception as a loophole, the GPL says that libraries can only qualify as System Libraries as long as they're not distributed with the program itself. If you distribute the DLLs with the program, they won't be eligible for this exception anymore; then the only way to comply with the GPL would be to provide their source code, which you are unable to do.

What would be an alternative to this? Static linking would seem to present the same problem, and would be a rather difficult change to implement due to other precompiled binaries. I could ask users to install redistributable runtimes if necessary, but this would present an additional hassle to them. More drastic alternatives would include asking the library author about non-GPL usage (possibly involving payment) or using a different library and a non-GPL license.

Any help would be appreciated; I would also appreciate if respondents kept in mind that this is the first application that I am publishing.


There are a few potential options here:


Assuming that you mean the MS Visual C++ runtime libraries, MS has this to say:

To deploy redistributable Visual C++ files, you can use the Visual C++ Redistributable Packages (VCRedist_x86.exe, VCRedist_x64.exe, or VCRedist_arm.exe) that are included in Visual Studio.
The Visual C++ Redistributable Packages install and register all Visual C++ libraries.

Bundle the installer for the Visual C++ redistributables with your package as described in MS: Deploying a Visual C++ Application By Using the Visual C++ Redistributable Package

  • 1
    This doesn't address the legal issues of linking a GPLv3-licensed program to proprietary DLLs that are not considered "System Libraries" as defined by the GPL. – QwertyChouskie Jul 31 '18 at 22:42
  • @QwertyChouskie If the legal issues result from distributing these Microsoft components with the application, then I suppose the only way to use this type of method would be to link to the Microsoft website and tell users to download them if they receive certain missing DLL errors, which as mentioned in the original question would be a hassle (though I may consider it on a temporary basis as a last resort). – Pi Programs Aug 1 '18 at 19:27

In addition to the options listed by QwertyChouskie, you could also ask the copyright owners of the GPL library you are using to make a specific exception for linking to the Visual C++ runtime DLLs. Unless they're specifically against their code being used on Windows, this would not really change anything for them, as Microsoft are unlikely to open up the Visual C++ library anyway, only in order to be compatible with their library. Of course they could take a principled stance, but you can always ask.

See GPLIncompatibleLibs in the GPL FAQ and this related SE question.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.