Hi Kurapika,
我先簡短的回覆,細節可以後續討論。
先做定義限縮,我取的是大部份自由軟體開發社群的多數看法:
靜態連結:程式與LGPL2.1函式庫之間必然的連結關係,若喪失這個連結關係,則該程式喪失大部份的功能。
動態連結:程式與LGPL2.1函式庫之間可取代的連結關係,若喪失這個連結關係,則該程式仍具大部份的功能,僅部份的功能在表現上沒有連結之後優異。
在這個基礎上去回覆你的問題:
1、LGPL2.1裡, 怎麼才會被定義為"
work that uses the Library"? 使用動態連結算在此定義下嗎?
答覆:單純呼叫LGPL2.1函式庫並取得數據的行為,是為“work that uses the library“,一般動態連結的利用方式,符合這個定義。
2、如果程式利用靜態連結的方式使用LGPL2.1函式庫(未修改), 這樣提供程式的目的碼以及LGPL函式庫的程式碼即可嗎?
答覆:不、多數網路社群的看法是,此時需要提供該程式與LGPL2.1函式庫全部的程式原始碼,並且就該程式與LGPL2.1函式庫之間如何呼叫進行說明與描述。一般看法是認為靜態連結的利用方式,會開啟LGPL2.1授權函式庫的「授權拘束性」,因為這種狀況照授權條款文字會被解讀為「
However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.」所以這樣的狀況,依照LGPL2.1的文義解釋,散布該靜態連結成果之後,需要同時散布該自行編寫程式的程式原始碼,該LGPL2.1授權函式庫的程式原始碼,以及它們之間呼叫方式的描述資訊。
3、如果使用者修改LGPL2.1函式庫,並與使用者自己寫的程式連結在一起,不論靜態或動態連結, 都要釋出程式的原始碼嗎?
(1)如果是以動態連結的方式利用這個LGPL2.1授權的函式庫,那麼要釋出的對象是「該修改過LGPL2.1函式庫的程式原始碼」。
(2)如果是以靜態連結的方式利用這個LGPL2.1授權的函式庫,那麼要釋出的對象是「該程式與LGPL2.1函式庫全部的程式原始碼,並且就該程式與LGPL2.1函式庫之間如何呼叫進行說明與描述。」
其實、關鍵點在於,靜態連結的方式,會讓自己編寫的程式被視為該LGPL2.1授權函式庫的衍生程式(
derivative work),而若如此、該衍生程式就會被LGPL2.1條款要求後續散布也一併需要用LGPL2.1來授權釋出。
當然、這邊討論的是LGPL2.1的狀況,若是LGPL3的狀況,則有其他類型化的應用方式,可參照拙著「更為彈性中庸的 LGPL3」:
https://www.openfoundry.org/tw/legal-column-list/1166--lgpl3
謝謝!
20110420 1655 LUCIEN C.H. LIN