本文共3500余字,预计阅读时间11分钟,本文同步发布于silaoA的博客(silaoA.github.io)和知乎(账号silaoA)。

关注学习了解更多的Cygwin、Linux技术。

微软一年一度的build大会都是Windows开发者的盛会,往往发布酷炫的软硬件产品和新服务。为期3天的build 2019抢在Google IO 2019之前于2019年5月6日召开,在首日的主题演讲中微软发布了一系列软件和服务,其中就包括新一代WSL——WSL2和微软自家的终端模拟器Windows Terminal

目录

  • 0x00 回顾WSL1

  • 0x01 WSL2

  • 0x02 Windows Terminal

  • 0x03 小结

  • 参考

  • 更多阅读

自从Satya Nadella执掌微软帝国以来,微软对开源社区态度发生180度转变,也不再视Linux为毒瘤,开始以实际行动践行“Microsoft love Linux”的誓言:微软的Azure支持Linux、开源.Net Core、开源VS Code、完善命令行对POSIX支持、搞Windows Subsystem for Linux黑科技、收购GitHub等。

Satya Nadella

微软在Windows上不断完善对命令行的支持,官方开发博客中特辟了commandline系列,积极接受用户反馈。此次发布的WSL2Windows Terminal颇受关注,也在博客中给出了相关说明。以下称原版Windows Subsystem for Linux为WSL1,新版为WSL2。

0x00 回顾WSL1

在前文Cygwin系列(三):盘点与Cygwin相似和相反的项目简单介绍过WSL1。WSL1的机制,总体上是在运行时将Linux System Call翻译为NT API调用,从而在NT内核基础之上模拟实现Linux内核。微软官方博客windows-subsystem-for-linux-overview描述了WSL1的架构组件,可以简化为下图。

WSL1架构示意

  • LXSS Manager是普通的win32进程,相当于Linux子系统驱动的代理,还负责管理Linux进程。Linux Instance不是普通的win32进程,微软称为Pico Process,是Linux EFL程序的宿主进程,实现了沙盒技术中的一种机制。

  • lxsslscore两个组件是WSL1的核心,负责将Linux程序中的System Call “翻译”为等价的NT API调用,如fork翻译为NtCreateProcessopen翻译为NtOpenFilekill翻译为NtTerminateProcess等。这两个组件根据洁净室(clean room)原则构建,完全不含Linux代码。

WSL1在运行时处理Linux System Call,模拟Linux内核,在ABI层面保持兼容性。Cygwin项目的思路其实也是构建和lxsslscore作用一样的模拟层,但外人是无从得知NT API的详细情况的,因此Cygwin项目只能在Win32 API基础上构建Cygwin DLL,只能在API层面保持兼容性。Wine项目的角色与WSL1、Cygwin类似,只是作用方向相反。

无论是在ABI还是API层模拟,Linux/UNIX与Windows NT毕竟是两类内核,设计理念、设计标准等多方面差异甚大,无法实现完全对等模仿,WSL1和Cygwin都无法兼容所有Linux System Call,Wine也无法兼容所有Win32 API。这就造成有的程序无法在WSL1中运行,源码也无法在Cygwin中重新编译;同样有的程序无法在Wine中运行,源码无法在Linux/UNIX中重新编译。

0x01 WSL2

也许是因为WSL1靠翻译System Call来模拟Linux内核的坑太大填不下去了,这种黑科技思路此次被微软完全抛弃,换成了虚拟机/容器的思路,仅仅是名字上延续了WSL,再也不是当初那个WSL了。WSL2引入了修改版的Linux内核,基于最新的Linux 4.19,这也是Linux内核最新的长期支持版,新的内核经过了微软悉心改造,以便与Windows相配合,获得更好的用户体验。根据官方博客的说法,这个微软自家出品的内核也将在不久之后在Github上开源,届时不仅可以更加清楚地了解WSL2工作机制,玩家还可根据自身需要随心定制。WSL2将Linux内核塞到一个轻量级的虚拟机(Virtual Machine,VM)中运行,使用过程与WSL1保持一致,VM的启动、管理都藏在背后。

WSL2演示 图源:https://devblogs.microsoft.com/commandline/wp-content/uploads/sites/33/2019/05/runwsl.gif

使用虚拟机的方式带来了运行效率和兼容性两方面的提升。根据微软自己的测试与WSL1相较,在WSL2中解压zip文档速度提升了惊人的20倍,使用git clonenpm installcmake提升大约2~5倍。由于使用了真正的Linux内核,意味着WSL2全面兼容Linux System Call,理论上能在GNU/Linux上运行的程序也都能在WSL2中不经修改直接运行。另外还带来一个好处是,可以更新Linux内核换取更高的效率和安全性,背靠微软这棵大树更新(微软背靠Linux基金会大树)。

WSL2首个版本会在2019年6月底Windows insider中推送。

0x02 Windows Terminal

Windows以图形界面起家而大获成功,但长久以来Windows对命令行的支持欠缺饱受诟病,命令提示符/Powershell界面丑陋、cmd/Powershell解释器语法怪异、不支持POSIX标准,最重要地没有GNU、BSD系的众多高效命令程序。在社区反馈下,微软近几年也在不断努力完善命令提示符、cmd解释器、PowerShell,如增加Unicode/UTF8支持、24色支持、更好看的字体、更灵活的配置等,但在Windows Console API上修修补补,始终是治标不治本。

此次微软发布的Windows Terminal是一款终端模拟器(terminal emulator)。老兵命令提示符、PowerShell继续履行历史兼容的职责,Windows Terminal抛掉了历史包袱另起炉灶,支持连接WSL、cmd解释器、Powershell、Powershell Core、SSH远程主机,主要有以下几个功能特性:

  • 多标签页,这也是对众多终端模拟器呼声最高的功能需求,不同的标签页可以连接上述不同的解释器/主机,即同时可以作为本地终端和远程终端使用;

  • 美化字体,使用GPU加速的字体渲染引擎,支持常规字符、特殊符号、emoji、图标,而且相较原来Console的GDI引擎速度更快,微软给终端另外配备了一款现代的等宽型字体;

  • 灵活配置,以结构化文本保存设置项,可以给每个标签页、应用程序独立配置。

Windows Terminal支持多标签、高度支持WSL 图源:https://devblogs.microsoft.com/commandline

build大会之后,Windows Terminal在github一经开源便迅速冲上人气榜,预览版将于2019年夏天在Windows Store中提供。

0x03 小结

市面上已经有相当不错的终端模拟器,如Comemu、putty等,相对来说Windows Terminal只是个锦上添花的产品,没有WSL,Windows Terminal只是个好看一点的命令提示符而已。

Win10确确实实因WSL而不同,不管微软选择hard模式的黑科技路线还是普普通通的虚拟机路线,对于用户而言,只要达成在Windows上高效运行Linux ELF程序这个目的就足够了,更何况虚拟机路线在运行速度、兼容性方面都有了很大的提升。可以说,一个Win10=Windows+Linux Server+Terminal,在Win10上同时享受Windows图形界面和Linux命令行的待遇,而且这两部分还有着很好的互操作性,图形界面和命令行不必彼此隔离,不必担心顾此失彼。

对比各种GNU/Linux桌面发行版惨淡的硬件驱动支持、图形环境与生俱来的不稳定性和低效、二流水准的界面设计,以及不同发行版之间严重的分裂(不一致性),Win10绝对担当得起最佳Linux发行版的称号。

诚如一部分评论所言,微软未来在不断优化WSL的同时,可能对NT内核也做出相应调整。想想Cygwin系列(三):盘点与Cygwin相似和相反的项目所述毛德操教授发起的Longene项目半途废止,统一内核的宏愿在Win10上实现亦未可知。

参考

  • https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/

  • https://devblogs.microsoft.com/commandline/announcing-wsl-2/

  • https://devblogs.microsoft.com/commandline/shipping-a-linux-kernel-with-windows/

  • https://devblogs.microsoft.com/commandline/introducing-windows-terminal/

更多阅读

  • Cygwin系列(三):盘点与Cygwin相似和相反的项目

  • Cygwin系列(四):一步一步搭建Cygwin最小系统

  • Linux Cygwin知识库(一):一文搞清控制台、终端、shell概念

  • hexo+github pages搭建博客站全过程记录


如本文内容引起极度舒适,请转发分享,欢迎关注与留言交流

 

►本文为原创文章,已发布在个人博客站https://silaoa.github.io,如需转载请联系知乎账号silaoA或微信公众号:伪码人(We_Coder)。

▼▼▼点击左下方“”,与伪码人共同探索计算机世界。都看这里了,不妨在右下角点个“好看“再走呗

写留言

pcie usb3.0 驱动 for linux_微软WSL——Linux桌面版未来之光相关推荐

  1. pcie usb3.0 驱动 for linux_Linux 中的虚拟网络

    许多人视虚拟化为 CPU,内存和存储的虚拟化,但是这样太过简单化解决方案了.网络是虚拟化的一个关键方面,代表虚拟化设置中第一等的元素. 虚拟化网络 我们从问题的高层次开始探索,然后深入到 Linux® ...

  2. pe安装usb3.0驱动_微PE工具箱v2.1版

    下载链接:私聊回复分享  网盘暂时超上限 https://sdl115.yunpan.360.cn//share.php?method=Share.download&cqid=b1fcf955 ...

  3. 用技嘉Windows Image Tool给原版WIN7镜像注入USB3.0驱动

    Windows Image Tool,又称Windows USB Installation Tool,具体看自己主板下载的名字是什么 注:如果你已经将原版系统刻录到U盘的,请直接往下看: 将原版WIN ...

  4. 如何在Win7安装U盘中加入USB3.0驱动的支持

    故障现象: 原生Win7系统不包含USB3.0的驱动,所以无法使用USB3.0的U盘在USB3.0的设备上引导,且安装完系统后还需要重新安装USB3.0驱动. 重要提示:重装或升级操作系统会导致数据丢 ...

  5. win7原版映像中添加usb3.0驱动

    最近用软碟通制作了一个win7原版映像,但是在装新系统的时候发现了一个问题,进入安装界面后,显示没有找到驱动器,但是明明是差了U盘的,通过"shift+f12"调出命令行窗口,输入 ...

  6. 计算机没有usb视频教程,Win7已安装但没有USB3.0驱动如何安装教程

    不知道大家有没有遇到过,在一个带有usb3.0接口的电脑上安装了win7后,usb不能用,鼠标和键盘也不能用,关键是没有ps2接口,全部都是usb接口,所以没有安装usb3.0驱动之前,鼠标和键盘全部 ...

  7. win7 加载 usb3.0驱动

    1.去微软官网下一个 usb3.0 驱动 https://downloadcenter.intel.com/zh-cn/download/26254/-NUC-NUC6i7kyk-USB3-0-Win ...

  8. b360装服务器系统,B360主板安装USB3.0驱动的解决方法

    今天在行业群内有同行咨询B360主板装WIN7如何安装USB3.0驱动的问题,下面我就来说一说 大家都知道,在B360主板刚上市的时候是没有USB3.0驱动的.主板官方和INTEL都不提供对B360主 ...

  9. Windows 7原版映像中添加usb3.0驱动

    最近用软碟通制作了一个win7原版映像,但是在装新系统的时候发现了一个问题,进入安装界面后,显示没有找到驱动器,但是明明是差了U盘的,通过"shift+f12"调出命令行窗口,输入 ...

最新文章

  1. 教你玩转 统一异常处理
  2. 51单片机好学嘛?学完51单片机学什么?
  3. Qt 如何发送和接收UDP数据报
  4. HDU 1520 Anniversary party(树形dp)
  5. python列表框_「每日一练」Python列表框部件的运用
  6. 老生常谈session,cookie的区别,安全性
  7. 自学机器学习_我用来自学机器学习的最佳资源
  8. 初窥wordcloud之老司机带你定制词云图片
  9. postgreSQL源码分析——索引的建立与使用——总结篇
  10. 数学计算机电路基础,2019上“计算机电路基础”作业(五大题共16小题).docx
  11. java后台生成excel_Java后台生成Excel前台下载
  12. 面向对象的关键技术(多态、接口、抽象)
  13. 手把手0基础项目实战(三)——教你开发一套电商平台的安全框架
  14. testbench实例 vhdl_VHDL的testbench的编写(转)
  15. 怎么选择靠谱Java培训机构?
  16. Oracle11G数据库重演测试
  17. 二叉树已知前序遍历、中序遍历画出二叉树的形状
  18. 读书笔记——《重构》
  19. Java关键字synchronized 使用中的 Double-Checked Locking is Broken
  20. melodic 奥比中光(orbbec)相机安装

热门文章

  1. tampermonkey脚本header介绍
  2. 任务完成从不加班_我如何从不知道如何编码转变为在9个月内交付9个项目-都在我15岁之前就完成了……...
  3. 看懂Oracle执行计划(转载)
  4. golang module实践
  5. 蓝奏云数值验证码识别,python调用虹鱼图灵识别插件,超高正确率
  6. Python编程模块里一些小众但是却比较实用的python内置库
  7. Mysql数据库——高级用法(视图、事务、索引、自连接、用户管理)
  8. Python实现普通二叉树
  9. VS2008jQuery智能提示
  10. .NET设计模式(1): 简单工厂模式