月下载1.3亿的库被AI重写并改了协议,开源维护者遭“网暴”后发声:我觉得大家反应有点过头,当时联系不到原作者,新版是重写!
作者 | elvex 整理 | 屠敏出品 | CSDNIDCSDNnews不久前我们曾报道过作为每月下载量超过 1.3 亿次、被无数软件直接嵌入的 Python 经典编码检测工具 chardet 深陷舆论漩涡之中。起因是这个项目的原作者 Mark Pilgrim 在开发五年后便选择退网过起了“隐居的生活”而项目后续维护、开发工作几乎全部落在开源维护者 Dan Blanchard 一人的身上他凭一己之力苦苦支撑项目至今已有十余年时间。最近Dan Blanchard 借助 Claude Code仅用五天时间就将整个库从零重写并宣布以新的开源许可证发布。颇具戏剧性的是已经沉寂 15 年的原作者 Mark Pilgrim 突然现身留言对 Dan 这种“更换许可证”的做法提出了质疑并要求对方停止更换。这一操作瞬间引爆社区争议迅速蔓延。一部分人认为“作为开源维护者你可以重写也可以采用新的授权协议但不能直接覆盖原有项目的开源授权如果要另起炉灶就应该重新换个名字再发布。”也有人站在维护者一边认为“这么多年的投入以及当下的重写本就是为了让项目变得更好。”与此同时更深层的问题也被一并抛出AI 辅助重写是否合理所谓“洁净室”clean room方法是否成立软件许可的未来又将走向何方对此当年提出“开源定义”的美国著名程序员 Bruce Perens 甚至将这一事件类比为印刷术和科学方法的发明。他在接受外媒 The Register 采访时直言“软件开发的整个经济模式已经彻底崩溃了。”在争议之中作为长期维护者的 Dan Blanchard 也出面与美国企业级代理平台 Elvex CEO Sachin Kamdar、市场营销主管 Doyle llrvin 进行了一次深入访谈回应外界的种种质疑。在他看来这次重写在结构上是完全独立的通过第三方开源软件代码分析工具 JPlag 评测相似度低于 1.3%而此前人工维护版本的相似度高达 80%同时他也咨询了法律顾问并将整个过程保持公开透明。更重要的是这次改写确实带来了一个对用户更好的版本。Dan 坦言自己多年来维护 chardet 从未从中获利未来也没有商业化的打算。而新版本采用的许可证更加开放、限制更少性能也实现了高达 48 倍的提升——考虑到该软件运行在海量设备上有人甚至调侃这或许是“AI 首次实现碳负排放的应用”因为整体 CPU 使用量反而下降了。事实究竟是什么样的以下是 Dan 的完整对话内容月下载量高达 1.3 亿次GitHub Star 数 2.5k 的 chardet 究竟是什么Sachin Kamdar今天我特别高兴能把 Dan Blanchard 请到节目里。我和 Dan 很早之前就认识了差不多 10 年前我们一起在一家叫 Parsley 石油公司共事。Dan 是当时非常厉害的工程师之一做过很多不同方向的项目。后来他又去了几家公司现在在美国金融科技公司 Monarch Money 做工程师。不过今天我们找他来是因为过去大概 10 天里他做的一件事在网上火了。Dan要不你先简单介绍一下自己聊聊你的背景、平时主要关注什么顺便也讲讲 chardet 到底是什么Dan Blanchard就像你刚才说的我以前在 Parsley 和你一起工作过在哪里大概工作了六年所以我们合作的时间还是挺长的。其实我在 Parsley 的时候就已经在维护开源的 Python 字符编码检测库 chardet 了。这个库我前前后后维护了大概 12 年。最早接触应该是 2012 或 2013 年正式接手大概是 2014 年具体时间我记不太清了但差不多就是 12 年这个时间维度。Sachin Kamdar那 chardet 到底是做什么的“字符编码检测”听起来有点抽象先解释一下这个概念然后再说说你当初为什么会接手维护它Dan Blanchard这个说起来还挺有意思的。我最早开始做这件事的时候是在一家叫 ETS 教育考试服务中心工作负责自动作文评分的软件算是“AI 还没火之前”的早期 AI 应用。所谓“字符编码检测”其实可以这么理解你电脑上或者互联网上的所有文本文件底层本质都是一串数字。大家常说的 0 和 1你也可以理解成一系列数字。而“字符编码”就是一套映射规则有点像凯撒密码那种某个数字对应某个字母另一个数字可能对应一个符号或者你键盘上能打出来的任何字符。最早、也是最经典的一种字符编码是 ASCII 编码它只支持 127 个字符。很长一段时间里尤其是在美国这种以英语为主的环境中大家会觉得127 个字符完全够用了键盘上这些不就全了吗可是这种情况下像中文、希伯来语等其他语言都“被忽略”了。所以后来在 70、80 年代逐渐发展出了各种不同的字符编码。再往后还有 DOS 时代的一些编码现在虽然不主流但偶尔还能见到。更早甚至还有大型机时代的编码体系不过基本已经没人用了。“字符编码检测”的核心问题是给你一个文件你要判断——这是英文日文中文系统会通过统计方法和一些规则去推断它的编码方式以及它使用的语言。因为语言一旦判断出来编码范围也就能缩小很多很多编码其实是和特定语言绑定的。举个简单的例子如果你看到一段文本里经常出现对应“T”“H”“E”的数字组合那大概率就是英文。这类规律就能帮助判断编码。所以chardet 本质上就是干这个的——帮你判断文本的编码。它最早的来源其实可以追溯到 90 年代末 Netscape 浏览器里的一个组件叫“通用字符编码检测器”。后来 Netscape 变成了 Mozilla再后来就是 Firefox。也正是在这个基础上最早的 Python 版本 chardet 被开发出来。这个 Python 版本是在 2006 年由 Mark Pilgrim 写出来的他把那套 C 语言实现直接翻译成了 Python。Sachin Kamdar如果用更通俗一点的方式来解释你可以把它理解成一个“乐高积木”你搭建软件的时候会把它作为一个基础模块嵌进去。它的作用是帮软件判断一些内容——比如这个文档是用什么语言写的、采用什么字符编码。你刚才提到它每个月有 1.3 亿次下载那基本可以说明这个东西已经被嵌进了各种各样的软件里到处都在用Dan Blanchard对没错。之所以用得这么多很大一部分原因是因为一个 Python 库叫 requests。基本上只要写过 Python 的人应该都用过它。requests 是用来做网络请求的比如下载网页、访问 API可以说是 Python 里最常用的网络库之一。而在底层它就依赖字符编码检测。早期版本里它只用 chardet后来新版也支持另一个库叫 CharSet Normalizer用户可以二选一。因为 requests 几乎被所有涉及网络的 Python 程序使用所以 chardet 也就跟着被广泛使用了。原作者几乎从“互联网”消失了Dan 顶上成为了一名核心维护者Sachin Kamdar所以这个库用处极大、覆盖面极广你是怎么成为它的维护者的呢Dan Blanchard我当时在 ETS 工作我们算是比较早一批开始采用 Python 3 的团队。大概在 15 到 20 年前Python 社区其实有过一场很大的争议——语言本身发生了比较大的变化导致你原来在 Python 2 里能跑的代码到了 Python 3 基本都得重写。chardet 这个项目因为 Mark Pilgrim 是在 2006 年写的后来他在 2009 或 2010 年左右就不再维护了具体时间我记不太清。他当时几乎是“从互联网消失”了把自己相关的代码仓库也都删掉了包括 chardet。后来是其他人把这些代码给找回来了这个我们可以后面再细说。当时的情况是有一个基于 Python 2 的 chardet同时还有一个 Python 3 的分支叫 charade是 Ian Cordasco 做的。他也是 chardet 的维护者之一同时也是 Requests 这个库的维护者之一。Requests 当时正在尝试迁移到 Python 3于是他们就说“我们需要一个 Python 3 版本的这个库”于是他就 fork 了一份。我是在这个阶段加入进来的。当时我的目标很简单把它重新变回一个统一的代码库。也就是说不再是 Python 2 一份、Python 3 一份而是合并成一套代码同时兼容两边。那时候做这种“同时兼容 2 和 3”的事情其实技术上还挺难的但我之前正好有不少这方面的经验。所以我把这两个代码库重新合并在了一起。合并之后的版本大概是 chardet 2.3。从那之后我们开始发布同时兼容 Python 2 和 Python 3 的版本一直持续到很久之后才彻底放弃对 Python 2 的支持。说实话这个时间点其实比理想中要晚了不少但当时就是这样。“一接手时就想换协议了但并不是为了想赚钱”Sachin Kamdar大概过去了 10 到 15 年你一直在维护它。Mark Pilgrim 已经很久没上线也没给项目贡献代码了。此时基本上是你和几个其他人维护这个库。那么你是什么时候开始考虑换一个新许可证的什么时候开始思考那些最终引发争议的事情Dan Blanchard我考虑更换许可证已经很久了。实际上从我一开始维护 chardet 那天起我就不想让它继续用 LGPL 许可证了。先简单解释一下LGPL 是“较宽松的 GNU 公共许可证”Lesser GNU Public License。GPL 是“普通的 GNU 公共许可证”Greater GNU Public License只是没有前面的 L。LGPL 一般用于库因为它比 GPL 要宽松一些。GPL 的限制更严其中一些规定对商业用途不太友好如果你想用它做商业项目就必须开源你的代码。MIT 许可证则更加开放——意思是你想怎么用这段代码都行我不对你做什么负责。如果你修改了代码最好能贡献回去但并没有强制要求。总体来说这是一个非常灵活的许可证。Sachin Kamdar所以这三种都是针对开源项目的许可证它们对使用和限制的程度不同。开发者如果是项目的创建者可以选择其中一种来应用在自己的项目上。你之所以对 LGPL 感到不满是因为它有一些限制Dan Blanchard对。我对 LGPL 的一些限制感到不满并不是因为我想从中赚钱。实际上这场争议让我最抓狂的一点就是有人说“他只是想借这个赚大钱”。我完全没有赚钱的打算。有人愿意付钱让我支持它那当然很好但我不会靠一个角色就能赚到数百万美元。这是一个已经存在了 30 年的字符编码检测库。现在的新版本是完全重写的所以从技术上来说它是一个不同的东西。这也是为什么有人会指责我对它做了什么的原因。Doyle Irvin如果其他人想在商业软件中使用它这个新许可证就会让事情简单得多。换句话说即便这个库已经被广泛采用许可证的改变可能会让它使用得更广泛。开源项目得到更多关注也意味着能得到更多人的支持——尤其是你这种长期无偿维护的人多一点帮助总是好的对吧Dan Blanchard没错完全同意。比如你看 chardet 仓库里的第 36 个 issue是 2014 年 10 月的。我在里面说了一段现在回头看挺有意思的话大概是“这对我来说有点奇怪因为我自己就是维护者之一但我还是想问一句我们能不能改一下许可证”然后我和 Ian还有当时参与较多的 Eric Rose 展开了一番讨论。最后我们得出的结论是我们需要联系 Mark。但没人知道怎么联系 Mark因为他已经消失了所以我们完全不知道该怎么办。大概在那之后六个月我其实又挖到了一些线索。结果挺烦的是我后来把自己的 Twitter 账号给删了因为我当时在 2015 年还在 Twitter 上和 Python 之父 Guido van Rossum 聊过这件事。当时的对话大致是这样的Guido 问我是否支持把 chardet 加入 Python 标准库。我回答说“当然那太好了”。之所以讨论这个是因为当时有人提议把 requests 加入标准库。最后没成但 requests 有两个依赖其中一个是 chardet还有另一个我记不太清了。我记得当时他们说“chardet 是 LGPL 的许可”所以这是个问题因为标准库不能加 LGPL 的依赖。Sachin Kamdar这是 Guido 说的意思——他觉得如果许可证不允许就不能加入标准库。Dan Blanchard对他当时说“但是许可证……”于是我们就想也许可以换个许可证。他当时的态度是“如果能想办法换那太好了。”我记得在讨论里有人看到这件事之后联系了 Mark但我不认识这个人。他们问 MarkMark 回答说“不行许可证是 LGPL因为我代码的基础就是 LGPL。”这就是 GPL 系列许可证的一部分特点它有所谓的“copyleft”条款——任何基于原作品的派生作品都必须使用相同的许可证。所以把代码从一种语言翻译到另一种语言本质上就是派生作品显然也需要同样的许可证。有趣的是当 Mark 复制这些代码时它确实是 LGPL但后来这些代码的许可证改成了 Mozilla 公共许可证MPL比 LGPL 宽松一些。但当时我们想改自己的许可证成 MPL 是不可能的。原因是想改许可证我们需要 Mark 的签字授权也需要当时所有贡献者的签字——因为通常改许可证必须得到每位贡献者同意这几乎不可能做到。确实可以实现但非常罕见从实际操作角度讲根本不现实。我记得以前我也参与过一个开源项目忘了具体哪个。那个项目由一家公司运营他们想换许可证于是给所有曾经贡献过代码的人发了一封邮件——哪怕只是改了一行代码也要签署一份同意改许可证的协议。如果你不同意他们就把你的贡献删掉他们的态度基本是“没关系我们可以不用那部分代码。”所以我想说换许可证一直是我很想做的事。现在我重写的新版本用了一个不同的许可证。严格来说这算是一种重新授权因为我保留了原来的名字。我之所以保留名字是想让用户可以直接替换上新版本而不用切换到一个全新的库。而且新版本的好处不仅仅是许可证不同。性能几乎提高了 50 倍准确率也大幅提升。在我手上 2000 多个文件的测试集中准确率提升了约 10 个百分点。更快、更准确、内存占用更低——几乎各方面都比老版本好。所以对用户来说这是在很多方面都更好的选择。考虑到每个月有 1.3 亿次下载这还不算每天的实际使用量。如果你做一个能显著提升性能的改动甚至会对整体计算资源产生可测量的节能效果。有人开玩笑说这可能是 AI 领域第一个“碳中和”甚至“负碳”的应用我觉得也许是吧。Doyle Irvin我觉得这个说法挺合理的。Sachin Kamdar所以基本上你想过改许可证但实际上操作上不现实于是你干脆用 Claude 代码从零重写用上一个本该有的许可证对吗Dan Blanchard是的而且不仅仅是为了许可证。我一直想做一些更大幅度的结构性改动让它运行得更好、更快。但如果继续在旧版本上改我投入了大量精力却还是被原有的限制束缚住这让我很沮丧。我的目标一直是希望这个库能进入 Python 标准库。那样的话不只是我一个人负责维护会有更多人参与支持。而且它本身就是一个标准工具库不应该缺席。Sachin Kamdar好的你做到了。没什么大不了的。现在有了新的 chardet更快、更强、更好还有了新的许可证。“我觉得大家的反应有点过头了”Sachin Kamdar那我们来说说这些事情的影响吧。现在很多讨论都集中在许可证的价值上。如果你可以直接用 AI 从零构建东西也能重新做一遍那本质上并没有变化只是现在实现起来容易多了。某些东西的门槛甚至可能消失了。Dan Blanchard: 对。Sachin Kamdar那你怎么想你是怎么理解这种变化的Dan Blanchard: 我觉得大语言模型LLM让你做以前大家都能做的事情只是快了很多。有点讽刺的是过去自由软件的支持者会庆祝那些原本专有的软件被改写得更自由。比如 Richard Stallman他创立自由软件运动本质上就是因为电脑上的打印机驱动不能用他想改好它但无法获取源码只好逆向工程。还有一些 Windows 模拟器如果你有 Steam Deck也能玩所有 Windows 游戏虽然它跑的是 Linux这都是因为有人逆向了大量 API。我们都为此欢呼因为这让软件对大家更好、更免费。而现在有些人反而对我做的事情生气——我让原本有限制的免费软件限制更少了。Sachin Kamdar你觉得他们为什么生气现在和过去有什么不同Dan Blanchard: 我觉得原因之一是我保留了原来的名字。很多人认为如果换了名字这场争议就不会发生。我觉得这个说法有道理。名字本身除了安装包之外其实没什么本质意义。我并不在意叫什么。如果有办法让新版本代替旧的 chardet 安装我会改名字。我保留名字是为了让用户替换顺利、无痛。假设法律上必须改名字我仍然会负责旧项目把旧项目在 GitHub 上归档并标注“项目已停止维护请转到新项目”。我甚至会让旧版本安装时提示“此版本不再支持请下载新版本。”但这样做的效果正好和我想表达的相反——想象一下如果每个用户安装时都弹出这个提示对于数百万次安装来说这个能量消耗很大。我觉得大家的反应有点过头了。有人甚至说我应该像性犯罪者一样被列入软件工程师黑名单永远不被雇佣简直疯了。Sachin Kamdar我也想知道如果回到过去你没有用 Claude 的代码而是自己一行行地写、改、重写这个东西你觉得会不会引起争议还是说正是因为用了 AI 才让人觉得可怕Dan Blanchard: 嗯我觉得这个问题可以从两个方面来看。我选择用 AI 的原因之一是速度快。我曾看到一篇文章同事分享给我说有家公司在几周内就重写了 Next.js。我记不清是哪家公司了但我当时就觉得“哇这也太疯狂了。” 我心想如果他们能做到我用 AI 重写 chardet 当然也能做到。但我之前没有自己动手的原因之一是因为传统上有人用一种叫“洁净室clean room论”的方式来为重写或更改许可证辩护。我的理解是如果你想让别人重写 Windows 的代码需要有一组人看过原始代码他们了解代码做了什么然后写报告比如“如果能实现 A、B、C 功能就好了”但不能告诉开发者具体怎么写。然后另一组人根据这些规范去实现。这种做法在法律上几十年来都可辩护。而我自己是唯一在做这个的人所以如果我自己重写别人可能会说“Dan 对代码太熟悉了不能算净室操作。”但是我用 Claude 的做法相当于模拟了净室我没有告诉它该怎么写只说“绝对不要用之前的代码。”还有件事我还没公开但打算很快分享——你现在算是提前知道了。我让 Claude 做了一个小型单页应用把我重写 chardet 五天内的全部对话历史整合起来。因为当时文件散在多个目录我还改了本地文件名整个过程乱七八糟。这个应用把所有内容整合成一个完整历史然后总结每次会话的内容。点击某次会话就能看到每轮对话的具体内容。任何涉及外部操作的比如网页搜索、抓取文件都有标记方便查看它在工作时参考了什么。有人指出我在一些计划文档不是提示而是 superpowers 生成的 plan docs里让 AI 去查看 chardet 仓库里的一个文件这个文件主要是编码的元数据比如“这个编码通常用于日语这个用于英语”标记哪些是现代编码、哪些是旧编码。这本身是公开信息而且那份文件是我自己写的。其实一直以来如果能让原作者同意更改许可证是允许的。我写的文件完全是我自己完成的是几年前做的一个研究项目整理了每种语言对应的编码。接下来我发布时还会揭示几个可能引起争议的点但基本上都可以归结为两类要么是我自己写的内容比如用于训练模型的脚本要么是 AI 在完成所有内容后做的最后检查保证 API 兼容性——它参考了这些文件但内容是它自己写的。我觉得说“写完之后不能回过头去比较内容”这不太合理但我不是律师所以发布后再看法律如何解读。可能有人会觉得这更火上浇油但我一直尽量透明。如果把所有事实公开它们就是事实。如果以后因此产生诉讼这些信息也会被披露那干脆现在就放出来。Sachin Kamdar对现在争议已经闹大了很多人开始站队了。你当初开始做的时候显然没料到会这样。现在你怎么看会不会觉得“也许我应该换种方式做”Dan Blanchard: 不不是那样……Sachin Kamdar就像现在回头看胜率是 20/20。Dan Blanchard: 我觉得我有时候可能太固执了。我觉得就算别人对我生气、对我恶意相向我也不会改变我的看法。如果有人能拿出事实、理性地讨论而不是像十二岁小屁孩那样胡乱争辩在网上捣乱我很乐意和对方交流甚至可能会被说服。我愿意认为自己是一个相对理性的人人生中也在很多重要问题上改变过看法如果有人能让我意识到自己错了我可以接受。我记得这件事发生之后有个叫 Brian Fontana 的人留言他是最新版本 LGPL 的作者之一。严格说chardet 用的不是最新版本而是 LGPL v2他写的是 v3。不过他在 chardet 的 issue 里开了个讨论说“这段代码到底有多少是人类写的”我当时的回答是基本上没有我几乎没有直接写过这些代码。他说根据当前的法院案例如果一段代码完全由 AI 写成那么很可能属于公有领域。我也咨询了另外两位律师这似乎确实是共识。所以实际上如果最终结论是 chardet 必须进入公有领域我也不会感到不快因为那意味着它更加自由。但复杂的问题在于公有领域的概念在美国以外并不存在在其他国家并没有法律基础这就很麻烦。不过在讨论中也有真正的律师也参与进来了。有人提到一个叫 Zero BSD 的许可证我还没深入研究但它类似公有领域而且可能在国际上也适用我可能会考虑把许可证改成这个。另一个有趣的讨论是如果代码进入公有领域一旦开源后有人开始贡献他们的贡献怎么办因为技术上他们可以选择贡献的许可证。按我理解目前并没有完善的法律机制能够让你明确地说“这个仓库是公有领域你对它的任何贡献都自动进入公有领域。”这在法律上几乎没有可行的方法。我认为这是开源发展的下一阶段需要解决的问题。我看到 Sentry 也发布过类似的概念他们称之为“Fair Source”大致意思是当东西属于公有领域时它不受版权保护所以他们的方案不是传统版权许可证。他们在想如果这些代码不可版权化我们怎么才能不互相为难fair source 的想法就是你签一个协议但具体执行机制不太明确比如保证你不会拿它去做直接竞争。他们的思路是“代码完全公有领域但别搞恶意竞争”。我觉得这个概念挺有意思的。原作者的突然发声Doyle Irvin: 我最大的疑问是这“他们”到底指谁谁会去采取行动像 Mark Pilgrim 会不会从他神秘消失的深处重新出现然后说“我要采取行动”到底谁会真正去执行Dan Blanchard: 这场争议之所以激烈是因为 Mark Pilgrim 再次出现在 issue 上提了一个问题。据说已经有人证实是他本人。我选择相信说这话的就是他本人。因此这是一个几乎没做过什么事情的 GitHub 账户但它是在 15 年前创建的。所以感觉像是他以前有的一个“GitHub 小号”一直没用过。顺便说明我除了这一次外从未见过他也没跟他说过话。有人说我对他有敌意其实没有。他当初做了一个东西很有用但后来他放弃了其他人接手了。对我来说说某个已经删除的人“拥有”它有点奇怪。另一点让我不太认同的是人们说“他做了这一切”。我承认但他当时用的算法其实原始代码基本上就是逐行翻译的 Python 种子代码看起来完全不像 Python变量名都很奇怪都是 Netscape 内部命名规范的遗留。原始 chardet 版本里的这些东西现在都没了。Doyle Irvin所以他自己也是从别的地方拿来的他不能说“这是我的”。他把它翻译成了别的东西然后弃掉了。你从“垃圾堆”里接手维护了十年现在你试图让它更自由而且你也没想从中赚钱。Dan Blanchard: 嗯。在新版本里面我用了一个抄袭分析工具。我当时心想也许有个事实需要确认——我明确告诉 AI不要用任何 GPL 或 LGPL 的代码也不要看原来的 chardet 代码。可以看测试数据因为测试数据本身不是代码是它从网上下载的文件还有我自己下载的文件用来测试。测试文件一直标注了各自版权从没附 LGPL因为它们根本不是代码。具体而言我用一个叫 J-PLAG 的工具做了抄袭测试。我运行了它然后在回应 Mark Pilgrim 关于我没有权利修改代码的留言时我展示了相关数据如果你看一下 chardet 包里、从他第一版下载的代码——他只参与了第一版的开发第二版及之后的版本都是其他人做的——那么新版本与旧版本中任何文件的最高相似度只有 1.3%平均相似度大约 0.6%。如果你看第六版第七版是那个有争议的版本第六版其实是我在底层做了重大改动的版本包括模型训练方式、存储方式等等。即便是那个版本最大相似度也才大约 80%因为有些文件是沿用下来的平均相似度大概在 10% 左右介于 10% 到 20% 之间我手边没有具体数字。所以我觉得这清楚地显示了代码几乎完全不同。我还做了一张表显示随着时间推移各版本的相似度是如何下降的但总是会有一些文件的最大相似度保持得比较高因为部分文件被保留了。这也说明没有任何文件完全沿用旧版都是全新的。我一直在考虑用不同的方法来做这类分析。我计划写一些博客文章逐步展示这些方法。顺便说一句让 Clawd大型语言模型帮忙分析它自己听起来挺好笑的但我觉得 LLM 在这方面做得还挺好。所以我让它去看第六版和第七版的结构并描述它们各自解决问题的方法从架构上说明它们是如何工作的然后指出相似点。它的分析是唯一相似的地方就是它们都在解决同一个问题并且都使用统计和模式匹配——这本来就是解决这个问题的方式。另外还有一个叫 BOM字节顺序标记的东西——有些编码在文件开头有一个特殊的小数字用来标明这是 UTF-8 还是 UTF-16。显然检查文件里有没有这个标记是确定编码的一种几乎百分百可靠的方法。但除此之外除了这两个显而易见的技术之外两个版本几乎没有共通之处。它们解决同一个问题用的只是一些基本思路这些思路本身就是解决问题的唯一方法。当 AI 生成的内容遇上开源许可Sachin Kamdar开源自由软件的很多发展都离不开社区这才是它真正的价值。而社区对你做的这件事反应也非常强烈。你怎么看这件事你觉得这是不是像 Bruce Perens 所说的那样开源软件许可需要迎来某种“清算”还是大家反应有点过度了Dan Blanchard我觉得 Bruce Perens 说得对。软件许可的现状以及法院里迄今的案例都表明 AI 生成的代码很可能无法受版权保护。这对整个行业的影响比 chardet 还要深远。现在几乎每家公司都用 LLM 生成大量代码任何我认识的工程师都在用 LLM 写代码因为效率太高了。如果这些代码都不受版权保护那我们卖软件的方式会有什么变化呢这真的很难说。这也是 Bruce Perens 反应那么强烈的原因。他说他不知道靠卖软件怎么赚钱。他举的例子是有家公司工具很贵他不想花钱于是让 LLM 看文档让它生成一个克隆版本几天就搞定了他花在 token 上的钱远低于原本的购买成本。软件即服务SaaS模式以前可以生存因为你和用户关系紧密但现在有人 10 分钟就能克隆你的东西原来基于一个简单想法建立的初创公司 MVP 也能被瞬间复制。作为一个专业的软件工程师我个人不喜欢这样的世界但没办法这就是现实。Sachin Kamdar你认为需要做出哪些改变Dan Blanchard我觉得得从社会层面去改变就像那些支持全民基本收入的人可能是对的。随着我在专职工作甚至开源项目中越来越多地使用 AI我会越来越有这种感觉某个时候可能会出现一种情况我的工作——即便我希望公司继续付钱给我也可能变得不那么必要了。感觉就是很多人类在做的检查工作其实回报在递减。我可以想象有一种情景有公司会说人类也会出错所以我们不必追求完美因为人类本身就不完美。这种想法挺可怕的。Sachin Kamdar我觉得关键区别在于智能体没有责任感但人类有。在某种程度上人类的角色已经从执行变成了“保险政策”。Dan Blanchard我完全同意。我想说我在工作中有一条原则每个 pull request 都有你的名字因为你要为它负责需要亲自确认没问题。这也是我做 chardet 时的做法。我的名字在所有 commit 上。我有意让它显示“co-authored with Claude”与 Claude 共同撰写只有我单独做的 commit 才只有我名字。除此之外都显示双作者。我还做了大量测试覆盖了很多之前没有测试的代码如果不用 AI我不会去做这么彻底。想想以前 chardet 代码库里那些完全没测试的部分现在 100% 单元测试覆盖真的挺震撼的。Sachin Kamdar乐观来看AI 虽然带来了项目开源许可方面的挑战但也提升了效率让数亿开发者受益。Dan Blanchard: 没错。我觉得对 Python 社区来说这绝对是一件好事。Sachin Kamdar尽管每个人都想恪守职业操守做“正确且符合道德”的选择但在如今这种技术爆炸的节奏下谁也无法真正慢下脚步。毕竟AI 工具带来的价值增长实在太显著了面对如此巨大的红利任何人都很难简单干脆地说出一句“不我们绝不使用。”Dan Blanchard: 对。自从上次我发布了有争议的 7.0 版本之后最近这段时间我又推出了 7.01只是修复了一个很小的 bug。之后我又发布了 7.1 和 7.2。Sachin Kamdar不得不说这个项目在短短三周内取得的进展恐怕比过去任何一段时期都要显著。Dan Blanchard: 是的。以前版本更新之间会有三年的间隔因为那时候只能在我有空的时候才去开发。但现在如果有人提交了一个 issue我可能 10 分钟就能解决然后顺便就发布个新版本了。只要有 AI 的参与人类投入多少精力才算是项目的作者Sachin Kamdar非常感谢 Dan 和我们分享整个事件的来龙去脉。我觉得不仅仅是你做了什么、怎么做的有意思更重要的是这对未来的发展也很有启发性。也许我们可以一个月后再请你回来聊聊。Dan Blanchard: 好啊我也很乐意。我希望未来会有一些积极的进展或者至少争议会小一些当然也可能出现更多有趣、值得讨论的争议性事情。大概可以用一句话概括我的态度我并不在意法院案件的最终结果。我觉得大家不太理解这一点。对每个人来说做出一个明确的判决反而是有利的。现在最糟糕的就是这种不确定性。Sachin Kamdar我们现在就像在“西部荒野”谁对谁错都不清楚。Dan Blanchard: 对就像有人跟我说“你必须把许可证改回 LGPL”那确实挺糟糕的对吧我自己也不太喜欢但好吧这算是一个决定也没比以前更糟糕。如果有人跟我说“这个必须放到公有领域不受版权保护”那我也没问题因为这可能意味着它有机会被纳入标准库。如果有人说“你现在可以保持 MIT 许可证不变”那也很好因为这正是我当前想做的。我觉得唯一可能对我有法律风险的情况就是如果我在法院败诉然后需要赔偿。但我真的不明白一件免费的东西被另一件免费的东西起诉除了支付律师费之外还能有什么损失呢你知道我也不打算点名但有人曾主动表示愿意帮我筹集法律基金以防万一。所以我希望事情不会发展到那一步但老实说我也不知道还有什么其他办法。Sachin Kamdar如果真的打官司这条路会涉及很多不同的当事人可能会是一条漫长的道路。Dan Blanchard: 没错确实是这样。说到这个科罗拉多州最近有一个相关的诉讼案挺有意思。有个人用 AI 创作了一些艺术品现在法院正在围绕一个核心问题展开讨论一个人到底得在这部作品里投入多少心力才能名正言顺地算作其“作者”虽然我不确定法律对“代码”的界定会不会和“艺术品”一样。总之这确实是个值得关注的趋势。来源https://www.elvex.com/podcast/he-rewrote-chardet-with-claude-the-internet-blew-up-heres-his-take推荐阅读从不1V1开会、不搞接班那一套黄仁勋最新访谈10万个智能体造不出下一个英伟达、AGI已实现、OpenClaw就是Token时代的iPhone日薪5500元的「AI喷子」火了这家公司找人“专职骂AI”目标是把它骂崩溃、反复“翻车”月下载9700万的Python库被“投毒”Karpathy紧急警告一行pip install敏感数据全泄 110 万美金悬赏AMD 2026 线上黑客松大赛来袭从 MXFP4 MoE 算子爆改到真实千倍并发下的吞吐量极限拉扯不看资历只看绝对速度挑战DeepSeek−R1/KimiK2.5极致并发入围即能拿 1 万美金立即扫码报名