登入  |  English
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
討論區
請問GCC授權條款 (1 位瀏覽者) (1) Guest
Go to bottom Favoured: 0
TOPIC: 請問GCC授權條款
#567
請問GCC授權條款 2010/08/03 21:30  (9 Years, 3 Months ago) Karma: 0  
你好,我有一些疑惑,希望得到您好心的解答。
我從網路上下載一份 arm-linux-gcc 的 cross-toolchain binary,要如何得知是它是屬於 GPLv2 or GPLv3 的授權條款?
據知,經過 GCC compiler 之後的程式,之所以需要 follow 此 GCC 的授權,是因為 gcc tool 本身的關係?還是 glibc?還是 toolchain kernel include file 的關係?

因本身 gcc 的安裝路徑,都會有kernel include file,內都是 GPLv2.1 的 license,此時我的 application 在 include 此 header 也會影響到本身的授權嗎?

網上的資訊,很多提到 gcc 4.3 以後會使用 GPLv3,如同上面的問題之延申,是否任何的使用,application 都能放心的使用 GPLv3 授權,還是在使用 library 或其資源時,會依狀況可能用到其中 GPLv2 的 license。此時我們應如何查覺?

請不吝給予建議,讓大家的開發都能順利符合自由軟體的精神。
ivance (User)
Fresh Boarder
Posts: 2
graphgraph
User Offline Click here to see the profile of this user
Logged Logged  
 
The administrator has disabled public write access.  
#569
Re:請問GCC授權條款 2010/08/06 22:37  (9 Years, 3 Months ago) Karma: 2  
Hi, ivans

我從網路上下載一份 arm-linux-gcc 的 cross-toolchain binary,要如何得知是它是屬於 GPLv2 or GPLv3 的授權條款?看版本號及釋出時間。其實從你的留言中也知道,你大概也了解,GCC4.3以後改採GPLv3,之前是GPLv2。See www.fsf.org/news/2009-01-gcc-exception/

經過 GCC compiler 之後的程式,之所以需要 follow 此 GCC 的授權,是因為 gcc tool 本身的關係?還是 glibc?還是 toolchain kernel include file 的關係?不是因為glibc,因為它是LGPL授權的。GCC本身是GPL授權的,gcc/glibc cross toolchains也是GPL的。

GPL授權的規則是,如果自己的程式是某一以GPL授權的程式的衍生作品,那就必須要以GPL來授權自己的程式;至於,什麼叫衍生作品,簡單一點講就是,自己的程式有抄到以GPL授權的程式碼。有利用到人家的code,就要用他所用的GPL;如果不想讓自己的程式用GPL授權,那一開始就不要用GPL的code來開發。OK,以上是原則;也就是說,若經過 GCC compiler 之後的程式要用GPL授權,是因為在compile過程中有包入了一些原以GPL授權的code,才會之後要用GPL授權的關係。不過GCC有例外,下面會講。

網上的資訊,很多提到 gcc 4.3 以後會使用 GPLv3,如同上面的問題之延申,是否任何的使用,application 都能放心的使用 GPLv3 授權,還是在使用 library 或其資源時,會依狀況可能用到其中 GPLv2 的 license。此時我們應如何查覺?你可以放心使用。GCC有特別聲明「GCC Runtime Library Exception」,它是利用GPLv3第7條的例外條款而做出的附加條款。其中說,

You have permission to propagate a work of Target Code formed by combining the Runtime Library with Independent Modules, even if such propagation would otherwise violate the terms of GPLv3, provided that all Target Code was generated by Eligible Compilation Processes. You may then convey such a combination under terms of your choice, consistent with the licensing of the Independent Modules.

中譯為,你可以利用由Runtime Library(執行期函式庫)與Independent Modules(獨立模組)結合而形成的Target Code(目的碼),即使這樣的利用可能會違反GPLv3也OK,只要這個Target Code是經由Eligible Compilation Processes(合格的編譯程序)所產生者即可。你可以自由地移轉這部分程式碼,選擇與獨立模組相同的授權方式。

也就是說,利用GCC compile的application在上述情況下是可以用你想要的授權,當然包括GPLv3在內;同理,在此條件下,要用其他方式授權亦可。

有什麼想法可以再交換!
legist (Admin)
Moderator
Posts: 48
graphgraph
User Offline Click here to see the profile of this user
Logged Logged  
 
The administrator has disabled public write access.  
#571
Re:請問GCC授權條款 2010/08/07 08:00  (9 Years, 3 Months ago) Karma: 0  
感謝您的回覆。其中有一些不大懂。

"是因為在compile過程中有包入了一些原以GPL授權的code"

==> 假使 gcc 版本是 GPLv2,假設只是單純 Hello World 的 C code,也會內含 gcc 的部份 code 嗎?(該不會是指 main 之前 gcc 幫忙加的 assembly code 也算吧)。

程式設計師如何判斷是否有使用到 gcc 的部份 code,進而可免除 GPLv2?
我們是否從 object code 來判斷其 license 是屬於 GPLv2 的呢?

另外,假設一般商業產品,因含 GPLv2 的執行檔,為符合精神,提供 Source Code 並宣告 GPLv2,需要提供使用者如何產生執行檔的說明文件嗎?需証明與執行檔是相對應的關係嗎?(如何証明?看檔案大小嗎?還是執行結果?好奇過去在法院上的証明方式是?)
ivance (User)
Fresh Boarder
Posts: 2
graphgraph
User Offline Click here to see the profile of this user
Logged Logged  
 
The administrator has disabled public write access.  
#572
Re:請問GCC授權條款 2010/08/11 01:39  (9 Years, 3 Months ago) Karma: 2  
假使 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)。歡迎再討論!
legist (Admin)
Moderator
Posts: 48
graphgraph
User Offline Click here to see the profile of this user
Logged Logged  
 
The administrator has disabled public write access.  
Go to top