良许Linux教程网 干货合集 同样是 ARM,为什么 Mac 会成功,Windows 却输得一败涂地?

同样是 ARM,为什么 Mac 会成功,Windows 却输得一败涂地?

由于联邦贸易委员会在去年对于反垄断问题进行了严格打击,近期彭博社发表的一篇报道引发了传言,称英伟达正计划放弃以400亿美元收购Arm的交易。

然而,本周英伟达正式宣布终止了对Arm的收购计划。如果当初收购成功,英伟达和Arm的合并将很可能成为仅次于英特尔的第二大半导体巨头,在移动和嵌入式处理器领域成为高通和三星等公司的强大竞争对手。此外,合并后的英伟达和Arm也有可能成为微软下一代基于ARM架构的Windows笔记本电脑的芯片供应商。

然而,这也引发了许多行业观察家对于Arm在桌面计算领域的未来是否充满了苹果公司的疑问。目前看来,只有苹果公司通过将Mac平台过渡到自家设计的基于ARM架构的M1芯片上,取得了较为成功的结果。

image-20231112195705172
image-20231112195705172

图源自IC photo

Windows on ARM却成绩平平,这是为何?

苹果M1 Mac的成功证明,ARM在PC上同样很有前景,可是在此之前的微软也就是Windows on ARM却成绩平平,这是为何?

对此,很多人认为Windows on ARM的主要障碍在于硬件,因为软件以及开发工具都是现成的。然而真正的问题在于开发者工具的兼容问题。例如Visual Studio、VS构建工具和RISC-V等等。倘若不能解决兼容问题,那么Windows on ARM永远无法实现。

微软的开发者工具链在ARM中表现非常糟糕,微软并未提供ARM版本的Visual Studio、VS构建工具、甚至没有Microsoft Visual C++,他们希望ARM开发者能够在x86主机上交叉编译C++软件或模拟x86。

即使ARM可原生支持.NET以及VS Code,但这对于C++开发者来说意义不大。因为MSVC是封闭源代码,ARM要想获得对MSVC的本机支持只能靠微软。

image-20231112195710732
image-20231112195710732

图源自IC photo

除此之外,开源问题同样不容乐观。由于MinGV或是MSYS开发环境中无法搭建ARM,因此Windows上无法使用Arm GCC或Arm Clange工具链。尽管有部分功能能够添加原生ARM支持,但目前还无法使用。Arm官网中可以下载用于x86的MinGV GCC,并为Arm设备进行交叉编译。如果只有用竞品才能在Windows上编译自己的产品,那么这的确能够说明一些问题。

另一个在Windows中流行的C++编译器是英特尔C++编译器(ICC),但它并不能在ARM上使用,并且必须要安装Visual Studio。也就是说,4个流行的C++编译器均不能用于ARM Windows。

可能许多人都不了解为编译器提供原生ARM支持的意义所在。在为手机或游戏开发软件时,有许多开发者已经从自己的电脑交叉编译到其他设备中,那为什么不能交叉编译到ARM Windows设备上呢?其实这是可行的,但是不好用。

如果Windows电脑不能原生支持编译器,并且需要其他电脑交叉编译二进制文件/可执行文件,那么这就和手机没什么区别,因为开发者不能在同一设备上进行开发测试。不同之处在于手机和游戏机并不是开发平台。虽然手机可以写代码,但这种情况并不多见。

除此之外,Windows for ARM的另外一个缺点在于它不支持OpenGL以及Vulkan。如果你用的是Vulkan,就算你设置了交叉编译工具链也不方便。如果你使用的是OpenGL程序,你最好转为DirectX。

微软的要求很明确,如果要用到新的ARM Windows平台,就必须要用他们的专业API。同样,PlayStation、Xbox、Switch 和 iPhone 要求开发者使用专有的图形 API,但他们都不能运行编译器,因此开发者必须从另一台设备进行交叉编译。开发者应当清楚:Windows for ARM不能运行专业的图形API或是编译器,不能用作专业的开发平台。

用户:微软逼我选择x86

由于开发者在ARM Windows上的体验较差,他们会选择使用x86,如此反复,Arm Windows永远不会达到和x86相同级别的支持,而使用ARM Windows的人也会越来越少。打破这一循环的方法就是让Visual Studio等主要开发者工具能够支持ARM。

相比之下,ARM对于macOS以及Linux上的开发者工具的支持要好得多。GCC、Clang和 Python可完美支持ARM。开发者可以下载这些开发工具的本地版本并进行本地编译,与传统的模式没有任何不同。

但如果苹果在没有移植Clang并且不支持OpenGL的情况下就发布ARM macOS同样是个灾难。在这种情况下,开发者必须使用旧的x86 Mac进行开发并为ARM Mac进行交叉编译。而这势必会引起轩然大波,开发者会担心苹果是在把macOS转变为iOS,如果不能编译自己的软件,也就不能运行自己的软件。这样和Windows没什么区别。

从C++开发者的角度来看,可能Linux对于RISC-V的支持比Windows对于ARM的支持更好。RISC-V是一种全新的开源CPU架构,但目前还无法使用。RISC-V上的Linux体验一般,不过仍有一个可用的编译器,因此开发者可以在另一台设备上使用本机软件进行开发,而无需交叉编译。从这一点来说Windows for ARM是更为逊色的。

微软在ARM设备上的首次尝试是在2012年发布的Surface平板电脑中,它运行的是Windows RT(Windows 8 for Arm)。如果微软全力支持ARM,他们应该早在2012年就将MSVC和Visual Studio移植到ARM,类似于苹果在发布第一批ARM Mac时对Xcode和Clang的支持。

回顾过去,微软似乎将Visual Studio移植到ARM上没什么想法。直到今年,微软才将Visual Studio移植到同一架构的64位版本。这是2003年发布的第一个64位x86 CPU,即Athlon 64,而这距离现在已经19年了。不过微软的确在2005年左右将MSVC移植到了64 位 x86上,因此ARM并不是一点希望也没有,但是为了让开发者获得更好的体验,微软需要将整个Visual Studio堆栈移植到Arm。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部