• 対象読者: 自分の書いた競プロ用ライブラリ1を公開している人2
  • 注意: 法律の専門家でない人間が書いています。内容については保証しません
  • 言いたいこと: 「意味をよく分かってないままとりあえずで MIT License とか書くのやめろ。それなら何も書かない方がましだぞ」

Q. ソフトウェアライセンスとは何ですか?

A. 開発者からユーザに対する、「そのソフトウェアを使ってもよい」という許可のことです。

Q. ライセンスがないソフトウェアを使ってはいけないのですか?

A. はい。

「ソフトウェアは著作物であり」かつ「他人の著作物を勝手に使ってはいけない」ことから、「他人の書いたソフトウェアを勝手に使ってはいけない」のは明らかです。 ただし、ライセンスについての表示がないとしても、開発者がソフトウェアを他人に使ってもらう意図で公開している場合は、それを使ったとしても問題は起きにくいでしょう。

Q. 競プロ用のライブラリにもライセンスは必要ですか?

A. はい。そのライブラリを他の人にも使ってもらいたいのなら、(適切な) ライセンス表示はあった方がよいです。

アルゴリズムやデータ構造のようなアイデアそれ自体は著作権法では保護されません3が、それをコードに落とした表現は著作権法で保護されます。 特に「柔軟性を持たせるため抽象化を工夫した」「定数倍速くするために技巧を凝らした」などの創意工夫が含まれると著作権法の保護の対象になるでしょう。 ユーザは、そのようなコードを無断で利用することができません。

Q. 競プロ用のライブラリにはどのライセンスを付ければよいですか?

A. たいていの場合、以下の 3 種のうちのどれかを選べばよいでしょう。

  1. CC0
  2. MIT License + 著作権表示および許諾表示についての注意
  3. (ライセンスなし)

1. CC0

すべての権利を放棄4し、ユーザがまったく自由に5利用できる状態にします。 また、そのライブラリに関する責任も負いません。 「著作権とか面倒なので全部放棄でいいです。勝手にやってくれ」という人におすすめです。

このライセンスを付与するには README などに「本作品はCC0ライセンスによって許諾されています。ライセンスの内容を知りたい方は https://creativecommons.org/publicdomain/zero/1.0/deed.ja でご確認ください。」と書けばよいです。

注意: 形式ばらないライセンスはやめておけ

形式ばらないライセンスとは、「まったく自由に使ってください」「常識の範囲内で何をしてくれてもよいです」のような曖昧な文章を意味します。

たとえば「常識の範囲内で」と書いたとき、それは「作者にとっての常識」「ユーザにとっての常識」「世間一般にとっての常識」のどれでしょうか? 公開されたソフトウェアを使ってなにか損害が発生したとき、それは誰の責任でしょうか? これは無用なトラブルを呼びます。

2. MIT License + 著作権表示および許諾表示についての注意

MIT License はつまり「私が作ったものだということを書いておいてくれれば、何をしてくれてもよい5。なにかあっても責任は取らない」ということを言うライセンスです。 ただしそのままだと競技プログラミングのライブラリには適さないため、注意を加えます。 「基本的に好きに使ってもらっていいけど、自分の書いたライブラリだということだけはしっかり主張しておきたい」という人におすすめです。

このライセンスを付与するには README などに「このライブラリは、MIT License のもとで公開されている。ただし、競技プログラミングのためにこのライブラリの一部をジャッジサーバなどに送信するとき、著作権表示および許諾表示を省略することができる」などと書きます6

注意: 単なる MIT License を使うのはやめろ

競技プログラミングのライセンスに対し、単に「このライブラリは、MIT License のもとで公開されている。」とだけ書くのは不適切です7。 MIT License には「私が作ったものだということを書いておいてくれれば、…」というような条件が含まれており、これに従うためにはジャッジサーバへの提出すべてにそのような表記を含める必要がでてくるためです。

この著作権表示と許諾表示を含めることはとても面倒であり、実質的に「私のライブラリを競プロに使うな」と言っているのと変わらない状態になります。 また、たいていの競プロerは著作権表示と許諾表示について認識していないため、あなたのライブラリはライセンス違反を誘導する罠として機能することでしょう。 「ライブラリの一部をコピペするだけなら著作権表示や許諾表示を含める必要はないだろう」という見方もできますが、その見方を採用するのなら、そもそも最初からライセンス表示をする必要がないはずです。

3. (ライセンスなし)

(本来は) ユーザに対し何も許可しません。

上の注意のように、MIT License などの通常のライセンスは、現状の競技プログラミングの文化とあまり相性がよくありません。 「ソフトウェアライセンスとは何か」「そのライセンスはユーザに何を要求し何を許可するのか」を理解せず不適切な表記をするくらいなら、むしろ何も書かない方がよいでしょう。 ライセンスが明記されているライブラリをライセンス違反の状態で使わせるよりは、ライセンスが明記されていないライブラリを曖昧なままで使わせる方がいくらかましです。

おまけ: Q. 私の競プロ用ライブラリは自分のものでないソフトウェアを呼び出しています。このようなときもライセンスを付けてしまってよいのですか?

A. はい。

あなたのライブラリが単に他のソフトウェア (たとえば GCC, CPython, …) を呼び出すだけなら、それらについての著作権表示はおそらく不要です8。 ライセンスについて問題が発生するのは、あなたのライブラリの中に他のソフトウェアのソースコードが含まれていて同時に配布されるときです。


  1. Spaghetti Source - 各種アルゴリズムの C++ による実装 とか library | ライブラリ群archive.org のことです。 

  2. 逆に、「競プロ用ライブラリ」と言われてその具体例を挙げられないような人はこの記事を読むべきではありません。タイトルにある通り、この記事は「競プロライブラリのためのソフトウェアライセンスについて」が記載されています。 

  3. 特許法によって保護されます。 

  4. 正確にはライセンスというより権利の放棄です。「これは私のものだけど、あなたにもこれを使わせてあげる」ではなく「これは私のものでなくみんなのものである。だからもちろんあなたはこれを使ってよい」という形になります。放棄なのでその撤回は難しいです。 

  5. 「AtCoder に提出する」などだけでなく「有料で販売する」なども許可されます。ただし「勝手に著作権を主張する」などはできません。これは著作権の切れている作品 (たとえば、枕草子や源氏物語) を勝手に印刷し販売することができる (しかし自分が書いたわけではないので著作権を主張することはできない) のと同じです。  2

  6. 加えて、ライセンス条文をコピーし LICENSE という名前のファイルに書いて置いておくとより適切です。もしあなたが GitHub 上でライブラリを公開しているのなら、リポジトリへのライセンスの追加 - GitHub ヘルプ に書かれている手順に従うとよいでしょう。 

  7. これは競技プログラミング特有の事情によるものであり、通常のソフトウェアには通常の MIT License で十分です。 

  8. 同様に、あなたのライブラリが他のソフトウェア (たとえば Windows, Visual Studio Code, …) を使って作られていた場合も、それらについての著作権表示はたいてい不要です。