上海基诺彩票中奖号码

English [en]   Deutsch [de]   fran?ais [fr]   日本語 [ja]   português do Brasil [pt-br]   русский [ru]   簡體中文 [zh-cn]  

Free Software Free Society

Together we have the opportunity to empower the world through the use of free software. The only way to counter proprietary software companies and the billions of dollars they use to strip user rights is through the power of your voice and your generosity. Read more.

115 Joined
600 New Members

這是針對英文原版頁面的中文翻譯。

GCC運行庫例外的理由和常見問題解答

引言

2007年6月29日,自由軟件基金會發布了GPLv3。它馬上被15個GNU項目采納,在隨后的幾個月內有更多的項目切換到了該許可證。GCC的大多數代碼在4.2.2版本發布時都采用了新的許可證,現在我們正在對此進行收尾。

有些伴隨GCC的軟件庫的許可證還沒有變更。這些軟件庫自動被GCC產生的目標代碼使用。因此,如果只簡單允許這些庫按照GPL發布,那么GCC產生的所有目標代碼都將需要按照同樣的條款發布。然而,FSF很久以前就決定允許開發者使用GCC的軟件庫編譯任何程序,無論該程序使用何種許可證。開發非自由軟件對社會不利,而且我們也沒有義務使之更容易。我們允許這樣做是因為禁止它看來是適得其反,另外的原因是因為使用了其他小軟件庫而限制GCC的使用看來是抓了芝麻丟了西瓜。

所以,這些軟件庫一直是許可證例外,該例外允許人們將使用GCC產生的目標代碼用任何許可證發布。我們現在將這些軟件庫的許可證改到GPLv3,并更新這些例外。我們的基本政策沒有變化;新的許可證還是允許按照以前的方式使用GCC。不過,我們決定利用這個機會更新例外達成3個目的:

正如GPLv3,我們草擬此文時努力聽取了多方用戶的意見,并對這些意見做出了適當的處理。總而言之,我們為此花費了超過一年的時間。自由軟件基金會和GCC執行委員會感謝軟件自由法律中心的Richard Fontana、Bradley Kuhn和Karen Sandler,感謝他們對此例外所做的所有辛勤努力和協助。這些更新會強化GCC社區,我們期待它為編譯器的開發打開新的篇章。

GCC對開發者是如此關鍵,我們料想他們對此更改會有問題,我們希望這些問題都有應對。下面,我們列舉了用戶可能會有的擔憂。如果你關于此例外的問題沒有列出,請隨時通過<[email protected]>聯系我們。

例外是怎么回事

你需要的許可—用GCC庫把代碼轉換成按照你的許可證發布的目標代碼—主要在第1節中:

你有權傳播由獨立模塊和運行庫組合而成的目標代碼作品,即使該傳播從其他方面來看可能違反了GPLv3的條款,前提是所有的目標代碼都是經由合法的編譯過程產生的。那么你可以為該組合使用你選擇的許可證條款,只要它和獨立模塊的許可證一致。

本節使用了很多術語,這些術語的特定含義和例外如何操作不可分割。本節詳解這些術語和常見場景的關系。

當你編寫軟件時,軟件就包含了一系列源代碼文件。如果一個文件不包含GCC庫里的源代碼,那么這個文件就是一個“獨立模塊”。

當你編譯這些源代碼文件時,它們通常會經歷一系列步驟:源代碼生成、預處理、編譯成低級代碼、匯編和連接。根據所用的語言和軟件編寫的方式,有些項目可能沒有以上所有的步驟,但是它們總會按照這個順序執行,使用GCC的人會按照這個步驟從高級語言編譯到諸如匯編或Java bytecode1。在這個階段,GCC把你的代碼和GCC庫合并或連接起來。我們稱之為“編譯過程。只要此時的輸出不是編譯器還要用的過渡代碼,也不是編譯器要輸出的過渡代碼,”此時的輸出就叫做“目標代碼。”

要想利用本許可,產生目標代碼的編譯過程必須“合法”,就是說其中沒有引入和GCC以及GPL不兼容的軟件。重要的一點是編譯過程從你把任何高級語言代碼輸入給GCC就開始,一旦輸出了目標代碼就結束。因此,只要GCC沒有輸出過渡代碼,即使你用其他GPL不兼容的匯編器、連接器或者高級語言產生工具和GCC一起工作,你的編譯過程還可以是合法的:這些GPL不兼容工具按照我們的定義不算參與編譯過程。只有一個地方你不能使用這些GPL不兼容的軟件,這就是當GCC在進行核心編譯工作的時候。

所以,如果你用了GCC,不管有沒有GPL不兼容的軟件,編譯過程都可以是合法的。如果你只用了GPL兼容的編譯工具,編譯過程也是合法的。(即使使用不同的編譯器,人們也常常會為GNU/Linux軟件連接GCC庫。)不過,如果你在把高級語言代碼轉換成低級語言代碼的過程中用了GCC加上GPL不兼容的工具,那么這就不是一個合法的編譯過程。比如,你使用GCC加上一個專有的插件就是這么一個非法編譯過程。

只要編譯過程是合法的,那么你有權為GCC產生的目標代碼的發布“選擇你的條款。”

如果你在編譯過程中使用了GPL不兼容的工具,那么你不能使用這項權利。由于GCC產生的目標代碼都來自GPL軟件庫,所以如果要發布這些目標代碼就要遵循GPL的條款。你不能使用GCC開發你自己的GPL不兼容軟件。

常見問題解答

我使用的是GCC的標準發布版(比如由FSF提供的,或者是操作系統自帶的),我用它編譯GPL不兼容軟件。例外的更改對我有什么影響?

此次更改不會影響你。除非你把GCC配置成輸出過渡代碼—這種情況很少見—新的例外是要確保你這樣做時沒有違反許可證,正如老的例外一樣。

這個變更會影響哪些人?

目前使用GCC的人應該不會受到影響。其中唯一的政策性修改是為了防止開發者在將來對GCC的功能做出某些修改。FSF一直和GCC開發者緊密合作來了解人們目前使用GCC的方式,以確保他們在新的例外條款下仍然能夠繼續按照已有的方式使用GCC。

我使用GCC加上專有的預處理工具/源代碼生成工具來做編譯。我可以利用這個例外嗎?

是的。編譯過程開始于任何“完全由高級語言表達的代碼,而不是過渡代碼語言。”這包括由預處理工具或其他專有軟件生成的代碼。這樣,編譯過程不包含任何專有軟件;它是合法的,例外對這樣的程序適用。

我使用GCC加上專有的匯編器/連接器做編譯。我還可以利用這個例外嗎?

是的。編譯過程當編譯器產生目標代碼時結束,這個包括輸出“適用于匯編器、載入器、連接器/運行程序的輸入文件。”換句話說,在這種情況下編譯過程在GCC輸出匯編代碼或未連接的目標文件時已經結束,所以其中不包含任何專有軟件的參與。它是合法的,例外對這樣的程序適用。

我使用GCC編譯程序的一部分,使用專有軟件編譯程序的其余部分。然后這些部分在匯編或連接階段合在一起。我還能利用這個例外嗎?

是的。在這種情況下,每個獨立模塊都是按照合法的編譯過程變成目標代碼的。盡管不同模塊經歷了不同的過程,該例外還是適用于這個程序的。

我使用不包含任何GCC成分的專有編譯器編譯我的程序,然后將它和libstdc++連接起來。我的程序本身不包含任何像用GCC編譯的程序那樣的運行庫(libgcc)。我還能利用這個例外嗎?

是的。雖然該例外最常見的場景可能是用于把libgcc和GCC編譯的目標代碼合在一起,但是GPL和GCC運行庫例外都不區分靜態連接、動態連接以及其他合成方式。該例外許可你可以用,同樣的條款,無論你采用了哪一個合成方式。

請注意,如果你要發布的是獨立的libstdc++庫,那么你需要按照GPL的條款來發布。比如,如果你的庫是按照目標代碼的形式發布的,那么你需要使用由GPLv3第6節里規定的方法之一來提供源代碼。但是只要你的程序適用GCC運行庫例外,GPL條款就不會擴展到你的程序。

為什么編譯器過渡代碼不在“目標代碼”的定義之內?

當我們第一次考慮給GCC添加插件架構時,我們非常擔心有人會寫一個插件來簡單把GCC的過渡代碼、底層編譯數據格式保存到磁盤。這樣的話,其他軟件就可以不經GCC而優化或改進這些代碼。我們可能很難爭辯說這些程序應該遵循GPL的copyleft條款,所以我們想要阻止這種活動。

我們的做法是把這些輸出排除在目標代碼之外。正因為如此,即使有人寫了保存中間信息的插件,任何在GCC輸出目標代碼之前修改這些信息的程序也都參與到了編譯過程之中。如果該程序是專有軟件,那么例外就不適用于它編譯的軟件;GCC最后輸出的目標代碼就必須按照GPL的條款來發布。

如果我寫了一些匯編語言的代碼,我是否還可以把它和其他正常編譯的目標代碼合在一起,并利用該例外?

是的,只要這些目標代碼是經由合法編譯過程產生的。在匯編器里跑手寫的匯編代碼就是一個編譯過程,因為它把讓人編寫代碼的[a]非過渡性語言[]的代碼轉換成...目標代碼。”

GCC運行庫例外包含哪些庫?

GCC運行庫例外涵蓋了所有的許可證說明里陳述了例外適用的文件。這包括libgcc、libstdc++、libfortran、libgomp、libdecnumber、libgcov以及其他和GCC一起發布的庫。

Classpath會使用該例外嗎?

盡管Classpath當前的例外起著相似的作用,我們這次也還沒有更新它。因為自由軟件Java社區的最新發展,Classpath許可證政策的優先級和其他GCC庫有所不同,我們會單獨評估。

譯注

  1. Java bytecode:這是Java語言編譯后的中間語言,就像匯編是C/C++編譯后的中間語言一樣。
最頂

[FSF 標志]“自由軟件基金會(FSF)是一個非盈利組織。我們的使命是在全球范圍內促進計算機用戶的自由。我們捍衛所有軟件用戶的權利。”

加入 購物

上海基诺彩票中奖号码 北京pc28在线预测 双色球拖胆投注金额表 黑龙江时时彩app 5分pk10计划软件稳定版 道闸机广告赚钱吗 三肖六码3肖6码特中特 全民炒股 大话西游赚钱要投入多少钱 香港五湖四海六网资料 福彩快三稳赚技巧 2016年9月 专车赚钱吗 神圣计划软件怎么样 广州福利彩票投注站 全民短视频能赚钱么 75秒赛车可以作弊吗 7mcn足球即时比分直播