I have a project (for context it's Android) that is GPL 3.0 License and wants to append a library as a private non-license or MIT Personal License.

Is it possible to achieve that without violating the legal terms of GPL 3.0?

The hierarchy I'm following:

Project (Root Directory):
 - Project A (Sub Folder) (GPL 3.0)
 - Project B (Sub Folder) (Non-License or MIT) as a library

Project A has some files that interact with the files of Project B. Project A sends and receives connections from Project B as a sub-project.

Following the guidelines I've uploaded the Project A files as required by the GPL 3.0 terms.

However, I do not plan to share publicly Project B as it is required to be confidential and local.

Now will it be possible or am I doing wrong OR if any suggestion for me to make my sub-project private

  • What do you mean by "project parent"? Is that a work (eg, executable) that incorporates projects A and B? Or are projects A and B unrelated works that happen to be grouped under the "project page" of a single author? Until we understand how the "parent" links A and B, it's very hard to answer.
    – MadHatter
    Commented Jun 2 at 7:42
  • Let us continue this discussion in chat.
    – Ammar
    Commented Jun 2 at 9:17

1 Answer 1


Note: for the purposes of this answer, I'm assuming that linking a codebase to a library to form an executable means the executable is a copyright derivative of codebase and library. Particularly for dynamic linking, that isn't a settled question; we have questions that summarise the pro and con positions elsewhere here. But I find the FSF's viewpoint persuasive, and am therefore assuming that all forms of linking make copyright derivatives.

You are distributing an executable which is the product of two codebases: codebase A, which is derived from somebody else's upstream GPLv3 project, and codebase B, which you have decided to write as a library that links into the executable, and whose source you wish to keep private.

You may not do this. Since the executable is a derivative of an upstream GPLv3 work, you may only distribute it by virtue of GPLv3 s6, which says that "you may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License". Corresponding source is definied in s1, and that makes it clear that all the source code that is involved in the production of this executable must be made available under GPLv3.

You cannot evade this requirement by splitting your "secret sauce" out into its own library.

  • Thank you MadHatter for the clarification.
    – Ammar
    Commented Jun 2 at 9:23
  • @Ammar you're very welcome. That said, this isn't your first question here, and so far you've not accepted an answer to either of your questions. So please forgive me if you already know this, but the local etiquette is that you either accept an answer to your question (by clicking on the tick outline next to it), or you clarify through comments and/or edits what remains, to your mind, unanswered. Thanks!
    – MadHatter
    Commented Jun 2 at 9:25
  • One last thing: if I make A public (as its derivative work) in such a way that now A and B are separate but communicate with each other over some network communication i.e: TCP/FTP/UDP or (both access the same DB) to fulfill the working completely, does GPL v3 applies too on B as well?
    – Ammar
    Commented Jun 2 at 9:30
  • 3
    That is not at all a simple question - certainly much too big for a comment - and it will depend very much on the details of the implementation. It may be that we need to see the actual code to hazard an answer. But the short message I urge upon you is that the GPL is a social compact that says: you can use my code at no cost, without asking, but in return you must make your code available under the same terms. If you don't like that compact, much the easiest thing is don't use other people's GPL code.
    – MadHatter
    Commented Jun 2 at 9:34
  • 3
    I don't know, it will depend entirely on the details of the implementation. (What procotol(s) are you using on the wire? Did you write them yourself? Are they in a shared library? There are many other pertinent questions.) There is no way to make that sort of question short. The only answer I can give in a comment is the one I already have: if you don't want GPL obligations, don't use GPL code.
    – MadHatter
    Commented Jun 2 at 10:03

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.