许可证 (LPPL)

查看 CTAN 上几乎任何宏包,许可证栏里通常都会写着 LPPL——LaTeX 本体和绝大多数宏包都采用这个许可证。它是自由软件,但核心有一个很独特的思想:保护“同名文件在任何地方都应有相同行为”的保证

什么是 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 不兼容——后面会提到,LPPL 要求改版明确标识自己已经修改,这对 GPL 来说是额外条件。它也是 CTAN 上最常见的许可证。

核心思想——保护文件完整性

为什么要设置普通自由软件许可证中没有的条件?因为 TeX 的价值建立在可再现性之上:同一个 .tex 源文件,无论在哪个环境中排版,都应该得到相同结果。如果有人把改过的 article.cls 仍用同一个名字到处分发,这种保证就会崩塌,出现“我这里能编译,你那里却坏掉”的情况。LPPL 正是为了防止这种事。

在旧版本(1.0–1.2)中,这是一条严格的“文件名条款”:只要修改了文件,就必须改名。1.3 版放宽了这一点——现在的条件是,修改过的组成部分必须在源代码中、以及交互运行时(日志或横幅中)清楚且毫不含糊地表明“这是修改版”,并且必须记录修改内容(例如附带变更日志)。实际操作中,如果要 fork,改成别名仍然是最安全、最可靠的做法。

维护机制

LPPL 的另一项特点是明确声明维护状态(maintenance status) 的机制。每个作品都有一个 Current Maintainer(当前维护者),状态分为三类:maintained(有人负责维护并接受错误报告)、author-maintained(只有原作者可以维护)、unmaintained(没有维护者,或 6 个月联系不上且没有维护迹象)。为了让作品持续对社区有用,CTAN 建议选择 maintained,而不是 author-maintained

正是这个机制让社区能够接手被放置的宏包。如果某个作品处于 unmaintained 状态,许可证规定了一条清晰路径:(1) 合理努力寻找当前维护者(例如网络搜索),(2) 如果找不到,就在相关社区宣布自己打算接手维护,(3) 如果原维护者或版权所有者在 3 个月内没有异议,你就可以成为新的 Current Maintainer。它的设计目的,是让作者消失时生态系统仍能继续运转。

用于自己的宏包

把自己的 .sty/.cls 以 LPPL 发布很简单。在每个文件开头放上如下说明,声明使用 “1.3c 或任何后续版本”,维护状态选择 maintained,并写明 Current Maintainer 以及作品包含哪些文件。这样就符合 CTAN 期望的形式(上传到 CTAN 时也会选择许可证)。注意,LPPL 不是公有领域——你可以自由使用,但上述关于同一性、标识和文档记录的义务仍然存在。

document.tex
% 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.