為什麼微軟可以clean room Linux 而 Linux 無法 複製 Windows ?
Windows 也就是一套API啊。理論上說按照API的需求猜測實現最後可以做到,並且按照微軟向後兼容的特性,只需要把前一代的實現了,以後就可以再也不必更新了(僅僅說API層面的更新)。那麼為什麼linux不做呢?
是因為Windows API 太複雜了,不如 Linux 簡潔和 irreducible 嗎?
一個很重要的原因似乎是 API 的實現方式是受專利保護的,並且那幾乎是人能想到的惟一實現方式。
且不說 Windows 兼容性的 shims 多複雜,多麼 undocumented。光是實現 Windows API 就是很困難的,而且並不是實現一次就行了的。Windows 的兼容是說,以前寫的程序在現在的 API 上能跑,而不是所有新的程序都要用老的那一套 API,而且 API 的實現方式也不是一成不變的。
總的來說是一個難度問題;Windows的undocumented api有很多,這也就算了,還有那麼多用老版本api的軟體要兼容。。。這幾乎是個不太可能的事情。
相比之下Linux就好辦多了,開源,一個人A去看源代碼查API的用法然後告訴另一個人B「有哪些API、該怎麼用」;然後B再根據A的要求去自己實現一套就可以了。這樣就實現了clean room Linux。
Wine和React OS也有差不多的流程,但是他們會因為第一段裡面說的這些問題導致很難支持覆蓋全面的apiclean room的是linux kernel,而不是整個linux。clean room一個windows kernel也不是不可能的,就是投入很大,風險更大。
雖然不是clean room,但Drawbridge - Microsoft Research 這個項目就是實現了一個跟windows kernel二進位兼容的精簡kernel。而非ntoskrnl的部分,都可以盡量復用原先的binary,以至於大部分程序都能直接跑。向後兼容的意思是說,新系統兼容舊程序,不是新程序兼容舊系統。所以你做完一次之後不理是不行的,因為在那之後的新程序你就基本不能跑了,因為需要新的API。
有wine的合作項目(是應該這麼說?)react OS,但是人家開源組織沒有MS那麼人多財粗呀,做出來能用已經不錯了
有公司或者組織願意花大量錢的話其實也是可以做的,然而問題是缺錢。。。
windows的圖形界面是內核的,這怎麼移植?頂多像wine那樣
因為Linux不僅有源代碼開放,還有LSB,微軟則啥也沒有,不然為啥wine乾了那麼多年還不能功德圓滿
1 成本,開源社區沒有那麼財大氣粗2 法律風險,微軟的法務部門不是吃素的,微軟可以花大把的錢打專利官司,開源社區做不到。
Linux 常用API 300多個,Windows常用的API有5000多個,而且10年前編寫給winxp 的程序 現在在win10上面還是可以運行!
模擬Windows API。。。。。那不是叫wine嗎
推薦閱讀:
※為什麼 Windows 資源管理器沒有標籤頁的功能?
※在微軟109號樓工作是怎樣一番體驗?
※如何評價微軟宣布「無論之前用戶使用的微軟操作系統是否是盜版,都可以通過合作夥伴獲得升級windows 10」?
※在微軟的Station Q工作是怎樣一番體驗?
※Windows Phone 8.1 開發者預覽版的實際使用體驗如何?
TAG:微軟Microsoft | MicrosoftWindows | 操作系統 | Linux | Build2016 |