Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mention copyleft in license guide! #189

Merged
merged 12 commits into from
Oct 7, 2024
43 changes: 43 additions & 0 deletions bibliography.bib
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
@article{hunterReclaimingComputingCommons2016,
title = {Reclaiming the {{Computing Commons}}},
author = {Hunter, Rob},
year = {2016},
month = may,
journal = {Jacobin},
url = {https://jacobin.com/2016/02/free-software-movement-richard-stallman-linux-open-source-enclosure/},
urldate = {2023-03-09},
abstract = {Resisting the commodification of information is a political struggle, not a technical one.},
archive = {https://web.archive.org/web/20230309005744/https://jacobin.com/2016/02/free-software-movement-richard-stallman-linux-open-source-enclosure/},
langid = {american},
keywords = {foss culture,copyleft}
}

@misc{gnuprojectWhatFreeSoftware2019,
title = {What Is {{Free Software}}?},
author = {{GNU Project}},
year = {2019},
month = jul,
journal = {Free Software Foundation},
url = {https://www.gnu.org/philosophy/free-sw.html},
urldate = {2024-03-01}
}

@misc{gnuprojectWhatCopyleft2022,
title = {What Is {{Copyleft}}?},
author = {{GNU Project}},
year = {2022},
month = jan,
journal = {Free Software Foundation},
url = {https://www.gnu.org/copyleft/},
urldate = {2024-03-01}
}

@misc{creativecommonsShareAlikeCompatibilityGPLv32015,
title = {{{ShareAlike}} Compatibility: {{GPLv3}}},
author = {{Creative Commons}},
year = {2015},
month = sep,
journal = {Creative Commons Wiki},
url = {https://wiki.creativecommons.org/wiki/ShareAlike\_compatibility:\_GPLv3},
urldate = {2024-03-02}
}
6 changes: 6 additions & 0 deletions conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
"sphinx_sitemap",
"sphinxext.opengraph",
"sphinx_favicon",
"sphinxcontrib.bibtex"
]

# colon fence for card support in md
Expand Down Expand Up @@ -161,3 +162,8 @@
"line_color": "#6D597A",
"image": "_static/pyopensci-logo-package-guide.png",
}

# Bibliographies
bibtex_bibfiles = ['bibliography.bib']
# myst complains about bibtex footnotes because of render order
suppress_warnings = ["myst.footnote"]
58 changes: 52 additions & 6 deletions documentation/repository-files/license-files.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
bibliography:
- ../../bibliography.bib
---

# License files for scientific Python open source software

:::{button-link} https://www.pyopensci.org/about-peer-review/
Expand Down Expand Up @@ -41,6 +46,17 @@ We generally suggest that you use a permissive, license that is [Open Software I
[submitting your package to pyOpenSci for peer review](https://www.pyopensci.org/about-peer-review/index.html), then we require an OSI approved
license.

:::{admonition} Copyleft licenses
The other major category of licenses are ["copyleft" licenses](https://en.wikipedia.org/wiki/Copyleft).
willingc marked this conversation as resolved.
Show resolved Hide resolved
Copyleft licenses require people that use your work to redistribute it with the same (or greater) rights to modify, copy, share, and redistribute it.
In other words, copyleft licenses prohibit someone taking your work, making a proprietary version of it, and redistributing it without providing the source code so others can do the same.
Copyleft licenses are "sticky" in that they are designed to ensure that more free software is created.
Comment on lines +52 to +53
Copy link
Member

@lwasser lwasser Mar 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
In other words, copyleft licenses prohibit someone taking your work, making a proprietary version of it, and redistributing it without providing the source code so others can do the same.
Copyleft licenses are "sticky" in that they are designed to ensure that more free software is created.
This makes copyleft licenses "sticky" in that they are designed to ensure that more free software is created. If your work has a copyleft license, it prohibits someone taking it, making a proprietary version of it, and redistributing it without providing the source code for others to use and share.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'm not sure if this is quite right but just trying to simplify the words a bit :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm ya you're right there needs to be a little more glue between these ideas bc it's not quite clear how they encourage more free software from this alone. I think the order of explaining what they are -> what 'stickiness' means makes sense, but maybe like "This requirement makes copyright licenses "sticky" - they are designed to encourage more free, copyleft licensed software to be created."

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think i follow!! i updated the revision.


The difference between copyleft and permissive licenses is an important cultural divide in free and open source software (e.g., see {footcite}`hunterReclaimingComputingCommons2016`, {footcite}`gnuprojectWhatFreeSoftware2019`, {footcite}`gnuprojectWhatCopyleft2022`).
It is important to understand this difference when choosing your license. Copyleft licenses represents the "free" part of "free and open source software".
Free and open source software is intrinsically political, and it is important to be aware of power dynamics in computing as well as the practical problems of license compatibility (discussed below).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is al great @sneakers-the-rat , thank you!! I have a few thoughts and questions here.

  1. i think for someone who is new to software and OSS the political part will seem "out of no where" and potentially scary even tho it is truth. i wonder if there is a way to make this statement a bit more clear to someone that is new. i feel like there is a leap here from - let's add a license to your package to - there are power dynamics at play and licenses can be play a role in these dynamics. i'm not sure what language we should use but i just wonder if we can make this more clear to someone who is newer to the space. It's especially confusing as projects like numpy ahd choosealicense.org suggest that we use MIT. so i'd be asking - well it seems like everyone should use GNU then. Why are we using MIT? why are we suggesting MIT.
    do you see where i'm going here? can we adjust to consider those types of questions and thoughts / concerns? (honestly i'm thinking the same right now as we decided on MIT as a community but copyleft does sound compelling the way it's described here.

Copy link
Contributor Author

@sneakers-the-rat sneakers-the-rat Mar 22, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we can say something like "This set of tutorials is primarily intended to teach you to program, but an important part of learning to be a programmer is learning about the history and culture of open source software. Licensing is a decision about who can do what with your code, which is intrinsically political ... {rest of text} ... there are legitimate differences in goals and context for open source software, and each category of licenses has their uses, supporters, and detractors"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think that makes a lot of sense to frame it . do you want to make that change to the file? This is also making me think that we should either have a blog post on this topic (probably preferred) OR add a page to the guide about the culture of open source software. Or both. that way we can link to that content rather than adding too much to individual pages. how about that? i can open this as a new issue in this repo and we can decide whether it should be a blog or a page in the guide. and maybe we can get the community to help write it if someone starts it.

i'll open the issue now and we can discuss separately

:::

### How to choose a license

To select your license, we suggest that you use GitHub's
Expand All @@ -52,20 +68,19 @@ in some cases the license that you want is not available through that online
process.

:::{admonition} License recommendations from the SciPy package
[The SciPy documentation has an excellent overview of licenses.](https://docs.scipy.org/doc/scipy/dev/core-dev/index.html#licensing). Once of the key elements
[The SciPy documentation has an excellent overview of licenses.](https://docs.scipy.org/doc/scipy/dev/core-dev/index.html#licensing). One of the key elements
that these docs recommend is ensuring that the license that you select is
complementary to license used in the core scientific Python ecosystem.
compatible with licenses used in many parts of the scientific Python ecosystem.
Below is a highlight of this text which outlines license that are compatible
with the modified BSD license that SciPy uses.

> Other licenses that are compatible with the modified BSD license that SciPy uses are 2-clause BSD, MIT and PSF. Incompatible licenses are GPL, Apache and custom licenses that require attribution/citation or prohibit use for commercial purposes.

To coordinate with other packages in our scientific ecosystem, we also recommend
If your primary goal is for your code to be used by other, major packages in the scientific ecosystem, we also recommend
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see this conflicts with the breakout above. and i totally understand why we want that breakout above. but a new user will be confused by this after reading about copyleft! so how can we create a text bridge between the two?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how do you mean? like we should have a parallel "otherwise, if your goal is..." for copyleft? I read it as previous section recommending permissive licenses, and then this section further explaining why that would be the case - there are lots of major packages that use permissive, and if you use copyleft then your work can't be used in them. can you tell me more about what's reading as discordant?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it conflicts with the recommendations that the scientific community is making already. as a reader i see - pyopensci suggests MIT, scipy suggests using licenses that are compliant with the rest of the scientific ecosystem. and then now we're talking about copyleft which actually aren't compliant with the ecosystem. there is cognative dissonance here as a reader trying to make a decision

that you consider using either BSD or MIT as your
license. If you are unsure, the MIT license tends to be a simpler easier-to-understand option.
:::


## Important: make sure that you closely follow the guidelines outlines by the License that you chose

Every license has different guidelines in terms of what code
Expand All @@ -75,14 +90,40 @@ If you borrow code from other tools or online sources, make
sure that the license for the code that you are using also complies
with the license that you selected for your package.

A useful way to think about license compatibility is the distinction between **"inbound"** and **"outbound"** compatibility.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i feel like some of this would be useful above. what is we thought about re-organizing this page jonny?

at the top we have

Where to store your license

Use open permissive licenses when possible

what is instead we do something like this

## Where to store your license
keep text as is 

##Types of licenses: permissive vs copyleft 

explain inbound vs outbound restrictions here to frame the text below

### Overview of permissive licenses

### Overview of copyleft licenses (make your breakout into this section)

 ## How to chose a license 

* we suggest mit or bsd-3 for compatibilty with the scientific Python ecosystem
* scipy text as a reference 

## Following license guidelines

more about how to follow and how that impacts permissive vs copyleft (which by now it's clear how these are different). and yo've already explain inbound vs outbound permisions above so you can just have a little table even and demonstrate how the licenses are different. 


Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should probably come after we give definitions of what the categories of licenses are, but i'm definitely game to making a separate section for each type, that is def clearer and might help above comment re: ordering.

I see this thought as being part of all three 'what are the types of licenses,' 'why might i choose one vs another,' and 'how do i follow license guidelines' so idk! I think it's nicely paired with the example of stack overflow. so i could see this part going one of a few places...

- Where to store license
- Types of licenses
  - permissive
  - copyleft
  - comparison <--- maybe here???
- choosing a license
  - suggestion
  - scipy thing
  - considerations to weigh <--- maybe here???
- following license guidelines
  - when you can and can't use software given your license <--- maybe here???
  - stack overflow example

i don't rly have a strong preference, but i think you're right maybe sooner is good :)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think what you have above is fine. i just think all of the overview should be in one section and then choosing should be it's own section with limited additional info but definitely a considerations section

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Opened issue #415.

"Inbound" licenses are those that cover the software you plan to include in your package.
Your package is protected by an "outbound" license.

**Permissive licenses** like BSD and MIT have few **outbound** restrictions - they can be used in any way by downstream consumers, including making them proprietary.
This is why they are favored by many businesses and large packages that want to be adopted by businesses.
Permissive licenses have more **inbound** restrictions - they can't use software that requires more freedoms to be preserved than they do, like copyleft licenses.
A package licensed under MIT needs to take special care when including or modifying a package licensed under the GPL-3.

**Copyleft licenses** like GPL-3 have more **outbound** restrictions - they require more of packages that include, use, modify, and reproduce them.
This is the purpose of copyleft licenses, to ensure that derivative works remain free and open source.
They have fewer **inbound** restrictions - a GPL-3 licensed package can include any other permissively licensed and most copyleft licensed packages.

| Compatible | Dependency <br> ("Inbound") | Your Package | Downstream Package <br> ("Outbound") |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OMG you have a table - yes! i was thinking a table would be great. myst tables are pretty create btw. simpler syntax / easier to read :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you mean the list table directive? i can swap it to that if you'd prefer :)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes list or any of those directives i find to be easier to read / fix edit :)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Opened #416 as a task for post-merge.

|----------------------------------------------------------------:|-----------------------------|--------------|--------------------------------------|
| <i class="fa-solid fa-check" style="color: MediumSeaGreen"></i> | Permissive | Permissive | |
| <i class="fa-solid fa-x" style="color: Crimson"></i> | Copyleft | Permissive | |
| <i class="fa-solid fa-check" style="color: MediumSeaGreen"></i> | | Permissive | Permissive |
| <i class="fa-solid fa-check" style="color: MediumSeaGreen"></i> | | Permissive | Copyleft |
| <i class="fa-solid fa-check" style="color: MediumSeaGreen"></i> | Permissive | Copyleft | |
| <i class="fa-solid fa-check" style="color: MediumSeaGreen"></i> | Copyleft | Copyleft | |
| <i class="fa-solid fa-x" style="color: Crimson"></i> | | Copyleft | Permissive |
| <i class="fa-solid fa-check" style="color: MediumSeaGreen"></i> | | Copyleft | Copyleft |


:::{admonition} An example of how a license determine how code can be reused
:class: note

Let's use StackOverflow as an example that highlights how a license determines how code can or can not be used.

[Stack overflow uses a Creative Commons Share Alike license.](https://stackoverflow.com/help/licensing). The sharealike license requires you to use the same sharealike license when you reuse any code from StackOverflow.
[Stack Overflow uses a Creative Commons Share Alike license.](https://stackoverflow.com/help/licensing). The sharealike license requires you to use the same sharealike license when you reuse any code from Stack Overflow.

This means that technically, if you copy code from the Stack Overflow website, and use it in your package. And your packages uses a different license such as a MIT license, you are violating Stack Overflow's license requirements!
This means that from a legal perspective, if you copy code from the Stack Overflow website and use it in your package that is licensed differently, say with a MIT license, you are violating Stack Overflow's license requirements!
This would not be true with a GPL licensed package. `GPL-3` packages can include code licensed by `CC-BY-SA` {footcite}`creativecommonsShareAlikeCompatibilityGPLv32015`.

🚨 Proceed with caution! 🚨
:::
Expand All @@ -98,3 +139,8 @@ These files - we need to understand if that date releases auto populates or forc


-->

# References

```{footbibliography}
```
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ dependencies = [
"sphinx-inline-tabs",
# for project cards
"matplotlib",
# for license page bibliography
"sphinxcontrib-bibtex",
]

[project.optional-dependencies]
Expand Down
Loading