cygwin和wsl的区别

时间:2024-03-03 07:41:50

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.com图标silaoA:Cygwin系列(一):Cygwin是什么zhuanlan.zhihu.com图标silaoA:微软WSL——Linux桌面版未来之光zhuanlan.zhihu.com图标silaoA:伪码人专栏目录导航(持续更新...)zhuanlan.zhihu.com图标