同樣是 ARM,為什麼 Mac 會成功,Windows 卻輸得一敗塗地?

同樣是 ARM,為什麼 Mac 會成功,Windows 卻輸得一敗塗地?

由於聯邦貿易委員會在去年對於反壟斷嚴加打擊,在上個月彭博社發布一篇報道後,有傳言稱英偉達正准備放棄以400億美元收購Arm

本週英偉達正式官宣終止收購 Arm。事實上,倘若彼時英偉達和Arm合並,預期將創造出僅次於英特爾的第二個半導體巨頭,並在移動和嵌入式處理器領域成為高通和三星的強力對手。除此之外,兩者合並後還可能成為微軟下一代基於ARM的Windows筆記本電腦的硅供應商等。

因此,許多行業觀察家可能想知道:ARM在桌面計算領域的未來是否全是蘋果?就目前而言,只有蘋果公司通過將其Mac平台過渡到M1 ,在自己設計的基於ARM的晶片上取得了成功。

1 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的本機支持只能靠微軟。

除此之外,開源問題同樣不容樂觀。由於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或是編譯器,不能用作專業的開發平台。

2 用戶:微軟逼我選擇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。

參考資料

  • https://www.zdnet.com/article/does-windows-on-arm-have-a-future/

  • https://www.zdnet.com/article/op-ed-windows-isnt-ready-for-arm-developers/

  • https://www.zdnet.com/article/future-of-desktop-computing-is-it-all-in-apples-hands-with-arm/

本文來自微信公眾號“CSDN”(ID:CSDNnews),整理:郭露,36氪經授權發布。

本文經授權發布,不代表36氪立場。

如若轉載請註明出處。來源出處:36氪