I'm using a GPL version 3 licensed Open Source client written in Python and have compiled it into a .deb file and distributed to around 900 users over the last few years. This client connects to the corresponding server that I run which is licensed using the same GPL v 3 license.

Many of my users are non-technical and I spend a lot of my time helping them to configure and maintain this client after they've re-installed it, messed with it etc !

To make the configuration process less tedious for me I'm considering adding a class in a separate file to the .deb package which will carry out the configuration for the user and will add a couple of features specific to my server setup such as monitoring the client cpu load etc

To do this I'd need to modify a couple of the existing files in the package. I understand that - via the GPL - I'd need to make my changes to the original files available (the ones that call the class) but could I license the file containing my class that I add differently so that I don't have to release it ?

  • How are you going to distribute your new class? Are you going to bundle it together with the existing GPL v3 licensed client program and then release the "enhanced" client to your customers?
    – Brandin
    May 1, 2019 at 6:54
  • That's the easiest route. Two original files have been modified by the addition of a couple of lines which look for the new class. If it exists then the functions in the new class are run, if the class doesn't exist then the original code runs as before.
    – Philip Lee
    May 1, 2019 at 7:31

1 Answer 1


You are distributing GPLv3-covered software. You are only able to do so under the conditions of the license, which include giving every recipient access to the complete corresponding source code of the software.

It is OK if this software includes components that are not licensed under the GPL. In that case, one of the following scenarios must apply:

  • the other license is compatible with the GPL, so that the software as whole (including the non-GPL components) can be distributed under the terms of the GPL. For the GPLv3 a number of licenses are suitable here, such as MIT, BSD, Apache-2, or LGPLv3.

    Compare also the GPL compatibility matrix, although it only covers GPL-family licenses. The roles are a bit reversed here, e.g. your file would be library like and shall be used by the GPLv3 software.

  • the other component falls under the system libraries exception, for examples components that are part of the operating system

  • the other component is a “generally available free [program] which [is] used unmodified [but is] not part of the work”

  • the copyright holders have issued an exception to these requirements so that the GPLv3 software can be combined with differently-licensed components as well. The LGPLv3 or the Classpath Exception are examples of such an exception.

You want to modify/extend the software, but want to license your extension in a way that doesn't require source disclosure.

Considering the above scenarios, this is not possible:

  • You still have to provide the complete corresponding source code for the software. This would include your extensions.
  • You must license your extensions under a GPL-compatible license.
  • None of the exceptions would apply here. Your modifications are not a system library, your modifications are a generally available free program, and you have not received a special exception from the copyright holders.

You do not have to publicly offer your source code. However, you must provide the source code to any recipients of the software. This is easiest to do if you always provide an archive of the source code alongside the installed software. As you said, your users are non-technical and are therefore unlikely to share the source code further, even though they would have the right to.

If you were to distribute the software with your modifications, without licensing the complete corresponding source code of the software under a GPL-compatible license, that would be a license violation, and your license to the software automatically terminates. Any further sharing of the software or of your modifications or making further modifications would then be copyright infringement.

The installed form of a Python software is not generally identical with its source code in the sense of the GPL. For the GPL, the source code is the preferred form of making modifications, and includes build scripts such as setup.py. It could also be argued that test files are part of the source code.

  • Thanks for the comprehensive reply. I'm reluctant to release my class as it would provide information on how my servers are set up and configured which could then be exploited. I guess that the best option would be release a standalone package which would modify the configuration files of the GPL code and could provide the monitoring capability that I need.
    – Philip Lee
    May 1, 2019 at 11:23
  • 2
    @PhilipLee yes, a separate program would be better from the licensing perspective. You can distribute it alongside the GPL software but it must be clearly separate. Don't import any of the GPL modules, and don't copy any code. But I'm not sure that security is a good argument for keeping code secret, e.g. consider Kerckhoffs's principle/Shannon's maxim: “the enemy knows the system”. Also, open-sourcing the code would not require you to disclose sensitive configuration files.
    – amon
    May 1, 2019 at 12:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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