Oberon操作系統:一個被忽略的珍寶
推薦一篇很久以前看的文章:Oberon - The Overlooked Jewel,它介紹的是 Niklaus Wirth 設計的一種操作系統,叫做 Oberon。Niklaus Wirth 就是大家熟知的 Pascal 語言的設計者。絕大部分人都沒聽說過有 Oberon 這個東西存在,更難以把它跟 Niklaus Wirth 的大名掛上鉤。所以作者說:“Wirth 因為 Pascal 而聞名于世,可是接下來幾年,他成為了 Pascal 的受害者。” 確實是這樣。Wirth 一直都不覺得 Pascal 是他的杰作。我想他應該會更喜歡以 Oberon 聞名于世。
Oberon 比起 Unix,有很大的不同,在于它的數據都是結構化的。進程間不通過字符串交換數據,而是直接使用數據結構。很奇特的一點是,Oberon 操作系統是用一種同名的程序語言(Oberon 語言)寫成。令人驚訝的是,在那個年代,ETH 計算機系的所有教職員工,學生,包括辦公室的大媽,都是用的這種操作系統。
操作系統的設計,真是天外有天。
之所以找到這個系統,是因為我一直在試圖利用程序語言的設計原理,設計一種超越“Unix 哲學”的操作系統。這里是我的設想:
- 這種系統里面的程序間通信不使用無結構的字符串,而是使用帶有類型和結構的數據。在這樣的系統里面,“程序”的概念基本上完全消失。系統由一個個的“函數”組成,每個函數都可以調用另外一個函數,通過參數傳遞數據。每個函數都可以并發執行。
- 由于參數是一個數據結構,而不是字符串,這避免了程序間通信繁瑣的“編碼”和“解碼”過程。使得“進程間通信”變得輕而易舉。任何函數都可以調用另一個函數來處理特定類型的數據,這使得像 “OLE 嵌入”這樣的機制變得及其簡單。
- 所有函數由同一種先進的高級程序語言寫成,所以函數間的調用完全不需要“翻譯”。
- 由于這種語言不允許應用程序使用“指針運算”,應用程序不可能產生 segfault 一類愚蠢的錯誤。
- 由于沒有指針運算,系統不再需要現代處理器提供的“內存映射”機制,以及 TLB。這使得內存訪問效率大幅提高。而且簡化了處理器的設計。
- 操作系統使用與應用程序相同的高級語言寫成(可能需要支持一些“特權操作”),至于“系統調用”,只不過是調用另外一個函數。
- 操作系統的“shell”,不過是一個這種高級語言的 REPL。用戶可以在終端輸入各種函數調用,從而啟動進程的運行。
- 系統不需要 SQL,不需要關系式數據庫。所有的數據都作為“對象”,保存在一個分布式的數據空間。
- 系統不需要“文件系統”。所有的數據,包括“進程上下文”自動被“版本控制”,在合適的時候作為對象同步到磁盤。所以即使在機器掉電的情況,絕大部分的數據和進程能夠在電源恢復后自動繼續運行。
- 程序員和用戶完全不需要知道“數據庫”或者“文件系統”的存在。程序假設自己擁有無窮大的空間,可以任意的構造數據。
- 為了減少數據的移動,系統根據數據的位置,選擇: 1)遷移數據,或者 2)遷移處理數據的“進程”。程序員不需要使用 MapReduce,Hadoop 等,就能進行大規模并行計算。
- 這個操作系統是如此的“一致”,以至于所有的用戶和程序員,只需要學會一種很簡單的程序語言。
我曾經以為我是第一個想到這個做法的人。可惜的是,調查之后發現,很多人早就已經做出了類似的系統。Lisp Machine 似乎是其中最接近的一個。Oberon 是另外一個。我只能說,英雄所見略同。