やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

標準ライセンスヘッダって何? どこに何を書けばいいの?

 Copyright (c)を含む定型文のこと。これをプログラム表示できるところに書く。

コピペしただけではダメなの?

 GitHubにおいてライセンスファイルをコピペしただけではダメなのか? ダメっぽい。

 ライセンスによって対処が異なる。少なくともコピペしただけでは使えないっぽい。各ライセンスごとにその英文を読んで対処を見定める必要がありそうだ……。

MIT, BSD

 MITBSDではライセンスファイル内にあるCopyright (c) [year] [fullname][year][fullname]を適切に置換する必要がある。

GPL, Apache-2.0

 ライセンスファイルを変更してはダメらしい。

 その上で標準ライセンスヘッダなるものを各所に表示すべきだという。それらの説明はライセンスファイル内の末尾に『付録』として記述されている。これもまた削除してはダメっぽい。

 AGPLGPLと同様。

 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アプリの場合はどうするんだ? helpabout(ヘルプ→このアプリについて)のメニュー項目から表示する感じか? どこにも書いていないが、そんなところだろう。たぶん。

 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を適用するなら、ライセンスファイルはそのまま使うべき。

 ライセンスファイル自体が免許証なのだろうか? 勝手に改ざんしたら無効化される的な?

 コピーライト文言を含むライセンスヘッダは次の箇所へ追記する。

 コピーライトこそ必要だと思うのだが、それをライセンスファイルに書き込むことは許されていない。つまり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ファイル
      • そのまま一切変更せず
    • 標準ライセンスヘッダ(コピーライト文言を含む)
  • MIT, BSD
    • LICENSEファイル
      • ファイル内に著作権の発行年と著者名を書く
  • CC0, Unlicense
    • LICENSEファイル
      • ファイル内に著作権の発行年と著者名を書く
        • パブリックドメインなのにコピーライトを書くのは矛盾するため違和感ある
          • 「法の許す限り」という条件付きであることから書いたほうが無難と思われる
          • コピーライトでなく英文で書くべき?
            • 「{AUTHOR}は{YEAR}年に本ソフトにおける著作権を法の許す限り放棄する」みたいに

所感

 とりあえずLICENSEファイルの著者名などを置換する処理を書くべきか。

対象環境

$ uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux