GNU and the AI reimplementations

Salvatore Sanfilippo

GNU 與 AI 重新實作

「那些記不住過去的人,注定要重蹈覆轍。」這句話我向來不太喜歡,而當前 AI 圍繞軟體專案重新實作所發生的事,正好暴露了這種想法的全部侷限。許多人正在抗議用 AI 重寫既有專案是否公平。然而,這群人當中有相當一部分,在九〇年代就已身在業界:他們見證了 Richard Stallman(理查·史托曼)事蹟的尾聲(始於八〇年代),當時他與追隨者們正為 GNU 計畫重新實作 UNIX 使用者空間。當年為 GNU 計畫的行動喝采的人(依我之見,喝采得有理——我當時也喝采了),如今卻有不少正是反對 AI 重寫的那群人。

史托曼不僅是程式設計天才,也是具備跨領域宏觀視野的人,此外他對著作權的細微差異亦有深入理解。他要求其他程式設計師以特定的方式重新實作 UNIX 使用者空間。一種能讓每項工具相較於原版都顯得獨特、可辨識的方式。或更快,或功能更豐富,或可寫成腳本;這些特質同時服務兩個不同的目標:讓 GNU Hurd 變得更好,同時提供一道抵禦訴訟的保護層。若有人主張 GNU 的實作不只是複製想法與行為(這是合法的),而是「protected expressions(受保護之表達)」(也就是逐字照抄的原始碼),那麼這些新增的功能與對特定設計方向的刻意推動,就能提供法官得以理解的反駁論點。

他也要求始終只重作行為本身,避免去看實際的實作,而是利用規格文件與透過手動執行測試所觀察到的工具真實運作機制。即便如此,公平來說,可以推測參與 GNU 計畫的許多人很可能曾接觸過或取得過 UNIX 原始碼。

當 Linus(林納斯)重新實作 UNIX、撰寫 Linux 核心時,情況則有些更為複雜,多了一層間接關係。他僅是以使用者的身分接觸過 UNIX,但顯然並未取得 UNIX 原始碼。另一方面,他卻大量接觸過 Minix 原始碼(一種 UNIX 的實作,但採用微核心)以及描述該實作的書籍。然而,回過頭來看,當 Tanenbaum(塔能鮑姆)撰寫 Minix 時,他也是在大量接觸過 UNIX 原始碼之後才動手的。因此,SCO(在與 IBM 的訴訟期間)很難主張 Linux 含有任何受保護之表達。然而,當林納斯以 Minix 作為靈感來源時,他不僅對某個在知悉 UNIX 程式碼下實作出來的東西(Minix)非常熟悉,而且(更有意思的是)Minix 的授權當時是限制性的,直到 2000 年才開放原始碼。即便在這樣的情況下,塔能鮑姆抗議的仍是架構問題(在那場著名的論戰中),而非著作權侵害。因此,我們可以合理推斷,塔能鮑姆認為重寫是公平的,即使林納斯曾接觸過 Minix(而他自己在撰寫 Minix 時也遵循過類似的過程)。

著作權法真正的規定

為了把這一切放回正確的脈絡,讓我們聚焦著作權實際的邊界:法律規定你不得抄襲「受保護之表達」。以軟體而言,受保護之表達指的是原封不動的程式碼,包含相同的結構、變數、函式、特定事務處理的精確機制,除非是已知演算法(標準的 quicksort 或 binary search 即使用非常相似的方式實作也不會構成侵權)。問題在於當程式的商業邏輯與原始實作幾乎逐行完全吻合時。否則,這類複製是合法的,且無須遵守原始授權,只要能相當清楚地看出程式碼雖然在做類似的事,卻並非剪下貼上、或機械式地翻譯成另一種語言,或僅為看起來有點不同而做的表面修飾(注意:這正是法院會試圖辨識的惡意手法)。我感覺每位閱讀本文且能力足夠的程式設計師,都完全清楚什麼是 *重新實作*、以及它看起來是什麼樣子。無可避免會有一些相似之處,但程式碼顯然並非抄襲。若法律架構是如此,為何人們還在意 clean room implementations(淨室實作)?嗯,現實是:那只是在訴訟發生時的最佳化,能讓你在法庭上更容易勝訴,但若接觸某個程式的原始碼僅是用來了解其想法與行為,那是沒問題的。此外,我們今天都樂於擁有 Linux、GNU 使用者空間,以及許多循著類似路徑發展的其他開放原始碼專案。我認為規則無論在我們認同其目的時,或不認同時,都應一體適用。

AI 登場

因此,重新實作向來都是可行的。現在改變的是,它們得以殘酷地更快、更便宜地完成。過去,你必須聘請開發者,或是自己懷抱足夠的熱情與熱忱去創造一個重新實作,出於商業抱負,或是因為你想與廣大的世界分享。

現在,你可以啟動一個 coding agent(程式碼代理),並以兩種方式進行:將實作轉化為規格文件,然後在新的工作階段中要求代理重新實作它,並可強制要求特定品質,例如:讓它更快,或讓實作變得極度易於追蹤與理解(這是讓最終實作與其他實作相去甚遠的好技巧,鑑於許多程式碼似乎是為相反的目標而設計)、或更模組化、或解決原始實作的某個根本限制:所有這些提示都會讓你更容易大幅偏離原始設計。LLMs 以這種方式使用時,並不會產生它們過去所見內容的複製品,但即便如此,最終你仍可使用代理仔細檢查是否有任何侵權之處,若有,就以全新的程式碼替換那些段落。

另一種看似較不嚴謹、但在現實世界中可能非常有效的方法,是直接提供原始碼本身,要求代理以完全新穎的方式重新實作,並將原始碼同時作為規格文件、以及驅動實作盡可能遠離原始碼本身的依據。Frontier LLMs 能力非常強,它們甚至能利用某樣東西來明確避免抄襲它,並審慎嘗試不同的實作途徑。

如果你曾嘗試過上述類似的做法,你就會知道所謂的「未經壓縮的複製」其實是一種幻覺:代理會以非常「有機」的方式撰寫軟體,犯錯、因唯有事後才變得清晰的限制而多次改變設計,從小處著手並逐步加入功能,而且在這本身就已混亂的過程中,我們經常透過提示、暗示、期望大幅引導它們的工作。許多想法既具安慰性卻又虛假:「未經壓縮的複製」就是其中之一。但即便如此,如今重寫的過程變得如此簡單,許多人為此感到不安。這裡存在一個更根本的事實:軟體的本質已經改變;在不同授權下進行的重作,只是這種本質被永久轉變的一個實例。與其對抗自動化程式設計的每一種展現,我認為更好的做法是建立新的心智模型,並加以適應。

法律之外

我相信有組織的社會若遵守法律便能繁榮,但我不會僅因某條規則存在就盲目接受,我會基於自身的倫理去質疑事物:正是這樣才讓個人、社會與法律本身得以演進。我們必須自問:著作權法在倫理上是正確的嗎?AI 為既有流程帶來的加速,是否從根本上改變了流程本身?

讓軟體得以比多數其他人類領域演進得更快的一件事,在於這門學科較少被專利與各種保護所錨定(而這反過來很可能是因為軟體周圍的分享文化)。如果著作權法更為嚴苛,我們很可能就不會有今天所擁有的一切。保護單一個人與企業的利益,是否比人類文化的整體演進更重要?我不這麼認為,況且,著作權法是一個共同的競技場:規則對所有人都相同。再者,毫不誇張地說,儘管採取較為寬鬆的做法,軟體仍是較容易賺錢的領域之一;看起來商業層面並未因能夠重作事物而受到衝擊。很可能,事實恰恰相反:想想有多少企業是因為開放原始碼軟體堆疊才得以實現(並非說 OSS 大多由複製品組成,但它確實繼承了許多來自過去系統的想法)。我相信,即使有了 AI,這些根本的張力依然完全成立。重作的成本很低,但這是我們所有人的新競技場,而僅僅以自動化的方式重作事物,卻未在想法、工程、功能上放入任何新穎之處,長遠來看價值將十分有限。真正重要的是你創造某樣東西的具體方式:它是否設計良好、有趣好用、有持續維護、具備一定新穎性、快速、有文件且實用?此外,這一次力量的失衡朝著正確的方向發展:大企業向來有能力花費龐大到離譜的資金來複製系統,以對使用者無法抗拒的方式提供它們(例如,多年免費,之後再轉換模式),並將自己定位為並非真正由其發明的想法的領導者。如今,一小群人也能對大公司的軟體系統做同樣的事:既然合成人力對許多人而言更便宜,他們現在就能在想法上競爭。

我們站在巨人的肩膀上

還有另一個我們都需要內化的根本觀念。軟體是作為一個漸進、連續的過程被創造與演進的,每一項新創新都是建立在前人所發明的基礎之上。我們都很快地做出某樣東西並認為我們「擁有」它,若僅止於我們所寫的精確程式碼,這是正確的。但我們是在已完成的工作與想法之上構築事物,鑑於當前資訊科技的發展有賴於「想法與行為不受著作權保護」這一根本典範,我們需要接受重作是一個公平的過程。若它們不包含任何新意,或許算是偷懶的努力?這是有可能的,然而:它們是公平的,沒有人違反任何規定。但若我們想成為生態系中的良好公民,在複製某項成果時,就應嘗試同時演進它、發明一些新東西:將實作專門化以降低記憶體用量,或使其在特定情境下更有用,或減少錯誤:也就是史托曼的方式。

就 AI 而言,我們幾乎集體犯了一個錯誤,那就是孤立地思考某項科技對軟體與人類究竟是好是壞。AI 能在開放原始碼軟體領域解鎖許多好事。許多充滿熱情的人之所以撰寫開放原始碼,是因為他們厭惡正職工作、想做出自己熱愛的東西,或是因為他們想成為比經濟利益更宏大的某個事業的一部分。許多開放原始碼軟體要不是在閒暇時間撰寫,就是在專案人力極度受限的嚴苛條件下完成,或——更糟的是——受制於出資開發的公司所施加的限制條件。如今程式碼一天比一天不如想法重要,開放原始碼可以被 AI 大幅加速。在適當的人手上(AI 寫程式並非人人適合,正如好的程式設計與設計並非人人都能勝任),週末撥出的四小時將帶來十倍的成果。例如,Linux 裝置驅動程式可以透過自動反組譯某個專有二進位檔來實作。或者,原本可能只是勉強維持的函式庫,也能轉變為能在更合理的時間內妥善維護的專案。

在 AI 出現之前,我們見證了軟體的商品化:品質下降、只專注於金錢、對極簡主義與資源尊重毫不在意:只剩下一堆大多支離破碎的臃腫之物。硬體效能越強,臃腫越嚴重,越不在乎。這本就已經非常糟糕。AI 會讓情況更糟,並非顯而易見或必然,而重新實作其他軟體系統的能力,正是可能為我們的領域找回一些熱情與理智的更大圖景的一部分。

原文由 Salvatore Sanfilippo 發布

本文章由 muse-spark-1.2-contributor 進行翻譯