Google Fuchsia初探
這幾天我花了一點(diǎn)時(shí)間簡(jiǎn)單看了一些Fuchsia的代碼,對(duì)這個(gè)系統(tǒng)有了一個(gè)初步的了解。也歡迎在狗家的朋友批評(píng)指正。
Fuchsia是Google內(nèi)部孵化出來的一套新的全部開源操作系統(tǒng)。你能在google的代碼倉庫看到所有的代碼,
https://cs.opensource.google/fuchsia/fuchsia
這個(gè)系統(tǒng)有點(diǎn)屬于備胎轉(zhuǎn)正的意思,在Google內(nèi)部前前后后開發(fā)了大概有6年多了,如果再考慮到以前的little kernel的積累,這個(gè)系統(tǒng)開發(fā)的時(shí)間更長。
這套系統(tǒng)是一套完全不基于Linux開發(fā)的系統(tǒng),從它的能力和目標(biāo)來看,他的目標(biāo)是統(tǒng)一從高端嵌入式設(shè)備,手機(jī),手表,汽車,平板電腦,臺(tái)式電腦的大一統(tǒng)操作系統(tǒng)。
這里面有個(gè)假設(shè)就是將來的硬件設(shè)備主要是ARM64架構(gòu)或者x86架構(gòu),我覺得這個(gè)假設(shè)沒有問題。從代碼倉庫的代碼來看系統(tǒng)支持兩種架構(gòu)即 ARM64 和X86,代碼從2014年開始,就在開發(fā)了。
ARM端
因?yàn)橄到y(tǒng)支持的ARM64,這么來講,一些低端的老的ARMv7指令集的CPU, 新操作系統(tǒng)不會(huì)支持的。 這就非常明確了,這套系統(tǒng)嵌入式系統(tǒng)的定位時(shí)中高端的嵌入式設(shè)備。
們公開支持的第一個(gè)設(shè)備nest hub,就是用了 Cortex-A53架構(gòu)的。
PC端:
因?yàn)橄到y(tǒng)支持x86, 也就是說它將來能跑在所有的桌面電腦上,不僅僅是chromebook了。這個(gè)直接是對(duì)著微軟的存量桌面系統(tǒng)去的。
代碼中寫的ACPI模塊表明他們對(duì)桌面系統(tǒng)的支持是非常廣泛的。
平臺(tái):
從支持的平臺(tái)來看現(xiàn)在公開支持的有 如下幾個(gè)平臺(tái)
不過在2018年前后,F(xiàn)uchsia還支持過Raspberry PI 3 但是后來Google 又移除了這個(gè)平臺(tái),我不清楚google這么做的目的是什么?
不過又愛好者,在把Fuchsia 往Raspberry Pi 4b上搬,去年還搞了一個(gè)pull request向主分支提交,但是現(xiàn)在的狀態(tài)是abandoned的狀態(tài),不知道為啥。
這個(gè)愛好者代碼倉庫在
https://github.com/dahliaOS/zircon-rpi
看了一下往rpi4上移植 Fuchsia 難度沒有那么大。
安全性:
這個(gè)代碼系統(tǒng)非常龐大和完整,kernel這塊的完成度非常非常高。后面是一些安全機(jī)制改進(jìn),性能改進(jìn),大范圍測(cè)試,回收dump,再分析改進(jìn)的過程。
比如他們現(xiàn)在的內(nèi)核安全機(jī)制方面,還沒有采用 KASLR, kernel address space layout randomization,不過從注釋里看到,他們已經(jīng)把它看成一個(gè)todo item了。
還有不少安全隱患沒有去修,比如 null page的問題,ASLR問題,簽名問題等等。所以大概還需要一段時(shí)間的打磨才可以。
系統(tǒng)層
由于整個(gè)工業(yè)界已經(jīng)在linux和anroid上面投入了大量的資源。所以面對(duì)Fuchsia需要能夠兼容這些legacy的程序。
由于Android和linux之間的深度綁定,你無法只想僅僅支持Android而又把linux給扔掉。舉個(gè)例子來講,假設(shè)你搞了一個(gè)用android app給外置的單反進(jìn)行美顏的app(功能夠怪的,為了說明起見)那么,你的android app包含了兩個(gè)部分,一個(gè)是Android java code部分。一部分是NDK部分,你給你那個(gè)奇怪的單反寫的特殊linux驅(qū)動(dòng)。
然后你發(fā)布的時(shí)候,是將驅(qū)動(dòng)和apk一起發(fā)出去的。
然后你說我的底層內(nèi)核改了,改成其他內(nèi)核了。那么解決方案又幾個(gè):
要求開發(fā)者重寫針對(duì)新內(nèi)核的驅(qū)動(dòng)。重新發(fā)布。
在新os中搞個(gè)linux的虛擬機(jī)。然后相當(dāng)于Android運(yùn)行在虛擬機(jī)里面。
搞個(gè)ABI 二進(jìn)制兼容的子系統(tǒng)。
重寫,重寫的錢誰來掏,肯定沒人愿意好好的給你重寫一個(gè)用的好好的app的?,F(xiàn)在銀行還有用Cobol的呢。
現(xiàn)在看到的方案是 Starnix方案
https://fuchsia-review.googlesource.com/c/fuchsia/+/485181/7/docs/contribute/governance/rfcs/0082_starnix.md#19
This document proposes a mechanism for running unmodified Linux programs on
Fuchsia. The programs are run in a userspace process whose system interface is
compatible with the Linux ABI. Rather than using the Linux kernel to implement
this interface, we will implement the interface in a Fuchsia userspace program,
called `starnix`. Largely, `starnix` will serve as a compatibility layer,
translating requests from the Linux client program to the appropriate Fuchsia
subsystem. Many of these subsystems will need to be elaborated in order to
support all the functionality implied by the Linux system interface.
簡(jiǎn)而言之就是 在用戶態(tài)實(shí)現(xiàn)一個(gè)linux的ABI,類似于Windows 里面的Posix Subsystem, OS/2 subsystem。
UI層
Google采用的是flutter框架,這個(gè)框架是未來。我建議小白學(xué)python + flutter就夠混了。連我這種老幫菜,現(xiàn)在也開始學(xué)用flutter了。
為啥?
因?yàn)橛胒lutter寫的代碼,可以同時(shí)運(yùn)行在Android和IOS上,還可以用了開發(fā)網(wǎng)站前端。還是native的code!這個(gè)就非常厲害了。把原來微軟的WPF 這套理念,發(fā)揚(yáng)光大了。
Flutter作為Fuchsia主要的UI框架好處是顯而易見的:
大量的代碼可以重用。比如你現(xiàn)在為Android開發(fā)的flutter代碼可以無縫遷移到Fuchsia上作為原生程序來運(yùn)行。
大量的開發(fā)人員社區(qū)。
因?yàn)閒lutter能夠有效解決跨平臺(tái),性能,完整性方面。在短期內(nèi)就積聚了一大批的開發(fā)人員,生態(tài)社區(qū)完善。一旦Fuchsia 大規(guī)模商用,開發(fā)者不會(huì)是個(gè)大問題。
為什么Google要另起爐灶?
Google沒有公開的評(píng)論,但是Google的動(dòng)機(jī)還是很容易理解的:
從技術(shù)角度來看:
linux的內(nèi)核是單體內(nèi)核,但是Google的判斷是,將來的IoT世界需要的是微內(nèi)核。這點(diǎn)跟service領(lǐng)域的微服務(wù)化有點(diǎn)異曲同工之妙。代價(jià)都是性能可能會(huì)有一定的損失,但是帶來了整體系統(tǒng)的穩(wěn)健性。
比如Windows臭名昭著的藍(lán)屏,一個(gè)很重要的原因是,第三方硬件廠商寫的驅(qū)動(dòng)程序很爛,很多程序就在內(nèi)核態(tài)運(yùn)行,然后,一出問題,系統(tǒng)就藍(lán)屏,直接搞得大家很尷尬。設(shè)想在一個(gè)自動(dòng)澆灌系統(tǒng),一個(gè)控制系統(tǒng),一個(gè)溫度,濕度,光照的傳感器,假設(shè)這些驅(qū)動(dòng) 是一幫sb寫的,經(jīng)常有bug,而且經(jīng)常更新?,F(xiàn)在的情況就會(huì)把人搞死。一出問題,系統(tǒng)就會(huì)重啟。而且經(jīng)常需要系統(tǒng)停機(jī)更新。這在IoT領(lǐng)域是非常不好的。
所以,Google的判斷就是微內(nèi)核。
這是fuchsia的內(nèi)核的架構(gòu)示意圖
在技術(shù)上,Google還想放棄JAVA,畢竟JAVA是Oracle的兒子。Oracle又不思進(jìn)取。
從商業(yè)上看
想在iot 領(lǐng)域,復(fù)制Android的成功。
Android的成功為Google帶來的巨大收益。而后面十幾年未來在各種各樣的IoT領(lǐng)域。所以能夠在IoT領(lǐng)域里面搞出一個(gè)事實(shí)標(biāo)準(zhǔn)。那么可以給Google帶來巨大的收益。
想在desktop領(lǐng)域,干死Windows。
Google搞這些,在旁邊瑟瑟發(fā)抖的不是華為,而是微軟。在疫情期間,Chromebook的增長遠(yuǎn)遠(yuǎn)高于Windows的系統(tǒng)。
微軟的操作系統(tǒng)部門,如果不做大的調(diào)整,基本上會(huì)在這場(chǎng)大戰(zhàn)中落敗。
結(jié)語
我們?cè)诜浅8叩膶用婵戳艘幌翯oogle Fushsia的架構(gòu)和可能的roadmap。
他們的內(nèi)核就是那個(gè)Zicorn。能做多少事情?不能做什么事情?怎么做的,非常清楚。
另外Android的程序,linux的驅(qū)動(dòng)模塊在系統(tǒng)里跑起來是怎么跑的,什么原理,也基本上比較清楚。 他的應(yīng)用程序開發(fā)是怎么開發(fā)的,原理是什么也很清楚。
我們通篇說了Fuchsia 但是沒有比較鴻蒙,我只能從幾張大的歷史框圖來做個(gè)比較。
這是2019年的roadmp
這個(gè)應(yīng)該還是現(xiàn)狀
這應(yīng)該還是未來
還遠(yuǎn)沒有到Fuchsia OS這種一個(gè)微內(nèi)核的成熟度。即便如此,根據(jù) Fuchsia的成熟度,F(xiàn)uchsia 到大規(guī)模使用,至少還需要3-5年時(shí)間。。。
給鴻蒙的幾點(diǎn)建議:
1. 擴(kuò)大統(tǒng)一戰(zhàn)線
Fuchsia的針對(duì)的是中高端的嵌入式設(shè)備,低端的嵌入式設(shè)備,F(xiàn)ushsia看不上。這塊完全是一個(gè)機(jī)會(huì),低端不代表落后,代表低成本。所以,完全可以不用放棄對(duì)中低端arm 平臺(tái)的支持。
可以擴(kuò)大統(tǒng)一戰(zhàn)線,把自己的隊(duì)伍搞得多多的。
可以以看看同樣的國產(chǎn)實(shí)時(shí)操作系統(tǒng)RT-Thread, 怎樣悶聲在江湖里坐穩(wěn)自己位置的。
這就是群眾,這就是市場(chǎng),這就是需求
2. 加快開源社區(qū)的建設(shè)
讓更多的廠商,開發(fā)人員上車。
現(xiàn)在Fuchsia是完全開源的,而且已經(jīng)開始邀請(qǐng)開源社區(qū)向其貢獻(xiàn)代碼了。
這對(duì)于很多獨(dú)立開發(fā)者或者設(shè)備制造商來講,肯定會(huì)有考慮,如果早上車了。那就是投入成本。隨著投入的增加,以后除非有真的難以忍受的bug或者法律法規(guī)問題,否則不太會(huì)跳車的?,F(xiàn)在這方面,現(xiàn)在已經(jīng)比Fuchsia晚了。
再看看,大家對(duì)開源社區(qū)的建設(shè)進(jìn)行時(shí)
這是fuchsia 主分支上 commit的活躍度,今天是周末,過去26小時(shí)內(nèi)的commit情況
相對(duì)比的 open harmonyos 到現(xiàn)在為止,快9個(gè)月了,一共才468個(gè)commit ,這個(gè)活躍度,實(shí)在不敢恭維
你可以說大部隊(duì)在開發(fā) harmonyos2,那我們對(duì)比一下只針對(duì)IoT領(lǐng)域的國產(chǎn)操作系統(tǒng)RT-Thread,他們總共有11727個(gè)commit,RT-Thread 僅僅5月份一個(gè)月就 150個(gè)commit!
在開源社區(qū)方面,不要說打敗fuchsia了,打敗RT-Thread還有點(diǎn)距離。
3.腳踏實(shí)地,培養(yǎng)這個(gè)社群需要大量的開發(fā)人員
Fuchsia的OS開發(fā)了快6年了,不少主創(chuàng)開發(fā)人員都干了快20年內(nèi)核了。
我們可以簡(jiǎn)單估算一下,要搞出一套真正的跨平臺(tái)系統(tǒng)。這是一個(gè)浩大的工程,需要海量的工程師,在5年內(nèi)趕上Fuchsia的生態(tài)系統(tǒng)。光合格開發(fā),測(cè)試人員,至少需要2萬人以上(這都是那種跳出來隨便隨隨便便年薪30萬以上的那種人才)。
所以,一方面需要培養(yǎng)大量的年輕人才。如果是國家意志。那么現(xiàn)在從大學(xué)開始就要培養(yǎng)大量相關(guān)專業(yè)人才。
另外一方面,為那些腳踏實(shí)地安心干活的人員提供合適的空間。比如Fuchsia中留下開發(fā)者名字的主創(chuàng)人員,有一個(gè)是Travis Geiselbrecht,這個(gè)家伙
Zircon內(nèi)核 tech leader
這個(gè)家伙44歲了,還是一個(gè)IC,level在Google內(nèi)部是L6。但是它能在 OS這個(gè)領(lǐng)域里面深耕20多年。沒有35歲的危機(jī),沒有那么多事情。
而國內(nèi)現(xiàn)在有個(gè)非常不好的趨勢(shì),就是年齡歧視,很多地方對(duì)35歲當(dāng)不上領(lǐng)導(dǎo)的員工就優(yōu)化。這是一種非常有害的行為。我也希望,在國家攻關(guān)統(tǒng)一操作系統(tǒng)的時(shí)候,能夠認(rèn)真培養(yǎng)人才,尊重人才。拿出鄧總的勇氣,不管是白貓還是黑貓,不管是小貓還是老貓,逮到老鼠才是好貓。
好多年沒有看這些底層代碼了,翻了翻,感概萬千。
如非特殊情況,這個(gè)話題over了。
聯(lián)系客服