CTAN のパッケージを見ると、ライセンス欄にたいてい LPPL とあります——LaTeX 本体も、ほとんどのパッケージもこのライセンスです。自由ソフトウェアでありながら、中心に 1 つ独特の考え——「同じ名前のファイルは同じ振る舞いをする」を守る——を据えているのが特徴です。
LPPL とは
LPPL(The LaTeX Project Public License)は、LaTeX カーネルと標準パッケージが配布されるライセンスで、LaTeX Project が定めています。現行版は 1.3c(2008-05-04 公開。1.3・1.3a・1.3b との違いはごく僅か)。自由ソフトウェアライセンスであり、FSF(フリーソフトウェア財団)も自由なライセンスと認め、OSI 承認・Debian(DFSG) にも適合、SPDX 識別子は LPPL-1.3c です。ただし GPL とは非互換——後述の「改変版は別物だと分かるようにする」要件が、GPL の許す範囲を超える追加条件にあたるためです。CTAN で最も多く使われるライセンスでもあります。
核心——ファイルの同一性を守る
なぜ普通の自由ソフトと違う条件を置くのか。TeX の価値は 再現性 にあります——ある .tex ソースは、どの環境で組んでも同じ結果になるべきです。もし誰かが改変した article.cls を 同じ名前のまま 配って回ったら、その保証は崩れ、「私の手元では通るのにあなたの所では崩れる」が起きます。LPPL はこれを防ぎます。
古い版(1.0〜1.2)では、改変したら ファイル名を変えねばならないという強い「ファイル名条項」でした。1.3 でこれは緩められ、いまは——改変した構成要素が、ソース上でも対話実行時(ログやバナー)でも 「これは改変版だ」と明確かつ曖昧さなく名乗ること、そして 変更点を記す(変更履歴ファイルを置く等)こと——が条件です。実務上は、フォークするなら別名にするのが今も最も安全で確実です。
メンテナンスの仕組み
LPPL のもう 1 つの特徴は、保守状態(maintenance status) を明示する仕組みです。各作品には Current Maintainer(現メンテナ) がいて、状態は次の 3 つ:maintained(誰かが保守を引き受け、不具合報告を受け付ける)、author-maintained(著者本人だけが保守する)、unmaintained(メンテナ不在、または 6 か月連絡が取れず保守の兆しもない)。CTAN は、作品が community に役立ち続けるよう author-maintained より maintained を推奨 しています。
この仕組みのおかげで、放置されたパッケージを引き継げます。作品が unmaintained なら、(1) ネット検索などで現メンテナを探し、(2) 見つからなければ関連コミュニティで引き継ぎの意思を表明し、(3) 元のメンテナや著作権者から 3 か月 異議がなければ、自分が新しい Current Maintainer になれる——という明確な道筋が定められています。著者が消えてもエコシステムが止まらないための設計です。
自分のパッケージに付ける
自作の .sty/.cls を LPPL で出すのは簡単です。各ファイルの冒頭に下のような注記を置き、「1.3c またはそれ以降」とし、保守状態は maintained を選び、現メンテナと作品を構成するファイルを書きます。これで CTAN にアップロードできる体裁になります(ライセンス選択は CTAN 登録時にも問われます)。LPPL はパブリックドメインではない点に注意——自由に使えますが、上記の同一性・表示の義務は残ります。
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status 'maintained'.
% The Current Maintainer of this work is M. Y. Name.
%
% This work consists of the file mypkg.sty.