為什麼 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 |