ソースコードの著作権表示

いつごろからある慣例なのかは知らないが、ソースコードのファイルの先頭は必ず著作権についてのコメントが入れられている。おそらくフリーソフトウェア運動が始まった頃からだと思う。ソースコード著作権がなかったら、表記なんてできないし、ソースコードを公開していなくても表記する必要がない。特にオープンソース・ソフトウェアは表記が長い。GNU GPLとかApache Lincenceの表記が20行近くある。OSSを守るためにライセンスが大切なのはわかる。

しかし、ソースコードの先頭という最も重要な箇所に定型文が入っていることには疑問がある。

私はコードのエントロピー、コードの情報量はできるだけ少なくするべきだと考えている。すべてのファイルに同じ著作権表示が付いているなら情報量は少ないが、ない方がもっと情報量は少ない。著作権表示なんてちらっと見るだけで、普段は誰も読まない。自分のソフトウェアに取り込んだりする場合にだけ、読めばよいものだ。たいていのオープンソース・ソフトウェアにはトップディレクトリにCopyrightといったテキストファイルがあるのだから、著作権やライセンスについて知りたければそれを参照すれば済む。わざわざ全てのファイルに表示しなければならないものだろうか。

ソースコードの先頭は最も重要な箇所だ。文章で言ったらタイトルに相当するものが来るべき場所だ。そのファイルは何をするためのファイルなのかの要約が本来は書かれているべきだと思う。著作権表示があるので、それを見るためにわざわざスクロールしなければならないのは、大した手間ではないが、気に食わない。

全てのファイルに必ず表示しなければならないのだとしたら、表示するべき箇所は末尾だ。出版物の著作権表示は必ず最後にある。表紙に著作権表示が入っている本など見たことがない。出版物の方がソースコードよりずっと歴史は長い。歴史の中でいいように収斂してきたものを参考にした方が良いと思う。*1

著作権表示が慣例化しているならば、言語仕様として決めた方が良い。Javadocには@authorというのがある。*2このコンセプトを拡張して、著作権表示はこうすべきだというのを、プログラミング言語として決めておいたら便利かと思う。

stringsコマンドでコンパイルされたバイナリファイルを見た時に著作権表示が見えるように、ソースコードにコメントではなく文字列変数として著作権表示を入れ込むルールがあるところもあるらしい。未使用の変数でコードが汚されるのは許せない。バイナリファイルに著作権表示をつける意義はいまいち分からないが、言語仕様に入っていればバイナリファイルに文字列を仕込むことも容易だ。

今は著作権表示が過剰な時期だと思う。歴史が進んでいけばおそらく簡略化されているのではないか。ライセンスも今は多種が乱立しているが、使いやすいものに集約されていくだろう。どのOSSも同じライセンスだったら、わざわざ表示する必要もなくなってくる。そうなれば、著作権表示も短くなっていくに違いない。

フリーソフトウェアと自由な社会 ―Richard M. Stallmanエッセイ集

フリーソフトウェアと自由な社会 ―Richard M. Stallmanエッセイ集

*1:出版物には全てのページに著作権が入っていないことからも、全てのファイルに著作権を入れるべきではないと思う。

*2:あるOSSプロジェクトでは@authorを付けるのは禁じられている。皆が名前を付けたがるとコードが汚されるからだ。私も昔は名前を入れたがっていたが、最近はそういうのは観光地の落書きや千社札のような恥ずかしいことではないかと思って入れていない。