嚴格說來,蘋果很可能是計算機工業史上,唯一一間核心元件平台「搬家成功」的公司,且還是駭人聽聞的「孟母三遷」(6502→68K,68K→PowerPC,PowerPC→x86),反觀歷史更多屍橫遍野的失敗案例。光從這點就足以感覺到這浩大工程一點都不簡單,建造困難度甚至直逼世界奇觀等級。
高科技產業也有「孟母三遷」1977 年,「開啟個人電腦革命」的 A.pple II 使用 8 位元 6502 處理器,任天堂紅白機 Ricoh 2A03 是「遠親」,超級任天堂 65C816 則是 16 位元版的 6502。
1984 年,蘋果第一台 Mac 個人電腦採用 32 位元 Motorola 68000 處理器,有點年紀的電玩狂熱者應該也依稀記得,1980 年代大量家用遊戲主機(如俗稱「Sega 五代」的 Mega Drive 和貴到爆炸的 SNK NeoGeo)與大型電玩街機的心臟,就是 68K 系列處理器,創造 SPARC 和 Solaris 的商用 Unix 王者 Sun、象 徵 MIPS 的繪圖霸王 SGI、賈伯斯被蘋果開除後創辦的 NeXT,最早也都是選擇 68K 當引擎,而不是 IBM PC 看起來超像醜小鴨指令集架構又「毫無道理可尋」的 80×86,更無人預見假以時日 x86 不再是昔日吳下阿蒙的未來。
1994 年,蘋果、IBM、摩托羅拉三家結盟,成立看起來很像美軍空對空飛彈型號的「AIM 聯盟」推動 PowerPC,當時陷入市場危機(那時慘到坊間不乏「蘋果轉型為純軟體公司」呼聲)的 Mac 也隨之改用 PowerPC 處理器,趁機搭上 IBM 積極發展 Power 的順風車。
2003 年蘋果推出搭載 PowerPC 970(衍生自原生雙核的 64 位元 IBM Power4)的 PowerMac G5,2004 年 PowerMac G5 / Xserve G5 / iMac G5 升級為 90 奈米製程的 PowerPC 970FX,2005 年再改進為原生雙核心的 PowerPC 970MP,但也就止步於此,因為這些來自 IBM 或摩托羅拉的高性能 PowerPC「無法滿足筆電需求」,當初許諾 PowerMac G5 上市後 12 個月處理器時脈可達 3GHz 的支票也跳票,就算畫大餅的產品時程表,跟著英特爾一起三太子上身狂衝時脈也無濟於事,高階 PowerPC 隨著 970GX 腰斬而停擺。
2005 年,因「對 IBM 產品開發進程失望」,賈伯斯在 WWDC 正式宣布平台轉移計畫,從 PowerPC 轉進英特爾 x86 處理器,第三次更改旗下產品的處理器架構,2006 年陸續推出「Intel Inside 但機殼從來沒有出現這張貼紙」的 Mac 產品線,IBM「Power Everywhere」戰略從此失去最大的盟友,寄望蘋果成為「分母」分攤高階處理器研發成本的如意算盤成為空響,而威鎮四方的 Power5 核心也無緣幫助蘋果締造 SPEC CPU 效能數據的新高峰。
無獨有偶,2005 年正是英特爾以 P6 血統的 Merom 微架構當作攻擊發起線,對 AMD 發動帝國大反擊的關鍵時刻。
不起眼的綻放結晶,逐漸茁壯成皇冠上的寶石2008 年,第一代 iPhone 才剛問世沒多久,蘋果就以 2.78 億美元代價,購併半導體設計公司 P.A Semi,但 2007 年 iPhone 銷售額僅占不到蘋果全年營收 1.4% 的 3.67 億美元,無論怎麼看,這賭注實在有點太大。
2010 年,iPhone 4 與第一代 iPad 的 A4 處理器,總算讓蘋果的投資沒有白白丟到水裡,而接著十年,一代又一代蘋果 Ax 家族應用處理器,一再一再以驚異的效能表現震驚業界,如果說蘋果是手機與平板世界的國王,iPhone 和 iPad 就是皇冠,這些蘋果自家打造的 SoC,真不愧「皇冠上的寶石」之譽。
從 2013 年「業界首顆 64 位元行動處理器」A7 誕生一路到 2020 年今日,「改用 ARM 處理器的 Mac」就像流感,每隔一段時間就在各大科技媒體「集體發作」,但也一直停留在臆測和謠言,就像傳說中的尼斯湖水怪,遲遲沒有成為呈現在世人眼前的現實。
「無痛轉換」從來就不是容易的事更換處理器架構看似容易,但資產和包袱往往是硬幣的兩面,確保現有應用軟體依舊可用並逐步移轉到新架構,才是真正的大難題。
相信很多人在認識「虛擬化」之前,很可能就因琳瑯滿目的遊戲機模擬器,就聽過 Emulator(模擬器)與 Simulator(仿真器)這兩個難以理解差別的專有名詞。講簡單點,Emulator 主要是完全模擬 CPU 的運作方式,根據程式計數器(Program Counter)的值,從記憶體擷取指令,進行解碼並執行,而 Simulator 則是模擬系統的行為模式,例如模擬飛行中的駕駛艙按鈕與儀器。很明顯的,要轉換「電腦最基礎語言」的指令集架構,需要的就是前者。
但隨著 CPU 架構越來越複雜,指令數越來越多,要透過程式模擬 CPU 也越來越艱難(當年英特爾在 1990 年代初期開發 Pentium Pro 時,模擬驗證一個指令的時間竟然長達「一天」,那時 x86 指令集已經有將近 300 個指令),而反覆模擬一個接一個指令的「讀取→解碼→執行」流程,更不可能帶來能接受的執行效能,也因此,將二進位代碼「動態翻譯」為另一種指令集執行順序的 Binary Translation(二進位轉譯),變成最為可行的手段,想的單純一點,就好比一段不包含分支的基本程式區塊(Basic Block),轉換編譯成新指令集的二進位代碼,並「快取」起來以便日後重複使用。
當然,這絕對是極度耗費系統資源的過程,也勢必犧牲部分效能,但總好過一個一個指令慢慢跑,蘋果早在 68K 轉 PowerPC 時就導入這技術,資深果粉耳熟能詳的「Rosetta」則是 PowerPC 轉 x86 的二進位代碼轉譯器。
同場加映一下其他攝影棚的劇情,x86 指令集支援硬體虛擬化(Intel VT-x,AMD-V)出現之前,「全虛擬化」(Full Virtualization)的 VMware,特技就在VMM(Virtual Machine Monitor)「攔截」能在使用者模式(User Mode)更動底層系統狀態的「危險」x86 指令,再用 Binary Translation 替換成「人畜無害」者。
所謂的 x86「硬體輔助虛擬化」(Hardware Assisted)技術基礎原理,關鍵在於新增特權層級(Root Mode Privilege Level),讓這些沒有完善定義、難以虛擬化的 x86 指令一執行就「觸發」處理器的設陷(Trap)機制,再讓 VMM 處理,近似近代多工作業系統的例外處理機制,進而簡化虛擬機管理者(Hypervisor)的架構與複雜度,也藉由原生執行大多數指令以改善整體效能,無需像「半虛擬化」(Paravirtualization)方案,需更新作業系統使之「意識」到下面還有一個虛擬機管理者。
試圖消滅 80×86 的努力1996 年,也是當 Windows NT 作業系統同時支援不同 RISC 指令集時,DEC 發表了 FX!32 轉譯器,讓執行 Windows NT 的 Alpha 系統可執行 x86 平台的 Win32 應用程式,雖然號稱「可達到原生 40%~50% 效能,最佳化後 70%,然後同時期 Alpha 享有壓倒性的時脈優勢,足以抵消轉譯損耗而有餘」,但筆者親身在 COMPUTEX 會場的某攤位一親芳澤的使用者體驗卻不是這麼回事,印象大概就是日本人對新世紀福音戰士某些「靜態」場景的評價──「動畫是會動的畫面,但好像也有不會動的」,希望那只是偶發當機,不是真實效能。
但回過頭,如果時間可以重來,英特爾和 HP 知道日後可掌握「1992 年就以原生 64 位元問世,比我們手上曾經擁有的任何東西都還好」的 Alpha 處理器,放棄硬著頭皮發展 IA-64 指令集和 Itanium 處理器,順水推舟延續 DEC 的遺產,x86 指令集會不會就此逐漸消逝於伺服器與個人電腦的世界,還真的是個超級大哉問。
說到 Itanium 就不得不提到 IA-32EL(IA-32 Execution Layer),英特爾在初代 Itanium 處理器「Merced」(因近似 Mercedes Benz,常戲稱為「英特爾的 64 位元豪華房車」)耗費 30% 電晶體總數,只為了「硬幹」出效能不彰的 x86 相容性,還犧牲了日後支援新型 x86 指令(像持續膨脹的 SSE)的彈性,變成 Itanium 要「下放」到中低階伺服器市場的障礙。2004 年,英特爾被迫改絃易徹,轉向純軟體的動態二進位轉換方案。
如同日後的蘋果 Rosetta,IA-32EL 並非一個一個轉譯單一指令,而是將程式碼的基本區塊(Basic Block)直接轉換為對應的 IA-64 指令順序,這稱為「Cold Code Translation」。此外,IA-32EL 會收集所有基本區塊的執行頻率,針對常用部分,依據 IA-64 指令集的特性及基本區塊間的條件關聯,再進行一次最佳化轉譯,並儲存於主記憶體供日後重複使用,稱為「Hot Code Translation」。總之,IA-32EL 號稱可讓 Itanium 2 處理器執行 x86 應用程式時,得到和同時脈 Xeon 相當的效率,而軟體手段也確保日後持續支援新增 x86 指令的彈性。
換言之,RISC 的主要精神之一「Make The Common Case Fast」並非只限硬體,軟體亦同,而工作和生活又何嘗不是如此?所以「可讓我們經常碰到的日常工作跑得更快」的 80×86 就活下來了,Alpha 和 Itanium 成為只能供後人憑弔的歷史遺跡。
想偷吃豆腐卻偷雞不著蝕把米的勇者既然二進位轉換「蘊藏」了「撈過指令集邊界」的無窮潛力,除了應用在自家進行指令集轉移(像蘋果的孟母三遷、DEC 從 VAX 轉 Alpha、HP 從 PA-RISC 轉 IA-64、英特爾從 x86 轉 IA-64、SGI 從 MIPS 轉 IA-64),自然吸引眾多有志之士「吸納」其他平台應用軟體資源,企圖「鳩佔鵲巢」取而代之。
蘋果 Rosetta 技術基於 Transitive 的 QuickTransit,但早在 2004 年,這家公司的技術已應用在 SGI 的 Prism 虛擬化平台,讓執行於 Linux 作業系統的 Itanium 2 平台可延續 MIPS 處理器/IRIX 作業系統的應用程式。蘋果之後,IBM 也在 2006 年 8 月與 Transitive 結盟,讓 x86 / Linux 應用程式搬到 Power 系統(PowerVM Lx86)。
2006 年 9 月秋季 IDF(Intel Developer Forum),英特爾拉著「Itanium 解決方案聯盟」發表 ISV Platform Expansion Program,透過 Transitive 的 QuickTransit,推動既有使用 SPARC 處理器/Solaris 作業系統的用戶,轉移至 Itanium / Linux 平台,狂挖 SPARC 陣營牆角。不過很諷刺的,同年底的「SPARC / Solaris 轉移到 x86 / Linux 方案」似乎比較讓人感到興趣。
洋洋灑灑一大串,以上這些撈過界的「努力」,純粹以結果論而言,統統沒有成功。Transitive 在 2009 年 6 月被 IBM 併購,成為 Power 系統部門的一部分,碩果僅存剩下 PowerVM Lx86,蘋果也在 2011 年完成從 PowerPC 到 x86 的轉移工程,MacOS X Lion 時取消了 Rosetta。
至於在這段眾人一頭熱於「幫別人搬家到我家」的浪潮中,最駭人聽聞的八卦,莫過於 IBM「eCLipz」計畫:以超高時脈的 Power6 為起點,將誕生於 1964 年 S/360 的大型主機家族轉移到 Power,事後證明還好 IBM 沒有想不開進行如此明顯的自殺舉動,否則很多銀行大概會抖很大。
倒是有條線索值得靜觀其變:Transitive 的舊有團隊成員,散布在以下 3 個地方。
- BBC(英國廣播公司):BBC Micro 電腦是 ARM 第一個客戶,ARM 最初就是為 BBC Micro 及後續型號設計的。
- ARM:這就不需解釋了,這間公司不會放過挖 x86 牆角的任何可能。
- 蘋果:各位,難道你們沒有聞到一股可疑的味道嗎?
「天時」「地利」「人和」三者兼備了嗎?「蘋果用自己的 SoC 取代英特爾 x86 處理器」越看越像真的,比謠傳已久、眾人言之鑿鑿的美軍 8 倍音速偵察機「SR-91 極光」更確實,但整件事情有這麼單純嗎?
天底下任何奇蹟和慘劇,都是天時、地利、人和三者兼備的結果,為什麼當年蘋果可從 PowerPC 順利轉換到英特爾?
- 天時:英特爾正集中資源在兼具高效能低功耗 x86 處理器的研發,準備狠狠反擊 AMD,這讓蘋果無需擔憂 CPU 效能不足以吸收轉換損耗,和 CPU 過熱塞不進筆電的老問題。
- 地利:蘋果手握封閉平台的優勢,但又可以趁機搶奪 Windows 用戶。Xcode 2.1 提供產生通用二進位(通吃 PowerPC 和 x86)執行檔案的功能,主流應用程式紛紛採用這種方式發表,也降低了轉換門檻。
- 人和:那時 Mac 用戶是弱勢族群,衝第一個的白老鼠用戶也比較能忍受可能造成的不便,軟體開發者社群規模更遠遠不如現在,並沒有太沉重的歷史包袱,Macbook 銷售爆發與開發者人數激增,基本上是 2008 年夏天完成平台基本轉換、iOS 2.0 登場後的結果。
各位可能很難想像 20 世紀初期蘋果有多麼「毫不強勢」,筆者任職某 IT 週刊期間,借測了不少蘋果大產品,從 PowerMac G5 到雙核心版到 Xserve G5 甚至 Xserve RAID,每次蘋果原廠都是派兩三個人來現場支援,這在今天根本想都不用想。
即使萬事皆備,巨大的轉換工程也是從 2005 年一路到 2011 年才功德圓滿。那麼,當下蘋果是否具備同等的條件?
- 天時:英特爾正準備脫下褲子跟 AMD 拚了,我們幾乎可預期又將再度重演激烈程度回歸 1990 年代末期到 21 世紀初期的 x86 處理器效能軍備競賽,蘋果自家晶片目前頂多勉強與桌機處理器「平起平坐」的性能水準,是否足以填補轉換的損耗,並確保同樣良好的使用者體驗?
- 地利:蘋果是否願意放棄吸收 Windows 用戶的機會?別忘了全球個人電腦出貨量,蘋果占有率只有 7%。
- 人和:Mac 用戶已非弱勢族群(尤其年輕學生),開發者社群規模更是急速膨脹,硬著頭皮轉換下去,會不會動搖國本?
或著,也許蘋果根本就不在意要不要轉換,ARM 的 MacBook 鎖定完全不同的應用與客群,可是這樣一來,這跟搭配鍵盤「同為生產力工具」的 iPad 該如何區隔?
決定這問題的答案,恐怕只有蘋果是否打算讓 macOS 和 iOS 合而為一,依照這間公司的謹慎行事風格(除了 MacBook 的連接埠和蝶式鍵盤),我們應該還有得等,或許永遠等不到也說不定。