Make itertools recipes license easier

Per Guido's suggestion, I am starting a new thread on this. The itertools module documentation has a bunch of recipes that give various ways to combine the existing functions for useful tasks. [1] The issue is that these recipes are part of the documentation, and although IANAL, as far as I can tell this means they fall under the Python-2.0 license. [2] Normally using the Python-2.0 license is not a big deal because it is non-copyleft. You have to include the license text and explain what changes you made, which isn't a problem for any sizable use of Python code. The problem occurs for such small code snippets. Again IANAL, but it seems you have to add the license text to the project, identify which parts of the code fall under that license, and document any changes you made to it. This is a lot of work to use, in many cases, just one or two lines of code. I personally use one of the projects, like more-itertools, that implement these recipes together under the Python-2.0 license and thus segregate the license issues from the rest of my code base, but at least in my opinion this mostly defeats the purpose of making code snippets like available. As I am not a lawyer, so I don't know the best approach to deal with this issue (if it is even desirable to deal with it). And I know that there are other modules with recipes and other sorts of documentation with useful code, although the itertools ones are the ones I see mentioned the most. [1] https://docs.python.org/library/itertools.html#itertools-recipes [2] https://docs.python.org/license.html#psf-license-agreement-for-python-releas...

IANAL, but if we could put a clause in the docs that all recipes are in the public domain, that would be great. -CHB On Thu, Oct 24, 2019 at 11:42 AM Todd <toddrjen@gmail.com> wrote:
-- Christopher Barker, PhD Python Language Consulting - Teaching - Scientific Software Development - Desktop GUI and Web Development - wxPython, numpy, scipy, Cython

On Thu, Oct 24, 2019 at 12:36:40PM -0700, Christopher Barker wrote:
IANAL, but if we could put a clause in the docs that all recipes are in the public domain, that would be great.
The public domain is *exceedingly* problematic. Many juristictions do not have any legal process for putting things into the public domain before the standard copyright expiry, or even prohibit the attempt to surrender such rights. That's why the Creative Commons folks have their CC0 licence, which seems to be the most appropriate for this case. https://creativecommons.org/share-your-work/public-domain/cc0/

OK, let's see if we can do CC0. Todd, do you want to read through the link Steven gave and find out how we should apply this, either to just the itertools examples, or possibly to all examples in the docs? On Thu, Oct 24, 2019 at 2:01 PM Steven D'Aprano <steve@pearwood.info> wrote:
-- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...>

On Thu, Oct 24, 2019 at 3:21 PM Guido van Rossum <guido@python.org> wrote:
Obviously all examples in the Python docs are intended to be copied by anyone at will for use anywhere. Lets not limit it. Lets also make sure we don't need to do any manual work polluting the .rst and docstrings with individual license markers. This should be automated in the doc generation and/or perhaps a common footnote somewhere. -gps

I am not really a lawyer, so I don't know for certain how to effectively do this or how fine-grained it has to be. I can float some possibilities, but someone more knowledgeable would have to assess them. There is a page on the python website about the license [1]. As far as I can tell this page is duplicated in the "LICENSE" file in the root of the Python sources (or there is something very similar). It may be possible to simply put some text there saying that all code present in the documentation is under the CC0 license (probably with the text of the license somewhere). This would be a good thing to do, in my opinion, no matter what, but whether it is sufficient I don't know. If that is sufficient, I think that would be the ideal solution. Perhaps text like: "The Python __ver__ software and documentation is available under the [Python-2.0 license]. However, all code found in the documentation has been released into the public domain or, in jurisdictions where that is not allowed, is available under the [Creative Commons Zero (CC0) license]." ([] indicate links to the license text) I think this would probably be best under the "Terms and conditions" section, but before actual text of the license. If that isn't sufficient, it may be possible to also put that at the bottom of all the documentation pages, where the copyright text already is. I assume the copyright text is some sort of automatically-added footer, so hopefully this would be something that could be done once. Perhaps something like "Code found on this page is under the [CC0 license]". There would need to be care to make sure that this is applied to the code in the documentation, rather than the html and/or javascript code underlying the web page. I don't know if my text does that or not. If even that isn't sufficient, there may be some way to add the CC0 icon [3] to every piece of code in the documentation automatically, but I don't know enough about how the code is generated to say, and I would hope that wouldn't be necessary. Another possibility would be to amend the Python license itself. Currently the license is known as the Python-2.0 license [4]. This would probably be the Python-2.1 license. However, not being a lawyer I would not presume to touch the license text. [1] https://docs.python.org/license.html [2] https://docs.python.org/license.html#terms-and-conditions-for-accessing-or-o... [3] https://licensebuttons.net/p/zero/1.0/88x31.png [4] https://spdx.org/licenses/Python-2.0.html On Thu, Oct 24, 2019 at 6:19 PM Guido van Rossum <guido@python.org> wrote:

Thanks for thinking this through a bit more. I would be wary of changing the Python license -- it's got loads of baggage and legally I don't know if we can make that stick. Basically I think we should let leave well enough alone and let sleeping dogs lie. So I am not keen to add a sentence to the license.html file or to the LICENSE file in the repo and distro. But what I think we *can* do is add that sentence to the introduction of each of the documentation volumes (tutorial, library, reference and maybe 1-2 more). Ideally we would also do something to the Sphinx template to add this (and the CC0 logo) to the bottom of each HTML page next to the copyright notice, as you propose. I'm no Sphinx expert so I don't know how to do that, but I'm sure it's technically feasible and I can't see any legal objection to it. Maybe you could work on a PR with a patch to the doc files? (Maybe also file a bpo issue first to track it.) Final approval may require a roundtrip to the PSF's lawyer, but that's usually easy enough, and it helps tremendously if we have a PR with proposed text. PS. If you can't find where the copyright notice is in the Sphinx templates, maybe it's part of the python.org website? That has its own repo, follow the "Found a bug?" link on each page. --Guido On Tue, Oct 29, 2019 at 6:53 AM Todd <toddrjen@gmail.com> wrote:
-- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...>

I think you might be mixing up two different things. First is the text of the Pytjon-2.0 license. I don't want to change that, or the text of any other license. Second is the LICENSE file. That file includes the text of the Python-2.0 license, the text of every other license used in the project, the history licenses, and some other brief information. This is what I am suggesting we edit. At the very least the LICENSE file, as I understand it, should contain the text of every license used (or say it is in a separate file) and a brief note about where it is used if it isn't the "default" license. As I mentioned, the current file does exactly that. So we would need to add the CC0 license text and at least a very brief explanation of why we added it. Thinking about it a bit more, considering there is already a license history, I think this is a significant enough change that it should probably be mentioned somewhere in that history. Of course the other stuff you mentioned should be done, too. Does this sound reasonable? On Tue, Oct 29, 2019, 14:25 Guido van Rossum <guido@python.org> wrote:

On Tue, Oct 29, 2019 at 3:37 PM Todd <toddrjen@gmail.com> wrote:
That may be how it's used in other projects, but in Python, even that file is carefully crafted by lawyers whom I don't want to wake up, despite it being nearly 20 years later.
I think that a license that is strictly *less* restrictive as one of the licenses in that file doesn't need to be mentioned there, since if you abide by *just* the contents of that file you're still going to be alright. Adding the CC0 text to that file would just add to the confusion -- to what exactly would it apply? People could misunderstand this as CC0 applying to all of Python.
Huh, I think we may need to talk to a lawyer at this point.
Of course the other stuff you mentioned should be done, too. Does this sound reasonable?
Let me see if I can get Van Lindberg to give his opinion. -- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...>

I have news from the PSF's lawyer (Van Lindberg). He writes: """ We don't need to change the Python license as long as all contributors have signed the CLA. Our CLA text actually allows us to relicense contributions under any open source license approved by the board. That means that we can have separate licensing for the examples in the docs. The wrinkle is that CC0 is not actually an open source license, and likely won't become one for various issues. So could we switch to something like BSD-Zero (https://opensource.org/licenses/0BSD) just by having an appropriate motion at the board level and noting that in the docs. """ To me, BSD-Zero looks fine. I am super busy right now so I'm just passing this on. If folks want to move forward with this, I recommend that you (a) propose a PR to the docs (put "[WIP]" in front of the title so it isn't accidentally merged :-), and (b) write an email to the PSF board (CC'ing me or this list) requesting the motion. You'll have to do a bunch of research, but Google knows everything you need to know here (and if you were to ask me, I'd have to ask Google for you -- let's cut out the middle man :-). --Guido On Tue, Oct 29, 2019 at 3:47 PM Guido van Rossum <guido@python.org> wrote:
-- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...>

IANAL, but if we could put a clause in the docs that all recipes are in the public domain, that would be great. -CHB On Thu, Oct 24, 2019 at 11:42 AM Todd <toddrjen@gmail.com> wrote:
-- Christopher Barker, PhD Python Language Consulting - Teaching - Scientific Software Development - Desktop GUI and Web Development - wxPython, numpy, scipy, Cython

On Thu, Oct 24, 2019 at 12:36:40PM -0700, Christopher Barker wrote:
IANAL, but if we could put a clause in the docs that all recipes are in the public domain, that would be great.
The public domain is *exceedingly* problematic. Many juristictions do not have any legal process for putting things into the public domain before the standard copyright expiry, or even prohibit the attempt to surrender such rights. That's why the Creative Commons folks have their CC0 licence, which seems to be the most appropriate for this case. https://creativecommons.org/share-your-work/public-domain/cc0/

OK, let's see if we can do CC0. Todd, do you want to read through the link Steven gave and find out how we should apply this, either to just the itertools examples, or possibly to all examples in the docs? On Thu, Oct 24, 2019 at 2:01 PM Steven D'Aprano <steve@pearwood.info> wrote:
-- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...>

On Thu, Oct 24, 2019 at 3:21 PM Guido van Rossum <guido@python.org> wrote:
Obviously all examples in the Python docs are intended to be copied by anyone at will for use anywhere. Lets not limit it. Lets also make sure we don't need to do any manual work polluting the .rst and docstrings with individual license markers. This should be automated in the doc generation and/or perhaps a common footnote somewhere. -gps

I am not really a lawyer, so I don't know for certain how to effectively do this or how fine-grained it has to be. I can float some possibilities, but someone more knowledgeable would have to assess them. There is a page on the python website about the license [1]. As far as I can tell this page is duplicated in the "LICENSE" file in the root of the Python sources (or there is something very similar). It may be possible to simply put some text there saying that all code present in the documentation is under the CC0 license (probably with the text of the license somewhere). This would be a good thing to do, in my opinion, no matter what, but whether it is sufficient I don't know. If that is sufficient, I think that would be the ideal solution. Perhaps text like: "The Python __ver__ software and documentation is available under the [Python-2.0 license]. However, all code found in the documentation has been released into the public domain or, in jurisdictions where that is not allowed, is available under the [Creative Commons Zero (CC0) license]." ([] indicate links to the license text) I think this would probably be best under the "Terms and conditions" section, but before actual text of the license. If that isn't sufficient, it may be possible to also put that at the bottom of all the documentation pages, where the copyright text already is. I assume the copyright text is some sort of automatically-added footer, so hopefully this would be something that could be done once. Perhaps something like "Code found on this page is under the [CC0 license]". There would need to be care to make sure that this is applied to the code in the documentation, rather than the html and/or javascript code underlying the web page. I don't know if my text does that or not. If even that isn't sufficient, there may be some way to add the CC0 icon [3] to every piece of code in the documentation automatically, but I don't know enough about how the code is generated to say, and I would hope that wouldn't be necessary. Another possibility would be to amend the Python license itself. Currently the license is known as the Python-2.0 license [4]. This would probably be the Python-2.1 license. However, not being a lawyer I would not presume to touch the license text. [1] https://docs.python.org/license.html [2] https://docs.python.org/license.html#terms-and-conditions-for-accessing-or-o... [3] https://licensebuttons.net/p/zero/1.0/88x31.png [4] https://spdx.org/licenses/Python-2.0.html On Thu, Oct 24, 2019 at 6:19 PM Guido van Rossum <guido@python.org> wrote:

Thanks for thinking this through a bit more. I would be wary of changing the Python license -- it's got loads of baggage and legally I don't know if we can make that stick. Basically I think we should let leave well enough alone and let sleeping dogs lie. So I am not keen to add a sentence to the license.html file or to the LICENSE file in the repo and distro. But what I think we *can* do is add that sentence to the introduction of each of the documentation volumes (tutorial, library, reference and maybe 1-2 more). Ideally we would also do something to the Sphinx template to add this (and the CC0 logo) to the bottom of each HTML page next to the copyright notice, as you propose. I'm no Sphinx expert so I don't know how to do that, but I'm sure it's technically feasible and I can't see any legal objection to it. Maybe you could work on a PR with a patch to the doc files? (Maybe also file a bpo issue first to track it.) Final approval may require a roundtrip to the PSF's lawyer, but that's usually easy enough, and it helps tremendously if we have a PR with proposed text. PS. If you can't find where the copyright notice is in the Sphinx templates, maybe it's part of the python.org website? That has its own repo, follow the "Found a bug?" link on each page. --Guido On Tue, Oct 29, 2019 at 6:53 AM Todd <toddrjen@gmail.com> wrote:
-- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...>

I think you might be mixing up two different things. First is the text of the Pytjon-2.0 license. I don't want to change that, or the text of any other license. Second is the LICENSE file. That file includes the text of the Python-2.0 license, the text of every other license used in the project, the history licenses, and some other brief information. This is what I am suggesting we edit. At the very least the LICENSE file, as I understand it, should contain the text of every license used (or say it is in a separate file) and a brief note about where it is used if it isn't the "default" license. As I mentioned, the current file does exactly that. So we would need to add the CC0 license text and at least a very brief explanation of why we added it. Thinking about it a bit more, considering there is already a license history, I think this is a significant enough change that it should probably be mentioned somewhere in that history. Of course the other stuff you mentioned should be done, too. Does this sound reasonable? On Tue, Oct 29, 2019, 14:25 Guido van Rossum <guido@python.org> wrote:

On Tue, Oct 29, 2019 at 3:37 PM Todd <toddrjen@gmail.com> wrote:
That may be how it's used in other projects, but in Python, even that file is carefully crafted by lawyers whom I don't want to wake up, despite it being nearly 20 years later.
I think that a license that is strictly *less* restrictive as one of the licenses in that file doesn't need to be mentioned there, since if you abide by *just* the contents of that file you're still going to be alright. Adding the CC0 text to that file would just add to the confusion -- to what exactly would it apply? People could misunderstand this as CC0 applying to all of Python.
Huh, I think we may need to talk to a lawyer at this point.
Of course the other stuff you mentioned should be done, too. Does this sound reasonable?
Let me see if I can get Van Lindberg to give his opinion. -- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...>

I have news from the PSF's lawyer (Van Lindberg). He writes: """ We don't need to change the Python license as long as all contributors have signed the CLA. Our CLA text actually allows us to relicense contributions under any open source license approved by the board. That means that we can have separate licensing for the examples in the docs. The wrinkle is that CC0 is not actually an open source license, and likely won't become one for various issues. So could we switch to something like BSD-Zero (https://opensource.org/licenses/0BSD) just by having an appropriate motion at the board level and noting that in the docs. """ To me, BSD-Zero looks fine. I am super busy right now so I'm just passing this on. If folks want to move forward with this, I recommend that you (a) propose a PR to the docs (put "[WIP]" in front of the title so it isn't accidentally merged :-), and (b) write an email to the PSF board (CC'ing me or this list) requesting the motion. You'll have to do a bunch of research, but Google knows everything you need to know here (and if you were to ask me, I'd have to ask Google for you -- let's cut out the middle man :-). --Guido On Tue, Oct 29, 2019 at 3:47 PM Guido van Rossum <guido@python.org> wrote:
-- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...>
participants (6)
-
Christopher Barker
-
Gregory P. Smith
-
Guido van Rossum
-
Rhodri James
-
Steven D'Aprano
-
Todd