這是本文件的舊版!
更為彈性中庸的 LGPL-3.0
林誠夏/文 2007-08-27
經歷了約一年半開放式網路論壇的意見討論,LGPL-3.0(註一)亦隨著 GPL-3.0 於 2007 年 6 月 29 日同天定稿,其基本的修正趨勢可大分為兩點,第一就是在函式庫程式 (library) 的應用方面更添彈性,LGPL-3.0 授權條款一方面試圖微調外擴性質的授權拘束性(註?),卻也同時拓深了所轄函式庫可能的散布管道;第二是將函式庫的實際運行法則案例化,舉凡 LGPL-3.0 條款第 3 條至第 6 條,都可說是實際案例的個別說明條款,一般來說、LGPL-3.0 的重大修改有下列幾點:
- 代位副首、成為 GPL-3.0 的附加條款:LGPL 條款之於 GPL 而言,一直處於代位副首的地位(註二),其存在意義在於提供一個與 GPL 相較,在授權拘束性方面較為寬鬆的自由軟體授權條款,以避免多數使用者迴避使用拘束性過於嚴苛的 GPL 函式庫,但無論如何、從自由軟體基金會 (Free Software Foundation FSF) 的立場出發,其仍然認為 GPL 才是達致普世軟體自由 (Software Freedom) 的最佳利器,而 LGPL 則是因應現實所不得不做出的讓步,是以新版 LGPL-3.0 試圖貫徹這樣的理念,其以 GPL-3.0 的條款內容為本、將 LGPL-3.0 的其餘條文做為 GPL-3.0 的附加修正條款,在這樣的配置之下、LGPL-3.0 的實際內容等於 GPL-3.0 本文加上 LGPL-3.0 本文,才是完整的 LGPL-3.0 授權全文。更進一步來說、GPL-3.0 與 LGPL-3.0 之間仍延續 2 版時期的「轉換關係」,以 LGPL-3.0 授權的函式庫為例,其可以被任一散布者改以 GPL-3.0 的方式接續散布,再者、如修改、改作之後的作品,不再具有函式庫的運作性質,則此改作成品後續更是只能轉以 GPL-3.0 為其再散布時的授權條款(註三),此授權轉換的過程如同 2 版時期,依舊不可逆轉,亦即、程式從 LGPL-3.0 轉換為 GPL-3.0 為一條單向道,並沒有任何程式可以由 GPL-3.0 轉回適用 LGPL-3.0 為其授權條款。
- 重建壁壘、大幅度縮小 LGPL-3.0 的授權擴散範圍:若用最大特徵來對 GPL 與 LGPL 的不同點進行表述,可說即為兩者適用的客體有所不同,GPL 可適用於各種類型的軟體程式,但 LGPL 的客體則必須為一提供數據、資料,供其他程式呼叫存取來產生作用的軟體函式庫,這樣的不同點造成了 GPL 與 LGPL 在授權拘束性原則上的差異,一般對於 GPL 的解釋、若其他程式與 GPL 函式庫產生必然的連結與利用關係,則原則上此連結程式,便可能會被解讀為該 GPL 函式庫的衍生著作,而在後續散布上須一體適用 GPL 授權條款,進而被要求一併提供該程式的程式原始碼。但 LGPL 在授權拘束性上,卻創建了原則與例外不等的運行法則,這些原則與例外的判準、在第 3 版的 LGPL 裡更為彰顯。LGPL-3.0 重新釐清了諸如「應用程式 (Application)」、「LGPL-3.0 函式庫本體 (Linked Version)」及「系統函式庫 (System Library)」的指涉範圍,利用這些重新定義的名詞來構築 LGPL-3.0 授權拘束性的擴散範疇,而就整體觀察而言、LGPL-3.0 較之 2 版確實放寬了許多的限制,例如將一般應用程式與 LGPL-3.0 函式庫結合為一新軟體專案來運作,只要程式與函式庫之間不具必然的依賴關係,並且兩者呼叫與對應之間的程序與介面也清楚的話,此結合作品便未必會受到 LGPL-3.0 全面的授權拘束。
- 明示使用、重製推銷 LGPL-3.0 函式庫:相對於重新介定 LGPL-3.0 授權函式庫的拘束性範圍之外,LGPL-3.0 進一步加上了「明示使用」的要求(註四),以及「重製推銷」自身函式庫的廣告策略(註五)。所謂「明示使用」,意指使用者若取用 LGPL-3.0 授權函式庫進行運用,則無論此運用關係是否緊密到專案裡其他的軟體程式亦受到拘束,使用者仍須明示其他程式與 LGPL-3.0 授權函式庫之間的運用關係,此點要求可謂 LGPL-3.0 擴張聲譽及普及率的手段,因為加上此款「明示義務」,日後使用者若取用 LGPL-3.0 函式庫而未公開註解與說明,則已然涉及契約義務的違反,進而可能會被指稱有侵權利用的疑慮;而所謂「重製推銷」、則是 LGPL-3.0 在某些使用者毋須開放己身應用程式原始碼的情況下,仍會同步要求使用者,應檢附 LGPL-3.0 授權函式庫的原始版本與此專案併行釋出,以擴展 LGPL-3.0 函式庫自身的應用比例,及可能被進一步使用的可能性。
- 個案例示、以類型化的方式述明 LGPL-3.0 的諸般義務性要求:LGPL-3.0 採用與 LGPL-2.0 頗為不同的條款敘述方式,其授權條款第 3 條至第 6 條本文, 分別述明了 LGPL-3.0 函式庫四種不同的應用模式,以下即以圖例輔助說明之:
- Conveying Modified Version:LGPL-3.0 第 3 條講述的是對於 LGPL-3.0 函式庫本身進行修改,其後所須遵守的義務性規定,由下圖來看、A LGPL-3.0 函式庫經過使用者修改後成為 B衍生作品,此一衍生作品須受到 LGPL-3.0 授權條款的感染,但其最終結果可以選擇延用 LGPL-3.0 或是 GPL-3.0 為再散布時的授權條款,端視修改者願意盡到何種程度的配合義務。就延用 LGPL-3.0 方面而言、其要求 B 函式庫的修改者,盡量不要安插僅得由特定「應用程式」呼叫方可運用的功能到函式庫裡,設若如此、則修改者須提供此一獨有呼叫方式的深入資訊,供他人可自行研讀後開啟 B 函式庫此一特定功能,而若修改者不願意提供他人呼叫方式的進階資訊,則其修改過的 B 函式庫便僅能以 GPL-3.0 為其再散布時之授權條款,如此設計的原因、殆考量到若 B 函式庫的某些功能有賴特定的應用程式方可進行呼叫,則無異讓具有「自由開放性」的 LGPL-3.0 函式庫的未來修改、改版受到私有軟體的變相拑制,是以若修改者不願提供呼叫方式的深入資訊,則自由軟體基金會便透過 LGPL-3.0 條款此條,直接拘束 A函式庫的修改者改以開放整體原始碼的 GPL-3.0 為 B 函式庫再散布時的授權條款,如此一來、連結 B GPL-3.0 函式庫的應用程式亦有可能為 GPL-3.0 感染性所縛,以自由軟體基金會的立場來看、便毋庸擔心此函式庫的未來發展受到私有軟體隱性的拑制。
- Object Code Incorporating Material from Library Header Files:LGPL-3.0 第 4 條主要是規範應用程式截取了部份 LGPL-3.0 函式庫程式碼的情形,於此條文中可知、「微量使用」的概念仍然受到尊重,亦即如應用程式取用的範圍侷限於「數字參數、資料結構層級及資料結構存取機制、或是小巨集及一些內嵌功能(10 行以內)」,則此等程式碼的微量取用關係,並不會致使應用程式的目的碼即受 LGPL-3.0 授權條款的拘束,但如逾越此等份際、卻可證明取用的程式碼乃來自於 LGPL-3.0 函式庫之標頭檔 (Header Files) 時,則此應用程式的編寫者仍可依己意選擇其應用程式散布時的授權條款,但前提是程式的散布者亦須符合 LGPL-3.0「明示使用」的要求,應用程式的散布者須明示此一程式乃奠基於某 LGPL-3.0 函式庫下進行運作,並於散布時提供 GPL-3.0 與 LGPL-3.0 授權條款本文供後手閱覽,是以下圖以草綠顏色表彰此時應用程式仍不至受到 LGPL-3.0 函式庫所感染,但亦於外框以 LGPL-3.0 的黃色圖示表現,以彰明其亦有相應的「明示使用」義務須向後手述明。
- Combined Works:將「私有的應用程式」與「LGPL-3.0 函式庫」結合為一「組合作品」乃是 LGPL-3.0 義務性規定運作最為繁複的結合型態,而此型態、亦是 LGPL2 與 LGPL-3.0 最大不同的分野所在,按 LGPL2 的原始設定、若是將應用程式與 LGPL2 函式庫結合運作,此應用程式即受 LGPL2 感染且拘束,但在 LGPL-3.0 調整下、使用者將應用程式與 LGPL-3.0 函式庫結合運用,此一「組合作品」仍可依使用者的決定選用他種授權條款,但亦應踐履 LGPL-3.0 要求的其他義務性要求。以下圖來說、其表彰的即為「組合作品」中一種義務性要求的踐履方式,首先其將「組合作品」中的 LGPL-3.0 函式庫原始碼,稱為「最低限度對應原始碼 (Minimal Corresponding Source)」,「組合作品」的散布者須連帶將此部份程式原始碼一同散布予收受程式的後手;再者、即為「應用程式對應碼 (Corresponding Application Code)」的供給,此一「應用程式對應碼」未必為原始碼格式,可能僅以目的碼的形式來表現,指稱的範疇乃「應用程式與函式庫進行連結所須程序等資料」,依此等資料、收受「組合作品」的後手方可據此重建應用程式與改版後的 LGPL-3.0 函式庫之間的連結關係,不致使得 LGPL-3.0 函式庫改版後,原先的組合作品即無法正常運作。
倘若「組合作品」的編寫者不願依前法提供「應用程式對應碼 (Corresponding Application Code)」,則「組合作品」的另一個替代方案則是、編寫出一套「適宜的函式庫共享機制 (Suitable Shared Library Mechanism for Linking with the Library) 供後手使用,所謂「適宜的函式庫共享機制」簡單解釋可參照下圖,第一、「組合作品」執行時,自動拷貝一份 LGPL-3.0 的 A 函式庫至使用者的電腦裡進行運作;第二、若嗣後 A 函式庫經修改為衍生的 B 函式庫,此「組合程式」仍可直接以 B 函式庫進行代用而運作無礙,如能達致此二項要求、那麼使用者此一組合行為,亦算是服膺在 LGPL-3.0 的義務性要求之下。
- Combined Libraries:最後一種態樣乃是函式庫與函式庫的結合運用,因函式庫本身即為一種慣常為他程式取用數據與資料的軟體,故數個函式庫併合運作亦屬事理之常,LGPL-3.0 特別敘明此種態樣時使用者所須踐履的義務性規定,簡單來說、其仍是奠基於「明示使用」與「重製推銷」兩個大原則之下,首先、散布此「組合函式庫」之人須併行散布組合函式庫裡未經摻雜的 LGPL-3.0 函式庫,其次、提供資訊或連結,供收受組合函式庫的後手取得未組合前的 LGPL-3.0 函式庫原始完整版本。
是以綜上所述、LGPL 從 2 版到 3 版的改版總評,一言以括之、可說是更為「彈性而中庸」,就授權條款的感染性方面其確實做出具體的讓步,放寬了 LGPL-3.0 函式庫與其他程式之間各種組合態樣的管制範疇,而非如 LGPL2 一般、其他程式一經結合並對 LGPL2 函式庫有程式碼的取用關係即認此程式亦受 LGPL2 授權條款所轄而須合併開放己身程式原始碼,亦因如此、2 版 LGPL 的管攝範圍一直與GPL有著難以釐清的模糊界限,是以 3 版的 LGPL 對於管制範疇進行了重新定義與區隔釐清。雖然就感染性方面可說採取弱化的態度,但 LGPL-3.0 亦擴增了許多 2 版所無的附加義務性條款,最為顯著的就是普遍狀況下、散布者須彰明散布程式與 LGPL-3.0 函式庫之間的相當取用關係,並須添附 GPL-3.0 與 LGPL-3.0 的授權條款全文於散布行為中供後手閱覽,某些狀況下、甚至須提供 LGPL-3.0 函式庫原始碼本身予收受程式的後手,或引導其得到相關資訊以下載取用,是以 LGPL 從 2 版至 3 版、一方面畫地自限自我抑制其感染性的過度擴張,一方面卻拓深了授權條款及原始碼本身的散布可能性,其最終目的仍是試圖回歸推廣自由軟體程式運用的主軸上,亦即提供更多具「自由開放性」的軟體予更多數人自由使用,是以依附於 LGPL-3.0 授權條款之下的函式庫在改版後的運用幅度變為更加彈性而中庸,此即為 LGPL-3.0 於 2007 年完成的改版趨勢。
註一:GNU Lesser General Public License v.3,英文原文內容
註二:GPL-3.0 授權條款第 7 條。
註三:LGPL-3.0 授權條款第 3 條第 2 項。
註四:LGPL-3.0 授權條款第 4 條第 1 項、第 5 條第 1 項、第 6 條第 1 項。
註五:LGPL-3.0 授權條款第 5 條第 4 項第 2 款、第 6 條第 1 項。
