I was reading https://www.gnu.org/licenses/gpl-3.0.html to understand about GPLv3 but it seems I am more confused with the term source.
Is the word source referring to source of the library or my entire project source.
In my project (C++ based) I if am using a library which is licensed as GPLv3, then do I need to release the source of this GPLv3 library only if requested or am I even required to release my proprietary source code.
Doe shaving header only, static linking or run-time linking have different bearing on the situation.
1 Answer
Make sure you distinguish between the GPL and the LGPL.
Every programme which links to a library licensed under GPL MUST be released under GPL or compatible terms. Proprietary programmes may not be distributed if they link to GPL - licensed libraries.
This is different, if you link to an LGPL - licensed library where the license only extents to the library itself and only imposes the requirement on you to give your customers and users the option and possibility and instructions to replace the linked library by a modified version.
The means (static vs. dynamic) to link a GPL-licensed library don't impact your license obligation. It matters for the LGPL case where you probably want to avoid static linking as that would in most cases make it impossible to replace the LGPL-licensed library; replacing a dynamically-linked library with a modified version is far easier.
-
3@DarkSorrow Your options are (1) to not do that, or (2) ask the copyright holders of the GPL library for an alternative license, or (3) ask the copyright holders of the proprietary library to publish it under a GPL-compatible license, or (4) find a software architecture so that the GPL library and the proprietary code don't have to be part of the same program. Decomposing your software into multiple independent services could help.– amonCommented Dec 18, 2022 at 10:42
-
1@amon I believe asking copyright holders (be it for open-source library or closed-source library) will be futile. What I plat to do is break my project into 2 separate executables. One executable will deal with GPLv3 code and the other executable will proprietary code. I will enable IPC using shared memory. Will this approach work? Commented Dec 18, 2022 at 11:30
-
4@DarkSorrow If the two executables are clearly two independent programs, then there wouldn't be any problem from the GPL side of things. See also the GPL FAQ entry “I'd like to incorporate GPL-covered software in my proprietary system”. However, shared memory could suggest that they're effectively one program, with their design being intertwined. Strongly consider a more standard IPC approach, e.g. a REST API, or at least a custom but documented protocol over pipes or sockets.– amonCommented Dec 18, 2022 at 11:43
-
1@DarkSorrow if you do not use a well-defined and documented public interface, then IPC basically means you have two processes tailored to only talk to eachother - designed that way to circumvent the GPL license restrictions which is in place to prevent exactly what you then would do: use GPL - licensed software in a proprietary one. Commented Dec 18, 2022 at 20:57
-
2@DarkSorrow, If a developer would need to look at the code of one application to implement the correct use of the shared memory, then it becomes much harder to argue that the two executables are not related to the point of being derivative works. And once one is considered a derivative of the other, you are again at the point that you can't publish due to incompatible license terms. Commented Dec 20, 2022 at 15:24