License files for Python open source software#
GitHub リポジトリにライセンスファイルを追加する方法を学びたいですか? このレッスンを見てみましょう。
オープンソースライセンスファイルとは何ですか?#
LICENSEファイルというのは、GitHubやGitLabのリポジトリにあるファイルのことです。このファイルには、あなたのパッケージをユーザーが合法的に使う(あるいは使わない)方法が書かれています。
ライセンスが重要な理由#
ライセンスファイルは、メンテナであるあなたとユーザの両方を保護するため、すべてのオープンソースプロジェクトにとって重要です。 ライセンスファイルは、あなたのユーザとコミュニティの理解を助けます:
ソフトウェアの利用方法
ソフトウェアの再利用や他の目的への転用が可能かどうか
プロジェクトに貢献する方法
などなど。
科学的なPythonオープンソースパッケージのメンテナであるあなたとユーザの両方を保護するために、ライセンスファイルが重要である理由についてもっと読む
ライセンスの保管場所#
LICENSE
ファイルは GitHub / GitLab リポジトリのルートに保存してください。
特定の理由からライセンスファイルの言葉をカスタマイズするメンテナもいます。 しかし、これから始めるのであれば、寛容なライセンスを選択し、GitHubや choosealicense.com のウェブサイトで提供されている法的な言語テンプレートを使うことをお勧めします。
ライセンスには法的拘束力があるため、法律顧問の指導がない限り、独自のライセンスを作成しようとするのは避けるべきです。
可能な限りオープンパーミッシブライセンスを使用する#
We generally suggest that you use a permissive, license that is Open Software Initiative (OSI) approved. If you are submitting your package to pyOpenSci for peer review, then we require an OSI approved license.
コピーレフトのライセンス
ライセンスのもう一つの大きなカテゴリーは、 "コピーレフト" ライセンスです 。コピーレフトのライセンスは、あなたの作品を利用する人々に、それを改変、複製、共有、再配布するのと同じ (あるいはそれ以上の) 権利を与えて再配布することを要求します。 言い換えれば、コピーレフトのライセンスは、誰かがあなたの作品を取り上げ、プロプライエタリなバージョンを作り、他の人が同じことができるようにソースコードを提供せずに再配布することを禁止しているのです。コピーレフトのライセンスは、より多くの自由ソフトウェアが作成されるように設計されているという点で、 "粘着性" があります。
コピーレフトとパーミッシブライセンスの違いは、フリーでオープンなソースソフトウェアにおける重要な文化的分裂です (例えば [1], [2], [3])。 ライセンスを選択する際には、この違いを理解することが重要である。 コピーレフトのライセンスは、 "フリーでオープンなソースソフトウェア" の "フリー" の部分を表している。 フリーでオープンなソースソフトウェアは、本質的に政治的なものであり、ライセンスの互換性という現実的な問題 (後述) と同様に、コンピューティングにおけるパワーダイナミクスを意識することが重要です。
ライセンスの選び方#
ライセンスを選択するには、GitHubの Choose a License tool を使うことをお勧めします。
GitHub リポジトリの新規作成時にライセンスを選択すると、自動的にライセンスファイルのテキストコピーを取得してリポジトリに追加することもできます。 しかし、オンラインプロセスでは希望のライセンスが取得できないこともあります。
SciPyパッケージからのライセンス勧告
The SciPy documentation has an excellent overview of licenses. One of the key elements that these docs recommend is ensuring that the license that you select is 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.
SciPyが使用している修正BSDライセンスと互換性のある他のライセンスは、2-clause BSD、MIT、PSFです。 互換性のないライセンスは、GPL、Apache、および帰属表示/引用を必要とする、または商用目的での使用を禁止するカスタムライセンスです。
もしあなたのコードが、科学的エコシステムの他の主要なパッケージで使われることを第一の目的としているのであれば、BSDかMITのどちらかのライセンスを使うことを検討することも推奨します。 よくわからない場合、MITライセンスはよりシンプルで理解しやすい選択肢となる傾向があります。
重要:選択したライセンスのガイドラインに忠実に従うこと#
どのライセンスも、あなたがパッケージの中でどのようなコードを使うことができるか、また、他の人があなたのパッケージの中のコードをどのように使うことができるか(あるいは使うことができないか)という点で、異なるガイドラインを持っています。
他のツールやオンラインソースからコードを借用する場合は、使用するコードのライセンスが、あなたがパッケージに選択したライセンスにも準拠していることを確認してください。
ライセンスの互換性について考えるのに便利なのは、 "inbound" と "outbound" の互換性という区別です。 "Inbound" ライセンスとは、あなたがパッケージに含める予定のソフトウェアをカバーするライセンスです。あなたのパッケージは "outbound" ライセンスで保護されています。
BSDやMITのような Permissive licenses は、 outbound の制限がほとんどありません - 専有化も含めて、ダウンストリームのカスタマーがどのようにでも使用することができます。 そのため、多くの企業や、企業に採用されたいと考えている大規模なパッケージに支持されています。パーミッシブライセンスには、より多くの inbound 制限があります - コピーレフトライセンスのように、自分たち以上に自由を守る必要のあるソフトウェアを使うことができないのです。MITでライセンスされたパッケージは、GPL-3でライセンスされたパッケージを含めたり改変したりする場合、特別な注意を払う必要があります。
GPL-3のような Copyleft licenses は、より outbound の制限があります - それらは、それらを含み、使用し、変更し、複製するパッケージにより多くを要求します。 これがコピーレフトライセンスの目的であり、派生作品がフリーでオープンソースのままであることを保証するためです。 inbound の制約が少ないです - GPL-3でライセンスされたパッケージは、他の寛容にライセンスされたパッケージや、コピーレフトでライセンスされたパッケージのほとんどを含めることができます。
互換性 |
依存 |
あなたのパッケージ |
下流パッケージ |
---|---|---|---|
許可制 |
許可制 |
||
コピーレフト |
許可制 |
||
許可制 |
許可制 |
||
許可制 |
コピーレフト |
||
許可制 |
コピーレフト |
||
コピーレフト |
コピーレフト |
||
コピーレフト |
許可制 |
||
コピーレフト |
コピーレフト |
ライセンスがコードの再利用を決定する例
StackOverflowを例に、ライセンスによってコードの使用可否がどのように決まるかを明らかにしましょう。
Stack OverflowはCreative Commons Share Alikeライセンスを使用しています。 Sharealikeライセンスでは、Stack Overflowのコードを再利用する際に、同じSharealikeライセンスを使用することが義務付けられています。
つまり、法的な観点からは、Stack Overflowのウェブサイトからコードをコピーし、MITライセンスなど異なるライセンスのパッケージで使用すると、Stack Overflowのライセンス要件に違反することになります! これはGPLライセンスのパッケージでは当てはまりません。 GPL-3
パッケージは CC-BY-SA
[4] によってライセンスされたコードを含むことができます。
🚨 慎重に進め! 🚨
ソフトウェアの引用についてはどうだろうか?#
While many permissive licenses do not require citation, we strongly encourage that you cite all software that you use in papers, blogs, and other publications. You tell your users how to cite your package by using a citation.cff file.
Citation.cff files: Making your software citable#
A CITATION.cff
file is a machine-readable file that provides citation information for your software package. The "cff" stands for "Citation File Format," which is a standardized format for software citation metadata.
What citation.cff files add to your repository#
When you add a CITATION.cff
file to your repository, GitHub automatically detects it and displays a "Cite this repository" button. This makes it easy for users to properly cite your software. The file contains standardized citation information that tools and services can automatically read and use. GitHub will generate both APA and BibTeX citation formats for users.
How dates are tracked in citation.cff files#
The citation file tracks important dates for your software. The date-released
field shows when the current version was released. The date-published
field shows when the software was first made available. You also include a version
field with the specific version number.
You should update these dates with each new release so people cite the correct version of your software.
Integration with Zenodo#
Citation.cff files work well with Zenodo, which is a popular place to store research software and get DOIs. When you create a Zenodo release, it can automatically pull information from your citation file. This keeps your citation information the same between GitHub and Zenodo. You can also include your Zenodo DOI in the citation file. Each time you make a new GitHub release, it can create a new Zenodo version with updated citation information.
Here's a basic example of what a CITATION.cff
file might look like:
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Your Last Name"
given-names: "Your First Name"
orcid: "https://orcid.org/0000-0000-0000-0000"
title: "Your Package Name"
version: 1.0.0
doi: "10.5281/zenodo.1234"
date-released: 2025-07-12
url: "https://github.com/yourusername/your-package"