在 Windows 10 中原生运行 Linux bash 和其它的 ELF 二进制程序?对,你没看错,这就是昨晚微软宣布的“Ubuntu on Windows”项目所披露的事实——而且,今天不是 4/1。

之前就有传闻说,微软在 Windows 10 里暗藏神秘 Linux 子系统!现在,传闻变成真的了。

Ubuntu on Windows 10

据该项目的合作方, Ubnutu 背后的 Canonical 公司的产品与战略负责人 Dustin Kirkland 说,他在几个月前听说这个疯狂的想法时也懵了,花费了不少工夫才理解这后面发生了什么。

本文带你揭开“Ubuntu on Windows”的神秘一角。

首先,让我们看看发生了什么?

  1. 首先你得有个 Windows 10
  2. 打开 Windows 开始菜单
  3. 输入“bash” (没有引号),回车
  4. 这会打开一个 cmd.exe 窗口
  5. 运行 Ubuntu 的 /bin/bash
  6. 宾果!你可以完全访问所有的 Ubuntu 用户空间了
  7. 没错,这包括 apt、 ssh、 rsync、 find、 grep、 awk、 sed、 sort、 xargs、 md5sum、 gpg、 curl、 wget、apache、 mysql、 python、 perl、 ruby、 php、 gcc、 tar、 vim、 emacs、 diff、 patch 等等
  8. 以及,Ubuntu 软件库中数以万计的 ELF 二进制程序中的绝大多数!

Bash

“好吧,这是一个运行在虚拟机的 Ubuntu 吗?” 不!这根本不是一个虚拟机,不用在虚拟机中启动 Linux 内核,它就是 Ubuntu 的用户空间。

“哦,那是运行在容器里面啰?” 不不!这也不是一个容器,这是在 Windows 里面直接运行原生的 Ubuntu 二进制程序。

“嗯,就像 cygwin 那样?”不不不!cygwin 所包括的开源程序是以源代码重新编译后才能原生运行在 Windows 上。而这里,我们说的是一个比特都不差、校验值完全一样的 Ubuntu 的 ELF 二进制程序可以直接运行在 Windows 下

... ...

“那么,这就像是模拟器一样么?”这就比较接近真相了,来自微软的一些尖端技术人员正在研究一种技术,可以将 Linux 的系统调用实时地转换为 Windows 的系统调用。你可以把它当成 Wine 的一种反向技术。微软将其称之为“ Windows 下的 Linux 子系统 Windows Subsystem for Linux ”,当然现在还没有开源。(我觉得网友 delectate 说的比较有趣,这个东西不如叫做 mine=microsoft's native emulator 。)

而且,根据 Dustin Kirkland说法,使用跨平台的性能测试工具 sysbench 进行测试的结果发现,在 Windows 下运行这些原生的 ELF 二进制程序和在 Linux 下运行所消耗的 CPU 、内存和 IO 性能相当。对于这个结果,我表示非常的吃惊!

Dustin Kirkland 是该项目组的成员之一,他的体验可以让我们感受一下这个“超级神秘”的项目。

由于需要将整个 Ubuntu 的根文件系统打包到一个 Windows 应用软件包(.appx)中,这位已经十几年没有使用过 Windows 的老兄对微软开发工具十分陌生,在经过几个小时与 Visual Studio 的痛苦搏斗,制作了一堆各种尺寸的 png 图标,编辑了一打以上的 XML 文件后,他简直忍不住要将咖啡杯扔到该死的屏幕上了。

到最后,他终于寻求他所熟悉的 Linux 经验解决了这些问题。

按下 Windows 键,输入“bash”,回车!他发现这个要上载的根文件系统的内容放在 /mnt/c/Users/Kirkland/Downloads 下,只需要使用一个 cp -a 复制到目标位置即可,并用 find | xargs |rename 来批量更新文件名,用 grep| xargs | sed 搜索替换路径,用 convert 工具快速地批量缩放图标,简直不要太容易地搞定了这些工作,剩下的就只需要让 Visual Studio 自己干了,编译、上载到 Windows Store。搞定!

嗯,你也许从终端窗口中看到了 /mnt/c ,没错,这就是你的 Windows 下的 C: 盘,它们以读写模式直接挂载到 /mnt 下了。当然,你也可以在 Windows 下通过类似如下的路径访问 Ubuntu 的文件系统:C:\Users\Kirkland\AppData\Local\Lxss\rootfs\ 。

文件系统

同时,如果需要 ssh 连接到其它的 Linux 上,你根本不用下载 putty,直接输入 ssh 即可:

ssh

当然,你也可以使用 apt 来安装和更新软件包:

apt

到目前为止,是不是所有的东西都可以完美工作了?还不全是。LTP 测试中的大多数都没问题,但是有一些则还不行,主要是 tty 相关的部分,比如 byobu、screen、tmux 等还不能很好的工作,不过相信也快了。

另外,顺便提一句,当前这个子系统所采用的 Linux 镜像是 Ubuntu 14.04 LTS,等 16.04 LTS 发布后相信很快就会更新到 Windows Store 上。

已有 24 条评论

  1. 什么情况 —— 来自天津的 Opera 36.0|Windows 10 用户 发表。
  2. 看来微软要把开发人员牢牢绑定在win10上.得码工者得天下,微软也是拼了. —— 来自北京的 Chrome 48.0|FreeBSD 用户 发表。
  3. 我个人还是看好这个,虽然 OS X 是 UNIX 系统,也能使用一些 GNU 软件,但是毕竟内核不同,不是什么软件都支持,如果靠虚拟化解决,那同在Windows 下用虚拟化方案没啥不同,最多就是虚拟化的技术存在一些差异,但是一部针对桌面的虚拟化方案能有什么不同?如果微软能做好对 Linux 内核的反向支持,能让大部分不是高度依赖Linux 内核的软件正常运行,目标用户又用做 Linux 非底层软件开发,那么相较于 MacBook 的价格,相对低廉的 Windows 10 笔记本还是有吸引力的。当然不足可能是存在的,比如文件名,文件属性这些,要知道Linux 对文 —— 来自四川成都的 Chrome 49.0|GNU/Linux 用户 发表。
  4. 件名的限制非常少,但如果 Windows 10 是直接把 Linux 软件放在 NTFS 或 ReFS 文件系统,这方面肯定有限制,还有文件名大小写区分这些,以及像chattr 这些扩展属性,不过 ACL 这个倒是不用担心,微软的 ACL 设置要比 setfacl/getfacl 细的多,而且不仅仅是文件系统在用,进程,注册表这些都在用。 —— 来自四川成都的 Chrome 49.0|GNU/Linux 用户 发表。
  5. 当然不足肯定是存在的, —— 来自四川成都的 Chrome 49.0|GNU/Linux 用户 发表。
  6. 更简单来说,如果这个项目确实能很好运行 CLI 界面 Linux 软件,并且子系统消耗内存不多,CPU 资源不多的话,我就可以不用 VirtualBox来跑一个对系统服务进行过必要精简的 CentOS 7 来在只有 2G 内存的 Surface 3 跑一些 Linux 服务了。 —— 来自四川成都的 Chrome 49.0|GNU/Linux 用户 发表。
  7. 有这个确实会方便些,但是目前这样子不足以让人转换阵营 —— 来自广东广州的 Firefox 45.0|Ubuntu 用户 发表。
  8. 既然如此,那就应该让微软提供windows向linux的WINE转换啊。现在的linux WINE做得肯定不会比微软好 —— 来自广东广州的 Firefox 45.0|Ubuntu 用户 发表。
  9. 以后的小白就会说,linux是windows的子系统 —— 来自广东佛山的 Firefox 38.0|GNU/Linux 用户 发表。
  10. 拥抱 扩展 毁灭 —— 来自广东佛山的 Firefox 38.0|GNU/Linux 用户 发表。
  11. "我个人觉得,简单来说:
    Canonical  -->  微软  「√」   (Canonical说:我来了。微软说:行,来吧)
    微软  -->  WINE  「╳」   (微软说:不行,我没这闲功夫,我不干)

    你觉得呢?" —— kashu [Chromium 49.0|Ubuntu] 发表。
  12. "win10内置shell: 摇摆用户更方便使用win桌面环境,提升win10占用率
    ms加强wine: 摇摆用户更方便使用linux桌面,提升linux桌面占有率.

    你觉得ms会怎么做?" —— 来自陕西西安的 Chrome 49.0|GNU/Linux 用户 发表。
  13. 差不多就这意思,一看就明白。 —— kashu [Chromium 49.0|Ubuntu] 发表。
  14. 如果是Linux下跑windows还能接受   windows下跑linux  就windows那内存占用率还是算了吧 —— mycolors [Opera 36.0|Windows 10] 发表。
  15. 所以微軟還是想乾掉linux,只不過不是消滅而是吃進去共存. —— 来自广东中山的 Internet Explorer 8.0|Windows 7 用户 发表。
  16. 文件权限怎么解决? —— 来自广西桂林的 Chrome 49.0|Windows 7 用户 发表。
  17. 软链接怎么搞的 —— 来自浙江杭州的 Firefox 45.0|GNU/Linux 用户 发表。
  18. 能运行桌面应用吗? —— 绿色圣光 [Firefox 45.0|GNU/Linux] 发表。
  19. 目前不能,不过我觉得理论上是可行的。但是微软也许不考虑这样做。 —— linux [Chrome 49.0|Mac 10.11] 发表。
  20. 这么多人看到 Ubuntu on Windows 就准备抛弃 OS X 转投 Windows 10 了?微软画的大饼看看就好了,何必当真呢! —— hazdzz [Firefox 45.0|Mac 10.9] 发表。

添加新评论