科学的Pythonオープンソースソフトウェアのライセンスファイル#
GitHub リポジトリにライセンスファイルを追加する方法を学びたいですか? このレッスンを見てみましょう。
オープンソースライセンスファイルとは何ですか?#
LICENSEファイルというのは、GitHubやGitLabのリポジトリにあるファイルのことです。このファイルには、あなたのパッケージをユーザーが合法的に使う(あるいは使わない)方法が書かれています。
ライセンスが重要な理由#
ライセンスファイルは、メンテナであるあなたとユーザの両方を保護するため、すべてのオープンソースプロジェクトにとって重要です。 ライセンスファイルは、あなたのユーザとコミュニティの理解を助けます:
ソフトウェアの利用方法
ソフトウェアの再利用や他の目的への転用が可能かどうか
プロジェクトに貢献する方法
などなど。
科学的なPythonオープンソースパッケージのメンテナであるあなたとユーザの両方を保護するために、ライセンスファイルが重要である理由についてもっと読む
ライセンスの保管場所#
LICENSE
ファイルは GitHub / GitLab リポジトリのルートに保存してください。
特定の理由からライセンスファイルの言葉をカスタマイズするメンテナもいます。 しかし、これから始めるのであれば、寛容なライセンスを選択し、GitHubや choosealicense.com のウェブサイトで提供されている法的な言語テンプレートを使うことをお勧めします。
ライセンスには法的拘束力があるため、法律顧問の指導がない限り、独自のライセンスを作成しようとするのは避けるべきです。
可能な限りオープンパーミッシブライセンスを使用する#
一般的に、 Open Software Initiative (OSI) approvedの寛容なライセンスを使用することを推奨します。 もしあなたが査読のためにpyOpenSciにパッケージを提出する のであれば、OSIが承認したライセンスが必要です。
コピーレフトのライセンス
ライセンスのもう一つの大きなカテゴリーは、 "コピーレフト" ライセンスです 。コピーレフトのライセンスは、あなたの作品を利用する人々に、それを改変、複製、共有、再配布するのと同じ (あるいはそれ以上の) 権利を与えて再配布することを要求します。 言い換えれば、コピーレフトのライセンスは、誰かがあなたの作品を取り上げ、プロプライエタリなバージョンを作り、他の人が同じことができるようにソースコードを提供せずに再配布することを禁止しているのです。コピーレフトのライセンスは、より多くの自由ソフトウェアが作成されるように設計されているという点で、 "粘着性" があります。
コピーレフトとパーミッシブライセンスの違いは、フリーでオープンなソースソフトウェアにおける重要な文化的分裂です (例えば [1], [2], [3])。 ライセンスを選択する際には、この違いを理解することが重要である。 コピーレフトのライセンスは、 "フリーでオープンなソースソフトウェア" の "フリー" の部分を表している。 フリーでオープンなソースソフトウェアは、本質的に政治的なものであり、ライセンスの互換性という現実的な問題 (後述) と同様に、コンピューティングにおけるパワーダイナミクスを意識することが重要です。
ライセンスの選び方#
ライセンスを選択するには、GitHubの Choose a License tool を使うことをお勧めします。
GitHub リポジトリの新規作成時にライセンスを選択すると、自動的にライセンスファイルのテキストコピーを取得してリポジトリに追加することもできます。 しかし、オンラインプロセスでは希望のライセンスが取得できないこともあります。
SciPyパッケージからのライセンス勧告
SciPyのドキュメントには、ライセンスの優れた概要があります 。 これらのドキュメントが推奨する重要な要素の一つは、選択するライセンスが科学的なPythonのエコシステムのコアで使用されているライセンスと相補的であることを確認することです。 以下は、SciPyが使用している修正BSDライセンスと互換性のあるライセンスの概要です。
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] によってライセンスされたコードを含むことができます。
🚨 慎重に進め! 🚨
ソフトウェアの引用についてはどうだろうか?#
多くの寛容なライセンスは引用を必要としませんが、わたしたちは、あなたが論文やブログ、その他の出版物で使用するすべてのソフトウェアを引用することを強く推奨します。 あなたは、 citation.cff ファイル を使うことで、あなたのパッケージの引用方法をユーザに伝えることができます。 このトピックについては、Zenodoを使ってパッケージのDOIを作成する際に説明します。