3.3 學術界的斷言:「在 x86 上實現高效虛擬機是不可能的任務」#
一句話的殺傷力#
1990 年代,如果你想申請研究經費做「x86 虛擬機」,很可能收到這樣的審查意見:
「此架構不滿足 Popek–Goldberg 虛擬化條件,無法高效虛擬化,研究方向不成立。」
這不是刁難,而是根據 1974 年定理與 x86 體檢報告的合理推論。問題在於:這個「合理推論」在口耳相傳的過程中被壓縮成一句口號——
「x86 不能被虛擬化。」
科學傳播的經典悲喜劇:定理說的是「不滿足 A 條件的架構,不存在『僅靠陷阱式』的高效 VMM」,傳著傳著就變成了「不可能」。而實際上,定理從未禁止非陷阱式的方法——比如二進制翻譯。
文獻考古:斷言的譜系#
這句斷言背後有一條清晰的文獻鏈:
- 1974 年,Popek & Goldberg:提出形式條件與三分法。x86 尚未普及,但標準已立。
- 1978–1980 年代, Goldberg 與學界回顧:虛擬機研究降溫,大型機之外少有人關注條件的滿足與否。
- 1980–90 年代,教科書定型:作業系統教科書(如 Tanenbaum 等)與課堂講義把「x86 不滿足虛擬化條件、含非特權的敏感指令」寫成標準敘述——對的敘述,但簡化成了一種「已結案」的口吻。
- 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 面前集體破產。