如何獲取華為、中興、烽火這些廠家 發布的嵌入式設備 GPL源碼(包括工具鏈、kernel等相關代碼)?

像思科、華為、中興、烽火等等廠家,如果其嵌入式設備採用了Linux方案,那麼,根據GPL規定,是需要開源的。

然而,目前GPL並未規定,各廠家發布源碼的途徑和方式,這導致源碼較為分散。

因此,問題來了:

1. 對於一個新手來說,如何快速尋找到相關機型的GPL源碼?例如烽火的HG260。

2. 如果設備廠家並未按GPL要求開放源碼,程序猿是否有權利索取?如何索取會更有效?


就這個問題說說我的個人看法,不過先說明一下,有關 GPL 的相關法律條文,國內似乎沒有可以追溯的判例,所以每個人對 GPL 的解讀可能會有偏差。歡迎每個人就 GPL 發表自己的觀點。

GPL的核心關注點是:發布。單純使用 GPL 軟體不造成開源,發布 GPL 軟體才與源代碼相關。

如果發布 GPL 軟體,發布者必須同時發布其源代碼。如果你不具有相關的源代碼,則發布行為不符合 GPL。換句話說其源代碼應當具有與已編譯的二進位代碼相同的發放途徑。

你有權獲得其源代碼的前提是你獲得了相關軟體的二進位版本。獲得的途徑與你獲得相關二進位版本的途徑相同。

注意,發布源代碼是發布者的責任,因為 GPL 是允許再分發的,所以每個分發者有責任保證源代碼被分發。

例1:A 發布了一個軟體給 B ,B 複製了一份這個軟體給 C,C 用郵件將這個軟體發給 D,所有這些行為都是再分發,換句話說都叫發布。

如果 D 是找 C 拿到這個二進位版本的,則應當找 C 索要源代碼。

C 如果手頭沒有源代碼,則 C 分發這個軟體的行為是違反 GPL 的,他應當立即停止分發該軟體的行為,直到他找 B 索要到這個軟體的源代碼為止

例2:某個網站公開的公布了下載某個 GPL 軟體二進位版本的鏈接,此行為視為發布軟體,則其有義務同時公開下載對應版本的源代碼的下載鏈接。如果不能同時提供源代碼,則違反了GPL,該網站應當立即停止公布該軟體的下載鏈接,停止對該軟體的發布行為,直到其能提供源代碼為止

至於哪些軟體屬於需要分發源代碼的,對幾個問題分開討論:

工具鏈:由於這些產商一般僅僅是自行使用工具鏈,不會將工具鏈發布出去,所以無需將其源代碼發布出去。僅僅獲得嵌入式設備的你,無權索要其工具鏈。

有一種情況除外:比方說你作為產商,使用華為海思的晶元製作嵌入式產品,華為要將海思的工具鏈發布給你,如果你拿到了二進位版本的工具鏈,就有權找發布給你的人索要相應的源代碼。

內核:通常來說,你不會直接獲得內核的二進位代碼,除非產商用文件的形式發布了更新,如果你通過某種合法渠道獲得了該內核的二進位代碼,則有權找相同渠道索要對應版本的源代碼。

(這裡插入一個事情:我們知道 android 雖然開源但不是 GPL的,不過其中的 Linux 內核是 GPL 的。有一部分 android ROM 發布的時候不帶 Linux 內核,因此那些 android ROM 可以不必開源。但自帶內核的 ROM,發布該 ROM 時需要將其內核部分源代碼一併提供。)

結論:

  • GPL 當然有規定如何發放源代碼,簡單的說就是你如何獲得其二進位代碼,就有權用如何方式獲得其源代碼。
  • 如何快速找到某個機型的 GPL 源代碼?答案應該是首先通過合法渠道找到對應機型的二進位代碼,然後在你找到對應機型二進位代碼的地方,索取對應的源代碼。
  • 如果沒有任何合法渠道能讓你獲取對應的二進位代碼,這說明其二進位代碼沒有發布過,沒有發布的軟體不受 GPL 限制。


1. 你對GPL的看法是錯誤的,GPL要求對軟體的接收者提供源代碼,不是向所有人提供源代碼,所以你要拿到這些公司的源代碼,買一台這些公司的設備即可

2. 要知道一個設備中是否包含GPL的代碼,看該設備發布時候的版權聲明,正規公司的產品,如果包含了第三方的版權或者商標,是需要在發布中包含這個聲明

3. GPL代碼有兩種可能的提供方式,一種是在發布中直接包含源代碼的包,第二種稱為written offer,說明提供源代碼的聯繫方式。如果你需要,直接找到這些聯繫方式,然後向對方要求提供代碼,但你要付相應的媒介費用,以我的經驗,一般是十幾到一百美元不等

4. 很多商業公司對開源運作是持不合作的態度的,他們可能會有千般理由拒絕,這種情況你可以考慮起訴,但很多時候你又沒有這個GPL軟體的版權,也沒有足夠的資金來起訴。這個時候可以尋求開源維權組織來幫助,有兩個著名的組織,一個在北美,一個在德國。名字我不記得了,等我有空再查一下吧。


我補充幾點:

華為、中興、烽火併不都是用Linux的,甚至用Linux的比較少。華為/中興有用VxWorks的,據說國內很多公司有用threadX或者nucleus,還有些大公司用freeBSD(據說思科有些用的就是),有些系統中雖然使用的Linux,但只要做好隔離,那麼仍然不需要開源

所以,可能的一種情況是廠商只使用Linux內核,業務控制在應用層(用戶態)運行,那麼廠商也無需發布代碼。

工具鏈是無需提供的,GPL沒有規定工具鏈必須發布。

於是,答案就明確了:大部分用Linux的廠商把代碼跑在應用層,那麼無需開源;使用非Linux的,無需開源。剩下真正要開源的東西其實很少。

------------------補充------------------

我知道很多人看到Linux使用GPL規範都很興奮,覺得可以拿到很多廠商的代碼了,實際上不是那麼回事,我們能想到的事情,廠商會想不到嗎?廠商發布的產品如果沒有安全性,那麼有人敢用嗎?

所以,真正用Linux並且把自己代碼放到Linux內核里的其實很少,當然不排除小公司敢這麼做,但大公司必然會考慮Linux的替代方案或者使用某種手段隔離與內核的關聯。

廠商肯定是不會放任用戶的刷機行為的


思科提供開源代碼,直接就能下載。 例子:


推薦閱讀:

請問,閱讀源碼時,已有的代碼注釋究竟是促進學習還是阻礙學習?
源代碼怎麼編寫的?
如何提高閱讀源代碼的能力?
怎麼評價歐陽乾的最後進化?
微軟源碼丟失了會怎麼樣?

TAG:Linux | 開源 | 源代碼 | GPL | 通信設備廠商 |