標籤:

為什麼 Windows 的兼容性這麼強大,到底用了什麼技術?

Win10 連98年出的VB6都能運行,黑科技啊。。。


這算啥。以前模擬人生有個bug,會在釋放了內存之後一小段時間裡重新讀一下。(20年前的)新版本Windows讓這種行為崩潰之後這個遊戲就GG了。然而操作系統玩不了遊戲用戶是不會更新的呀!所以微軟專門給他留了這個bug,如果是模擬人生釋放的內存,那就過一陣子再釋放。


做兼容性強的系統,不需要任何秘術。只需要你:

  • 更新系統的時候不故意破壞兼容性。
  • 用戶不兼容你的時候幫用戶解決。

只不過,這兩條沒有錢和人力,沒有很多很多的錢和人力,你是做不到的。


靠承諾

其實也是可以像別家廠一樣甩包袱的,但那樣就太不微軟了,所以定下的介面規格都承諾兼容很久,不是說砍就砍的,只要你嚴格按照的規範開發,很少遇到不兼容

當然各種調用私有介面,硬編碼寫死的騷操作就不保證了

至於技術上到底怎麼實現兼容舊標準又提供新標準,可以看看下面的說法

Demystifying Shims – or – Using the App Compat Toolkit to make your old stuff work with your new stuff


@叛逆者:「內核中有對 1300 種硬體的 Workaround」


黑科技主要都在 %windir%apppatch下面。*.sdb裡面是很多規則(xml定義然後轉成二進位方便查詢),進程啟動時會查詢,有匹配則使用。比如有針對 Visual Basic 6.0的,內容可能是某些配置,像是禁用某些新的安全特性,還可能是某些API行為變化導致不兼容,所以detour到兼容的實現。兼容的實現大多放在前面目錄下的DLL里。

當然這些規則都是一條一條手工加的,一個規則對應一個或者多個bug。

最新的Windows 10 on ARM的兼容性更有意思,除了應用x86已有的,還有一些神奇的規則,比如不讓舊的x86程序檢測到自己運行在64位系統上。


我覺得PE的設計對Windows兼容性的影響有著不可磨滅的貢獻。只是硬碟佔用大了點。

你試試linux塞進去辣么多.so?而且不同模塊調用的動態庫版本還不同?絕對崩得你死去活來


linux 既不鼓勵靜態鏈接(參考lgpl),程序自帶動態庫的話(變相繞開lgpl)鏈接時候的選項又很反人類(Multiple glibc libraries on a single host這個不錯 )。這自然就反襯出win的前向兼容能力很強啦。

當然蓋茨當朝的時候,也確實願意花時間和金錢為應用軟體做兼容甚至為了讓有bug的流行軟體不崩潰願意改內核。windows編程啟示錄中甚至披露:win95本來是win93的。


我記得我用win10跑過魔獸爭霸1,遊戲只有10M,萌得不行


還不是慣著用戶唄

時不時還給Xp打個補丁

跑不了的舊程序還可以用兼容模式試試

當然蘋果是最牛逼的,換手機不夠勤快就會貼心地給你降個頻....


這算啥,更早的tc2.0兼容模式下也能運行呢


不需要什麼黑科技,只要暴力堆回歸測試。需要的是錢和人力。


看看你的C:WindowsWinSxS文件夾有多大吧

這裡面是所有Windows歷史版本的系統組件

用了什麼技術?

其實就是每個版本的Windows(系統組件)都裝了一遍


評論區說我理解錯了

不同應用程序需要不同版本的dll,系統都給留了下來,這不就是兼容性?


Java 還不是能輕鬆編譯運行二十年前的程序。

Windows 暴露出來的 API 不亂砍,行為不亂改,一般來說你的程序只要不瞎寫,想跑在新版本系統上還是很輕鬆的。


《Windows編程啟示錄》有一章專門講向後兼容。


要是像某果一樣,出新版windows後強制降低舊版win性能增加耗電,看你們這幫刁民更不更新系統…豈不美哉?


論API穩定的重要性


特例特例,不能用的軟體多了。比如說他兄弟VC6非常容易炸,還有各種奇奇怪怪的軟體,比如說Keil MDK,一言不合就出問題xp不行win8不行只能win7。 還有一堆堆軟體,真是坑人吶。

不過說實話,我覺得windows兼容性真的是很好了。

還有,.NET真是個好東西,像java一樣,全部兼容系列。


然而還有很多人黑win10兼容性啊,所以一直留在win7上(逃


兼容性哪裡強大了,運行一個叫 Windows Hotkey Explorer 的程序,在老版本 Windows 下是列出快捷鍵和程序的對應關係,在 Win10 下把所有快捷鍵都執行了一遍。

詳見我另一個回答。


Ie5 678910表示不屑一顧,兼容性?不存在的


無需 WindowsXP SP2,VistaSP2都可以,還不是看著眼花的WinBasic風格


Vista 出來的時候無法正常運行 Starcraft。呵


推薦閱讀:

windows內存頁默認是多大?
能不能一鍵開啟快速訪問工具欄?
如何在 Windows 下訪問 ext4 格式的硬碟?
微軟為什麼不給 Linux 出 Office?
如何從零開始寫一個Edge擴展?

TAG:MicrosoftWindows |