假使 gcc 版本是 GPLv2,假設只是單純 Hello World 的 C code,也會內含 gcc 的部份 code 嗎?(該不會是指 main 之前 gcc 幫忙加的 assembly code 也算吧)。會,但我指的不是 main 之前 gcc 幫忙加的 assembly code 的部分,我講的是,在 compile 完之後,linking 的部分,gcc 會把一些 library 包進來。
程式設計師如何判斷是否有使用到 gcc 的部份 code,進而可免除 GPLv2? 其實有用到也沒關係,我前一篇講的就是 gcc 授權的例外規定,即使用到了也可以不必依 GPL 授權,而可以選擇自己喜愛的授權(包括 proprietary 在內)。
我們是否從 object code 來判斷其 license 是屬於 GPLv2 的呢?技術上來說很難單從 object code 就看出它的授權情況。即使是該程式的原作者,都很難單從 object code 來看出它的 source code,自然很難從 object code 來判斷其 license 是屬於何者。這個還是要看 source code 才能確定。反組譯是另一條路,不過不是很建議。
另外,假設一般商業產品,因含 GPLv2 的執行檔,為符合精神,提供 Source Code 並宣告 GPLv2,需要提供使用者如何產生執行檔的說明文件嗎?這個問題,在 GPLv3 中是有明文規定的,但 GPLv2 並沒有言明。GPLv3 說:
"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
中文翻譯是參考
林誠夏的文章,此段翻為:
「一般性使用商品」的「安裝資訊」,包括了諸如安裝流程、安裝後的授權認證及其他關於程式安裝及使用上所須提供的各式資訊,此等資訊的提供、須使得程式由原始碼格式經過修改後,重新編譯再植入產品內取代原嵌入的舊版軟體,而產品依然能夠運作流暢無誤。質言之、GPL3授權條款對於此等「安裝資訊」的提供要求,在於保證產品內嵌入的自由軟體,不致於經過修改後即無法與產品硬體之間重啟連結運作關係,亦即、不至於任由部份硬體廠商,以硬體設定的方式變相地拑制了GPL3授權之自由軟體的「自由修改性」。亦即、倘若任一硬體機器產品內嵌有GPL3授權程式,其機器生產散布者於產品散布時、亦須提供前述「充足的程式安裝資訊」,而透過此「安裝資訊」提供的配合,此GPL3授權程式在經過修改後仍然能夠於同一硬體產品內運行無誤。
意思就是說,如果單單提供 source code,在沒有提供其他安裝資訊的情況下,仍會妨礙到使用者的修改自由的話,仍然無法真正落實自由的精神。所以,是否需要提供使用者如何產生執行檔的說明文件,必須要視這個說明文件是否有助於其修改、除錯這個程式,來決定是否有義務提供。
但當然,一定有人會想,這並沒有寫明在 GPLv2 中,是否只有適用在 GPLv3 中的軟體?我個人認為不能當然這樣解釋。某種程度來說,GPLv3 是 v2 的詳細說明版本,當然二者有許多在權利義務關係上的不同之處,但就這點來說,除提供 source code 外,要求授權人釋出他自己慣用的形式的 source code,以及某些對修改除錯上必要的文件,應該也可認為是必須連同 source code 一併釋出的,因為如果不這麼做,等於妨害了他人的改作的自由,會違反 GPL 的精神,這個精神是不管 v2 或 v3 而有任何的不同,只是 v3 在這部分講的更清楚而已。這大概就是我的想法。
需証明與執行檔是相對應的關係嗎?(如何証明?看檔案大小嗎?還是執行結果?好奇過去在法院上的証明方式是?)不需主動證明其與執行檔是相對應的關係,但必須保證對方拿到你的 source code,用同樣的 compile 方式可得到相同的 object code。如果某人質疑該商業產品有包含 GPLv2 的執行檔卻未依規定提供 source code 並宣告 GPLv2,在法律攻防的原則是,他必須要舉證該商業產品的確可能有包含 GPLv2 的執行檔卻違反釋出規定。這裡的「可能」的程度高低,不需要達到百分之百的真實,但至少要達到合理懷疑,就是原告盡了許多努力而蒐集到的證據,足以使熟悉程式的人也產生合理懷疑其中很可能就有包含 GPLv2 的執行檔(例如以測試 bug 的方式來做,例如原來那個 GPLv2 的執行檔在某個測試下會產生某個特殊的反應,而該商業產品經同方法測試亦產生同種反應,就可高度懷疑該商業產品中有內含原告的 GPLv2 執行檔),則法院就可能會推定該商業產品有包含 GPLv2 的執行檔;這時候,就可能是要反過來由被告來舉證他的商業產品中沒有這支 GPLv2 的程式了。
希望我的文字不會那麼難懂(常自我檢討啊,為何大家都看不太懂我在寫什麼XD)。歡迎再討論!