標準ライセンスヘッダって何? どこに何を書けばいいの?
Copyright (c)
を含む定型文のこと。これをプログラム表示できるところに書く。
コピペしただけではダメなの?
GitHubにおいてライセンスファイルをコピペしただけではダメなのか? ダメっぽい。
ライセンスによって対処が異なる。少なくともコピペしただけでは使えないっぽい。各ライセンスごとにその英文を読んで対処を見定める必要がありそうだ……。
MIT
, BSD
MIT
やBSD
ではライセンスファイル内にあるCopyright (c) [year] [fullname]
の[year]
や[fullname]
を適切に置換する必要がある。
GPL
, Apache-2.0
ライセンスファイルを変更してはダメらしい。
その上で標準ライセンスヘッダなるものを各所に表示すべきだという。それらの説明はライセンスファイル内の末尾に『付録』として記述されている。これもまた削除してはダメっぽい。
AGPL
はGPL
と同様。
LGPL
は標準ライセンスヘッダがなかった。-only
と-or-later
は標準ライセンスヘッダの一部が違うだけだが、標準ライセンスヘッダがないLGPL
はどちらもまったく同一の内容だった。ならどうやって-only
と-or-later
の区別をつけるの? 謎。たぶん自前で英文を用意するなり、-only
/-or-later
をそのまま書くなりすることになるのだろう。
Apache-2.0
はライセンスファイル自体の変更について書いていないっぽい。それ以外はGPL
と同じ対処と思われる。
CC0
, Unlicense
CC0
などのパブリックドメイン系なら名前や西暦はいらないのでは? と思うのだが、著作権発行年を書いておいたほうがいいという話も聞く。著作権がいつ切れるかが明確になるからだとか。
それを書くとしても、ライセンスファイル内に書くべきかどうかわからない。でもLICENSEファイル単独で先述の情報がわからなければライセンスファイルとしての意義が薄れる気もする。でもライセンスファイル自体を変更していいのか? わからん。
標準ライセンスヘッダ
ライセンスを定義しているSPDXとかいうサイトを参照し、各ライセンスを見てみる。
GPL-3.0-only
以下のようにGPLを適用する方法を示した文章が付録として記載されている。
END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/ licenses/why-not-lgpl.html>.
以下の部分を追記しろとある。
<one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
では、どこに追記するのか? 以下のように書いてあった。
- プログラムに次の通知を添付してください
- 各ソースファイルの先頭にそれらを添付するのが最も安全です
とある。各ソースファイルの先頭にこんなクソ長い文章なんて書いてられん。スパムかよ。では最初にある「プログラム」とは何か? 以下から察するにヘルプ表示のことだろう。
- プログラムが端末と対話する場合は、対話モードで起動したときに次のような短い通知を出力します。
<program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
show w
などは実際のコマンド引数に置き換えるらしい。これも面倒だな。全部ヘルプに出したら一番みたいヘルプ的内容が霞んでしまいそう。サブコマンド化して分けるべきか? それだと本筋の処理に使うコマンドと重複する。ならヘルプのサブコマンドにするか? ヘルプでなくabout
かもしれん。でもヘルプと分けると覚えるコマンドが増えてしまう。
command help # ツールのヘルプを表示 command help usage # ツールの使い方を表示 command help version # ツールのバージョンを表示 command help copyright # ツールのコピーライト表示 command help license # ツールのライセンス表示 command help author # ツールの著者を表示
GUIアプリの場合はどうするんだ? help
→about
(ヘルプ→このアプリについて)のメニュー項目から表示する感じか? どこにも書いていないが、そんなところだろう。たぶん。
LICENSEファイルを置くだけじゃダメなの? せめてREADMEに一言書くだけで許してくれないかな。
「変更するな」とあるのだが?
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
誰もがこのライセンス文書のコピーをそのままコピーして配布することは許可されていますが、変更することは許可されていません。
え、どゆこと? コピーライト文言は変えなきゃダメなんじゃないの? 『付録』は削除しなくていいの?
LICENSE
ファイルは一切変更せずそのままにする(付録もそのまま)- コピーライト文言を含むライセンスヘッダはREADME、コード、プログラム出力結果に表示する
ということだろうか? 以下はダメなのか? これならREADMEを触らずに済むので助かるのだが。
LICENSE
ファイルの先頭にコピーライト文言を含むライセンスヘッダを追記する
GitHubで確認した。リポジトリ新規作成しGPL-3.0
ライセンスを追加してみたところ、付録にあるコピーライトは変更されていなかった。Copyright (C) <year> <name of author>
のようにそのままだった。付録自体も削除せずそのまま。先頭に配置するようなこともしていない。
つまりGPLを適用するなら、ライセンスファイルはそのまま使うべき。
ライセンスファイル自体が免許証なのだろうか? 勝手に改ざんしたら無効化される的な?
コピーライト文言を含むライセンスヘッダは次の箇所へ追記する。
- README
- ソースコード
- プログラム出力
コピーライトこそ必要だと思うのだが、それをライセンスファイルに書き込むことは許されていない。つまりLICENSEファイルだけでは完結できない。面倒くせぇ……。
これ、簡単に自動化できなくね? 超大変じゃん。
Apache-2.0
もこれと同じような感じっぽい。
MIT
, BSD
LICENSE
ファイル内にあるコピーライト文言を変更すべき。以下MIT
。
before
Copyright (c) [year] [fullname]
after
Copyright (c) 2020 ytyaru
BSD-2-Clause
も同様だが、コピーライト文言が微妙に異なる。カンマがあったりAll rights reserved.
があったり。
Copyright (c) [year], [fullname] All rights reserved.
これらはLICENSEファイル内にコピーライト文言があるのでわかりやすい。LICENSEファイル単独で著者名と発行年がわかる。ふつうこうじゃないのか? MITのほうが楽そう。だからよく使われるのだろう。でも結局READMEくらいには別途書いておくべきだなのだろう。なら大差ないか?
どうすればいい?
GPL
,Apache-2.0
- LICENSEファイル
- そのまま一切変更せず
- 標準ライセンスヘッダ(コピーライト文言を含む)
- プログラムで表示する
- できればソースコードにも書く
- LICENSEファイル
MIT
,BSD
- LICENSEファイル
- ファイル内に著作権の発行年と著者名を書く
- LICENSEファイル
CC0
,Unlicense
所感
とりあえずLICENSEファイルの著者名などを置換する処理を書くべきか。
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release
$ uname -a Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux