從 X86 到 ARM 的移植,為什麼 Windows 的兼容性看起來沒有像Linux、OS X那樣好?

希望能夠從可能的各個方面——比如技術、商業策略、歷史等方面看到比較深入的解答。


Windows RT 保留了 .NET Framework 4.5 的一個子集,砍掉了 Win32API 和 C Runtime 中的部分 API 關於Windows Store apps架構

OS X 到 iOS 砍掉了 AppKit 換 UIKit,要調整的東西多了去了 Mac Technology Overview: Migrating from Cocoa Touch

Linux?移動平台把整個 X 都砍掉了,OpenGL 是 ES,上面的 Gnome / KDE 的 service 一個也沒留。

誰家兼容性好啊。你要說為什麼 Windows ISV 吆喝得厲害?因為他們懶。看看知乎上號稱要學 Windows 開發的到現在還有人用 Visual C++ 6.0 有什麼好說的。Apple 平台的程序員早就習慣了一代一代被迫更新技術,從 Carbon 到 Cocoa,68k 到 PPC 到 Intel 到 x64;Linux 平台則根本是打移動靶,無非兩個字:咬住。

上面還有人說內核的——你又知道 RT 內核重寫過,不是關閉幾個 CONFIG_* 換個 -march 編譯就好?


沒有看過Win的源碼不知道為什麼,猜測是因為Windows裡面有很多專門針對X86的優化,因為在ARM之前Windows並沒有考慮過要移去別的平台吧。於是有些編碼就移不過來了,重構的話原有的應用就運行不正常了……

其實Linux/OS X這些,你也不能把原本運行在X86上的程序直接放到ARM上面去運行啊,也是得做移植,Mac OS之前是在Power架構移過一次,移的時候肯定也想過如果以後又移一次怎麼辦的問題,移植性就考慮到這裡面去啦;Linux就不說了,生來就是為了運行在所有平台上而努力的系統,只要稍作修改就能運行到其它平台上面去的


兼容性?OS X和Linux敢和Windows比兼容性?笑話……

Windows RT上可以運行所有X86的應用程序,只要重新編譯一下就行。X86上OK的代碼在ARM上運行基本沒有問題(除了一些小問題,比如ARM要求數據對齊,這個在X86上不是強制的)。開發ARM版Windows的時候,只要編譯器支持,其它的開發測試工具(包括測試用例)全部都是重新編譯一下就可以用了,不用重寫。如果要全部重寫的話,估計Windows 8十年也出不來……以每個小組件的測試用例上萬來計算,Windows 8全部測試用例大概有幾百甚至上千萬個……

那為什麼公開的Windows RT不支持傳統的X86應用?你覺得傳統的Windows應用在平板(或者手機)上面可以用么?菜單欄那麼細,手指可以輕鬆點到么?

所以不兼容的原因,並不是技術上做不到,而是沒有必要。

至於為什麼要提出Windows RT語言(姑且稱它是語言吧),是為了減少普通程序員的入門門檻。正統的Windows API難學難用,如果一個新手程序員,只要想開發一個簡單的時鐘應用,卻要學習完整的Windows API或者.Net,他就可能會知難而退了。這樣不利於Surface的推廣。Windows RT可以吸引更多的程序員來開發應用,應用多了,自然用戶也會跟著多起來。


說白了其實就是個策略的問題。

RT如果不強迫應用程序重新編譯和使用新的API,微軟遲早會被拖死和煩死,更別說Surface會變成電磁爐。


推薦閱讀:

web後端攻城獅要學linux嗎,一般要學到什麼水平呢?
關於linux目錄刪除的問題?
Linux 伺服器有必要開啟 iptables 防火牆么?
Linux文件系統的核心結構?
為什麼把部分蘋果設備的系統時間調整為1970.1.1,重啟後就會變磚?

TAG:MicrosoftWindows | ARM | x86 | Linux | 軟體兼容 |