Chardet:潔淨室、Copyleft 與 AI 改寫問題 — Iveta Yuskeselieva

Chardet:潔淨室、Copyleft 與 AI 改寫問題

一個小型 Python 函式庫在 AI 協助下的改寫,揭示了 copyleft 一直以來所依賴的成本結構

開源授權向來不只建立在法律原則之上,也建立在成本之上。copyleft 授權之所以能發揮作用,不只是因為著作權賦予它法律效力,也因為若想透過重寫程式碼來避開授權,通常會比遵守授權更慢、風險更高,而且成本更高。

AI 輔助重實作正在對這個假設施加壓力。今年稍早,一個廣泛使用、採 LGPL 授權的 Python 函式庫,被一套 AI 程式設計工具從零重寫;它只根據公開介面與測試套件運作,最後則以寬鬆授權釋出,捨棄了 copyleft。新程式碼與原始版本的相似度不到 0.04%。

這次重寫是否合法地脫離了 LGPL,是個值得回答的問題,而本文也會回答它。但更棘手的問題是:當合法替代的成本變得比遵循授權更低,且產生出的程式碼本身可能又不足以受到著作權保護、因而無法支撐自己的授權時,copyleft 會變成什麼樣子?

I.  重寫

Chardet 是一個字元編碼偵測函式庫,屬於那種不起眼的工具程式,深藏在大型軟體的相依樹底層,而人們之所以仰賴它,恰恰是因為根本沒人在意它。Mark Pilgrim 於 2006 年以 LGPL 發布這個專案。自 2013 年起,Dan Blanchard 一直是它的主要維護者,累積了將近七百次提交。2026 年 3 月 2 日,Blanchard 釋出了 chardet 7.0.0,並將其描述為使用 Claude Code 完成、「從零開始、採 MIT 授權重寫的 chardet」。它沿用了被取代函式庫相同的套件名稱、相同的公開 API,以及相同的 PyPI 項目頁。若拿舊版程式碼庫來比對,新版在程式碼層次上幾乎已認不出來:JPlag 抄襲偵測得出的平均相似度為 0.04%,而更廣泛的結構分析則把這個數字壓到 1.3% 以下。

方法和結果同樣重要。Blanchard 從一個空白的儲存庫開始,指示模型不要參照 LGPL 原始碼,只提供 API 規格與測試套件,並要求它從零開始重新實作這個函式庫。

這次重寫版本的授權歷史,本身就很能說明問題。Blanchard 一開始以 MIT 授權釋出 chardet 7.0.0;這是一種標準的寬鬆授權,只要求保留出處與授權聲明。之後他改成了 0BSD,這是一種可視同公有領域的授權,完全不附帶任何條件,而起草者也將其描述為允許不受任何限制地使用。Blanchard 表示,這個改動是刻意為之:0BSD 迴避了 AI 產生的程式碼從一開始是否受著作權保護這個問題,因為可視同公有領域的授權,並不依賴可供主張與執行的著作權是否存在。

接著,他公開了設計文件、實作計畫,以及與 Claude 對話的逐字稿,留下了一份異常完整的紀錄,說明這次重寫是如何產生的。他也坦承,這只是對潔淨室做法的近似,而不是真正的潔淨室。他花了十年時間深入研究 chardet 的內部機制,而且在至少三個有文件記錄的例子中,模型的子代理曾參照舊版原始碼的部分內容,不過那些後來證實是 API 介面,或主要原本就是由他自己撰寫的檔案。儘管並不完美,這個流程仍是軟體世界至今最接近 AI 版潔淨室重新實作的一次嘗試。這種技術的脈絡可以一路回溯到 1980 年代,以及 Compaq 對 IBM BIOS 的知名重建案例:其做法是把撰寫新程式碼的工程師,與他們要取代的原始版本隔離開來。

於是,社群以及 Pilgrim 最後留下的問題是:法院是否會認定 chardet 7.0.0 屬於 LGPL 原版的衍生著作。以下分析將依序討論美國、歐盟與英國的情況。

II.    chardet 7.0.0 是否屬於衍生著作

A.    美國

抽象化、過濾、比較(abstraction, filtration, comparison,AFC)測試,最早見於 Computer Associates v. Altai(982 F.2d 693,第 2 巡迴法院,1992),且已被多數聯邦巡迴法院採納;在進行任何比對之前,這項測試會先把原始 chardet 程式碼庫剝離到其受保護的核心部分。

在這裡,「過濾」會排除相當多內容。它會排除 chardet 的目的,因為依據 Section 102(b)),那屬於不受保護的思想、程序、系統或操作方法。它也會排除一般性的探針式架構,只要這是處理字元編碼偵測的標準或可預期作法。它會排除那些由編碼標準、統計方法、相容性需求或字元集技術特性所決定的演算法與偵測邏輯。它也會排除 API;依據第一巡迴法院在 Lotus v. Borland 的推理,API 可說是一種操作方法,而無論如何,最高法院已在 Google LLC v. Oracle America(2021)中透過合理使用處理了這個問題。

經過過濾後,真正留下來的內容非常有限;而在 6.x 系列與 7.0.0 之間,量測相似度僅有 0.04%,原告很難證明剩餘任何受保護表達具有實質近似。第九巡迴法院 的「分析性拆解」方法更讓此案立論困難:當一部作品因其表達方式受到基礎思想高度限制而僅獲得薄弱保護時,原告必須證明的是幾近完全相同,而不只是實質近似。就目前已知事實來看,chardet 7.0.0 並未接近這個門檻。

B.    歐盟

歐盟的分析更為直接。軟體指令(Software Directive)第 1 條第 2 項 明定,電腦程式任何元素背後的思想與原則不受著作權保護,並且明白指出這也包括其介面。

歐盟法院(Court of Justice)在 SAS Institute v. World Programming(C-406/10)一案中確認,無論是程式的功能,還是撰寫該程式所使用的程式語言,都不構成可受保護的表達;因此,以不同程式碼重新實作相同能力是合法的。以獨立程式碼重現編碼偵測,正是如此。

C.    英國

依英格蘭法,高等法院得出的結論大致相同。在 SAS Institute v. World Programming 一案([2013] EWHC 69 (Ch))中,Arnold 法官適用歐盟法院的先決裁定,認定功能、介面與程式語言皆不屬於著作權對軟體提供的保護範圍。英國脫離歐盟後,這一立場也沒有改變。

在這三個法域中,主張 chardet 7.0.0 屬於衍生著作,都會遇到同樣的結構性困難。編碼偵測是一項 在技術上受限的功能,其解法空間 由外部標準、字元集的數學性質以及公開發表的演算法方法所固定;而在此之外,留給原創性表達的空間,也就是著作權欲保護的那部分,其實非常有限。依目前已知事實來看,這三個法域中的任何法院,都不太可能認定 chardet 7.0.0 是 LGPL 原作的衍生著作

有必要更精確地說明,為何這個結論成立,因為這個理由貫穿了本文後續的討論。之所以成立,並不是因為 Blanchard 的 clean room(潔淨室)流程無懈可擊,按他自己的說法並非如此;而是因為原作中可受保護的表達,一開始就很薄。當受保護的表達本來就少,不那麼完美的 clean room 能夠移轉過去的內容也就少;因此,已記錄的污染問題,重要性遠低於那些價值建立在創意架構上的軟體。正是這種表達的薄弱性,讓這次重寫變得安全;也正因如此,chardet 更像是一個警訊,而不是一樁孤立的奇聞。

III. 更棘手的問題:重新實作與著作權的界限

AI 輔助的潔淨室開發,比起這個產業過去習以為常的任何做法都便宜得多,而在過去四十年裡,這項技術的成本正是讓 copyleft 能夠發揮作用的重要原因之一。接下來的問題是:當重新實作變得如此便宜時,著作權,尤其是 copyleft,是否就成了過時的制度設計。

A.    著作權在軟體中保護的是什麼

答案要先從著作權在軟體中保護的是什麼談起:它保護的是表達,而不是功能。Chardet 解決的是一個界定明確的技術問題,而其中的演算法大多受題材本身所支配,因此它可受保護的表達本來就很薄弱。對於具有真正創意架構的軟體,情況則不同。在那種情況下,過濾步驟之後仍會保留下更多可受保護的表達,而比較步驟即使面對 AI 生成的重寫版本,也可能認定兩者實質近似,因為模型可能會重現它在訓練中吸收的創意架構選擇。原作越有創意,就越難在不重現受保護表達的情況下重新實作。

由此浮現出一類在結構上容易暴露於 AI 重新實作的軟體:功能導向、受問題領域限制,且可受保護表達很薄弱的程式碼。對這一類軟體而言,法律上的處境與實務上的處境出現分歧。就法律而言,copyleft 毫髮無傷地繼續存在。就實務而言,它未必如此,因為現在遵循授權的成本,已經高於重新實作的成本。

對於擁有大量可受保護表達的軟體,算式則剛好相反,因為過濾步驟之後仍會留下足夠多的創意架構,使比較步驟依然能抓出非字面複製。

分界線就在過濾步驟本身:當理念、功能需求、標準實務,以及由領域所決定的邏輯都被剝除之後,還剩下多少內容。若留下的不多,AI 重新實作就能繞過 copyleft。若留下的很多,就辦不到。

B. AI 無法消除的成本

copyleft 還有第二道防線,而且這完全不靠著作權法。透過重新實作來繞過 copyleft 授權,會產生一個分支(fork),而維護這個分支,幾乎總是比遵循原始授權更昂貴,也更困難

開源軟體並不是孤立存在的。它存在於一個生態系中,會接收來自上游的安全性修補,追蹤其所依賴的語言執行環境(runtime)變化,並維持與建構在它之上的函式庫之間的相容性。當某個函式庫位於一個被廣泛使用的套件的相依樹中,而那個套件又存在於成千上萬個應用程式裡時,它的價值不只是在於它的程式碼。它的價值還在於它在那個生態系中被持續維護的位置,而一個重新實作的分支(fork)必須自行爭取那個位置:它必須證明自己會及時收到安全性修補、會追蹤執行環境的變化,而且不會引入細微的行為差異,進而破壞其下游軟體。因此,擺脫 copyleft 的經濟成本,不只是重新實作的成本,而是 脫離維護原始版本之社群後,持續維護的成本;即使 AI 讓第一種成本幾乎降到零,第二種成本依然存在。

這也是為什麼 chardet 必須被仔細解讀,因為維護成本保護的是某些軟體,而不是所有軟體。它保護的是大型、複雜、由社群維護的專案,在這類專案中,生態系中的位置才是真正的資產,而分支版本很難輕易複製那個位置。對於小型、穩定、定義明確的工具型函式庫,它幾乎起不了什麼作用,因為這類函式庫功能狹窄、行為已經定型,維護負擔也很輕。Chardet 屬於第二種類型,而這也正是為什麼重寫它是可行的。copyleft 過去從重新實作成本中取得的保護,對於這類軟體而言,其實已經消失了;而持續維護原本可能提供的那種保護,也不會在這麼小的函式庫周圍形成。

C. Thaler 陷阱

對 copyleft 的第二股壓力來自法律,而不是經濟,而且方向正好相反。在美國,Thaler v. Perlmutter 一案認定,若作品是由 AI 自主生成、沒有人類作者參與,就不受著作權保護;而美國最高法院拒絕受理 此案,於 2026 年 3 月維持哥倫比亞特區巡迴上訴法院(D.C. Circuit)的裁定。德國則透過不同路徑得出相近結論。在 2026 年 2 月 13 日的裁定中,慕尼黑地方法院(Amtsgericht München) 適用既有的歐盟與德國原創性標準,認為單靠提示(prompting)與反覆修正,還不足以成立作者資格,除非人類的貢獻能在最終輸出中體現為自由且具創意的選擇。

這就形成了 chardet 方法可能導向的陷阱。若 AI 改寫沒有複製舊程式碼中受保護的表達,新版本或許能成功脫離原本 LGPL 的拘束。但如果新程式碼本身受保護的表達,歸因於人類作者身分的成分過於薄弱,那麼這個替代版本可能會幾乎沒有、甚至完全沒有自己的著作權保護。在那種情況下,改寫雖然脫離了舊授權,卻也無法完整執行新的授權。

其後果具有結構性,因為開源授權是建立在著作權之上的。GPL、MIT 授權、Apache 授權與 BSD 授權,運作上全都是著作權許可。它們都預設某人擁有控制重製、修改與散布的專屬權利,然後再依所載條款授予許可。一旦拿掉著作權,授權條款就失去了可以附加條件的專屬權利。授權標籤或許仍有商業上的意義,但在法律上已經幾乎沒有約束力。

這種風險在 copyleft 上最為尖銳。若某位開發者把大量由 AI 生成的程式碼以 GPL 釋出,他可能本來是希望每一個下游散布者都必須依相同條款公開原始碼。但如果相關的 程式碼缺乏受著作權保護的人類作者性,那麼下游公司在納入並散布這些程式碼時,即使無視那些條件,也未必構成任何著作權侵害。因此,copyleft 便同時遭到兩面夾擊。從進攻面來看,AI 輔助的重新實作,會讓繞開 copyleft 程式碼的成本變得更低。從防守面來看,AI 生成的替代品本身,也可能因為缺乏足夠可受著作權保護的作者性,而無法支撐 copyleft 授權。這套機制的效力,於是同時從兩翼被削弱。

Blanchard 後續自己的決定,正好說明了這一點。他決定把 chardet 7.0.0 的授權從 MIT 改為 0BSD,也就是一種等同公有領域的授權,這在實務上等於承認了這個陷阱的存在。MIT 授權雖然條件極少,但它仍然預設有一位著作權人正在授予許可:允許他人使用、複製、修改與散布,但須附上出處與授權聲明。若這些程式碼根本不附著著作權,那麼這種許可在法律上就沒有分量,那些條件也沒有法律上的拘束力。等同公有領域的授權,則是透過「不要求任何事」來吸收這種不確定性:它把程式碼放到一個在功能上與公有領域無異的位置,因此對下游使用者來說,著作權究竟是否存在,便不再重要。對一個目的只是讓他人可以不受限制重複利用的寬鬆授權專案而言,這樣的做法行得通;但對 copyleft 來說卻行不通,而這正是關鍵的不對稱之處。

Copyleft 不只是允許使用而已。它是把許可建立在互惠義務之上:散布原始碼、保留授權、並把相同條款延伸到下游。這些義務之所以成立,必須以著作權作為來源,因為如果沒有排他權利,就沒有任何東西可以拿來附加條件。Copyleft 專案無法像 chardet 那樣,透過改採等同公有領域的授權來解決 Thaler 問題,因為那樣做等於放棄 copyleft 存在時本來要強制執行的核心機制。chardet 所走的那條逃生路線,只對願意放棄控制的專案開放;而 copyleft 從定義上來說,正是明確選擇不放棄控制。

D.   AI 生成程式碼帶來的不均衡影響

這種侵蝕確實存在,但並不平均,而且幾乎完全集中在同一個地方。對於從未對外散布的軟體來說,失去著作權幾乎不會改變什麼,因為 營業秘密 法並不以是否具備著作權保護資格為前提。公司若用 AI 生成自己的 內部工具,並把程式碼留在自家高牆之內,便可透過保密機制獲得保護,包括僱傭協議、保密義務與存取控制,而程式碼本身的著作權地位反而不是重點。大多數企業軟體根本不會流出公司,對這類軟體而言,Thaler 什麼都沒有改變。

對於 對外散布的專有軟體,著作權留下的缺口,實務上是由契約補上的,而這也是最重要的保護。當 AI 生成的函式庫被嵌入專有應用程式,而該應用程式再依 商業合約 授權給客戶時,該函式庫若沒有著作權,對供應商地位的削弱其實非常有限,因為客戶仍受其所接受條款的拘束。不得複製、轉散布或進行逆向工程的義務,本質上是契約承諾,可依契約執行,並不要求底層程式碼本身必須具有著作權保護資格。不過,這裡必須補上一個但書,因為契約只拘束締約當事人:若第三方合法取得了不受著作權保護的程式碼,他不受自己從未接受的條款拘束,而對此人也無著作權可供主張。然而,就對外散布的專有軟體而言,真正重要的通常正是那個交易相對人,而契約正好能約束交易相對人。軟體的功能價值,也就是它完成設計目的、實際執行工作的能力,完全不受這些問題影響,而這種價值本來也從來不是著作權所創造出來的。

因此,真正受損的是開源,因為開源授權模式除了著作權之外,根本沒有其他可退守的基礎。營業秘密無法幫助一個目的就是公開原始碼的專案,而契約也只能拘束那些接受條款的人,無法涵蓋開源所仰賴的公開散布。

隨著愈來愈高比例的開源程式碼由 AI 生成,因此可能不受著作權保護,規範這些程式碼的授權條款也會愈來愈難執行,而一個軟體整體會逐漸漂向公有領域(public domain),不管它貼上的授權標籤是什麼。這樣的轉變,也為任何建立在軟體程式碼基礎上的併購案帶來一種新的盡職調查風險:因為若標的公司主張其程式碼擁有具價值的專有權利,現在就必須回答其中有多少程式碼是由 AI 生成;而如果答案是「大部分都是」,那麼這項資產在商業與營運上或許仍有防禦力,但未必能靠著作權來防禦。

IV. 結論:這取決於軟體本身,也取決於重寫將走向何方

對於 AI 重新實作是否已讓著作權變得過時,誠實的答案,就像律師對大多數棘手問題會給出的答案一樣,那就是:這要看情況,而且尤其取決於兩件事。

第一,這取決於軟體的類型。當可受保護的表達成分很薄弱,因為程式碼是在解決一個受外部標準所限制的技術問題時,著作權保護本來就很有限,而 AI 重新實作如今又讓這種保護變得更弱。相對地,當可受保護的表達成分很厚實,因為價值存在於創意性的架構設計時,著作權依然會發揮作用,而重寫若重現了那些選擇,仍然會暴露在風險之中。Chardet 就屬於前者,也正因如此,它的故事才值得被拿來說明。

第二,這取決於這次重寫打算走向哪裡。如果一個重新實作的版本,最終是要依 copyleft 授權回到社群,那它就會完整承受這種擠壓:在攻擊面上,它很脆弱,因為別人可以繞過它;在防禦面上,它也很脆弱,因為如果其中大部分內容是由 AI 生成,它所附帶的 copyleft 可能根本無法執行。若重新實作是採用 MIT 這類寬鬆授權釋出,損失會比較小,因為它原本要求就不多、附帶條件也很輕;但它失去的那一點點,原因其實一樣:可能根本不存在可供授權的著作權。至於若重新實作是被放在專有的契約條款之後,不對外公開,那它幾乎不會失去什麼,因為契約與保密性承擔了原本應由著作權提供的保護,而程式碼的功能性價值在整個過程中也不受影響。

chardet 這起事件所標示的,並不是軟體著作權的死亡,而是它所能發揮作用的範圍正在縮小。對於受契約約束的功能性程式碼而言,著作權從來都不是最重要的那件事。對於那些表達性較薄、正重新回到開放領域的程式碼來說,著作權正變得不像過去那樣可靠,這會是開源社群必須思考的轉變,因為它在過去三十年建立起來的授權模式,正是奠基於這個基礎之上。問題不在於開源是否能在這種局面下存續:它可以,因為開放協作的價值從來不只是法律層面的。真正的問題是,迄今為止一直服務這個社群的法律工具,是否仍足以應對它們如今所處的環境;而在不足之處,下一步又會是什麼。

Iveta Yuskeselieva

撰寫涵蓋歐盟、英國與美國的科技法律議題:軟體授權、AI、 資安,以及介於這些領域之間的商業問題。

如果你的團隊也正在處理這個問題,我很樂意交流想法

繼續留在這場對話中。

直接提供新的分析。沒有雜訊。

延伸閱讀

不只原始碼:開放式 AI 中隱藏的授權危機

不只原始碼:你的基礎設施供應商改了授權條款,而你的法務團隊很可能還不知道