跳轉到

3.3 學術界的斷言:「在 x86 上實現高效虛擬機是不可能的任務」#

一句話的殺傷力#

1990 年代,如果你想申請研究經費做「x86 虛擬機」,很可能收到這樣的審查意見:

「此架構不滿足 Popek–Goldberg 虛擬化條件,無法高效虛擬化,研究方向不成立。」

這不是刁難,而是根據 1974 年定理與 x86 體檢報告的合理推論。問題在於:這個「合理推論」在口耳相傳的過程中被壓縮成一句口號——

「x86 不能被虛擬化。」

科學傳播的經典悲喜劇:定理說的是「不滿足 A 條件的架構,不存在『僅靠陷阱式』的高效 VMM」,傳著傳著就變成了「不可能」。而實際上,定理從未禁止非陷阱式的方法——比如二進制翻譯。

文獻考古:斷言的譜系#

這句斷言背後有一條清晰的文獻鏈:

  1. 1974 年,Popek & Goldberg:提出形式條件與三分法。x86 尚未普及,但標準已立。
  2. 1978–1980 年代, Goldberg 與學界回顧:虛擬機研究降溫,大型機之外少有人關注條件的滿足與否。
  3. 1980–90 年代,教科書定型:作業系統教科書(如 Tanenbaum 等)與課堂講義把「x86 不滿足虛擬化條件、含非特權的敏感指令」寫成標準敘述——對的敘述,但簡化成了一種「已結案」的口吻。
  4. 1990 年代末,業界常識:連 Intel 的架構文件都以「x86 保護模型非為虛擬化設計」的姿態回應相關提問。

斷言如何自我強化#

「不可能」的口號之所以牢不可破,是因為它獲得了三方共識的加持:

學術界:定理在手,判決已下 → 沒有研究動機
Intel:市場上沒有虛擬化需求 → 沒有改造動機
微軟:Windows 是封閉原始碼 → 沒有半虛擬化的可能

三方都基於自己的合理立場得出同一結論——共識成了牢籠。這在科技史上反覆出現:

  • 「全世界只需要五台電腦」(IBM 傳聞中的名言);
  • 「640K 記憶體對誰都夠用」(比爾·蓋茲否認說過,但時代的確這麼想);
  • 「x86 不能虛擬化」。

漏洞藏在定理的縫隙裡#

重讀 1974 年的論文,你會發現它其實留下了兩扇門:

門一:定理只談「陷阱式」VMM#

定理問的是「是否存在僅靠硬體陷阱運作的 VMM」。它沒有禁止 VMM 在指令執行之前動手腳——也就是把 guest 的機器碼先翻譯成等價、但可被 VMM 控制的版本。這正是 DBT(動態二進制翻譯)的合法性依據。

門二:翻譯只需處理「少數」指令#

x86 不可虛擬化指令雖惡名昭彰,但只占指令流的極小比例。絕大多數指令(加減跳躍載入儲存)都是良性、可原生執行的。如果能「只翻譯受污染的片段、其餘原生執行」,理論上可以逼近原生速度。

換言之:「不可能」的斷言,其實只是「陷阱式方法不可能」。 但 1990 年代的學界沒有動力去摳這個字眼——直到有人不需要學界的許可。

斷言終結者登場前的世界#

1997 年前後的世界圖景:

角色 立場
學界 「x86 不可虛擬化」寫進講義,無人挑戰
Intel 忙於與 AMD 的競爭與多媒體指令集,無意改造 x86
微軟 Windows NT 支援多 CPU、多 OS 競爭中,對 VM 概念冷漠
業界客戶 正陷入「伺服器蔓延」的運維噩夢,卻不知道解藥已經存在
SoftPC 等模擬器 證明翻譯可行,但效能慘烈,被視為玩具

四個不可能、一個玩具、一個待解的痛點。

這就是 1998 年之前的世界。下一章,兩個史丹佛人——一個教授、一個博士候選人——將用一篇論文和一家車庫公司,把這句「不可能」撕成碎片。

歷史關聯:這是本書的第一個重大轉折,也是科技史最迷人的母題之一:斷言不是被論文駁倒的,而是被產品碾過的。 學界的共識、Intel 的常識、微軟的直覺,都將在 1998 年 2 月那個 demo 面前集體破產。