📅 撰寫於:2026 年 7 月
⚠️ 引用自 Bell Labs 原始文件及開發者筆記


如果我問:「世界上最厲害的作業系統是什麼?」——你可能會回答 Linux、macOS 或 Windows

但如果問 Ken Thompson 和 Dennis Ritchie——這兩位創造 Unix 的人——他們會回答 Plan 9

Plan 9 是 Bell Labs 在 80 年代末至 90 年代初,由同樣打造 Unix 的團隊所開發的全新作業系統。它不只是「新版 Unix」,而是徹底的重新開始

儘管如今幾乎沒有人在使用 Plan 9,但它的概念已融入你所使用的每一套作業系統


起點——「Unix 已開始老化」

Unix 累積的問題

Unix 誕生於 1969 年——當時電腦是一台機器連接多個終端機

到了 80 年代,世界改變了——網路成為常態、圖形介面開始重要、分散式運算開始出現

但 Unix 並非為這些而設計。它被不斷修補、延伸、改造——直到變得過於複雜,連它的創作者也無法引以為傲

Ken Thompson 曾說過:「Unix 起步時很簡單,但它逐漸累積複雜性——是時候重新開始了」

為什麼叫 Plan 9

「Plan 9」這個名字來自 Ed Wood 於 1959 年執導的經典 B 級片《Plan 9 from Outer Space》——被譽為「史上最爛的電影」

但這個名字並不代表這套作業系統很爛——這是 Bell Labs 團隊的內部笑話,他們喜歡取奇怪的名字(Unix 本身也是個玩笑——它嘲諷 Multics)


Plan 9 的核心——「一切皆是檔案」徹底實現

從 Unix 到 Plan 9——徹底貫徹到底

Unix 有個著名概念:「everything is a file」

  • 檔案系統是檔案 → /home/user/document.txt
  • 裝置是檔案 → /dev/sda/dev/tty
  • 程序是檔案 → /proc/1234

但它有例外——網路 socket、圖形、視窗系統——這些在 Unix 裡不是檔案

Plan 9 把這個概念推向極致——在 Plan 9 中,一切皆是檔案,沒有例外

9P——連接一切的單一協定

Plan 9 的核心是 9P——讓所有事物都透過檔案系統溝通的協定

GUI 視窗 → mount 成檔案
網路連線 → mount 成檔案  
網路上的其他機器 → mount 成檔案

Enter fullscreen mode Exit fullscreen mode

試想:你可以像查看本地磁碟一樣 ls 其他機器上的檔案——完全不需要 NFS、Samba 或任何複雜設定

實際例子: 如果我在 Plan 9 中開啟編輯器(acme)——這個視窗就是 /mnt/acme/ 中的檔案。你可以執行 echo "hello" > /mnt/acme/body,文字就會立刻出現在編輯器中

Plan 9 的圖形介面不是「在螢幕上繪圖的程式」——它就是「碰巧能以圖形呈現的檔案系統」

Namespace——每個程序的私人視角

在 Linux 中,每個程序看到的是同一個檔案系統

在 Plan 9 中,每個程序都有自己的 namespace——你可以掛載、卸載、重組檔案系統,而不影響其他程序

程序 A:/bin → /usr/local/bin
程序 B:/bin → /remote/machine/bin

Enter fullscreen mode Exit fullscreen mode

這兩個程序看到的是不同的檔案系統——但它們在同一台機器上執行

這個概念就是 Linux namespaces 的起源,如今被 Docker 和所有容器使用


Plan 9 的生活體驗——介面是什麼樣子

Rio——沒有標題列的視窗

Rio 是 Plan 9 的視窗系統——極簡到極致

沒有工作列、沒有桌面圖示、沒有最小化按鈕——只有你用三鍵滑鼠操作的視窗

  • 左鍵 = 選取文字
  • 中鍵 = 執行(執行選取的文字)
  • 右鍵 = 選單(New、Resize、Delete 等)

實際使用情境:

你開啟終端機視窗——輸入 ls -la——結果顯示在視窗中。你用滑鼠左鍵選取檔案名稱 → 按中鍵 → Plan 9 會自動將該檔案作為下一個指令的參數

或是在編輯器中:你輸入 man 9p → 選取 → 按中鍵 → man page 視窗立刻出現

核心概念是:你不需要複製貼上——只需選取並執行任何選取的內容都可以成為指令

這與我們今天的使用體驗截然不同——沒有剪貼簿、沒有 Ctrl-C/Ctrl-V——但一旦習慣,它更快、更自然

Acme——不僅是編輯器

Acme 是 Rob Pike 打造的傳奇文字編輯器——它就是「以滑鼠控制的超文本視窗」

  • Acme 中的每個字詞都是可點擊的連結
  • 你可以在緩衝區輸入 shell 指令,然後點擊執行
  • 開啟的每個檔案都是可以用滑鼠手勢操作的視窗

Acme 在今天看來很原始——但它是現代 IDE 的原型:程式碼 + 終端機 + 檔案瀏覽器都在同一個視窗

Plumbing——D-Bus 出現前的訊息匯流排

Plumbing 是 Plan 9 中程序之間的訊息傳遞系統

你點擊 URL → 它會傳給瀏覽器
你點擊錯誤訊息 → 它會開啟該行的檔案

一切都透過檔案連接——而 plumbing 就是能讀寫訊息的特殊檔案


Plan 9 的遺產——至今仍存續的事物

1. UTF-8——誕生於一家餐廳的餐巾紙上

1992 年的某個夜晚——Ken Thompson 和 Rob Pike 在紐澤西一家餐廳吃飯

他們討論當時電腦世界有數百種編碼——ASCII、Latin-1、Shift-JIS——每種只支援一種語言

兩人拿起餐巾紙,設計出 UTF-8——向後相容 ASCII 且支援全球所有語言的編碼

如今 UTF-8 被用於全球 98% 的網站

它是在開發 Plan 9 期間,由 Plan 9 團隊設計的

2. /proc 檔案系統——起源於 Unix,但 Plan 9 讓它成為我們今天使用的樣子

Linux 使用者熟悉 /proc——存放程序資訊的檔案系統:

cat /proc/cpuinfo    # 查看 CPU
cat /proc/meminfo    # 查看記憶體

Enter fullscreen mode Exit fullscreen mode

/proc 最早出現在 Unix 第 8 版(1984),由 Tom Killian 提出,他在 1984 年 6 月的 USENIX 發表論文《Processes as Files》,甚至早於 Plan 9 開始開發

但 Unix 8 的 /proc 是扁平的——一個程序對應一個檔案

Plan 9 延續並發展這個概念——讓每個程序成為目錄,包含多個子檔案(可用 ls 查看、cat 讀取)——成為我們今天使用的階層式 /proc

Linux 繼承了這個階層模型——如今 /proc 已成為標準

3. Linux Namespaces——所有容器都源自 Plan 9

Docker、Kubernetes、所有容器——都使用 Linux namespaces 來隔離程序

「每個程序擁有不同系統視角」的概念——源自 Plan 9

簡單來說:Plan 9 在 80 年代末就已思考 per-process namespace——而作為 Docker 和所有容器基礎的 Linux namespaces,直到 2008 年左右才出現在核心,晚了將近 20 年

4. Go——繼承 Plan 9 DNA 的程式語言

Go 由 Rob Pike、Ken Thompson 和 Robert Griesemer 共同開發——三人皆曾參與 Plan 9

Go 充滿了來自 Plan 9 的概念:

  • Goroutines——輕量執行緒 → 源自 Plan 9 的輕量程序
  • Channels——透過訊息傳遞溝通 → 源自 9P 和 plumbing
  • Gofmt——所有人寫出相同風格的程式碼 → 源自 Plan 9「只有一種最佳方式」的理念
  • Static binary——編譯成單一檔案 → 源自 Plan 9 的二進位檔

Go 就是 Plan 9 以程式語言形式重生


為什麼 Plan 9 未能成功

無法解決的問題

  1. 雞生蛋問題——沒有應用程式因為沒有使用者 → 沒有使用者因為沒有應用程式
  2. 授權問題——90 年代 Bell Labs 多次易手(AT&T → Lucent → ...),使 Plan 9 的授權變得複雜
  3. Linux 已勝出——當 Plan 9 開始穩定(90 年代中期),Linux 正快速成長且擁有更大的生態系
  4. 硬體支援——Plan 9 支援的硬體遠少於 Linux/Windows

但核心問題是:Plan 9 並非試圖「比 Unix 好一點」——它試圖「徹底革新」

而世界並不準備為了新想法而更換整個作業系統——即使這些想法更好


2026 年的 Plan 9

Plan 9 仍然存在——以 9front(社群分支)和 Plan 9 from User Space(在 Linux/macOS 上的工具移植版)形式存在

有一小群狂熱者將 Plan 9 作為日常使用系統——人數雖少,但充滿熱情

Plan 9 曾經提出的每個概念——都在 20 年後被重新實現在 Linux 中


Plan 9 教給我們的啟示

「好的想法不一定會勝利——但它會被偷走」

Plan 9 作為產品失敗了——但作為概念卻成功了

每一個在 Kubernetes 上執行的容器...
每一個透過網路傳輸的 UTF-8 位元組...
每一個在雲端運行的 Go routine...

它們都帶有 Plan 9 的 DNA


資料來源:Bell Labs Technical Journal、Plan 9 手冊頁、Rob Pike 個人部落格(herpolhode.com)、9fans.net、維基百科