类Unix环境在Windows上的演进史

news2024/11/15 16:31:15

自从以Unix为基础的操作系统被发明以来,尝试在Windows环境中模仿Unix操作的工具就一直存在。这种需求源于许多原因,包括Unix对脚本和命令行工具的强大支持,以及Unix和Linux系统在科学、工程和其他技术领域的广泛使用。下面就让我们一起探讨下在Windows上模仿Unix环境的演进史。

在这里插入图片描述

标题模拟Unix环境

最初,对于在Windows上运行Unix程序的需求,主要通过一些简单的实用程序和工具来满足,比如Cygwin。Cygwin是一款提供了大量GNU和开源工具的软件集合,它可以在Windows上创建一个类Unix环境,让开发者可以在这个环境中使用类似于Linux的命令行接口。在Cygwin中,我们甚至可以使用类似在Linux上的包管理工具apt。Cygwin不但支持许多Linux的命令行工具,如bash、ls、grep等,通过使用Cygwin/X,甚至图形应用也可以移植到Windows环境中。目前Windows上的X Server如Xming等就是基于Cygwin/X开发的。

Cygwin通过在运行时动态转换POSIX系统调用来实现这个目标,它提供了一个Cygwin.dll文件,这个文件对POSIX系统调用进行了实现。基于Cygwin的GNU编译环境提供了对POSIX系统非常好的兼容性。但由于有了这个POSIX系统调用的转换层,编译出来的代码效率上有一定的损失。为了弥补这个问题,开源社区又推出了一个简化版的GNU编译环境MinGW。MinGW,全称为Minimalist GNU for Windows。MinGW的目标不是提供一个完整的类Unix环境,而是直接在Windows环境下使用GCC编译器。因此,MinGW编译出来的结果是原生的Windows应用程序,它们直接使用Win32 API,不需要任何的运行时库。

由于MinGW只是一个GNU编译环境,作为补充在其基础上又开发了一个Unix风格的小型shell环境MSYS(Minimal SYStem)。MSYS的目标是提供一个足够的环境,使得用户可以在Windows平台上运行configure脚本和生成Makefile,从而可以使用GNU工具链进行软件的编译和安装。MSYS并不包含所有的Unix工具和库,它的目标并不是提供一个完整的Unix环境。MinGW和MSYS是在32位处理器下开发的。随着处理器从32位过度到64位,两个新的开源项目Mingw-w64和MSYS2提供了64位的GNU开发环境。

与Cygwin和MinGW发布的同一时期,微软也推出了类似的商业软件包Windows Services for Unix (SFU) 1.0。SFU使用的是与Cygwin类似的商用产品MKS Toolkit。这是微软为Windows NT系列操作系统开发的一个软件包,它提供了一个环境,使得在Windows平台上运行编译为UNIX系统(如Solaris、HP-UX、AIX)的应用程序成为可能。

真正的Unix环境

尽管Cygwin等工具在Windows环境中提供了使用开源工具的可能性,但并不能提供完全的Unix体验。

在1999年,Softway Systems开发了一个叫Interix的Windows子系统。它可以说是一个真正的Unix环境。Interix为POSIX应用程序提供了一个在Windows NT上运行的环境,包括了对原生Unix系统调用的支持。微软在1999年收购了Softway Systems,并将Interix作为Windows Services for UNIX(SFU)3. 0的一部分发布。SFU3.0提供了一套完整的Unix环境,包括KornShell、C Shell、Perl、Vi、EMACS、awk、sed以及各种Unix命令行工具。

在Windows Vista发布时,SFU被重命名为Subsystem for UNIX-based Applications(SUA),并作为Windows的一部分发布。SUA提供了一个更为轻量级的解决方案,它只包括了一个POSIX兼容的环境和C运行时库,而Unix工具和shell则需要另外安装。

然而,尽管SFU3.5和SUA包含了大量的功能并提供了一个真正的Unix环境,但由于其性能和兼容性问题,并未能在用户中取得广泛的成功。

与Linux共存时代的到来

总结了SFU/SUA的开发经验,微软发现应用程序的兼容性是POSIX子系统能否成功的关键因素。

为了解决应用兼容性问题,微软推出了在架构上与SFU/SUA非常类似的Windows Subsystem for Linux(WSL)。

WSL是一种在Windows 10和Windows Server 2019上运行Linux二进制可执行文件(ELF格式)的兼容层。它不需要重启就可以在Windows上运行Linux,并且能够在Windows和Linux之间进行无缝的文件共享。WSL的推出为在Windows上运行Linux应用程序提供了一个更高效和方便的解决方案。

由于WSL1还是对系统调用的转换,所以还是有一些兼容性问题。比如无法在WSL1中使用FUSE等。到了WSL 2,通过使用轻量级的虚拟机技术,微软进一步提高了兼容性和性能,并引入了完整的Linux内核,使得与真实Linux环境的兼容性大大提高。这使得开发者可以在Windows机器上使用完全一样的工作流程和工具来进行Linux开发。

从Windows中类Unix环境的演进过程中,可以看到微软与Linux从对立走向合作的过程。Microsoft逐步将Windows打造成了一个对开发者友好且功能丰富的平台,它不仅支持传统的Windows应用程序,还能够无缝地运行和集成类Unix环境和工具。这种演变反映了Microsoft对开放源代码和跨平台开发趋势的响应,以及对满足现代开发者需求的承诺。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2048803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

input[type=checkbox]勾选框自定义样式

效果图&#xff1a; <template> <input class"rule-checkbox" type"checkbox" checked v-model"isChecked" /> </template><script setup lang"ts"> import { ref } from vue; const isChecked ref(); </…

应急响应-DDOS-技术指南

初步预判 通常&#xff0c;可从以下几方面判断服务器/主机是否遭受DDoS攻击查看防火墙、流量监控设备、网络设备等是否出现安全告警或大量异常数据包。如图所示&#xff0c;通过流量对比&#xff0c;发现在异常时间段存在大量UDP数据包&#xff0c;并且与业务无关。 通过安全设…

猫毛还是满天飞?宠物空气净化器是个好帮手

家里养了几只可爱的小猫咪&#xff0c;每天都想它们贴贴&#xff0c;有时候看到它们这么可爱的待在家里&#xff0c;都不想出门上班了。每天睁眼是它们&#xff0c;闭眼前也是它们&#xff0c;只要我待在家里&#xff0c;它们就和我一起挪动&#xff0c;好像身边多了几只可爱的…

qt-12工具盒(ToolBox)

工具盒--ToolBox drawer.hdrawer.cppmain.cpp运行图 drawer.h #ifndef DRAWER_H #define DRAWER_H #include <QWidget> #include <QToolBox> #include <QToolButton> #include <QGroupBox> #include <QVBoxLayout>class Drawer : public QToolB…

机械学习—零基础学习日志(如何理解线性代数5)

零基础为了学人工智能&#xff0c;正在快乐学习&#xff0c;每天都长脑子 特征向量和特征值 我们知道&#xff0c;线性映射&#xff0c;也就是矩阵&#xff0c;其实就是平面的一种变换。 但是在矩阵变换过程中&#xff0c;我们会发现有一个方向上&#xff0c;变化方向会与x的…

Python 函数式编程 内置高阶函数及周边【进阶篇 3】推荐

前面我们已经总结并实践了用python获取到了数据。也介绍了python中http网络请求的几种方式&#xff0c;正在学习python开发语言或者对python3知识点生疏需要回顾的请点这里 &#xff0c;本章主要总结了函数式编程及特点 和 python中内置的高阶函数及周边知识&#xff0c;方便自…

Scout Suite:开源云安全审计工具

Scout Suite 是一个开源、多云安全审计工具&#xff0c;旨在评估云环境的安全态势。 Scout Suite 利用云供应商提供的 API 来收集和整理配置数据&#xff0c;从而更轻松地识别潜在风险。 Scout Suite 无需手动筛选云 Web 控制台上的大量页面&#xff0c;而是会自动生成全面清…

ObjectUtils.nullSafeEquals你真的用对了吗?

目录 引言排查思考 引言 在写代码时&#xff0c;我们通常喜欢使用org.springframework.util.ObjectUtils#nullSafeEquals来比较两个对象是否相等&#xff0c;从而避免使用equals方法在对象为空时导致空指针异常。 最近在写代码时&#xff0c;我试图使用stream流的filter&#…

1.Linux_常识

UNIX、Linux、GNU 1、UNIX UNIX是一个分时操作系统&#xff0c;特点是多用户、多任务 实时操作系统&#xff1a;来了请求就去解决请求 分时操作系统&#xff1a;来了请求先存着&#xff0c;通过调度轮到执行时执行 2、Linux Linux是一个操作系统内核 发行版本&#xff1…

Linux - 常用基础指令和命令

文章目录 1、ifconfig指令2、ssh指令3、ls指令4、pwd命令5、cd 指令6、stat命令7、 touch指令8、mkdir指令9、rmdir指令10、rm指令11、man指令12、cp指令13、mv指令14、cat指令15、more指令16、less指令17、head指令18、tail指令19、时间相关的指令20、cal指令21、find指令22、…

指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么?

指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么&#xff1f; 1、无论指针类型怎么转&#xff0c;类对象内存没有发生任何变化&#xff0c;还是vfptr指向虚函数表&#xff0c;下面是成员变量&#xff0c;这在编译阶段就已经确定好了&#xff1b…

校园失物招领系统pf

TOC springboot337校园失物招领系统pf 绪论 1.1研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务&#xff0c;逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速&#xff0c;使用起来非常简单容易&#xff0c;用户甚至不用掌握相关的专业知识&…

自动驾驶-机器人-slam-定位面经和面试知识系列09之C++STL面试题(04)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新&#xff0c;基本涵盖了自己秋招历程被问过的面试内容&#xff08;除了实习和学校项目相关的具体细节&#xff09;。在知乎和牛客&#xff08;某些文章上会附上内推码&#xff09;也会同步更新&a…

鸿蒙(API 12 Beta3版)【HDR Vivid视频录制】 音视频编码

开发者可以调用本模块的Native API接口&#xff0c;实现在视频录制中支持HDR Vivid标准。 视频录制的主要流程是“相机采集 > 编码 > 封装成mp4文件”。 HDR Vivid视频编码 应用创建H265编码器&#xff0c;配置profile(main 10)相机底层包含HDR Vivid的surfacebuffer内…

Airtest 的使用

Airtest 介绍 Airtest Project 是网易游戏推出的一款自动化测试框架&#xff0c;其项目由以下几个部分构成 Airtest : 一个跨平台的&#xff0c;基于图像识别的 UI 自动化测试框架&#xff0c;适用于游戏和 App &#xff0c; 支持 Windows, Android 和 iOS 平台&#xff0c…

蛋白质基础

氨基酸:必需氨基酸 条件必需氨基酸和非必需氨基酸 必需氨基酸:机体需要但自身不能合成&#xff0c;必须从食物中获取的氨基酸。共有八种&#xff0c;对婴儿&#xff0c;组氨酸也是必需氨基酸。 条件必需氨基酸:半胱氨酸和酪氨酸在体内分别由蛋氨酸和苯丙氨酸转变而来。若膳食中…

HTML 列表和容器元素——WEB开发系列10

HTML 提供了多种方式来组织和展示内容&#xff0c;其中包括无序列表、有序列表、分区元素 ​​<div>​​ 和内联元素 ​​<span>​​、以及如何使用 ​​<div>​​​ 进行布局和表格布局。 一、HTML 列表 1. 无序列表 (​​<ul>​​) 无序列表用于展…

Java流程控制06:for循环详解

教学视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p41&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p41&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Java中的‌for循环结构‌是一种基础…

Python与DIAdem联合开发

Python可以通过COM接口与NI的DIAdem软件集成&#xff0c;允许用户以编程方式自动生成和定制报告。这种方式使得报告生成更加灵活且可定制&#xff0c;尤其适用于需要定期生成大量报告或对报告内容有特定要求的场景。 1. 工作原理 Python与DIAdem的集成主要依赖于COM&#xff0…

二叉树的判断

二叉树的判断 判断一颗二叉树是不是搜索二叉树 &#xff08;左边的比根小&#xff0c;右边的比根大&#xff09; 中序遍历一下&#xff0c;如果是的话就一定是升序的 如何判断一颗二叉树是否是完全二叉树 1.遍历任意的节点时候&#xff0c;如果返回右孩子没有左孩子&#x…