Fuchsia是谷歌開發的一個操作系統,這是一個差不多從頭研發的新系統。2016年8月,Fuchsia的開發新聞在技術新聞網站上引發了轟動,不過很多細節依舊成謎。Fuchasia是一個開源項目,無論開發工作還是相關的文檔都還在持續完善中,除了該項目為開源之外,谷歌并未透露更多信息,包括其真正用途。根據零散分布在網上的文檔、源碼等信息,我們可以推測:Fuchasia是一個專為PC、平板電腦及高端手機所開發的一套完整的操作系統。
在源碼庫中可以下載到Fuchsia的源碼及所有組件,如果諸位喜歡探索實驗性質的操作系統,可以嘗試一下這個系統——非常有趣。Fuchasia包含一個內核,其頂層是使用者空間(User Space)組件,負責提供Library及工具。源數據庫中,在Fuchsia目錄的下面有許多子項目,主要都是協助開發者創建應用的資料庫及工具項目。Fuchsia大部分使用三條款BSD許可證(3-clause BSD license)授權,不過其內核是基于另一個項目Little Kernel(LK)建立的,而后者使用了MIT許可證,因此其內核的授權協議是混合型的。Fuchasia中包含的第三方軟件都是根據其各自的開源許可證進行授權的。
Magenta
Fuchsia的核心是Magenta microkernel,它負責管理硬件,并為系統的使用者空間組件提供抽象層,類似于Linux對GNU等項目的支持。而Magenta建立的基礎——Little Kernel則是Fuchasic的開發者Travis Geiselbrecht在加入谷歌前所研發的一個項目。LK的目標是要建立一個能夠運行在有限資源的微型嵌入式系統(類似于FreeRTOS或ThreadX)之上的小型內核,而Magenta則是針對更復雜些的硬件——想要允許的話,需要至少64 bit的CPU,配以一塊內存管理單元。因此,Magenta在LK的有限功能上進行了擴展,它使用了LK的“內部構造”,包含線程、互斥鎖、計時器、事件(信號)、等待隊列、信號及虛擬內存管理器(VMM)。在Magenta中,LK原本使用的VMM已經有了實質提升。
Magenta的一個關鍵設計在于運用了capability,這是一個計算機科學的抽象概念,封裝了訪問某個對象的權限。這一概念是1966年由Dennis和Van Horn首次提出的(點擊這里查看原PDF),指的是一個不可偽造的數據結構,在操作系統中擔任控制訪問權限的基元。在Magenta中,開發人員使用了capability的模型,以定義某個進程與內核、與其他進程的互動方式。
具體實現中,Magenta采用了名為handle的構造,只要有進程請求創建內核對象,就會自動生成handle,用于處理與該內核對象的“會話”,幾乎所有系統調用都需要通過handle來實現。handle包含與其相關的權限,也就是說它們定義了在使用時允許哪些操作。此外,handle可以通過進程復制或轉移。可授予handle的權限包括讀寫相關核心對象的權限,只要是虛擬內存對象即可,無論能否被映射為可執行對象。對于沙盒中的特殊進程來說,handle非常有用。因為經過調整,handle可以設置為僅允許對系統的某個子集可見、可訪問。
由于我們將內存作為可通過核心對象訪問的資源,各個進程可通過handle來獲得對內存的應用。在Fuchsia中創建進程,代表著一個負責創建的進程(比如shell)必須手動為子進程完成創建虛擬內存對象的工作——這一點與傳統不同:在傳統的Unix類內核,比如Linux中,內核會完成大部分的虛擬內存設置,自動處理進程。Magenta的虛擬內存對象可通過多種方式來映射內存,而且在進程執行中靈活性很高。甚至可以想象完全不對內存做映射的場景,在此場景下,通過類似文件描述符之類的handle,也可以對系統進行讀寫。盡管這種設置允許任何類型的創造性使用,這也意味著想要運行進程,需要通過使用者空間的環境完成許多的基礎架構工作。
由于Magenta是按照微內核來設計的,操作系統的大多主要功能組件也是當作使用者空間進程來運行的,其中包含驅動程序、網絡堆棧以及文件系統。最初從IwIP引導的網絡堆棧最終被Fuchasia團隊所編寫的用戶網絡堆棧所取代。網絡堆棧是一個中間性應用,簡于使用者空間的網絡驅動,以及需要網絡服務的應用之間,通過網絡堆棧,系統提供了一個BSD socket API。
默認的Fuchsia文件系統被稱為minfs,也是從零開發的。驅動管理器創建了根文件系統內存,為其它安裝在下面的文件系統提供虛擬文件系統層(VFS)。然而,由于文件系統是作為使用者空間的服務器來運行的,需通過服務器的相應協議來訪問。文件系統中的各個實例都包含后臺運行的服務器,以處理所有的數據訪問。借助使用者空間的C library,對于只進行調用以開關、讀寫文件的用戶程序來說,協議都是透明的。
Fuchsia的圖形驅動程序也作為使用者空間的服務存在,按照邏輯分為系統驅動以及應用驅動。兩者之間促進溝通的軟件層被稱為Magma,是一個提供合成與緩沖區共享的框架。繪圖堆棧的某部分即Escher,這是一個基于物理的渲染器,通過Vulkan來提供渲染API。
完整的POSIX兼容并非Fuchsia項目的目標,足夠的POSIX兼容性可通過C library來提供,C庫也是musl項目連接Fuchsia的端口。這樣一來,將Linux程序移植到Fuchsia系統會比較方便,但本身運行在Linux平臺上的復雜程序自然需要更多的工作。
實踐嘗試
可按照本文檔中的指南獲取自己的Fuchsia安裝程序并運行,方法十分簡單。該腳本設置了一個QEMU實例,大家可自行嘗試。它可以在模擬x86-64系統的q35或“標準PC“的機器上,以及模擬ARM-64系統的virt或Qemu ARM-64虛擬機上運行,也可以在真機上運行。可按照指南來安裝,針對機型包括配有Intel Skylake的Acer Switch 12寸筆記本、Broadwell超迷你電腦NUC(next unit of computing)以及Raspberry Pi 3。就目前來說,雖然通過兼容外設也能在類似的硬件上運行,但對這三款機器的物理硬件支持也十分有限。
目前,針對Fuchsia系統編寫應用的支持還不充分,還需要很長時間的開發和文檔構建。據了解,谷歌的Dart編程語言在該系統中有著廣泛應用,而基于Dart、針對iOS和Android的移動應用框架Flutter的SDK就被移植到了這個系統中,似乎是創建圖形應用程序的主要方式之一。負責窗口繪制以及用戶輸入的compositor叫做Mozart,基本上相當于Linux上的Wayland/weston。
當引導Fuchsia OS進入圖形模式時,我們可以看到在帶有選項卡的圖形環境中包含了五個dash shell。第一個標簽展示的是系統消息,后面三個是可以在Fuchsia環境中啟動應用程序的shell。最后一個標簽是Magenta shell,里面的內容更為基礎簡單,由于缺少Fuchsia環境,無法通過它來運行圖形應用。標簽可以通過Alt-Tab來切換。
目前這套操作系統能夠運行的程序并不多,用戶組件的大多內容仍在積極地開發中。可以運行的案例應用包括一些命令行程序,比如經典的Unix fortune,還有一個能在屏幕上繪制旋轉方塊的圖形應用,叫做spinning_square_view。盡管目前來說內容確實有限,不過敬請持續關注Fuchsia的資源庫,開發者正在積極更新,以便讓這個系統功能更加豐富。相信很快就有更多功能可以嘗試。
結論
看到有新的操作系統出現,并且還需要很多開發工作才能逐漸完善,并投入使用總是頗有趣味。Fuchsia還不完善,但目前看來發展的方向是正確的。由于谷歌在這個項目中投入了許多資源,目前針對Magenta以及其它Fuchsia組件的開發都非常活躍。對大眾來說,所有承諾的功能都是能夠實現的。不過目前信息還不夠,想要了解項目的確切方向也有些困難。敬請大家關注這個新的開源項目,相信很快就有更多內容填充進來。