使用者工具

網站工具


essays_and_articles:openfoundry_legal_column_selected_collections_2011:在源碼之外_編譯與安裝資訊的提供

這是本文件的舊版!


在源碼之外-編譯與安裝資訊的提供

葛冬梅/文 2009-08-22

依據 GPL 規定,散布 GPL 程式的人,必須要提供程式源碼給拿到 GPL 程式的人。按照字面意義,所謂的源碼就是程式修改源頭的原始碼 (Source Code),也就是其他開發者可以很方便接續修改這個程式的形式。不過 GPL 在定義源碼範圍的時候,特別提到、若是該專案為一個可執行程式的話,完整的源碼還包括了介面定義檔、控制編譯過程的腳本與安裝資訊,GPL-3.0 更進一步規定,這裡所謂的源碼包含可以讓程式編譯、安裝起來的所有原始資訊,按照這樣的規定,所有該程式相關的必要編譯工具組 (toolchain),也都包括在這個定義範圍之內,進入散布時必須提供的清單之列(註一)。可是有關程式元件相關的額外資訊,其實並不皆為程式運作時必要的附加物,甚至有些是使用者自己撰寫,完全沒有引用或包含到 GPL 元件的程式碼,在這樣的情況下,許多人常常便會產生疑問:此時使用者自行撰寫的額外資訊,也都必須要依照 GPL 的義務性要求提供出來嗎?

討論這個問題我們可以切成兩個不同立場來看!首先、從自由開源軟體推動社群的理念角度來看,其撰寫 GPL 程式的目的,是為了讓有能力的程式開發者,可以自行研究與修改該程式,讓程式因此變得更好用,並且也不會在接續修改、後續散布的過程中,讓後手將相關的程式源碼封閉起來。為了達到這個目的,除了讓使用者可以修改程式外,還必須要讓開發者可以編譯程式,並且安裝起來,這樣開發者才可以知道修改後的程式執行起來效果如何。在此種思維下,若一個可執行程式採用 GPL 授權的話,除了單純的程式源碼,使用者在散布程式的時候當然必須一併提供該程式的安裝與編譯資訊,以及必要的相關工具,以讓拿到程式的後手開發者,可以盡興地修改、研究這個 GPL 授權程式與其衍生程式(註二)。

然而、從一般商用自由開源軟體廠商的角度來看,其取用 GPL 元件加入自己的商業產品時,固然因為授權條款明確的規定,其對直接自 GPL 程式衍生出來的程式碼,必須要擔負一併提供程式源碼的義務,然而其在遵循此項義務時也會產生疑惑,那就是:針對該 GPL 元件與其他元件互動的優化與調校資訊,有時並不直接涉及程式碼的引用與改作,這部份的額外資訊,也會被列入必須提供的清單之列,而喪失掉公司商品競爭的優勢嗎?而 GPL 授權條款這樣的進階要求,又具不具有法律上的強制力呢?

其實、中道的就這個議題來做分析,GPL 授權條款就此議題的義務性要求,確實較諸著作權法的預設幅度還要廣,然而、以契約條款補充法律預設條文的不足,本就是私法經濟下契約自由主義所容許的大原則,也就是說、如果程式的使用者不同意 GPL 授權條款此項要求,其仍然具有拒絕使用 GPL 授權元件的自主權,而倘若程式的使用者,已將 GPL 授權的程式碼編寫進自己維護的專案裡,那麼基於著作權法的預設規定-「權利人保有所有權利 (all rights reserved)」,取用他人擁有著作權利的程式碼必然要預先得到其合法授權,而若是不依照 GPL 條款

所以就 GPL 授權條款的內容來論,其就狹義程式碼之外的編譯與安裝資訊既已明文列示要求,那麼這樣的義務性條款如果不是顯失公平的話,那原則上便應會被全球各地的司法機構所共同肯認,而認為其具有契約義務的執行效力。

不過這樣的規定不見得完全具有法律上的強制力。GPL 之所以可以要求其他開發者將原始碼提供出來,是因為開發者在自己撰寫的程式中用到了 GPL 程式碼,因此 GPL 程式著作權人可以要求這個後手開發者,所撰寫的所有程式碼全部採用 GPL 來授權,否則就請不要用 GPL 程式碼。這就是「拿人的手短、吃人的嘴軟」,否則就請自力更生,不要依賴 GPL 程式。但是編譯腳本、安裝資訊,甚至是相關的編譯與安裝工具組,其實並不屬於 GPL 程式本體,甚至有些是開發者自己開發的程式,針對這些並非衍生自 GPL 程式碼的工具組, GPL 這樣的規定並沒有完全的強制效力。

「既然沒有完全的強制效力,那就不需要遵守,省得麻煩了!」這樣的想法筆者並不贊同,因為自由軟體的本質就是開放、分享,透過開放、分享的過程,可以讓後人站在前人所創造的基礎上,縮短創造的時程,而當後手將自己所做修改也開放出來,讓其他人也可以研究、修改,從中獲益,這樣自由軟體的整體開發環境才會友善,從而進入一個良性的循環。雖然在缺少編譯與安裝的資訊或程式的情況下,開發者也可以透過自行研究與嘗試,而成功地編譯與安裝程式,但是這其中必須耗費許多時間自行發掘、整理這些資訊,若是可以將這些時間省下來,轉而投入在研究與改善程式本體功能之上,將會更有益於軟體的改善。

這樣的話,那麼所提供的資訊應該要到什麼樣的的詳細程度呢?最佳狀態,當然是附上一個步驟一個步驟的編譯與安裝資訊,甚至連相關的工具組也一併附上。而最低程度,筆者以為必須要做到,當一個擁有基本相關知識的開發者,可以循著所提供的資訊,將原始碼編譯、安裝並執行起來,而若是這樣的標準也沒有達到,那就表示所提供的資訊太過簡略。比喻來說,這些編譯與安裝資訊就好比是學生上課的筆記,有的學生筆記做得詳細,缺課同學借來看,如同親臨上課一般,詳盡的編譯與安裝資訊就像是這種筆記。有的上課筆記比較簡單,只有大綱與重點說明,缺課同學借來看雖然無法馬上就理解吸收,但是經過一番思考,與搜尋、參考相關資料之後,仍然可以理解老師上課的內容,若所附上的編譯與安裝資訊可以達到這樣的效果,筆者以為這就達到了最低標準。而有的上課筆記非常簡略,只有重點、大綱,甚至只有一些關鍵字,這樣的內容只有做筆記的同學自己可以看得懂,缺課同學拿到之後,除非詢問原來做筆記的同學,否則根本無法理解筆記的內容,若所提供的編譯與安裝資訊也是這樣簡略,對於其他開發者來說,有如無字天書,並無法達到協助他人安裝執行程式的目的,這是筆者所不建議的。

另外關於工具組的利用方式,筆者想要特別說明。有人以為所提供的工具組,僅是單純作為工具使用,所以有沒有提供原始碼都不重要,其實若所提供的工具組也是採用 GPL 授權的話,當然必須要依照 GPL 的規定,將原始碼也提供給後手開發者,這並不會因為工具組所帶有的工具特性而受到影響。若所提供的工具組不是採用自由軟體方式授權,那當然也必須遵守這個工具組的授權內容,授權內容不允許提供原始碼給他人的話,當然就不需要提供。

自由軟體強調的是開放、分享的精神,希望透過互相分享、討論的方式,來達到研究、修改,進而改善程式的目的,基於這樣的理念,許多開發者將自己的原始碼免費地提供給他人利用,所要求的回報不外乎就是尊重,而尊重的具體表現就是遵守授權條款的遊戲規則。雖然 GPL 的對於提供編譯與安裝資訊這方面的規定,不見得具有法律上的強制力,但是若從自由軟體整體的發展環境來說,筆者認為在提供原始碼的同時,也應該要提供這些資訊,甚至是相關的工具組給開發者,如此才可以將自由軟體的開發帶入良性、正面的循環中,讓自由軟體的開發整體朝向正面來推進。


註一:GPL2 第 3 條第 2 項:“The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.”。 GPL3 第 1 條第 4 項也有相對應的規定:“The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.”

註二:為了便利開發者研究、修改與改善程式,除了附上詳細清楚的編譯與安裝資訊之外,詳細的說明文件也是不可或缺的一環。透過這些文件與資訊的提供,自由軟體開放、共享的精神才能真正體現,將軟體的開發與改善帶進一個良性的循環。不過說明文件的提供與授權不在本文討論之列,因此文中並未提及,在此一併說明。對於這一議題有興趣者,可以參考:林珈宏,自由軟體說明文件的授權選擇,自由軟體鑄造場電子報第 127 期。

essays_and_articles/openfoundry_legal_column_selected_collections_2011/在源碼之外_編譯與安裝資訊的提供.1330763328.txt.gz · 上一次變更: 2019/01/16 03:37 (外部編輯)