Skip to content

Commit

Permalink
Mention copyleft in license guide!
Browse files Browse the repository at this point in the history
add bibtex
  • Loading branch information
sneakers-the-rat committed Mar 2, 2024
1 parent 8a91b4c commit ec55d79
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 4 deletions.
47 changes: 47 additions & 0 deletions bibliography.bib
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
@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 @@ -51,6 +51,7 @@
"sphinx_sitemap",
"sphinxext.opengraph",
"sphinx_favicon",
"sphinxcontrib.bibtex"
]

# colon fence for card support in md
Expand Down Expand Up @@ -151,3 +152,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"]
52 changes: 49 additions & 3 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).
These are licenses that require that anyone that uses your work redistributes 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.

The difference between copyleft vs. permissive licenses is an important cultural divide in free and open source software (eg. see {footcite}`hunterReclaimingComputingCommons2016`, {footcite}`gnuprojectWhatFreeSoftware2019`, {footcite}`gnuprojectWhatCopyleft2022`),
that you should be aware of when choosing your license - the lineage of copyleft 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).
:::

### How to choose a license

To select your license, we suggest that you use GitHub's
Expand All @@ -54,18 +70,17 @@ 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
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
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,6 +90,31 @@ 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.
"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 able to be used 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 with MIT needs to take 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") |
|----------------------------------------------------------------:|-----------------------------|--------------|--------------------------------------|
| <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

Expand All @@ -83,6 +123,7 @@ Let's use stackOverflow as an example that highlights how a license determines h
[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.

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 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}
```
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ dev = [
"sphinxext-opengraph",
"sphinx-inline-tabs",
# for project cards
"matplotlib"
"matplotlib",
"sphinxcontrib-bibtex"
]


Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ sphinxext-opengraph
sphinx-inline-tabs
# for project cards
matplotlib
sphinxcontrib-bibtex

0 comments on commit ec55d79

Please sign in to comment.