Plan9:一個從0開始考慮分佈式,分佈appmodel的os設計

本文關鍵字:plan9,Inferno,limbo,Plan 9 from User Space:plan9portlinux

在《除了UNIX,咱們真的有可選的第二開源操做系統嗎?》中,咱們講到那些傳統的os之爭是集中於遊戲好很差支持,桌面好很差體驗,發行夠不夠流行,整體好很差用這些方面。而從x86 cpu從0開始的抽象全棧,他們都是同樣的 ------- 換言之,某種意義上他們都是同樣的OS。web

這種共同點在於哪裏呢?對於最終的APP和APP開發來講,它們都是基於單PC+單PC下網絡程序設計的。因而在這種架構下有了咱們如今到處見到的web,雲,—— 咱們發現,當今的集羣和分佈式是放在雲這個普化架構來作的:集羣就是好多好多的PC經過網絡計算起來,附帶一些PC監控節點 —— 它們仍是PC,在每一臺PC內部運行的APP,都是從socket開始(更抽象一點,也許還有DCOM,消息件)的「雲」程序:這種程序其實仍是網絡程序,這種總架構下的APPDEV,以OS來看,其實本質都是單機環境下網絡交互的程序。shell

而這些都不是究極的分佈式和分佈式開發設計。編程

在《一種開發發佈合一,語言問題合一的shell programming式應用開發設想》中,咱們講到了對於任何programming的設想,其實都是一個四棧從0開始疊加的設計。每個appmodel,都是從hardware從0抽象來的,OS是大件。——— 把這種源頭儘早控制在OS的源頭,則每個OS和單機則都自然具備雲屬性。包括開發。就獲得了創新的appmodel設計 — p9,它是一個統一問題,語言,平臺的總設計:微信

Plan 9不是一個很知名的做品,可是它的前身Unix是世人皆知的。而Plan 9是Unix的幾位做者在AT&T職業生涯的一件巔峯之做,是被設計來超越Unix的。
實際上,Plan 9在1992年第一次發佈時,就同時實現了Google Docs、Dropbox、Github、Remote Desktop等目前很火爆的互聯網產品的功能。
Plan 9能作到這些,是由於它把全部內容都註冊到一個稱爲9P的文件系統裏。
舉個例子,一個Acme編輯器進程會對應9P中的一個目錄acme——咱們能夠用9p ls acme命令看到這個目錄;這個編輯器中的每一個窗口對應一個子目錄,而窗口標題,編輯內容分別是這個子目錄裏的文件——咱們能夠經過修改文件內容(好比經過調用一個shell script)來改變標題和編輯內容。
由於9P是個分佈式的文件系統(相似後來的Google GFS和Hadoop HDFS),因此無論用戶身在何處(公司、家裏、旅館、咖啡館)都能看到同一個文件系統。甚至能夠在家裏的電腦上修改辦公室電腦上運行的一個ACME的某個窗口裏的內容。或者回家以後,讓家裏的電腦上運行的ACME訪問辦公室電腦上的ACME對應的目錄,就看到了和辦公室電腦上一樣的界面——比遠程桌面加上Dropbox更加遠程桌面和Dropbox。
Plan9沒有推廣起來,一個緣由是它的思想太過領先——在用戶尚未意識到存在這樣的問題的時候,就把問題解決了。網絡

9p,every problem/app is file io,這也是咱們在《bcxszy series》中一直在尋求的分佈式方案。架構

plan9的曲線迴歸

開發是源於平臺到語言到問題的總工程,由設計貫穿,設計包括對OS的設計,OS下編程自己的設計,OS下編程語言的設計,編程方法的設計。—— 因此,先哲學後理論再實現的思路沒有錯。app

9p下的語言。也異於常類。它使用專有的語言limbo做爲app langsys,使用c做爲toolchain。socket

Inferno操做系統是Plan9的姐妹操做系統。它的思想和Plan9基本相同,都是基於文件的。可是它只有內核是C編寫,其餘的應用程序都是Limbo編寫的。因此它和Plan9不一樣的地方就是在這個系統上運行的程序都是Limbo程序而不是C或C衍生程序了。後來Rob Pike又開發出的Go語言有一些地方的思想就是借鑑於Limbo語言。編程語言

Go是limbo語言在linux的再生者,Go 語言的實現帶有9p的深重痕跡,即便在x86上,也使用Plan 9的彙編器,爲了實現所謂的語言自舉,硬是繞開glibc去本身用匯編封裝linux系統調用。可見plan9一開始就想徹頭徹尾的自立門戶,對傳統OS和GNU沒有任何依賴。

雖然歷史上都選擇了C family as toolchain和unix as os,沒有選擇9p和limbo,go,然而這不是9p的錯。是工業和市場的錯。

plan9 under linux

雖然歷史上都選擇了C family和unix,沒有選擇9p,但9p能夠是一種附加而不是替代。bell labs的9p是主,其支流也有一些。在linux下使用9p的方案,有Plan 9 from User Space:plan9port

或許咱們之後在新ebcolinux rootfs 設計中編譯plan9port,咱們用plan9 under linux,terracing for go


(此處不設回覆,掃碼到微信參與留言,或直接點擊到原文)

Plan9:一個從0開始考慮分佈式,分佈appmodel的os設計

相關文章
相關標籤/搜索