Google 的 Android 為什麼不自主開發一個內核而要用 Linux 內核?

內核相對整個操作系統來說是非常小一部分,按照 Google 的研發實力,真的想研發一個內核也不會那麼難吧?是真的研發內核非常難,還是 Google 基於某些考慮讓 Android 使用 Linux 內核呢?


就我看來,簡短的回答是三個字:沒必要

以下從三個角度展開來說:
從技術角度來說,在操作系統層面上,Linux操作系統無法做到,或者無法做好的地方Google其實是很清楚的,也都有相應的比較妥善的應對措施,所以從技術上來說沒有這種動力;

從商業合作的角度來說,Google作為一個純粹的軟體提供者,為了盡量的將硬體廠商團結在自己的周圍,為了形成一個穩固的生態圈,就要從硬體廠商的角度考慮問題,Linux作為一個已經經過實踐和時間的檢驗,穩定性和性能都得到公認,而且各個硬體廠商也已經有了一定的技術儲備,明顯硬體廠商更願意在之前就有一定把握把事情做好的平台下進行開發,這樣他們的技術風險可控。同時Linux系統這個項目不由Google直接控制,也更容易讓廠商減少警惕之心(第三方廠商也不傻,雖然他們可能會相信Google的技術能力,但是100%會考慮這個問題:如果我做得好,Google你會不會直接來搶我們的果實啊),讓周邊的廠商投入更大的精力在這個平台上。

從Google自己的角度來說,Google自己肯定覺得自己更擅長搜索和做平台(Google搜索也是一個平台),所以從「揚長避短」的角度出發,Google自己想在移動這個領域擁有更大的話語權,肯定也不會像Intel、高通那樣,參與「18個月晶體管數量翻一番」的硬體競賽中,而是想從軟體的入口(也就是操作系統,或者應用這類)角度來控制。從技術角度來說,Google採用了設計模式中的Adapter模式(適配器模式)來處理Android和Linux系統的關係(其實你能發現從Chrome OS和Linux、Chrome瀏覽器和webkit核心這幾件事來看,Google處理這種問題的技術手法都是一樣一樣的啊),使得移動平台上Linux的重要性被大大降低。同時Google又通過更致命的Google App方式,讓Google服務的重度使用者最終難以離開。這樣Google自己就能輕車熟路的複製自己之前成功的賺錢方式(從廣告商那兒賺錢)

P.S:
@陳塵 同學提到的蘋果的內核是他自己開發的,這個說法是不對的,至少不完全對,拋開早期的MacOS不說,Mac OS X的內核代碼直接來源於BSD,當然蘋果有做針對性的修改,但是要說是蘋果自己開發的,這卻是不正確的。正確的說法請參考wikipedia上針對FreeBSD的說法:

Mac OS X Server includes the latest technological advances from the open source BSD community.
Originally developed at the University of California, Berkeley, the BSD
distribution is the foundation of most UNIX implementations today. Mac OS X Server is based largely on the FreeBSD distribution and includes the latest advances from this development community.


—"Apple Mac OS X Server Snow Leopard—UNIX: Open source foundation"

另外,還可以從這篇博客中了解Mac OS X同Mach之間的關係:http://dolgopa.wordpress.com/2010/04/14/jordan-k-hubbard-freebsd-relation-between-freebsd-and-mac-osx/


不是Google選了 Linux,而是安迪魯賓創業做Android選了Linux,當時幾十人的小團隊,能把應用框架做出來,能打出電話就不錯了,哪有精力發明OS,選一個成熟開源而且大家都會用的內核,只有Linux了。


研發一個內核不難,難的是讓成千上萬的設備為它做驅動。那是一項龐大到幾乎不可能的任務。

蘋果可以自研內核,因為蘋果只需要驅動非常有限的少量的設備。說服少數這些設備廠商開發蘋果驅動即可,或者甚至可以自行開發。

Windows 可以自研內核,因為這個星球上,設備驅動最多的可能就是它了吧。

那麼除了 Windows 之外,哪個內核能驅動最多的硬體設備?答案是 Linux。

所以 android 必須只能選擇 Linux 作為內核,沒有任何其他選擇。


可以參考robert love在quora上的一篇回答:Android (OS): What are the major changes that Android made to the Linux kernel?

儘可能少地修改內核,儘可能多地擺脫現存UNIX桌面遺產,這是 android 相比與其它一些手機設備(典型如 meego )的特色之處。


之所以回答,是因為想吐槽一下點贊最多的@pansz 回答。

恰恰相反,linux最難的部分就是它的kernel.作為在n個開源或不開源的嵌入式系統下寫過m種設備驅動的人,我想說,設備驅動的編寫難度,絕對是吊絲級的。

其次,嵌入式的設備不需要同時技持什麼成千上萬種設備,不像是電腦,你換個音效卡顯卡重裝驅動就OK了。你可以把你手機的屏幕換一個別的型號試試,硬體介面都不一樣,軟體需要去做支持嗎?

再次,手機中需要的外圍設備也沒有成千上萬那麼誇張~。

現在回答題主的問題。google為什麼要用linux.
1,不要拿google與apple類比。它們兩個不是同一種公司。
google是互聯網公司,google是靠服務掙錢的。而apple是設備商。apple要做的是apple認為最人性化的設備,用設備去賺錢,apple的軟體是為apple的設備服務的。

2,智能設備需要一個有著優秀管理能力的多任務操作系統。沒有人花錢讓你去從頭去開發這樣一個系統。這個難度很大。

3,不是google選擇了linux。是google選擇了android, 而anroid選擇了linux。當然,如果android當年用的並不是一個開源系統。google不一定會選擇它。

4,一個穩定的,開源的,全球有眾多工程師免費幫你升級維護的系統。對於一個互聯網公司,它還不是最佳的選擇嗎?

5,linux功能強大,它的很多feature都能滿足android的需要。且免費,免維護費。我想這是android最初選擇linux的原因。或者說在android還不叫android之前,就選擇了linux的原因。請看第6條。

6,最後,講一個故事。曾經一個sun的大牛跳到了moto(也可能是被挖過去的)。因為是sun出來的人,到moto就建立了這樣一個項目,底層是c(不記得是不是linux了)上層是java的系統用於手機。那個年代還是moto是業界老大的時代。所有的手機系統(包括界面)都是用c編寫的,木有c++,更木有java。那個年代的手機cpu的主頻26M是比較快的,想像一下,在這樣的處理能力下,先跑一個c的系統,再跑一個虛擬機,再運行java是什麼感覺?那個項目的bug滿天飛啊~~~最後,這個項目最後在moto掛掉了,大牛自然也離開了。再再再最後,這個大牛到了google。


首先Android是從Android Inc.買來的
其次一個讓Linux黨很不舒服的答案是:Google正在做這件事(換內核)


…… 首先 我要吐槽寫一個內核不難這句話 如果都是從無到有 android的這framwork 和 linux內核相比 複雜度完全不是一個數量級的 你覺得kernel簡單 是因為linux kernel做的太好了 讓你感覺不到它的存在
而android自己這還在萬年beta版 linux內核的穩定度豈是android可以比擬的
之前android團隊為什麼選linux?可能因為他們公司當時買的開發板只支持linux吧
……開個玩笑的 其實是以下原因:
1.linux使用範圍廣,在嵌入式市場從arm9以後已經開始逐漸成熟
2.本身開源
3.非gpl的開源庫多,開源license是件很麻煩的事情

開源license對於商業化是一件很致命的事情…… 為什麼沒有人提到……


為什麼要重複發明輪子?


從系統的開發分層和難度來說,既然有了開源的 Linux ,為什麼還要自己去開發內核?就好象大家玩的一些遊戲,有 Windows 系統可以直接跑,沒有幾個廠家會去重新開發底層系統。就連遊戲機,其實他的操作系統和功能庫也都是現成的,遊戲開發者只需要根據系統的功能寫程序就可以了。這樣很好的減少了開發難度和成本。
P.S:請允許我吐槽
@科技熱-Z
android 本質上是一個基於 Linux 內核上面運行的 java 虛擬機
Google只用了kernel,別的東西都沒用。這就是說,與Ubuntu、Debian、Redhat這樣的傳統Linux發行版相比,只有系統的底層結構是一樣的,其他東西在Android里都不一樣,尤其是程序員的編程介面是完全不同的。因此,Android應用程序都必須重新寫過,現存的Linux程序無法移植上去。所以,從嚴格意義上說,Android是一種全新的系統,它與Linux的距離,比Mac OS與Linux的距離還要遠。
Kernel和Android的許可證不一樣,前者是GPL許可證,後者是Apache Software
License(簡稱ASL)許可證。GPL許可證規定,對源碼的任何修改都必須開源,所以Android開源了,因為它修改了Kernel。而ASL許

可證規定,可以隨意使用源碼,不必開源,所以建築在Android之上的硬體驅動和應用程序,都可以保持封閉。為了得到更多廠商的支持,Google有意
選擇了這樣做,並且特意修改Kernel,使得原本應該包括在kernel中的某些功能,都被轉移到了userspace之中,因此得以避開開源。


已經有個一個那麼好用的內核了,沒必要再自己開發一個。


首先正面回答題主的問題:為什麼android 選擇Linux. Android 使用Linux 2.6作為內核主要有以下3各方面的原因:

1- Portability: Linux runs on devices of diverse architecture from enormous machines like supercomputers to Large Hadron Collider to smaller devices like motor bikes and tiVo. This is due to the fact that Linux is an immensely portable platform. It is fairly easy to compile Linux on various hardware!

Linux brings Android a level of hardware abstraction. Most parts particularly the low-level ones are written in portable C code that can be accessed and modified by manufacturer easily. This means manufacturers can pick up Android and modify it to adapt it according to their hardware requirements rather that improving the hardware to fit the software!

2- Features: Linux brings to Android some useful features. The Linux Kernel 2.6 includes these features:

Memory Management: While developing for mobile devices memory handling becomes a point of great concern. Thanks to Linux Kernel over which Android is built you can free yourself from the worry. Linux will handle Linux kernel forthreading and lowlevel memory management for Android. Linux kernel is responsible to manage the core feature of any mobile device i.e. memory cache. Linux kernel manages memory by allocating and de-allocating memory for the file system, processes, applications etc.

Process Management: Linux Kernel is responsible to start stop and execute the program. For a beginner a process can be thought of as an instance of computer program. i.e. whenever a program is run on computer the OS creates its instance or process for it which is executed by the OS. In case of Android Linux is responsible to allocate resources to various processes that need them.

Driver Model: As evident this is the layer where all the device specific drivers run. Here Linux ensures that your application is able to run on Android. Manufacturers/ hardware vendors can develop their drivers into Linux in a familiar environment. That is giving plenty room for hardware vendors to optimizing OS. This is one major reason Linux kernel was chosen for Android.

File System Management: Linux also manages the file system which in turn controls the data storage service for android device.

Network Stack: Linux Kernel is responsible to communicate with the network. It also controls networking stack, drivers, routing devices and network adapters.

User account (Security): Linux kernel handles the security between application and the system. Linux takes control of authentication of users and is responsible for user management.Besides this Linux kernel is also responsible for power management and for undertaking various services like internet search, voice communication, system logging etc.

3- Security: Linux runs in scientific research labs, supercomputers and systems for mission critical tasks. Android completely relies on Linux for security. All android applications run as distinct Linux processes under permissions set by Linux system.

Above all, Linux is the poster child of open source and Linux is freely available! Its interesting to note that while Android has gained quiet momentum the former popular PALM smartphone running WebOS were also built on Linux kernel!


以上引用自http://www.unixmen.com/why-is-android-built-on-linux-kernel/

蘋果打算開發過自己的內核,Copland.(歷史上最大的流產的科技計劃)後來直接放棄轉而買了jobs 的nextstep . 最終其實還是用到了Unix.
從Unix 的歷史不難看到,當時造輪子的環境已經過去了。雖然你現在輕而易舉的可以再在造一個,就好比你可以輕而易舉的去做當年的X射線實驗,光電實驗,小球落地實驗。可是已經毫無價值和必要了。計算機科學裡面Unix當年已經解決了操作系統內核的關鍵問題,現在人類文明從整體來看應該是不斷發展他,而 不是浪費時間再去做一個其實等價的玩意。
除非你能提出一個全新的體系結構(非X86),能效上有巨大提高。否則你寫來寫去發現就是那幾個一樣的演算法和那幾個一樣的系統層的函數。無非把名字換一下,有意思嗎。

好比量子力學可以有很多種數學模型,但薛定諤方程已經用了,效果還很好,其他模型的效果並不比他更好,還費事。這樣一來,整個人類就用上了薛定鍔方程。

更具體的比方是,matlab 用上了很多數值計算的方法,特別是矩陣之流。你可以用你的知識重寫一個,但是除了浪費了你大量的時間和提高了自己的水平以外,對社會經濟沒有貢獻。
Comsol 用了很多pde 的解法,也有meshing . 你也可以用自己學到的知識重新寫一個,但是除了浪費了你大量的時間和提高了自己的水平以外,對社會經濟沒有貢獻。
The list goes on.
除非你提出了新的計算機體系,發明一個新內核就是一個假裝忘記人類現有的知識自己借鑒之後邀功的無聊行為


蘋果做的就是這件事,它花了幾年?
android就是要換個託管代碼環境,從dalvik轉移到art,便已經用了兩年,這才不過是在高通平台的nexus提供公開測試,穩定性很差的程度

這一定和被Google收購前的andi rubin的android創業公司有關,小公司肯定會挑linux內核


如果你對Google的各個項目了解的更多一些,會發現這家公司非常浮躁,經常開始一個項目,然後關掉.

那麼,不去認真革新Android也就可以理解了。

歸根結底,除了iOS,沒有像樣的挑戰者,大家沒有選擇。才是他這麼懶惰的原因。


據維基百科上的評估,重新開發linux要花費20個billion美元


首先,對於創業型的公司來說重新開發一個跟Linux差不多的內核是極其困難的,幾乎是不可能完成的任務。在這種情況下,Linux是不二之選。
其次就是pansz提到的,Linux擁有良好的硬體驅動生態系統,這個連後來接手安卓的Google也沒有把握可以做好。
第三,Linux內核足夠優秀,沒有必要。

PS
我個人認為開發一個內核還是相當具有難度的。


你看看天朝所謂各種研究所,燒了多少錢,整出了多少所謂自主產權操作系統,就知道難度了。這不只是寫代碼的技術難度。


看了大家的回復,我覺得可以從另一個角度回答這個問題。需要了解兩個問題,所謂系統內核他到底做了件什麼事?花錢花精力自己開發內核的到底有多大好處?

關於內核的作用我想樓主一定很清楚,簡單說就是提供了進程管理、文件網路管理、系統安全許可權管理、以及系統與硬體設備通訊基礎。而在無論Android還是iOS這類高度依賴框架的多層次操作系統上,內核對上層開發者來說是幾乎不可見的,只能通過開放給你的框架介面進行相關操作。
因此我們可以說內核對整個系統來說是基礎性的,而非功能性。就整個Android工程來說,其Dalvik [包括新的ARTS]及主體交互、功能框架才是重中之重。

再說說自己開發內核到底有多大好處,或者說性價比有多高的問題。
作為整套系統的基礎,內核的高效穩定可以說是重重之重,而任何一款軟體的開發都要經歷迭代過程,微軟開發NT內核耗費大量資金與時間,而且至今還在不斷改進與維護正是對此種迭代的最佳例證。而即使如此,經過將近十年的開發與維護,NT內核之效率與功能性仍弱於Linux。由於Linux的開源特性,大量個人與企業對其進行持續不斷的維護與改進是Linux始終保持領先的重要原因,而微軟以其一己之力自不能與其媲美。這實際上是告訴大家在已有開源Linux的前提下,自己開發系統內核實際上是一件吃力不討好的事。且以前做Android的團隊或現在的谷歌均沒有自己現有的系統內核項目,因此使用來源Linux自然是省時省力省錢又保險的選擇。而至於微軟為何在NT的道路上越走越遠,我想它必有自己的道理,比如對系統擁有完全控制權等等,在此不做假設性討論。
另外值得一提的事,前面有人提到「蘋果自主研發內核」實際上是不準確的。iOS與OSX其實都是基於UNIX內核。也算得上是「業界慣例」。
再次,軟體、構建重用也是開源軟體中慣用的手段。利用維護良好的開源項目對軟體系統的穩定性與功能性提升至關重要,這點不再贅述。


收割開源社區成果,降低開發成本。如果使用Linux內核就意味著有開源社區成千上萬的開發者為其服務。


首先 android是google收購 其次 做android的小團隊做的 自主研發 還真沒這個時間


挖個墳,現在正在做類似的事情。但當時這樣做顯然不合適,不說安卓本身就是谷歌買來的,就說買來後就換內核也不是一個好的選擇。原因其他答案也說了,驅動,用成熟內核保證一是原本就有現成的驅動,就算是新設備,開發驅動也容易的多,沒看到招聘驅動開發工程師很多都要求linux驅動開發經驗啊。


推薦閱讀:

一個新手面試 Linux 運維工作至少需要知道哪些知識?
linux/unix socket編程並發時什麼時候用進程(fork),什麼時候用線程(池)?
ssh遠程登陸有時候正常,有時候顯示:ssh_exchange_identification: Connection closed by remote host,這是什麼原因?
魅族會不會考慮 Ubuntu 系統?
關於Socket API的設計?

TAG:Linux | Android | Linux內核 | 操作系統內核 |