Android 內核基於 Linux 設備廠商必須公開內核源代碼,如何逼迫小米公司開源?
我知道很多公司都沒開源小米不是第一個也不會是最後一個,但是作為一個銷量過千萬的廠商仍然無視GPL協議,就太沒節操了。看了幾個回答我震驚了,怪不得小米可以肆無忌憚的丟節操,原來多數人根本不知道什麼GPL什麼開源的事。可惜不是專業的說話沒分量只好貼個鏈接(大多數 Android 平板未遵守 GPL 授權 - 開源中國社區)了,歡迎專業人士來補充細節。
謝邀,作來一個資深的Linux開發者和Android產品開發者,我首先回答一下題主問題。
首先小米不開放內核違返GPL協議的。理由有耐心看我後面寫的。
如何逼迫其開源,如果小米一輩子只在內地銷售,還真拿他沒辦法,但看這個趨勢,小米肯定要賣出國內。
1.如果向歐美國家出口,比較狠一招是通知自由軟體基金會,如果他們覺得嚴重,可以向法庭提出訴訟後,然後海關可以先行扣貨。我當年做VOIP產品,就是聽說產品被扣。這一招太過狠了,時間上也長。
但是威攝力很大,中興的手機內核(如我手頭的U880)原來也不開源,有投訴後還是開源了,因為他們是大量在國外出貨的。
2.第二個簡單方法,我臨時想出來的,你天天在推特上天天問 小米新請來的總裁Hugo,如何看待開發者申請開源的請求,同時@雷軍,小米和自由軟體基金和Google
然後投稿給各個微博,自媒體和知乎,同步直播。不知道雷老師能頂多久。
---------------------------------------------------------------------------------------------------------------------------------------
然後你有耐心可以看一下我反駁以下幾種支持不開源流行論據,它們都在回答中出現了。
1. Android 整套體系中,Framework可以選擇不開源,它就是放在/system分區那一堆東西,完全由Google開發,它使用Apache協議,開發者可以選擇不開源這沒錯,但是Android運行在Linux Kernel 的版權不屬於Google,(這個具體屬於GNU還是linus torvalds本人,可以請更懂行請教一下),它是明確要求開源.當然Google ,也這麼做了。小米這樣做是違反了GPL協議的。
Android 看成一台汽車的話,kernel就是發動機,現在開發者要求公布是發動機設計,反對開源的人(我記憶里小米社區有一個長貼,以這裡@李東 )就說車身設計可以不開源。
2.早期的Linux的動態模塊(ko)可以不開源,但這是個在新的GPLv2已經無法這樣做了。
你們自己寫一個Linux內核模塊試試,只要使用內核原有函數,必須把模塊協議設為GPL協議,否則編譯報錯。而編譯好的ko的的協議信息,只要執行一下modinfo命令就能看得清清楚楚,@何雄軍 講那種情況我見過,比如把nand flash的驅動做成nand.ko,這種情況跟小米一樣,不開源也是違反協議的。
3.還有一種論點說硬體驅動寫在HAL里的就能不開源了,比如有人那位說的中間層。這一條迷惑性很大。因為硬體產商使用HAL驅動有幾種策略。
第一種策略,真覺的自己寫的驅動金貴,實在不想給其它人一絲一點,可以在HAL通過Google在內核在加入pmem驅動直接對硬體IO進行操作。這樣按Google 說法不開源。但是這樣Linux版權方不幹了,在內核加入這個pmem驅動這個木馬等於繞開GPL協議了。爭執的結果Google 內核源碼被踢出了http://kernel.org伺服器,Google 在自家伺服器提供下載,大家各玩各的,所以這種做法是灰色地帶。
我編譯市面各種各樣的Android設備有十多款,手機,平板,盒子的內核。發現所有硬體產家無一採用上面說的策略。無它,只有腦子被驢踢了產家才會用這種策略。
在內核里開發驅動遠比開發那HAL驅動方便,有大量成熟工具可以使用。而且HAL開發只有logcat以及不斷重啟,(你一天重啟幾十次Android是作死的等待的啊)
晶元都有沿革,在Linux下積累了大量成熟的驅動代碼,改改就能穩定工作。
所以現在產商都在在Linux內核開發驅動,簡單的在HAL封裝一下。這種情況,內核里那部分仍然要開源。
前幾天剛做過關於Android的介紹,這是當時所找的圖片列出了整個安卓操作系如同各個部分所遵循的版權協議。
為了規避這一問題,谷歌除了在操作系統核心使用了Linux代碼之外,在其他專門為安卓開發的相當一部分代碼中,使用了傳染性不那麼強的開源協議:基於Apache的ASL或者基於BSD的BSD協議。這兩種協議的共同點在於對商業應用十分友好,遵循這兩種協議的開源代碼,商業公司可以拿過去用,而開發出的產品不一定需要也開源,可以視情況打包為閉源商業軟體。在安卓系統中,大部分硬體驅動程序,以及谷歌專門為移動設備開發的基本函數庫Bionic,都慷慨地採用了BSD或ASL開源協議,其中包括Dalvik虛擬機等安卓運行庫(runtime)。(整個安卓操作系統各部分所遵循的版權協議見圖)
圖片及引文來源:詳析:谷歌為何緊急封殺阿里雲OS?
所以如果小米真如@黃新宇 老師所說,只是在Linux kernel里開發驅動,然後再HAL封裝一下,那麼的確是需要開源的。kernel和u-boot應該是要公開的。Android不是GPL協議的。很多公司會將Kenrel中的很多驅動做成模塊,並且放在外面編譯,ko放到initramfs中,於是這部分也不公開了……
像SGX的驅動的做法就不用多說了……
---------------------------------------------------------------------------------------
補充:
為什麼不公開boot和kernel?
1」boot:很多嵌入式產品中boot會去檢測/檢驗(crc/chucksum)BSP標誌位或者是kernel等數據,這個是為什麼有的時候我們需要刷入特定的boot才可以刷機成功。如果boot公開了,那麼它的檢驗方式和檢驗值都可以得到並且去除這個驗證流程。 其次,boot裡面有對一些外設的初始化,這個有可能是公司自己開發的,這個也算是一種技術投入。而且這些驅動中會透露出引腳的連接。
2」kernel:kernel中一樣有很多的驅動,當然大部分都可以做成模塊的方式,而不是加入到kernel source tree中,但是我們平常的手機、平板大部分還是將驅動內建(built-in)到kernel中(linux下使用 ` find / -name *.ko 2&>/devnull` 查找模塊),這樣子的話,他們如果要公開kernel代碼,就意味這也需要公開這些驅動,而公開後,我們可以自己編譯kernel甚至將驅動porting到其他版本的kernel或者內核(例如WinCE)。
同樣的,公開驅動意味著公開了外設與SoC(理解為CPU,例如MTK的高通的晶元)的連接引腳,這個意味著為別人仿製類似產品提供了便利。某些手機有特有的感測器/外設,例如菊花的手機有一個紅外的,如果公開代碼,那麼別人可以拿來用,省去了部分這一模塊的軟體開發成本。
HAL層不遵守GPL協議一直存在爭議,但是HAL的引入並使用Apache協議對Android系統的發展是非常重要的,主要的原因在於,Linux kernel對於硬體的驅動支持儘管很豐富,但並不是百分之百的,很多硬體的驅動是需要硬體廠商提供的。硬體廠商一般是不願意公開相關的驅動源代碼的,這不是因為這些廠商小氣或者故意不遵守GPL協議,而是由於硬體驅動有特殊性,硬體驅動源碼的公開意味著硬體設計細節的公開,而硬體的設計細節是硬體廠商的核心競爭力所在。
2013年10月25日11點左右,小米2/2S/2A Kernel開源了
https://github.com/MiCode/mi2_kernel
關於這個問題,我研究過。其實有很多人對 GPL 理解存在偏差。首先說結論,小米的 MIUI 中肯定存在有需要開源的代碼,這個毫無疑問。
但是這裡插入說一下,GPL 協議是對『軟體發布』這個行為進行限定的,所以,當你發布一個軟體時,如果這個軟體中受到了 GPL 協議限制,就可能需要開源,但如果你根本沒有發布過軟體,則無此限制。
為什麼你不發布軟體,GPL 就與你關係不大呢?因為所謂開源並不是象你所想像的那樣,必須將源代碼完全公開,而是:源代碼必須與執行程序同步發布到相同的渠道。換句話說是這樣,- 如果GPL軟體發布給一個人,那麼,這一個人獲得該GPL軟體的二進位執行程序的同時,必須能夠有權獲得對應源代碼,其他沒有獲得程序的人無權索要源代碼。(也就是說,只發布源代碼不發布執行程序是可以的,只發布執行程序不發布源代碼違反了GPL)
- 如果該GPL軟體發布給一個 100 人的封閉團體,那麼,這 100 個人獲得該GPL軟體的二進位執行程序的同時,必須能夠有權獲得該GPL軟體的源代碼,而這 100 個人之外的其他人,無權索要源代碼。
- 如果該GPL軟體發布給世界上所有人,那麼,世界上所有人獲得該GPL軟體的二進位執行程序的同時,必須能夠有權獲得該GPL軟體的源代碼。
- 如果除了你之外,任何人都無法得到這個 GPL 軟體的二進位可執行程序,那麼任何人也都無權得到這個 GPL 軟體的源代碼。(當然,如果作者主觀願意將源代碼發布給他人,自然他人可以獲得,不過他人無權索要)
如果一款手機從來沒有發布過升級,從來都只是內置出廠程序,則你只能使用這個手機的界面,無法訪問到該程序的二進位碼本身,你無法得到手機軟體的二進位可執行程序,所以你也同樣無權得到這個軟體的源代碼。簡而言之就是下面一句話:
小米的手機無論賣出多少台,他都不會違反 GPL ,但小米的 MIUI 只要有一個人下載,他就已經違反了 GPL。
至於說大多數 android 平板沒有遵守 GPL 協議,我認為這個說法是錯誤的,因為平板本身不是軟體,發布平板不等於發布軟體,平板內部的軟體的二進位執行文件本身,通常你無法直接訪問,除非對平板進行破壞保修協議的逆向工程,否則用戶無法直接獲得並且複製分發該平板上軟體的執行文件,這上面的軟體嚴格意義上根本沒有被發布。平板如果不獨立發布其軟體ROM,就無需受 GPL 約束。
好了,現在問題在於:小米有沒有發布過軟體?
回答當然是有的,MIUI 就是公開發布的,而小米的內置 ROM 也是在 MIUI 官網公開發布的,這都是非常明確的『發布』行為,只要存在了『發布』行為,就會受到 GPL 的約束。至於 MIUI 中哪些部分需要開源哪些部分不需要開源,這一點可以具體問題具體分析,但其中存在著需要開源的程序,這一點沒有疑問。
那麼,小米肯定需要開源一部分程序,這個沒有疑問了,至於怎麼逼迫小米公司開源,就要看你的目的是什麼。既然你用了『逼迫』二字,從我的角度,我認為直接通知 FSF 可能是最省事的方式,所以,直接通知 FSF 吧,由他們決定採取什麼方法。
另外提示一下:小米開源其源代碼並不意味著你有權利得到它,因為,GPL 協議中的源代碼只要求同對應的程序一同發布,也就是說,只有 MIUI 的受眾有權力要求 MIUI 源代碼,所以如果你手頭沒有 MIUI ,就沒有權利找小米要求 MIUI 中的 GPL 源代碼。記得以前聽魅族工程師說過,貌似android整個體系里只要求kernel層必須開源,其它的不做要求。
android使用協議是apache的,也就是說,廠商可以不開源
-------- 公元2013年10月11日 很慚愧地更新 ----------
小米使用的android內核部分,肯定自己做了不少的修改,按照GPL許可協議,是要公開代碼的。
但是根據目前國內的現狀,分析如下:
1 米粉,根本不在意什麼開源不開源,能用、便宜,這就好了
2 同行, 小米對內核的更改很有限,並不會比別人強多少,miui很不錯但是它不是內核,不受協議限制
3 國外,小米在國外賣得少之又少,外面的有心無力
4 媒體,無利可圖誰去曝光這些? 一不小心會被噴的,何況領導人又去視察過了
5 其他人,也許會有熱心人在奮鬥
6 我自己,高呼口號:唐吉可德,加油,我支持你,沖啊
結論:你很難逼迫小米公司開源,這可以叫做國情,很難很難,也許會被稱為一個沽名釣譽之徒,腎重
------------- 完畢 -----------
Google玩了一個花招,在kernel和應用程序之間,自己做了一個中間層,這樣就既不違反GPL許可,又能不讓外界看到廠商的硬體驅動和應用程序的源碼。
裡面的關鍵在於,Kernel和Android的許可證不一樣,前者是GPL許可證,後者是Apache Software License(簡稱ASL)許可證。GPL許可證規定,對源碼的任何修改都必須開源,所以Android開源了,因為它修改了Kernel。而ASL許可證規定,可以隨意使用源碼,不必開源,所以建築在Android之上的硬體驅動和應用程序,都可以保持封閉。為了得到更多廠商的支持,Google有意選擇了這樣做,並且特意修改Kernel,使得原本應該包括在kernel中的某些功能,都被轉移到了userspace之中,因此得以避開開源。
Android,開源還是封閉?
在天朝,各種開源協議都只是君子協議,沒有法律效力的
之前在華為工作,做的網關路由器主要是賣到國外的。發布前有一個步驟就是進行開源認證,當時還給我們進行過內部培訓,寫程序怎樣防止開源代碼污染私有代碼,以及怎樣將開源代碼和私有代碼分開,等等。
Amazon內核也是linux,這個是開源的,你可以在網上搜索的到。
小米用戶主要是國內,根本沒有什麼版權的觀念,更不用提開源,copy left,GPL等東東了,我想,國人的版權意識還有很長的路要走。
天朝全體it企業表示,GPL是啥,好吃么
我們公司是開的,經常有某個項目經理來問我們要某個版本對應的內核源碼。但我猜想你必須問我們要,才會給。這個其實真的沒什麼,手機廠商只是在晶元廠商的內核的基礎上修修補補,最有技術含量的東西基本都在晶元廠商的代碼裡面,他們都是開源的
目前已經在GitHub中開源了?
https://github.com/MiCode/Xiaomi_Kernel_OpenSource在TC你講法律,協議,還是國際的,誰會在乎呢?
推薦閱讀:
※如果索尼 Z3 Compact 能刷鎚子 OS 的話,是不是就是鎚子手機的完美形態?
※Android 手機系統有哪些令人難以忍受的缺點?
※怎麼看待索尼z3+的出世?
※為什麼是 Samsung 而不是 Sony 成為了 Android 的王者?