おそらくはそれさえも平凡な日々

依存ライブラリのLICENSE同梱のためのgocreditsというツールを作った

https://github.com/Songmu/gocredits

Goのプロジェクトの依存ライブラリのLICENSEを抽出して、CREDITSという単一ファイルに書き出してくれるツールを作りました。もともとのアイデアは同僚の id:tarao によるものです。Go Modulesを使っているプロジェクトで以下のようにすれば、CREDITSファイルを書き出してくれます。出力されたCREDITSファイルは実行バイナリを配布する時に有用でしょう。

% gocredits -w .

Goは実行バイナリを簡単に配布できるので便利ですが、ソフトウェアを配布するときは、依存ライブラリのLICENSEを考慮する必要があります。具体的には恐らく依存ライブラリのライセンスのコピーを同梱する必要がありそうです。リンクだけではだめでコピーを含めた方が良さそうです。

例えば、MITライセンスには以下の記述があります。

The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.

BSDライセンスにも以下の記述があります。

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Goの場合、例えサードーパーティライブラリを使ってないとしても、Goの標準モジュールのライセンスの同梱が必要です。以下のissueでも議論されていて「ちゃんと同梱しましょう」と書かれている。

https://github.com/golang/go/issues/19893

この辺りは、スマホアプリの世界だとちゃんとしていて、ライセンス表示画面をちゃんと設けていたり、そのためのライブラリも揃っています。他にもChromeだとabout:creditsにアクセスすると、依存ライブラリのライセンス一覧を表示できたりします。

Goの世界だとあまりそういうツールがなさそうだったので、以前 id:tarao がfireworqを公開時に、ライセンス一覧をCREDITSという名前のファイルに書き出すスクリプトを作っていました。これは、glide.lockから依存を抽出して、vendor配下からLICENSEを集めてきています。

gocreditsはここからアイデアを拝借しつつ、Go Modulesに対応させたものです。$GOPATH/pkg/mod 以下から依存を取り出すようにしていますが、Go Moduleに非互換変更が入った場合動かなくなるかも知れません。なのでAlpha Qualityです。

Goで実行バイナリを配布する場合、アーカイブにこのCREDITSファイルを同梱すると良いのではないでしょうか。なんと、goxzはデフォルトでこのファイルの同梱に対応しています。

既に個人のツールでは使い始めています。是非ご利用ください。OSSのLICENSE周りにそこまで詳しいわけではないので何かあればご指摘ください。ゆくゆくは依存ライブラリのLICENSEの不備だったり、非互換検出などもおこなえるようになると嬉しいと考えています。

created at
last modified at

2019-04-16T02:39:59+0900

comments powered by Disqus