faif / python-patterns

A collection of design patterns/idioms in Python
40.16k stars 6.92k forks source link

Needs a COPYRIGHT/LICENSE file #143

Open yarikoptic opened 8 years ago

yarikoptic commented 8 years ago

I haven't checked if any of the examples is simply completely copied from the web, when it would need to retain original copyright/license notice, or all of them could be claimed to be owned by contributors to this repository, but the point is that there should some clear statement on copyright/licenses for the files and possibly for the collection as a whole as well.

faif commented 8 years ago

Most files include a reference to the original source. If there's nothing it most likely means that I forgot to add the reference so it's good if we can still do that

yarikoptic commented 8 years ago

Reference is not a copyright/license statement. Imho issue wasnt addressed - users would still have no clue after cloning this repo either they could reuse the code from it or not Just my 1c

fkromer commented 8 years ago

I do agree with @yarikoptic . The license issue has to be considered if someone would like to use the code in software that is either a "commercial product" or used in the internal enterprise infrastructure.

csaez commented 8 years ago

Really? I mean, these are simple snippets showing design patterns for learning purposes, none of this code is usable as it is on a production environment... do we really need to license this?

faif commented 8 years ago

@csaez That's exactly my thought. In general it's not a good practice to copy/paste blindly and use such code in production. I don't think that cloning the repo is a problem. But let's see what @yarikoptic and @fkromer think :)

fkromer commented 8 years ago

If one distributes code under a license (e.g. one of these common open source licenses) it is clearly stated if it may be used commercially and if so under what conditions. But if there is not any licensing I do not know what licensing is applied "implicitly". However one should at least check if the referenced sources of the code state some licensing information which would imply a license for the package I guess. If e.g. one of the referenced code would have been licensed under GNU AGPLv3 (condition: same license) this package should be licensed also under this license. But I am no expert related to licensing :)

yarikoptic commented 8 years ago

There are multiple aspects here

  1. as @fkromer pointed out, you cannot copy/paste (i.e. use directly) code which comes without license terms
  2. many snippets probably were originally released under some license which mandates (all MIT, BSD, etc...) to maintain copyright/license statement associated with the code, so just copy/pasting it here without maintaining copyright/license statement might already be in violation with the terms under which it was released/shared
  3. 1 and 2 has nothing to do with "production" per se ;)
chfw commented 8 years ago

for your information, here is a non-lawer's view on open licenses on pycon 2016

jalanb commented 7 years ago

What is needed for a full resolution of this issue is to scan the repo for all separate instances of copied text, try to determine where each originated, and check any original licensing. Only after that scan can an appropriate license be considered for the project. Such scans are straightforward given the right tools.

If there is no obvious licensing for a snippet, then it's safer to assume that full copyright protection will be enforced at some future time by a high-functioning psychopath with more lawyers than you. I advise clients to avoid unkown snippets completely. The worst.

Open Source licenses such at these may not discriminate against fields of endeavor such as commercial use. But they do restrict distribution of propietary copies to varying degrees. I don't think that's a problem here, as a primarily educational project I imagine that python-patterns would also like to restrict distribution of "less open" copies.

I agree with @yarikoptic that full attribution is required for each snippet. Again, a scanning tool will make finding the correct attributions easier.

@csaez makes an interesting point.

none of this code is usable as it is on a production environment... do we really need to license this?

If the disclaimer of warranty in most licenses were to be "flipped", so that it restricts use in any "production environment", then more of the other OSI Licenses could be compatible. If it is made plain that the code / text is for reading by people only, and is not licensed for running then the project maintainers need not care further. This would still be an OSI License, as they have no opinion on non-discriminatory usage restrictions. And I think it captures well how I think python-patterns should be distributed.

But, I'd like to hear a lawyer argue that a "production environment" is a "field of endeavor" before suggesting anyone takes this idea too seriously.

If a new license were to be created, then I think the same effect (as prohibiting use in "production enviroments") could be achieved by only licensing derivatives to be used as documentation, not executables. I think there's a better argument for that, as "documentation" does not discriminate on field of endevor or persons (they all use docs).

If e.g. one of the referenced code would have been licensed under GNU AGPLv3 (condition: same license) this package should be licensed also under this license

This is true in general, but it's not just a case of "we'll have to adopt which is most restrictive", as there can be incompatibilities between licenses at various restriction levels. "One of the referenced code would have been licensed under GNU AGPLv3" which is incompatible with the original BSD. But, turns out that the BSD examples are much nicer that the ones under GPL, so an alternative conclusion could be "we won't use the GPL code".

I asked StackExchange about it too.

z-a-f commented 7 years ago

If you don't want to have a license, you don't have to. Also, according to GitHub's Terms of Service, you allow others to view, fork, and use the code here.

However, there is a caveat here: From a user perspective, when I see no license, I am assuming there is no explicit permission for me to modify and/or distribute the code. In such situations, I would prefer not to use it. This problem is not necessarily about using it in production, but also sharing it as an academic resource, or as a training material.

Another problem is protecting yourself, especially in the USA. The thing is that, unlike the rest of the world, USA doesn't have a "loser pays" rule in courts: you will have to pay for your own lawyer if you are sued, even if you win! That creates a potential for frivolous lawsuit cases that happen because of "lack of warning" -- some people can sue in a hope that you will pay them just not to hire an expensive lawyer 😄 Even knifes here in the US have a warning "Blades are sharp", duh!!!

About giving credit to other resources and to the author: If you used other resources to prepare this material, you absolutely have to give credit where it is due. Depending on how much of the original material is still present, you either will need to have a copy of the other license, or give a citation to the resource. The rule of thumb I use in academia: if someone else's code makes 50%-100% if your core code base, the original license should stay and a citation has to be made. If someone's code makes up 5-50% of your core code, at least a citation has to be there. Otherwise, I usually mention the other code as minor contribution. This is usually pretty subjective, so at least a citation has to be made.

sprshr commented 2 years ago

After many years since @yarikoptic opened this issue, this repository is still lacking a proper license. I assume that the repository owner is having a hard time finding one. choosealicense.com is a helpful source for choosing a license. I hope it helps.

faif commented 2 years ago

It's not about the difficulty of choosing a license. We simply can't add one license for all code because I didn't write all the code in this repo. Some examples were copied from the Internet and we would need to contact the original authors and ask them about using a license. If someone is willing to do that, be my guest (I am not).