开源字体的许可里,有两条专门写 AI 的条款 —— 它们合起来是一个产品边界
写作日期 :2026-10-18
面向读者 :打算拿开源字体(中文字体尤甚)训练模型,或者要做字体相关产品的人
核心问题 :OFL(Sil Open Font License,开放字体许可证)的 FAQ 里有两条专门写 AI 的条款,一条禁止一条允许——它们之间的分界线到底在哪?
行文约定 :中文为主;英文条款逐字引用,一句不改 ,只补断行;第一次出现的英文术语给全称
本文不是法律意见。 本文只做一件事:把条款原文摆出来,并指出原文自己没回答什么。真正的判断请找律师。
引子:一份许可里,两句话的方向相反
做 AI + 字体的人,几乎一定会遇到下面这个问题:
我手上有一份 OFL 授权的字体。能不能拿它训练一个模型?如果能,模型产出的新字体,能不能换一个许可发布?
这个问题看起来只有一个答案,因为直觉上「用 AI 造字体」是一件事。但在 OFL 的官方 FAQ 里,它被拆成了两个编号相邻、方向相反的问题,分别给了两个答案。
第一个问题(§1.25)的开头就是 “No.” 。第二个问题(§1.26)的开头是 “Yes, as long as…” 。
如果只读其中一条,你的产品形态会完全走向两个相反的方向。 而这一篇要做的事情,就是把两条并排放在一起读,然后指出它们合起来划出的那条线在哪。
先说清楚这篇文章不做什么 :
- 它不判断「我的具体做法算不算 derivative work(衍生作品)」——那是法律判断,本文没有资格下 。
- 它不给出「所以你应该怎么做」的结论。§1.25 与 §1.26 之间有一处真实的文本张力,本文把它摆出来,但不抹平。
- 它不涉及任何具体的项目、团队或商业安排。
而它要做的一件具体的事是:把「许可原文说了什么」和「别人怎么标自己的权重」这两件事分开——因为很多人正在用第二件事去推第一件事,而那一步不成立。理由在第 3 节,它是全文最有价值的一节。
1. 两条专门写 AI 的条款
OFL 的条款正文只有数千字节,而 FAQ 有六十余 KB。专门谈 AI / 机器学习的只有下面两条 ,它们都在 FAQ 里。
1.1 §1.25 —— 训练数据里含了 OFL 源文件,产物就留在 OFL
以下是原文逐字:
“Can a font released under the OFL be used as a source by an AI (Artificial Intelligence),
an ML (Machine Learning) model, a NN (neural network), or similar system to create a new font
and release it under a different license? No. Any font produced from such systems whose input
or training data contains any source file from a font project licensed under the OFL should be
considered a derivative work. All Font Software released under the OFL and marked as such by
the author(s) must remain under the OFL regardless of the way the sources might have been
transformed, in whole or in part.”
读这句话要盯住三处,它们是逐字写死的,不是我在解释:
| 原文 | 它把什么定死了 |
|---|---|
| “whose input or training data contains any source file from a font project licensed under the OFL” | 门槛是「含有任何源文件 」,不是「含有可识别的风格」「含有可提取的特征」 |
| “regardless of the way the sources might have been transformed, in whole or in part“ | 变换方式(转格式、抽轮廓、改编码)与变换程度(全部或部分)都不构成豁免 |
| “must remain under the OFL“ | 结论不是「有点问题」,而是必须留在 OFL |
最容易被跳过的是 “any source file” 。它没有给「实质性相似」留位置,也没有给「占比极小」留位置。按字面读,一个字体项目里的任何一个源文件进了训练数据,这条就命中。
而这是对做 AI + 字体的人最要紧的一句反直觉的话:条款防的不是「抄字形」,而是「让模型见过它」。 「我根本没复制字形数据,我只是让它看过一遍」——按这段原文,这个辩解不成立。
1.2 §1.26 —— 放行的条件是「产物不是字体」
同样逐字:
“Can OFL fonts be used by AI-based design tools? Yes, as long as the resulting work is not
intended to be a font. Using such automated systems to produce graphical output - something that
is not a font - is considered similar to normal usage.”
这条短得多,但它给了 §1.25 一个明确的出口 :
- 它放行的对象是 “AI-based design tools”(AI 驱动的设计工具),说的是「拿 OFL 字体去喂这类工具」;
- 放行的条件是 “as long as the resulting work is not intended to be a font“;
- 而 “is considered similar to normal usage“ 这半句说明了它的地位 :这不是一项特殊豁免,而是和使用字体没什么两样的普通使用 。
注意这个条件的方向:它约束的是「产物」,不是「输入」也不是「过程」。 §1.25 从训练数据这一侧收紧,§1.26 从产物这一侧放松。两者看的不是同一个东西。
2. 把两条读在一起:边界不在「有没有用 AI」
现在把两张图叠起来看:
图里最要紧的是从 D 指向 C 那条箭头 :§1.26 的放行是有条件的,条件不满足时,§1.25 就在那里等着 。
所以这两条拼起来的读法只有一句:
§1.26 的放行以「产物不是字体」为条件;而 §1.25 说训练数据含了 OFL 源文件 ⇒ 产物算 derivative work ⇒ 必须留在 OFL。
⇒ 边界不在「用没用 AI」,而在「产物是不是一个字体」。
这句话的实际含义比它看起来更硬:「用 AI 造一个字体」这件事,恰好落在两条条款的交集上,而交集的那一侧是禁止的。
而交集的另一侧——「用 AI 造一个不是字体的东西」——是被明文放行的,而且被放行的方式很宽松:它不是一项例外,是正常使用 。换句话说,如果你的产物是一张图、一份矢量图、一段动画,它根本不需要论证自己合规,因为条款已经说了那是正常用法。
2.1 文本上有一处真实张力,本文不抹平
把 §1.26 和条款正文的另外两段放在一起,会看到它们并不完全咬合:
- 条款正文里 “Modified Version”(修改版本) 的定义包含 “by changing formats or by porting the Font Software”——转换格式明文算修改版本 ;
- 条款正文要求修改版本整个以 OFL 发布;
- 而 §1.26 说,只要产物不是字体就放行。
而「把一份字体转成笔画级数据」正好落在这两者之间 :它算「用字体创作出来的文档」,还是「转换格式产生的 Modified Version」?
这是法律判断,不是技术判断,本文不下结论。 但把它摆出来是有用的,因为它说明了一件事:§1.25 / §1.26 划的那条线,不是一条可以靠推理走完的线。 它是一条需要人来裁的线。
3. 别人的先例为什么在这里是陷阱
做到这一步,一个非常自然的下一步是:去查有没有别人这么做过。
如果查到有人把一个文本图像生成模型的权重,在模型卡(model card,模型权重托管平台上的一份元数据说明文件)上标成了 MIT ,并且训练数据里用了 OFL 字体——那看起来就是一条先例,说明这条路走得通。
这是全文最危险的一个推理,因为它会把「没人反对」误当成「有人批准过」。
3.1 先例实际提供了什么
我们这一轮实际观察到的是这样一组事实:
- 有公开的文本图像生成模型,把其权重在模型卡上标为
"license": "mit"; - 同一模型家族的三个权重仓里,两个标 MIT,一个是
cardData = null(也就是连许可字段都没有 ); - 而这几个仓里没有任何一处提到 OFL——把 README 全文检索一遍许可相关的词,零命中 ;
- 而且,「它训练用的字体确实是 OFL」这一条本身没有核实 :它的训练脚本里检索字体相关文件名,零命中 ,论文也没点名任何字体库。
把这四条摆在一起,唯一站得住的表述是这一句:
没有任何一个先例声明过「我的权重许可不同于字体许可」——而事实是它们都不谈这个问题。沉默不等于授权。
为什么这个区别是承重的? 因为「不谈」和「明确声明不同」在证据上是完全相反的两件事:
| 它能支持什么结论 | 它不能支持什么结论 | |
|---|---|---|
| 某个仓声明了「我的权重走另一套许可」 | 至少说明作者考虑过这个问题并做了判断 | 仍然不能说明这个判断是对的 |
| 某个仓只字未提 | 什么都支持不了 | 尤其不能支持「所以这样是允许的」 |
把第二行读成第一行,就是把「没说话」当成「说了是」。 而在许可这件事上,「没说话」连「作者不知道有这条 FAQ」都证明不了——何况 §1.25 和 §1.26 就写在官方 FAQ 里。
还有一个更靠前的障碍:上面第四条的「未核实」。 连「它训练用的字体是不是 OFL」都还没确认,那这两个例子能不能被称为先例,本身就是未验证的 。一个前提未验证的例子,无论结论多诱人,都不构成依据。
3.2 那该怎么用先例
正确的用法是把先例当成「别人踩过哪些坑」的地图 ,而不是「这条路能不能走」的判决书。具体说:
可以用 :观察别人在许可标注方式上的习惯(标什么字段、放在哪个文件),用来减少自己的标注成本;
不能用 :拿「没人因此被追责」去论证「所以合规」。执法不是许可,而没被追责有非常多种原因。
4. 找许可的时候,三个具体的坑
读条款之前先得找到条款。而中文开源字体的许可文件,恰好有一个以「按标准文件名找不到」著称的坑 。
4.1 许可文件叫 COPYING,不叫 LICENSE
一份中文字形数据的仓,它的许可文件叫 COPYING。LICENSE、LICENSE.md、LICENSE.txt 全部返回 404 。
而这个 404 极易被读成「这个项目没有许可」。 按最常见的文件名去找,拿到的就是 404,而 404 和「没有许可」在返回值上完全一样。
更细一层:COPYING 本身不是条款原文。 它是两段归属说明 ,分别把两份数据指向两套不同的许可——其中一份指向一个叫 APL/ 的目录 ,另一份指向一个叫 LGPL 的文件 。
也就是说:许可文件本身在告诉你「条款原文在别处」,而你如果把 COPYING 当成了条款原文就停下,你会以为自己已经读完了许可。
4.2 条款原文在仓内的 APL/ 目录里,而且有五种语言
上面那个 APL/ 目录确实在仓里 ,里面有五种语言的本地化副本 :big5/、english/、gb/、zh_CN.UTF-8/、zh_TW.UTF-8/,每个目录下一个 ARPHICPL.TXT。
五种语言版本的字节数不一样,是因为编码不一样(Big5 / GB 是双字节,UTF-8 不是),不是内容不一样。 这是个容易被误当成「有几份不同的许可」的地方。
而那五种语言读下来,里面有一句是直接谈钱的——原文允许分发者收取费用。所以「许可挡不挡商用」和「许可要求什么义务」在中文场景里是两件事 ,把它们合成一件是最常见的误读。
4.3 最贵的一个:拿 raw.githubusercontent.com 去取目录,必然 404
上面那个 APL/ 目录,用 raw.githubusercontent.com 去取会返回 404。
而这个 404 是查询方式造成的假阴性,不是「目录不存在」。
原因很简单:按规范,raw.githubusercontent.com 只服务文件,从不对目录返回内容。 你向一个只能取文件的地址要了一个目录,它当然给你 404。
1 | raw.githubusercontent.com/<owner>/<repo>/<branch>/APL -> 404 |
这个错误曾经让一条「仓内没有 X 目录」的结论流通开来——而那个目录真实存在,内容也实实在在拿到了。
⇒ 这条教训可以写成一整条纪律:「查不到」有时候是「查的方式不对」。 具体到操作上:
列目录用 API 或 HTML 树页,取文件才用 raw。
5. 一条比条款更贵的教训
最后写一节和许可无关的,因为它比上面所有条款加起来更值得记。
这次调研的内部资料里,有一条记录写着:「OFL FAQ 全文已抓到本机」 。
这句话后来被核对过,而它与磁盘状态不符 :一次文件查找只找到 4 个 4,301 字节的许可证正文,那份 61,623 字节的 FAQ 并不在本机 。
这句话有意思的地方不是它错了,而是它的形状。 它是一句转述——「上一个环节说它拿到了某文件」——而它被原样记下来了,没有被执行一次验证 。
于是这里有一个非常便宜的判据没被用上:验证「某文件在不在本机」的成本,是一次文件查找。 成本近乎为零,而它能挡掉一整条会往下污染的记录。
这条形状在调研里是家族成员,不是个例 :
- 「按
LICENSE找会 404」⇒ 误判成「没许可」(第 4.1 节); - 「
raw上取目录 404」⇒ 误判成「目录不存在」(第 4.3 节); - 「上一次 arXiv 检索超时,重读时读到的是上一轮会话留在临时目录里的旧文件」⇒ 那次输出根本不是本次检索的结果 ,而它看起来完全正常。
它们共享同一个根因:把「我没拿到」和「它不存在」当成了同一件事,而判据只检查了前者。
结语:许可不会替你做决定,它只把边界画出来
这两条条款加起来给出的东西,比「允许」或「禁止」都更具体:它们把一个模糊的问题换成了一个可以自问自答的问题——你的产物是不是一个字体。
而这个换法真正的价值在于:它把一个需要法律知识的问题,变成了一个需要在设计阶段就回答的产品问题。 前者事后补不回来,后者可以在画第一张架构图的时候顺手答掉。
而本文最想留在你脑子里的,其实是第 3 节那句:别人的先例只提供沉默,不提供授权。 这一条在许可领域之外也成立——一个项目没有声明某件事,不等于它声明了那件事的相反面。 而在一份 61 KB 的 FAQ 里,答案其实一直写在那里。
再说一次:本文不是法律意见。 §1.25 与 §1.26 之间的那处张力、转换格式产物的定性、模型权重的定性,全都需要律师。本文能做的只有一件:让你在找律师之前,已经知道自己要问哪几个问题。
附录:参考资源
许可原文
| 资源 | 地址 | 说明 |
|---|---|---|
| OFL 条款正文 | https://openfontlicense.org/documents/OFL.txt |
4,599 B |
| OFL FAQ | https://openfontlicense.org/documents/OFL-FAQ.txt |
61,623 B,§1.25 与 §1.26 在此 |
| Arphic Public License(英文) | https://raw.githubusercontent.com/skishore/makemeahanzi/master/APL/english/ARPHICPL.TXT |
6,901 B |
| Arphic Public License(简体) | https://raw.githubusercontent.com/skishore/makemeahanzi/master/APL/zh_CN.UTF-8/ARPHICPL.TXT |
5,806 B |
| APL 的另一个稳定引用位置 | ftp.gnu.org/non-gnu/chinese-fonts-truetype/LICENSE |
与上一份同源,仅换行符不同(CRLF) |
| 某中文字形数据仓的归属说明 | https://raw.githubusercontent.com/skishore/makemeahanzi/master/COPYING |
1,016 B,注意是 COPYING 不是 LICENSE |
| 列目录的正确用法 | https://github.com/skishore/makemeahanzi/tree/master/APL |
对照 raw.githubusercontent.com/.../APL 的 404 |
取用与自查
- 读 arXiv 论文时,如果某篇「看起来没有统计结果」,先怀疑抽取器——
arxiv.org/html/的 LaTeXML 会把每一个数字塞进<math alttext="…">属性里,直接把<math>剥掉会让整篇论文的数字全部消失,而不报错、不为空、句子仍然通顺。这一条的完整展开见系列里的另一篇《文献调研里的六个静默陷阱》。 - 凡是要写进文档的文献元数据,DOI 校验必须附标题 ,不能只看返回码。理由同样见那一篇。