GNU 与 AI 重实现
那些不能铭记过去的人注定要重蹈覆辙。这句话我向来不太喜欢,而当下围绕 AI 重写软件项目的种种,恰恰暴露了这种观念的全部局限。许多人正在抗议用 AI 重写现有项目的公平性。然而,其中相当一部分人在 90 年代就已入行:他们亲历了 Richard Stallman(理查德·斯托曼)及其追随者为 GNU 项目重实现 UNIX 用户空间的壮举的尾声(始于 80 年代)。如今反对 AI 重写的同一批人,当年却为 GNU 项目的行动欢呼——在我看来,这是正确的,我当年也曾欢呼。
理查德·斯托曼不仅是一位编程天才,更是一位具有跨学科广阔视野的人,除此之外,他还深谙版权的细微之处。他要求其他程序员以一种特定的方式重实现 UNIX 用户空间。这种方式会让每个工具与原始版本相比都显得独特、可辨识。或更快,或功能更丰富,或可脚本化;这些特质服务于两个不同的目标:让 GNU Hurd 变得更好,同时提供一层抵御诉讼的保护。如果有人声称 GNU 的实现不仅仅是复制想法和行为(这是合法的),而是复制了“protected expressions(受保护表达)”(即逐字逐句的源代码),那么那些新增的功能以及对特定设计方向的有意推动,就能提供一个法官能够理解的反驳论据。
他还要求始终只重实现行为本身,避免去看实际的实现,而是利用规范以及通过手动运行测试所观察到的工具的真实运作机制。尽管如此,公平地推测,参与 GNU 项目的许多人很可能接触过或能够获取 UNIX 源代码。
当 Linus(林纳斯)重实现 UNIX、编写 Linux 内核时,情况则要复杂一些,多了一层间接性。他只是作为用户接触过 UNIX,但显然并未接触过 UNIX 的源代码。另一方面,他大量接触过 Minix 的源代码(一种 UNIX 的实现,但采用了 microkernel(微内核))以及描述该实现的书籍。而反过来,当 Tanenbaum(安德鲁·塔能鲍姆)编写 Minix 时,他也是在大量接触过 UNIX 源代码之后才动手的。因此,SCO(在与 IBM 的诉讼期间)很难主张 Linux 包含了任何 protected expressions。然而,当林纳斯以 Minix 为灵感时,他不仅非常熟悉这个在知晓 UNIX 代码的情况下实现出来的东西(Minix),而且(更有意思的是)Minix 的许可证当时是受限的,直到 2000 年才成为开源。即便在这种情况下,安德鲁·塔能鲍姆抗议的也是架构问题(在那场著名的论战中),而非版权侵权。因此,我们可以合理地推断,安德鲁·塔能鲍姆认为重写是公平的,即使林纳斯接触过 Minix(而他自己在编写 Minix 时也遵循了类似的过程)。
版权法到底说了什么
为了把这一切放在正确的语境中,让我们聚焦版权的实际边界:法律规定你不得复制“protected expressions”。就软件而言,protected expressions 就是原样照搬的代码,具有相同的结构、变量、函数、实现特定功能的精确机制,除非它们是已知算法(标准的 quicksort 或 binary search 即使以非常相似的方式实现也不构成侵权)。问题在于程序的业务逻辑与原始实现几乎逐行完全吻合。除此之外,复制就是合法的,无需遵守原始许可证,只要能够相当清楚地表明代码虽然在做相似的事情,但并非剪切粘贴而来,也非机械地翻译成另一种语言,或仅仅做了外观上的修改以显得有所不同(请注意:这恰恰是法院会试图识别的那种恶意手段)。我感觉每一位阅读本文的有能力的程序员都完全清楚什么是*重实现*以及它是什么样子。不可避免会有相似之处,但代码显然不是抄袭的。如果法律设定如此,人们为何还在意 clean room implementations(洁净室实现)?其实,现实是:这只是在诉讼发生时的一种优化,它让在法庭上获胜变得更简单,但如果接触某个程序的原始源代码仅仅是为了了解其想法和行为,那是没问题的。此外,我们今天都很高兴拥有 Linux 和 GNU 用户空间,以及许多遵循类似路径的其他开源项目。我认为规则无论在我们认同其结果时,还是不认同其结果时,都应当被一视同仁地执行。
AI 登场
因此,重实现向来都是可能的。现在发生变化的是,完成它们的速*度*和成本都变得极其高效和低廉。过去,你必须雇佣开发者,或是自己怀有足够的热情和激情去亲手创建重实现,出于商业抱负,或是因为你想与全世界分享。
现在,你可以启动一个 coding agent(编程智能体),并以两种方式推进:先将实现转化为规范,然后在新会话中让智能体去重实现它,并可能强制要求特定的品质,例如:让它更快,或让实现变得极其易于理解和跟随(这是一个能让最终实现与其他实现大相径庭的好技巧,考虑到大量代码似乎正是为相反的目标而设计的),或更模块化,或解决原始实现中某个根本性的限制:所有这些提示都会让显著偏离原始设计变得简单得多。LLMs 以这种方式使用时,并不会产生它们过去所见内容的复制品,但即便如此,最终你仍可以使用智能体仔细核查是否存在任何侵权,如有,则用全新的代码替换相关部分。
另一种看似不那么严谨,但在现实世界中可能非常有效的方法,是直接提供源代码本身,并要求智能体以完全新颖的方式重实现它,同时将源代码既作为规范,又作为驱动实现尽可能远离原始代码的依据。Frontier LLMs 能力非常强,它们甚至可以利用某样东西来明确地避免复制它,并谨慎地尝试不同的实现路径。
如果你曾尝试过上述做法,你就会知道“未压缩的复制”其实是一种幻觉:智能体会以非常“有机”的方式编写软件,会犯错,会因只有在后期才变得清晰的限制而多次改变设计,从一个很小的起点开始逐步添加功能,并且往往在这个本已混乱的过程中,我们还会通过提示、暗示和期望来大幅引导它们的工作。许多想法与其说是真实的,不如说是自我安慰:“未压缩的复制”就是其中之一。但即便如此,如今重写的过程变得如此简单,许多人对此感到不安。这里有一个更根本的事实:软件的本质已经改变;在不同许可证下的重实现只是这种本质被永远改变的一个例证。与其去对抗自动编程的每一种表现,我认为更好的做法是建立一种新的心智模型,并去适应。
法律之外
我相信有组织的社会只有在遵守法律时才能繁荣,但我不会仅仅因为某条规则存在就盲目接受它,我会基于自己的伦理去质疑事物:正是这一点让个人、社会以及法律本身得以进化。我们必须自问:版权法在伦理上是正确的吗?AI 为既有流程提供的加速,是否从根本上改变了流程本身?
让软件比大多数其他人类领域进化得更快的一个原因在于,这一学科较少受制于专利和保护(而这反过来很可能正是因为围绕软件的分享文化)。如果版权法更为严苛,我们很可能就不会拥有今天所拥有的一切。保护单个个体和公司的利益,是否比人类文化的整体演进更重要?我不这么认为,而且,版权法是一个共同的竞技场:规则对所有人都是一样的。此外,可以毫不夸张地说,尽管采取了更为宽松的方式,软件仍然是更容易赚钱的领域之一;看起来商业层面并未因能够重实现事物而受到冲击。很可能恰恰相反:想想有多少商业是因开源软件栈才得以实现的(并非说 OSS 大多由复制品构成,但它无疑继承了许多关于过去系统的想法)。我认为,即便有了 AI,这些根本性的张力依然完全成立。重实现的成本很低,但这就是我们所有人的新竞技场,仅仅以自动化的方式重实现事物,而不在想法、工程、功能方面注入任何新颖的东西,从长远来看价值有限。真正重要的是你创造某样东西的具体方式:它是否设计良好、有趣易用、得到支持、有所创新、快速、有文档且有用?而且,这一次力量的不平衡朝着正确的方向倾斜:大公司向来有能力花费巨额资金去复制系统,以一种让用户无法抗拒的方式提供它们(例如,多年免费,之后再切换模式),并将自己标榜为那些并非真正由它们发明的想法的引领者。如今,小群体也能对大公司的软件系统做同样的事:既然合成劳动力对许多人来说更便宜,他们现在可以在想法上展开竞争。
我们站在巨人的肩膀上
还有一个根本性的观念是我们都需要内化的。软件的创造和演进是一个增量式的连续过程,每一项新创新都是建立在前人发明的基础之上。我们都很快就会构建出某样东西并认为我们“拥有”它,如果仅限于我们所写的确切代码,这么说是正确的。但我们是在已有的工作和想法之上进行构建的,鉴于当下 IT 的发展得益于那个使想法和行为不受版权保护的基本范式,我们需要接受重实现是一个公平的过程。如果它们不包含任何新意,或许是一种偷懒的努力?这是可能的,然而:它们是公平的,没有人违反任何规定。不过,如果我们想成为生态系统中合格的公民,在复制某项工作时,就应该尝试同时进化它、发明一些新东西:为更低的内存占用而专门定制实现,或使其在特定场景下更有用,或更少缺陷:这就是理查德·斯托曼的方式。
就 AI 而言,我们几乎集体犯了一个错误,即孤立地认为某项技术对软件和人类而言是好是坏。AI 能够在开源软件领域释放出许多好处。许多充满热情的个人之所以编写开源,是因为他们厌恶日常工作,想做自己热爱的东西,或者他们编写开源是因为想成为比经济利益更宏大的事业的一部分。大量开源软件要么是在业余时间编写的,要么在分配给项目的人手上受到严重限制,或者——更糟的是——受到出资公司的限制性条件的制约。如今代码每天都比想法更不重要,开源可以被 AI 大幅加速。在合适的人手中,周末投入的四小时将带来十倍的成果(AI 编程并不适合所有人,就像优秀的编码和设计并不适合所有人一样)。例如,Linux 设备驱动可以通过自动反汇编某些专有二进制 blob 来实现。或者,一个原本只是勉强维护的库,可以转变为能够在更合理的时间内得到妥善打理的项目。
在 AI 出现之前,我们目睹了软件的商品化:质量下降、只关注金钱、对极简和资源尊重毫不关心:只剩下一堆大多支离破碎的臃肿之物。硬件性能越强,臃肿越多,关心越少。情况本来就已经很糟糕。AI 会让情况变得更糟,这一点既不明显也非必然,而重实现其他软件系统的能力是更大图景的一部分,它或许能为我们的领域恢复一些兴趣与理性。
随机一篇博客