AI 重写 Adobe 这事,先回仓库核三件事

Hello,我是飞飞。
这几天我刷手机,老看到同一条消息在转。大意是:有个开发者用 AI 逆向重写了 Adobe 七款软件,开源了,项目逼近 10 万 Star。
如果你也刷到过,先别急着转。我顺手去他仓库里核了一遍,回来发现那句话里几乎每个词都得改。真正有料的地方在别处:它顺手替所有人测了一道线。AI 把重写变得这么便宜之后,重写谁的软件还算不算数。更狠的一层我留到最后:同样是 AI 重写,验收标准攥在谁手里,结局不一样。
那条消息里错的几处
我回仓库核了三件事,先说最离谱的那一处。
那个「逼近 10 万 Star」的项目,压根不是那个开发者的。
它叫 REA,作者是 GitHub 上的 morluto,2026 年 4 月建仓,用 TypeScript 写,干的事是把 AI 接到 Ghidra、IDA 这类逆向工具上。10 月 13 日 15:05 我直连 GitHub 的 API 取数,它单库 174,259 Star,README 全文一个字没提 Adobe。
Brandon Thomas 那边是另一码事。还是那次取数,他名下最大的 PhotoCraft 单库 5.4 万 Star。两个不相干的人、两个不相干的项目,被揉成了同一个故事。
剩下几处也得改。Thomas 自己从头到尾说的是 clean-room reimplementation,干净室重写,规则文件里明文写着不许看 Adobe 源码,「逆向」两个字是转述的人后加的框架。「七款」也过期了,10 月 7 日之后他又加了办公三件套、AutoCAD 和 Pro Tools。「一名开发者」同样站不住:截至 10 月 13 日,PhotoCraft 单库的贡献者有 271 个人。
真正经得起核的只有两样。Rust 是真的,README 挂着「100% Rust」的徽章,规则文件里还写着不用 Tauri、Electron 这类网页壳。Opus 5.5 算部分真:README 一个字没提它,硬证据是提交末尾那条 co-author 尾巴,署名 Claude Opus 5.5 的有 18 次。不过同一个仓库里,也躺着一次 GPT-6 的署名。
干净室是他自己封的
「干净室」有确切含义。
严格意义上的干净室,墙要砌在两拨人中间。一拨人负责看别人的软件,写出规格说明书;另一拨人只拿着规格写代码,原件长什么样都不许看。要害不在写代码那拨人有多正派,在于看见的人和动手的人不是同一拨。
Thomas 那条规则本身没毛病。原文我抄一句给你:
We studied Photoshop and other proprietary editors for behaviour and look only. Never copy their code, shaders, profiles or assets.
意思是,我们只研究它们的行为和观感,绝不复制代码、着色器、配置文件或素材。话说得挺硬。
那执行起来呢?问题出在他自己的文档里。ROADMAP.md 10 月 10 日那行进度记录写着,那次重测是 against Photoshop 2026 27.11.0,括号里一句 installed bundle inspected,检查了装好的正版包。同一份 docs/target-app-parity.md 交代了细节:本机装了正版 Photoshop 2026,特意注明 Inspected without launching it。翻了什么?翻 Info.plist 里的文档类型,翻格式插件的 PiPL 读写标志,翻语言包和那张 Default Keyboard Shortcuts.kys 快捷键表(67 个工具箱工具、107 条菜单命令),翻插件清单,还翻了主二进制里的字符串,捞出 81 条「某某 Tool」的标题。
一边是仓库里「只看行为和观感」的规矩,另一边是进度记录里「检查了装好的包」。没有启动它,这句我信。可包文件、语言包、快捷键表、二进制字符串,一样一样翻过去了。
代码确实是重写的,这点我倾向于信他。但严格干净室的那道墙砌在两拨人中间,他这个项目里,墙砌在自己脑子里。
墙上没别人站岗。
项目文档先把自己拆了
那它到底干成什么样了?Thomas 那边自己留了一份很诚实的账,就在 ROADMAP 和对齐文档里。
功能覆盖面约 76%,是数出来的:菜单 628 项全对上,工具箱 68 项里对上 56 项。
但专业人士能不能拿它把 Photoshop 替掉,文档自己给的数是**约 45%**。
同一份文档里还写着:579 个 open issue,25 项性能预算里 22 项没达标,离完全对齐还需 2,300 到 4,100 个 Opus 5.5 的 agent 小时。
76% 是数菜单数出来的,45% 是人和软件坐下来面对面才交得出的数。
更值得看的是它的记性。10 月 3 日那份估计写的是「已完成 82%、还差 140 到 220 小时」,后来原文自己把它标了出来:只数了功能表面积,过于乐观。Thomas 也把「一个月内 100%」收回去,改成「几个月内 99%」(转引自 madrobot.blog)。
所以「AI 一个周末重写 Adobe 全家桶」这个说法站不住。真实情况是 AI 让重写变快了,没让对齐变快。
重写和抄差在哪
我九月写过一篇,讲 Google 把一个开源项目的代码搬走、顺手删了署名。那篇说的是复制:别人的代码一行不改搬过来,再把名字抹掉。
这次是另一件事。Thomas 那边一行 Adobe 的代码都没用,是从零实现的。区别看着小,其实决定性质。
那重写到底算不算抄?法律上一般被认为可以接受。前提是不直接复制代码,只复刻功能。但「一般可以」不等于没风险,软肋有两处。
一处是商业外观。界面观感做得太像,可能招来「造成混淆」的官司。像到什么程度算侵权,我没核到标准,这类事本来一案一议。
另一处是专利。Adobe 握着数千项软件专利,覆盖的不只是代码,还有操作本身。就算你每一行都是自己敲的,某些交互流程本身也可能早被人圈了地。
还有件事得说明白:到 10 月 13 日为止,没有任何人给他这套 ArtCraft 做过代码相似度检测。一份都没有。
我特意提这句,是因为后面那个先例里有一份 1.3%,很容易被顺手挪过来。那是另一个项目的数。
那道线现在谁在守
先说一段更早的。2026 年 3 月,chardet 出了 v7。
chardet 是个 2006 年就有的 Python 小库,用的是 LGPL 这种「衍生作品要沿用同样许可」的开源协议。2013 年起的维护者想把它送进 Python 标准库,两次都卡在这份协议上。他换了个法子:用 Claude Code 从头重写,开空仓库、先写设计文档、明令模型不许参考原来那份源码,发出来的版本换成 MIT 这种几乎不设限的许可。他管这叫「AI 干净室」。
相似度用 JPlag 实测,不到 1.3%。
原作者站出来了。他说得直接:一个在原代码上训练过的模型,不会因为你叫它别抄,就产出法律上干净的重写;旧协议要求衍生作品延续同样许可,这条义务跟开发过程没关系。反方也有,GPLv3 的起草人之一认为,新代码里指认不出旧的受版权材料,看不到必须延续旧许可的依据。
后来 Simon Willison 扒出来,模型在某一步确实读过原来的源码,重写的人自己也承认,他的子 agent 在三个会话里读了旧代码。他把许可证换成了 0BSD,连署名都不要求。
相似度不到 1.3%,争议照样没停。
那这套判法能不能直接搬到 ArtCraft 身上?搬不动。chardet 是开源代码换许可,争的是「衍生作品」这条轴;ArtCraft 是闭源商业软件被重写,走的是逆向工程、商业外观、专利这条轴。两条轴不一样。
已经动手的是别家。动视下架过一段 AI 反编译的《现代战争 2》影像,Bethesda 就一个 AI 做的《Fallout: New York》发了停止通知函(转引自 Decrypt)。
Adobe 这边呢?至今零表态,有没有发过律师函,我没核到。它会不会开口,我盯着。
这些线怎么划,我是外行。但用 AI 重写一整个库,我自己真干过一回,还是最大的一档。分界线在哪,我有体感。
我六月也重写过一整个库
六月,我让 AI 把自己 2022 年写的记账后端,从 7600 行 Java 重写成 Kotlin,241 个文件,早上十点多动手,下午六点多收工,当晚 CI 上生产。
听着跟上面这出戏差不多,但差在一条上:那是我的代码。
我敢把这么大的活交出去,是因为验收标准是我自己定的。删旧代码前,我先让它招供:项目里有个 529 行的祖传 XSS 过滤器,谁也说不准重写后那堆正则还一致不一致,我让 AI 拿原 Java 版跑一批输入,抓下 19 条「黄金输出」钉成断言,有一点行为漂移测试就变红。
也翻过车。有个叫 isLiability 的字段,改写时被悄悄并进了别的类里,编译照过,测试全绿,我肉眼翻 diff 根本看不出来,是流水线里专门唱反调的校验 agent 把它吼回来的。
Thomas 那边也讲对齐,也讲 parity,可两边站的位置不一样。我是自己给自己出卷子,卷子长什么样我说了算,客户那头感觉不到任何动静就算过关;他那边是拿别人的卷子当答案,菜单 628 项、工具 68 项,一个格一个格对着别人的软件追。
同样是 AI 重写,一边的验收标准攥在自己手里,一边的攥在别人手里。这是两种完全不同的工程处境。
这事我收成两句判断
AI 把重写的成本砸下来了,但它没砸动「这是谁的软件」。技术门槛塌得很快,边界这头没怎么动。
眼下真正在守线的,是社区,法院还没开口。
所以下次再刷到「某人用 AI 重写、逆向、复刻了 XX」这类消息,建议先回仓库核三件事:Star 是几个库加起来的,作者自己用的哪个词,项目文档里写的完成度多少。回仓库待十分钟,比转十条消息管用。
你手上那块最想交给 AI 重写的代码,是你自己的,还是别人的?