昨天,Red Hat 宣布,凡是注册其最新推出的“开发者订阅”的开发人员可以免费下载 Red Hat Enterprise Linux 操作系统。

考虑到这个消息是昨天宣布的,我们认为这个消息还是可信的。如果你想成为一位 GNU/Linux 开发者,你现在就可以从 Red Hat 网站上下载最新版本的 Red Hat 企业版 Linux (RHEL)。

此外,Red Hat 同时宣布在“开发者订阅”中,也可以免费使用它的 JBoss 中间件。

“通过该订阅,可以免费下载使用 Red Hat 企业版 Linux 和 Red Hat JBoss 中间件,开发借助这些开发平台和工具,可以很容易地使用我们的技术来启动项目和寻求解决方案,如果部署到产品环境中也可以得到商业支持,而不用担心移植或不兼容问题。” Red Hat 的开发工具和市场总监 Harry Mowersenior 说。

大多数人可能觉得这不可思议,好吧,关键点是,按照协议,这些免费提供的产品不能用于产品环境,只能用于本地的应用开发环境,如果用在产品环境需要购买付费订阅。

这个免费的 Red Hat 企业版 Linux 开发者套装包括 Red Hat 企业版 Linux 服务器和各种开发工具,Red Hat 会支持10年,包括 PHP、 Python、 Ruby、 OpenJDK 7(1.7)和 OpenJDK 8(1.8)。

现在就去注册下载你的 Red Hat 企业版 Linux 开发者套装吧!

 

在 Build 2016开发者大会上,微软宣布它上个月收购的 C# 和 .NET 移动开发工具 Xamarin 对所有 Visual Studio 用户免费提供,涵盖了从免费的社区版到企业版的所有 Visual Studio 版本。此举意味着开发者可以使用 .NET 和 C# 为 Android 和 iOS 平台构建应用。值得一提的是,部分面向企业的 Xamarin 功能没有对免费的 VS 用户开放,使用这些功能需要 Visual Studio Enterprise 。

微软还宣布,将在未来几个月开源 Xamarin SDK,运行时、库和构建工具的源代码都会在 GitHub 上发布,这些开源项目将由  .NET 基金会管理。                  

 

平时不太关注微软的技术,不过这次微软 build 2016有个新闻倒是值得关心一下。

对这条新闻,每个人看到的角度略有不同(可以参见知乎上的讨论),Shell 爱好者期待可以在 Windows 下用强大的 Linux Shell ,Ruby 程序员也希望可以在教新人时不必强迫别人换操作系统。

不过我觉得最大的一个影响应该是关于 Docker 的,微软这个技术的推出将有助于为 Docker 进入 Windows 铺路,甚至我猜想这可能就是微软搞这一套技术的直接目的。

我们来看一下具体的技术,这个东西表面上看就像个模拟器,类似 cygwin,也可能有人会想到虚拟机,但是它实际上要更直接,它是在用 Windows 内核实现了对 Linux 系统调用的兼容支持,由于不需要高成本的模拟,它的性能是相当可观的(甚至有不少人认为,如果是用 IOCP 来实现 epoll,那么它的性能有可能比 Linux 原生的 epoll 还要好)。

参考wikipedia上的这个图,看看体系架构:

Windows 2000 architecture

我们知道,WinNT 系的内核本身其实是很牛的,它的 API 是有一个抽象层作为隔离的,而 Win32 API 可以看做这个抽象层的一个实现,理论上并没有什么特殊地位,这样就可以象支持原生 windows 程序一样支持 linux 程序了,那么我们之前为什么一直没看到 Linux on Windows 呢?

因为技术牛不意味着市场会接受,这个设计曾经被认为有过度设计的嫌疑,据说微软做了这个设计以后也没看到有啥大的价值,因此并没有在这个抽象层上做出一个与 Linux API 兼容的实现。

这一切在 Docker 出现以后就变化了。近两年,Docker 技术发展十分迅猛,由于它本质上是对 Linux 的再发明,因此本来和微软没什么关系。但是,Docker 一方面占据了“云计算”这个领域的重要位置,另一方面又对服务器软件研发有很重要的推动作用(devops 运动),这些都是微软很看重的地方,所以它很早就在谋划拥抱 Docker 和容器技术。

用 “微软+Docker” 作为关键字 Google 能找到几条新闻,放在一起看很有意思:

注意看看那几条新闻的时间,说实话,我当时看到最早的那条新闻时还没法想象微软会做出这么大的努力,但它的节奏十分清晰,先是做一个简单到只有 http 封装的 Docker CLI 作为试水(也可能是为了卡位吧),然后再将 Windows 软件本身的工作方式和容器化趋势结合起来。截止到最近,微软的方法思路和 Docker 是一样的,理论上它的 Windows 也可以跑容器,这样,微软在服务器市场也可以分得一杯羹。

然而还有一个困难——“内核”,我们知道,Docker镜像可以跨越各种 Linux Distribution,然而必须受限于宿主机的内核版本,这是它为了超越虚拟机的性能而不得不损失的独立性,Windows Server 即使能象“容器宿主机”一样工作,也会由于不能支持众多 Docker 镜像(都是基于 Linux 的)所需要的 API 而干瞪眼。

现在微软补上了这个短板。

根据目前看到的说法,Windows Server 将可以提供 Linux 兼容的 API ,因此理论上可以很好的支持现有的所有 Docker 镜像,这对于云计算环境是非常有帮助的。又因为这种支持并不是“模拟式”的,因此并没有损失 Docker 的一个重要优势——性能。

从这个角度看,这个号称“Win10与Ubuntu合体”的技术,并不是象它的标题一样仅仅是好玩,而是在微软的战略路线中应该有一个很重要的位置。有很多朋友说这是微软挖的一个坑,言下之意是说微软自己可能“管挖不管埋”,但如果微软自己不作死,它应该会重视和完善这个技术的。

在 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 上。