当微软和Canonical 宣布说的Ubuntu将在上运行的Windows 10在2016年3月下旬,许多Linux的球迷可以原谅的思想,这是早期的愚人节的玩笑。但是在Windows上运行的Ubuntu是一个严肃而受欢迎的补充,它将使Windows成为一个严肃的开发环境。
是的,你听到的是对的。您现在可以在Windows上运行Ubuntu。或者更确切地说,命令行工具,如流行的Bash shell。
当然,像Cygwin这样的环境可以将Unix和Linux工具移植到Windows,但现在您可以运行实际的Linux 二进制文件而无需双启动或设置虚拟机。众所周知,过道两边的许多开发人员对这一发展充满热情已经不是什么秘密了。
在Windows上运行Ubuntu
如果你想要尝试一下,那就比较容易了。您只需要Windows 10的预览版本14316(完全成熟的版本将在2016年夏季推出Windows 10周年纪念版)。
您必须进入设置以启用“开发人员模式”。之后,您将能够在命令提示符下键入“bash”并运行流行的shell。
为什么选择Ubuntu?
为什么一家公司曾将Linux和开源资源与现在支持Linux的共产主义相比较,主要是操作系统的竞争对手Windows?正如前微软CEO史蒂夫鲍尔默所说,答案是“开发人员!开发商!开发商!开发者!”
微软和Linux社区之间最大的敌意是多年来,当开发应用程序仍然意味着在桌面上开发Windows应用程序(以及在较小程度上,Mac应用程序)时,Windows在市场上有一个虚拟的束缚,软件巨头不愿失去任何理由。
虽然Microsoft Windows仍然是最受欢迎的桌面操作系统,但其母公司却无法自满。移动和云计算的新世界已经窃取了一点微软的风头。
更重要的是,许多开发人员正在构建不在Windows机器上的Web和移动应用程序。环顾任何开发者的会议,你会在观众中看到的许多笔记本电脑都是Mac。这些新创业公司使用的许多服务器都是Linux,因为这是他们在计算机科学课程中学到的东西。
另一方面,Windows命令行似乎陷入了MS-DOS时代,尽管微软尝试用PowerShell取而代之。
换句话说,Linux掌控着软件开发的新世界。
主要的Windows开发人员Scott Hanselman注意到了大变革。他经常会在网页编程上找到教程,只是为了找到一个“$”提示符,这意味着该教程不适合他作为Windows开发人员。
借助Windows 10上的Ubuntu,开发人员将能够访问他们在类Unix系统上使用多年的相同命令行工具,而无需安装虚拟机或双启动。
先例
它并不像听起来那么奇怪。微软之前曾支持过Unix。早在80年代,它甚至是Xenix的主要Unix供应商,之后开发被交给Santa Cruz Operation(SCO)。微软甚至多年来一直保持着SCO的股份。
微软认为AT&T对Unix的许可过于繁琐,并与IBM合作构建OS / 2,只是在与IBM在OS / 2和Windows方向上的分歧后开发Windows NT。即便如此,微软还是进入了Unix世界。NT 最初支持POSIX层,它自己的Unix服务为想要使用NT但在Unix软件上投入大量资金的公司提供类似Unix的环境。
这个怎么运作
Ubuntu for Windows是由微软的Linux子系统Linux实现的。它是一个兼容层,可将Linux系统调用转换为Windows系统调用。这些工具也只是命令行。虽然已经可以在Windows上安装X11,但是没有计划提供图形应用程序。由于大多数流行的Linux图形应用程序已经拥有本机Windows端口,因此不会有太大的损失。
它不是一个完全成熟的Linux系统。虽然二进制文件是ELF二进制文件而不是Windows 可执行文件,但只有userland实用程序正在运行,而不是内核。
这与Cygwin不同,开发人员已经创建了一个将Linux系统调用转换为Windows 的DLL。使用Cygwin,程序将重新编译为Windows可执行文件。
备择方案
即使在Windows上运行Ubuntu(有点),对于那些希望在保持Windows的同时利用Linux的强大功能的人来说,还有很多选择。
Cygwin和Uwin是非常受欢迎的环境,适合那些想要POSIX兼容工具但又不需要虚拟化开销或者不得不切换操作系统的人。MinGW和MSYS提供轻量级替代品。
通过VMware和VirtualBox进行的虚拟化提供了对操作系统的更多控制,但在较慢的计算机上存在性能损失。具有大量RAM的快速机器将提供与裸机安装相媲美的性能。
对于想要同时运行Linux和Windows的人来说,双启动一直是传统的选择。这些天很容易,但在操作系统之间切换会很烦人。
由于能够在Windows上运行Ubuntu,开发人员将拥有强大的开发环境以及Windows提供的各种硬件选择。