cygwin和wsl的區別
用過cygwin、wsl、Linux,寫過幾篇知識分享,來答一波。
關於cygwin,你的理解是對的。cygwin項目是基於win32 API在用戶態模擬UNIX,即cygwin核心——cygwin1.dll,由cygwin1.dll提供POSIX API,並基於cygwin1.dll移植了大量GNU、BSD的軟件包,這些軟件包的源碼在cygwin環境中重新編譯的時候,都會默認鏈接到cygwin1.dll,因此編譯的結果仍然是Windows PE格式,在運行時依賴cygwin1.dll。cygwin本身無法支持Linux ELF格式二進制程序。
關於wsl,對於第一代wsl(wsl1),微軟是在運行時將Linux System Call翻譯為NT API調用,以此來直接運行Linux ELF格式文件,是在內核態兼容Linux二進制程序,可以說是相當黑科技了。可能這個大坑微軟填不下去了,2019年推出了WSL2,徹底拋棄了上一代運行時翻譯的路線,干脆把Linux內核放到虛擬機里了,這個虛擬機十分輕量以至於不能明顯感受到,虛擬機的路線相對就平淡無奇了。
總結起來,cygwin是在用戶態提供類UNIX核心,在軟件源碼層實現兼容,源碼需要重新編譯並與cygwin1.dll鏈接,無法支持Linux二進制程序;WSL1是運行時翻譯Linux系統調用,在軟件二進制層就兼容Linux二進制程序,WSL2可以看成虛擬機+Linux發行版。Cygwin和WSL與Windows都有較好的互操作性。
更多有關cygwin、mingw、msys內容,見拙作。
silaoA:Cygwin系列(三):盤點與Cygwin相似和相反的項目zhuanlan.zhihu.comsilaoA:Cygwin系列(一):Cygwin是什么zhuanlan.zhihu.com
silaoA:微軟WSL——Linux桌面版未來之光zhuanlan.zhihu.com
silaoA:偽碼人專欄目錄導航(持續更新...)zhuanlan.zhihu.com