严格说来,苹果很可能是计算机工业史上,唯一一间核心组件平台“搬家成功”的公司,且还是黑人听闻的“孟母三迁”(6502→68K,68K→PowerPC,PowerPC→x86),反观历史更多尸横遍野的失败案例。光从这点就足以感觉到这浩大工程一点都不简单,建造困难度甚至直逼世界奇观等级。

高科技产业也有“孟母三迁”
1977年,“打开个人计算机革命”的Apple 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亿美元代价,购并半导体设计公司PA 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个地方。
“天时”“地利”“人和”三者兼备了吗?
“苹果用自己的SoC取代英特尔x86处理器”越看越像真的,比谣传已久、众人言之凿凿的美军8倍音速侦察机“SR-91极光”更确实,但整件事情有这么单纯吗?
天底下任何奇迹和惨剧,都是天时、地利、人和三者兼备的结果,为什么当年苹果可从PowerPC顺利转换到英特尔?
各位可能很难想象20世纪初期苹果有多么“毫不强势”,笔者任职某IT周刊期间,借测了不少苹果大产品,从PowerMac G5到双核心版到Xserve G5甚至Xserve RAID,每次苹果原厂都是派两三个人来现场支持,这在今天根本想都不用想。
即使万事皆备,巨大的转换工程也是从2005年一路到2011年才功德圆满。那么,当下苹果是否具备同等的条件?
或着,也许苹果根本就不在意要不要转换,ARM的MacBook锁定完全不同的应用与用户群体,可是这样一来,这跟搭配键盘“同为生产力工具”的iPad该如何区隔?
决定这问题的答案,恐怕只有苹果是否打算让macOS和iOS合而为一,依照这家公司的谨慎行事风格(除了MacBook的连接端口和蝶式键盘),我们应该还有得等,或许永远等不到也说不定。
(首图来源:苹果)