UNIX

最早的单用户操作系统就是 unix,在 unix 之前大部分操作系统的发展方向是多终端计算机,往越来越多的终端发展。

割据时代

1969 年,贝尔实验室的开发了 UNIX 操作系统。AT&T 公司一时不知道怎么用这玩意儿赚钱,初期完全是纯出于兴趣做开发,并在研究机构和大学中流传,但看到其他公司能利用其赚取利润之后,AT&T 公司嗅到到商机,在70 年代后开始采用法律手段保护它,禁止将 UNIX 源码授权给大学等学术机构使用。

但此时已有多个UNIX的变种版本并被厂商采用,最流行的就是加州伯克利分校的 BSD(Berkeley Software Distribution,目前在此基础上又有 FreeBSD、OpenBSD、NetBSD 等新的很多分支版本),于是就有了商业公司之间的版权诉讼,UNIX版权也在多个公司间易主。各种商业并购之后,UNIX 商标权现归国际开放标准组织(The Open Group)所拥有。

各UNIX版本继续各自发展,呈现的差异越来越大,以至于相同的源代码在这版 UNIX 变种上正常编译运行、却在那版UNIX变种上出现错误甚至无法编译成功,即呈现出了“多种UNIX系统”割据的局面。

有个叫 IEEE 的组织实在看不下去了,大家各立山头是要割据的节奏,不利于 UNIX 软件系统的发展,于是在1985年牵头设立一个标准,叫“可移植操作系统接口”(Portable Operating System Interface,POSIX,后面的X是为了表明其对UNIX API的传承)。其目的简要说是这样:无论怎么折腾,至少保证软件系统接口规范的一致性,从而保障程序代码的兼容性。这件事情大家自然喜闻乐见,软件厂商也少了很多头疼的事。各 UNIX 系统厂商即使想割据,但为了兼容性以占有更大市场,也纷纷愿意加入对 POSIX 的支持。

image.png

操作系统(一)UNIX 到 Cygwin - 图2

GNU

一个叫Richard Matthew Stallman的大胡子美国大叔对 UNIX 系统封闭源码很不满意,于 1984 年发起了 GNU 计划(GNU is Not Unix,首字母递归缩写),计划开发一个完全兼容UNIX的自由软件系统,为此专门成立了自由软件基金会(Free Software Foundation,FSF)。

RMS 大神 FSF 打算是搞成一个 GNU/Hurd 操作系统,其中 Hurd 是用来取代 UNIX 内核的新系统内核,GNU 代表用户软件。FSF 开发出了很多极其优秀的软件,名字和 UNIX 下的都相似甚至相同,从而保持软件一致性、降低用户学习成本,尤其是shell、Emacs文本编辑器、gcc编译套件、各种开发库等更让很多程序员爱不释手。但这个Hurd内核却进展缓慢,直到GNU软件完成计划的90%以上,Hurd还是没什么起色。但Hurd到今天仍然在顽强地或者,2016年12月18日发布了 v0.9 版本。

LINUX

1991年,一个叫 Linus Torvalds 的芬兰小伙子在鼓捣他老师的 Minix 系统(UNIX的变种版本,一般仅用在计算机教学中)之余,对其禁止用于商业目的很不满,决定要自己写成一个操作系统并允许在i386的机器上运行。这位天才hacker把自己的成果公布在互联网上。

Linux 本身只是个操作系统的内核,支持 POSIX 标准,是一个 UNIX-like 系统内核,但完完全全是从零开始重写的代码,最重要的,它还是完全开源的自由软件。

这边 FSF 一看自己的Hurd还不知道什么时候能用呢,那边 Linus Torvalds 觉着 GNU 软件不赖,重新造轮子也累,于是众多厂商、机构、社区纷纷把 GNU 软件和 Linux 内核(以及其他的一些软件包)整合在一起组成一个完整的操作系统发行版,FSF 表示没什么意见,只是坚持要求全称应该叫“GNU/Linux”,光叫 Linux 就把 GNU 的成果完全忽略掉了。

GNU、Linux都有着开源、自由的特点,理论上任何人都可以自搞一套新的Linux内核以及发行版,为避免重蹈UNIX那样严重分裂、互不兼容的覆辙,Linux基金会发布了 Linux Standard Base(LSB),制定Linux应用程序与运行环境之间的二进制接口(Application Binary Interface,ABI)规范,被 Linux 发行版所遵循。

LINUX 内核支持 POSIX 标准,GNU 使用 POSIX 标准编写。

Windows

微软帝国靠着Windows发家致富,操作系统市场形成UNIX、GNU/Linux、Windows的主流格局,微软帝国自己声称Windows“部分支持POSIX”。

GNU 那一票优秀的软件,尤其是开发工具,大家(主要是程序员)都期盼在 Windows 系统上也能用上,UNIX 和Linux 像是近亲,但 Windows 就完全不同了,GNU 那一票软件的源码在 Windows 下是无法直接编译的,二进制可执行文件复制到 Windows 下 Windows 更表示不认识。但是微软帝国就是这么牛气,什么标准不标准,俺们微软的标准才是标准。

实际上微软也曾在 Windows 上造一个 UNIX 子系统出来,但由于种种原因没什么影响力。虽然 Windows 占据几乎100%桌面操作系统市场,深的普通用户欢心,但是 Windows对 POSIX API 支持的匮乏。

Cygwin

1995年,一家叫做“Cygnus Solutions”的公司正是打算努力做这件事——把符合POSIX标准的程序搬到Windows上运行,这个项目叫做“Cygwin”。RedHat公司(小红帽)后来收购了 Cygnus Solutions 并继续 Cygwin的开发,2018年RedHat被IBM收购。

Cygwin的目标是在Windows中构建一个类似UNIX的软件环境,以方便把符合POSIX标准的软件移植到Windows下。当我们需要享受GNU那些个杀手级工具的便捷高效却犯不着安装一个GNU/Linux系统时,Cygwin是不错的选择。与此相似的项目有Interix、MKS Toolkit、DJGPP(DOS下)、Xming、UnxUtils、GNUWin32、GNUWin II、MinGW、NuTCracker、OpenNT等。

所谓“寸有所长,尺有所短”,Windows 图形界面傻瓜式的操作同样吸引着广大用户,其超高的桌面市场份额就是证明,而 Cygwin 把 UNIX 环境带到 Windows 中来,让一票命令行工具焕发生机。图形界面与命令行,实现优势互补,相得益彰。