来源:财经自媒体
来源:金捷幡
害怕被说蹭热点,所以等了小一个月发表这篇文章。期间无数媒体铺垫盖地,信息通货膨胀到爆,但有价值的内容却寥寥无几。
本文通过追根溯源和道听途说,从“纯技术”层面探讨了鸿蒙演化到今天“不得已”的现状。
一、实验室
鸿蒙是个品牌,背后是n套核心的n套系统的组合。
鸿蒙中的关键曾经是方舟编译器,鸿蒙的开发代号还叫过Ark(方舟)。由于方舟团队的几位离职负责人在网上写过回忆录,所以我们能拼凑出当初发生了什么。
华为实验室有个了不起的组织架构,就是把研发实验室设到全球各地,这样那些不想到深圳工作的牛人可以安心在本地,不用拖家带口。
当然猎头也更方便,不少实验室设在其它巨头旁边。
从基站上的DSP到后来的麒麟和鲲鹏,华为自建编译器团队越来越必要,来实现性能的优化到自有指令集等等。
世界软件的灯塔在硅谷,所以华为编译器团队就在美研所组建。中国软件的灯塔之一在杭州,国内编译器团队集中在杭研所。
美研所在年请到Open64编译器的总架构师周志德老爷子。也许由于Open64日暮西山,而苹果支持的LLVM如日中天,不服气的周老和小伙伴们做起Maple编译器,这就是方舟的前身。
Maple为什么改叫方舟,网上众说纷纭。一种说法是周老的英文名字FredChow谐音就是“方舟”;另一种说法是世界大难来了要方舟来救命,这和实验室的名字吻合。
在孟晚舟被Maple国扣留以后,改名字更是大势所趋。不过到今天方舟大量文件名仍保留了Maple或Mpl等。
华为美研(Futurewei)在美帝制裁后,出现了个法律悖论。因为Futurewei是美国公司,美帝没法制裁,但它能限制Futurewei向母公司输送技术,后来华为员工好像也不被允许进入Futurewei。
大概因为如此,华为对开源模块的合规非常谨慎,毕竟来自美帝的即使是外部的贡献都得考虑删改。如果这是“按揭开源”的原因之一,我觉得特别能体谅。
二、编译器的进攻方向
现代高级编译器多是三层架构:前中后端。前端是翻译各种语言,中端优化,后端对应出不同类型CPU的机器码。中间优化的过程,经常用IR来表示,比如MapleIR。
周老设计Maple的初衷据说是前端用Javascript,即MapleJS,这样可以实现跨平台和在轻量化的智能iot设备上运行和优化。
机缘巧合,华为消费者事业群(CBG)在努力实现对阵友商的安卓差异化时,想到静态编译Java来实现速度上超越竞争对手,立项联合的几个团队一起攻坚MapleJava。
虽然大家都知道Java虚拟机开销很大,安卓代码翔山也多,但挑战Google里顶尖高手们连续优化了10年的虚拟机(ART),这个想法可以说无比大胆。
后来的事实证明,MapleJava这个思路有点天真了。
三、MapleJava的碰壁
MapleJava1.0(即方舟1.0)可以说比较成功,它验证了部分静态编译的app可以比在谷歌虚拟机上跑得快。
此时刚好碰到美帝的无端制裁,所以余总裁高调宣布了鸿蒙和方舟编译器。但这时,MapleJava只是实验室产品。
接下来,方舟2.0的任务就清晰了,编译适配各种商用APP和优化方舟runtime。
大量兼容性的困难随之而来,安卓十年的生态显然不是一个编译器就可以随便破掉的。大家发现方舟runtime即使替换掉ART,也无法完全绕开安卓核心服务。
这样,因为无法完全摆脱了安卓,整个这件事的*治价值大幅度降低了。
更重要的是,抛开各种bug和兼容性等负面因素,方舟编译过的App比标准安卓App在速度上的差异并没有预期那么大,在两者都足够流畅的情况下,意义在哪里呢?
从今天看,MapleJava的方案被搁置。这也许是这百人团队中很多离职的原因。
客观地说,MapleJava是一次很牛逼的尝试,起码绕开了谷歌虚拟机。遗憾的是,MapleJava的相应runtime没有完全开源,这使得开发者们没法继续发掘静态编译Javaapp的潜力。
就在前几天,微软最新的Windows11宣布采用英特尔Bridge编译器在x86上原生支持安卓App。
四、鸿蒙对标谁?
MapleJava的不顺利,导致了后来一系列宣传上的困境,整个鸿蒙的战略给社会带来很多误解。
华为坚持说开源鸿蒙(LiteOS,后叫OpenHarmony)和手机鸿蒙(HarmonyOS)之间是有关联的,虽然两者内核都不一样。我们探究这种关联很可能指方舟和通讯协议。
早期方舟的开源也许更重要,这毕竟实际展示了挑战巨人的勇气。方舟开源包括了MapleC,这勉强可以看到对标Clang-LLVM-苹果Swift的一条路径。如果手机鸿蒙选了这个路线,应该是鸿蒙在性能上追赶苹果iOS的唯一选择。
苹果是静态编译,加上自家编译器对自研CPU/GPU/NPU的优化,性能上是安卓没法比的,而且硬件开销也是最小的。
但是,MapleC这个路线还有n年的差距。说服开发者用开发效率低的C/C++语言来做原生鸿蒙程序,是个不可能的挑战。
所以有传言,华为会推出真正对标苹果Swift的自有语言:“Maple+仓颉”。不过新语言的学习周期和生态建立,都需要非常长的时间和投入。
与此相关的是,如果华为不能长期获得ARMv9以后的授权,仓颉的优化也许要从ARM转到RISC-V。而RISC-V的生态差距仍旧过大,如何下手选择两难。
那么在MapleJava之后,华为的选择是什么呢?
虽然最新的鸿蒙架构图里方舟runtime被称为方舟“多语言”运行时,但很多人觉得Javascript(MapleJS)是主打牌。
五、Javascript的选择
Javascript是近年最红的全栈语言,开发效率最高,可以跨平台,甚至可以嵌入平台内作为子平台跑,最典型的例子就是