I have taken concepts and code snippets from two libraries:

  • 1 using BSD3
  • 1 using Apache 2

and make modifications.

So what should i do? and how do i go about doing it?


Thanks to @Kevin answer, I am leaning towards this implementation that's inspired by vscode thirdpartynotices and github's linguist arrangement of their vendor grammars.

  1. i will have a THIRDPARTYNOTICES.md similar to the vscode version but will also include description of what was copied from the individual third party libraries
  2. the github linguist use of vendor followed by yaml files inside seem to indicate a specific kind of configuration and arrangement specific to third party licensing tooling. i don't mind using the same but only if i knew what it is and whether it works for python source code. for now i will simply keep a vendor folder and then put a README.md inside for future to add in the yml files.

2 Answers 2


If by "concept" you simply mean that you were inspired by these libraries, but did not use any actual code from them, then your code may not be a derivative of either of them in the first place. If this is the case, then you have no obligations, although it would be polite to put links to those libraries in your README.md or some other place where users will see them. This is because abstract ideas and concepts are not subject to copyright protection in most countries. See for example 17 USC 102(b).

On the other hand, if "concept" refers to a C++ concept (or the same in another language), or if you have actually copied (and/or modified) code from both libraries, then you must include the text of both licenses, and in the case of Apache you must specifically indicate that you have changed the original. If the Apache library has a file called "NOTICE" or something similar, you must include a verbatim copy of that file, either in a similar file (in the case of source distributions), or in the documentation and other ancillary materials that are provided along with binaries.

In either case, you may license the resulting software under whatever license you choose. Neither Apache nor BSD3 is a copyleft license. If you choose to use a third license, then your own LICENSE or COPYING file should clearly indicate that the Apache and BSD3 license texts apply to the upstream distribution, and not to your library. If you want your library to be maximally "polite," it would be good practice to dual-license your library under both Apache and BSD3, so that the upstream projects can take your code and use it freely, but you are not required to do this if you do not wish to. To do this, it is enough to simply add a notice at the top of the LICENSE file saying something like "This library is available under both the Apache and the BSD license, as shown below. You may select the license of your choice." You would then include the text of both licenses, perhaps with a separator.

  • If you read the source code, it does not count as clean-room re-implementation any longer. So the paragraph you cite likely does not apply - you cannot un-know what you read. And as such it would rather be a derivative of both. Feb 7 at 17:21
  • @planetmaker: "Clean-room reimplementation" is not a concept which appears in US copyright law. It's either a derivative work, or it isn't. A clean-room reimplementation is probably sufficient to be not-a-derivative, but it is not necessary to be not-a-derivative. We don't accuse fantasy authors of ripping off Tolkien just because they read him, for example.
    – Kevin
    Feb 7 at 17:32
  • Art is not IT. Differences apply, your argument based on similarity does usually not hold. Also you assume US law to apply while the OP does not indicate any jurisdiction. Feb 7 at 17:58
  • 1
    @planetmaker: I'm citing US law as an example, and the answer explicitly says so. If you have a specific, actionable recommendation for how to improve this answer, please say so, or else write your own answer.
    – Kevin
    Feb 7 at 18:34
  • 1
    @KimStacks: You paste them both into the same file, perhaps with a separator of some sort, and a header indicating whether they apply to your software or are "just" provided for compliance reasons.
    – Kevin
    Feb 8 at 6:49

In your (now modified) question you write

i will have a THIRDPARTYNOTICES.md similar to the vscode version but will also include description of what was copied from the individual third party libraries

This makes it pretty clear: you will have to choose a license which is compatible with each. Your work is a derivative of these third-party libraries. Copying anything is far beyond 'implementing a concept'. Implementing a concept means "I want to write something which does X or Y, as such the idea to get something to achieve X, possibly by usign a certain well-known algorithm". If you start to copy anything, this is not a concept anymore, it's an implementation you take over at least partially.

So, what do you have to do? Of course you have to credit the original libraries by taking over their copyright notices. You also add your own.

And you choose a license for your code, compatible with MIT and Apache2. Luckily for you they are both quite permissive.

So that could be, for instance, be Apache2 (as MIT doesn't have the patent clause, it is not an option). The patent clause in Apache2 limits somewhat your choice for other licenses and puts some obligations on you to keep the NOTICE file but also copyright notices in unmodified parts of the code. Thus due to these additional requirements, choosing MIT (or some other similarily permissive licenses) does not work, but e.g. GPLv3 would work as well. Further, as Apache2 is also a permissible license you could also even choose a proprietary license - provided you obey either license with the credits / NOTICE as they require.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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