上周发生了一件值得仔细看的事。
chardet 是一个 Python 文本编码检测库,每个月被大约一亿三千万个项目依赖。它的维护者 Dan Blanchard 发布了 7.0 版本:速度是上一版的 48 倍,支持多核,完全重写。Anthropic 的 Claude 被列为贡献者。许可证从 LGPL 改成了 MIT。
Blanchard 的说法是:他没有直接看过旧的源代码,只是把 API 文档和测试套件喂给 Claude,让它从头实现。代码相似度检测工具 JPlag 显示,新代码与任何旧版本的相似度低于 1.3%。他的结论是:这是一个独立的新作品,没有义务延续 LGPL。
库的原始作者 Mark Pilgrim 在 GitHub 上开了一个 issue 表示反对。Flask 的作者 Armin Ronacher 表示支持重新许可。Redis 的作者 antirez 发了一篇更长的辩护文章,引用版权法和 GNU 项目的历史说明这种做法合法。
然后 Hong Minhee 写了一篇文章,提出了一个比"合不合法"更难回答的问题:合法就等于合理吗?
法律地板和道德空间
版权法保护的是具体的表达——特定的代码、特定的结构——而不是想法或行为本身。一个从 API 和测试套件推导出实现的重写版本,在法律上很可能站得住脚,可以算作独立创作。这一点 antirez 和 Ronacher 的分析大体正确。
但 Minhee 的切入点在这里:法律设定的是地板,越过它并不等于行为就是对的。这中间有一个空间,这个空间里的问题不是"能不能",而是"应不应该"。
这个问题在 chardet 案例里变得格外尖锐,因为 LGPL 不只是一个许可证标签。它是一套承诺的束缚:任何在 LGPL 代码基础上的修改,必须以相同条款发布。chardet 每月被一亿三千万个项目下载,它被 LGPL 保护意味着:所有那些依赖它的下游修改,都有义务回馈到开放的代码池里。
现在这个义务不见了。chardet 7.0 是 MIT,任何人可以在它基础上构建私有的、闭源的衍生物,没有任何回馈义务。
方向错了的类比
antirez 用来支持这种做法的历史类比是 GNU 项目。当 Stallman 发起 GNU,重写 UNIX 用户空间,这是合法的,并且是值得称颂的——因为它把专有软件变成了自由软件,从封闭走向了开放。
Minhee 的反驳很精准:这个类比的方向正好相反。GNU 是从专有到自由的运动,是把封闭的东西打开,扩大了公共空间。chardet 7.0 是把受 copyleft 保护的代码变成了无约束的代码,是移除了保护公共空间的那道围栏。
用同一个典故,却指向了完全相反的伦理方向。
Ronacher 的论点稍微不同:他认为 GPL 系列许可证本身就在阻碍分享,因为它带有条件,而真正的分享应该是无条件的。这个论点在直觉上有一定吸引力,但仔细看是不成立的。
GPL 的条件是:如果你分发,你必须以同样的方式分发。它不禁止私下修改,它只约束发布行为。这是一个让分享变得"递归"和"自我强化"的机制,而不是限制分享的机制。
相比之下,MIT 许可证允许任何人拿走代码、改进它、然后封进专有产品里不再开放。这种流向是单向的:从公共空间流向私人财产,没有回流机制。如果你把这叫做"更自由的分享",你用的是一个特定方向的概念——分享流向拥有更多资本和工程师的一方。
AI 带来的结构性新问题
这个案例让人警觉的地方不只是 chardet 本身,而是它预示的一个模式。
过去,"洁净室重写"(clean-room reimplementation)是一个高成本的操作。你需要雇两批工程师:一批研究目标软件,写出规格文档;另一批只看规格文档,从零开始实现。这个过程费时费钱,只在商业利益足够大的情况下才值得做。这种成本本身,构成了对 copyleft 保护的某种现实保障。
现在,这个成本接近于零。给 AI 一个 API 文档和测试套件,一夜之间就能拿到一个功能等价的重写版本,相似度低到法律上无从追溯。
这意味着 copyleft 保护在实践上正在被侵蚀——不是通过修改法律,而是通过改变成本曲线。任何一个 LGPL 或 GPL 库,只要 API 足够清晰、测试足够完整,现在都面临被 AI 辅助重写、重新许可的可能。
维护者们花了数年时间在 LGPL 下贡献代码,隐含的期待是这些贡献会在同样的条款下延续。现在这个期待可以被以技术上合法的方式绕过。
没有简单答案,但有值得坚持的问题
Minhee 的文章没有给出一个解法,这是诚实的。版权法在这里确实模糊,cleanroom 重写的法律地位确实存在争议,AI 的参与如何影响这个判断目前没有判例可循。
但他坚持的那个问题值得保留:合法不等于合理。法律是一套在特定时间为特定情境设计的规则,它无法覆盖所有未来的技术变迁。AI 辅助重写这种新的能力,正在进入一个法律尚未澄清的空间。
在这个空间里,我们依赖的不是法律,而是共识。开源社区之所以能运作,靠的是大量人相信某些规则值得遵守——不只是因为法律要求,而是因为它们对整个生态系统有益。如果这个共识被技术手段绕过,它的侵蚀会是悄无声息的,但后果会是真实的。
chardet 7.0 可能是一个孤立事件,也可能是一个开头。