Ubuntu on Windows 10工作方式全解析

导读很多科技媒体都报道了微软将在 Windows 10 中启用原生的 Bash Shell 支持,没错,微软已经说明 Ubuntu on Windows 将在下个即将发布的 Windows 10 主要版本(Redstone)中到来。
        Ubuntu on Windows 01
误区澄清
在展开今天的内容之前,我们先要为大家澄清两个误区:
  1. 微软支持是的 Ubuntu on Windows,而非 Linux on Windows。
  2. Ubuntu 母公司 Canonical 此次与微软的合作是要直接支持 Windows 原生库和程序:Windows 子系统 for Linux(WSL),而不是通过容器技术或虚拟机运行 Ubuntu。
Ubuntu on Windows 10工作方式

其实 WSL 相关代码早在 2016 年 1 月下旬便被微软悄悄内置进了 Windows 10 Build 14251 预览版中,此后微软的开发人员制订了 lxcore.sys 与 lxss.sys 这两个新的子系统文件,让其成为 Windows 程序员开发 Linux 应用程序的桥梁。WSL 的首要工作是支持 Ubuntu 用户态映像,微软发言人解释说:「我们为 Windows 建立了新的基础架构,WSL 让 Ubuntu 的缔造者 Canonical 公司可以实现运行 Ubuntu 用户模式映像。基于此,用户就可以在 Ubuntu on Windows 10 中直接运行原生 Bash。」Canonical Ubuntu 产品和战略执行团队的 Kirkland 提到:「我们此次是将 Ubuntu ELF 二进制文件与 Windows 进行 bit 到 bit 的校验和直接对接。」


Ubuntu on Windows 02

为实时将 Linux 系统调用转换成 Windows 系统调用(WSL,目前尚未开源),一个做事非常犀利的 Ubuntu 开发团队一直在努力配合和适应微软的研发技术,以期尽快实现对接。(说以此,想必很多 Linux 爱好者应该已经联想到 wine,这款可在 Windows 中原生运行 Linux 二进制文件的工具。)目前从微软内部的压力测试工具和实验数据来看,Ubuntu on Windows 10 应用与 Windows 10 应用几乎可以获得同等的 CPU、内存和 I/O 性能结果。对 Windows 工作原理和发展历史非常了解的用户应该知道,微软此次与 Canonical 的合作似乎显得有些姗姗来迟。其实从 Windows NT 开始就内置了 POSIX 子系统,它就是专门为 Windows 提供原生 Unix-Linux 支持而开发的。

为什么变革
很多人在考虑微软此次为什么要做出如此大的变革?其实不难看出,从 Satya Nadella 上台微软 CEO 宝座之后,一直在致力于推广「移动为先,云为先」的理念,Microsoft Azure 云平台也在不断拥抱开源(一个只支持微软产品的平台,还能叫公有云?)。从用户的角度来看,除了桌面端的 Windows、Mac 和 Linux 外,很多用户同时拥有并管理多套异构平台,就经常需要在 Windwos 中折腾占资源的异构虚拟机、SSH 和 Cygwin 等。在有了 Ubuntu on Windows 后只需点击几下,便可以访问一个功能丰富的 Ubuntu Shell,而无需再在本地虚拟化或重新编译。而对于 Canonical 来说,其 Ubuntu 是 Microsoft Azure 和其它云平台中最流行的 Linux 发行版,也是普及率非常高的 Linux 桌面端。将 Ubuntu Shell 内置进 Windows 桌面,可以帮助用户和开发人员更容易地使用 Visual Studio、vim 或 emacs 编辑代码、更简便地使用 git、scp 或 rsync 向云实例推送数据。
小结
很显然,不论对微软、Canonical、还是最终用户,此次几方史无前例、似乎有些违背惯例的合作对各方都非常有好处,希望微软在这个方向上的探索会有一个三赢的结果。如果你对 Ubuntu on Windows 有兴趣,Ubuntu 14.04 LTS for Windows 10 的首个映像将很快会发布,Ubuntu 16.04 LTS 映像会在 4 月 21 日正式发布之后不久取代 Ubuntu 14.04 LTS 上线到 Windows Store。不过由于所有 Ubuntu on Windows 的映像都基于 Redstone 代码,所以最快需要等到今年夏天 Windows 10 Redstone 正式发布最终用户才能正式用上。

本文转载自:http://www.linuxprobe.com/ubuntu-on-windows-10-work

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/

### 关于 `ubuntuwindows.h` 的讨论 在 Linux 和 Windows 平台之间实现互操作性时,通常会涉及跨平台开发工具链以及特定的头文件支持。对于提到的 `ubuntuwindows.h` 文件,目前并没有官方文档或广泛认可的标准来定义该文件的具体用途[^1]。 然而,在实际应用中,开发者可能会创建自定义头文件以处理不同操作系统之间的兼容性和接口调用问题。这种情况下,`ubuntuwindows.h` 可能是一个项目内部使用的头文件,用于封装针对 UbuntuWindows 系统的功能差异。以下是可能的内容方向: #### 1. **条件编译** 通过宏定义区分目标平台并加载相应的功能模块: ```c #ifdef _WIN32 // Windows-specific code or includes #include <windows.h> #elif __linux__ // Linux-specific code or includes #include <unistd.h> #endif ``` 此类头文件的作用通常是统一 API 接口,使得应用程序可以在多个平台上无缝运行而无需大幅修改源码。 #### 2. **共享库的支持** 如果涉及到动态链接库 (DLL 或 `.so`) 的使用,则需要注意路径配置和依赖项解析的问题。例如,在 Ubuntu 下可以通过编辑 `/etc/ld.so.conf.d/` 来添加新的共享库目录[^3];而在 Windows 上则需确保 DLL 路径被正确指定到系统的 PATH 环境变量中。 #### 3. **防火墙与安策略调整** 当部署服务端程序至生产环境时,关闭不必要的防护机制可以减少潜在冲突。比如停止 firewalld 服务及禁用 SELinux 是常见的法之一[^4]: ```bash systemctl stop firewalld systemctl disable firewalld setenforce 0 ``` 尽管如此,仍建议仅限测试阶段执行上述命令,并依据实际情况重新启用这些保护措施以免影响网络安状况。 --- ### 提供一段示例代码展示如何利用假定存在的 `ubuntuwindows.h` 假设我们有一个简单的函数用来打印当前的操作系统名称: ```c #include "ubuntuwindows.h" void print_os_name() { #ifdef UBUNTU_OS printf("Running on Ubuntu\n"); #elif defined(WINDOWS_OS) printf("Running on Windows\n"); #else printf("Unknown OS\n"); #endif } ``` 此例子展示了基于预处理器指令判断所处环境从而出相应反应的方法论。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值