主流os内核通常是C语言写成,系统函数库通常以一个或多个链接库文件的形式提供,其中最重要的是C标准库,其他的链接库往往调用C标准库而实现,当然也可能直接调用系统内核函数,甚至混合。不同系统平台有多种主流的C标准库共存:
近40年的历程,Unix历经磨难,几近夭折,一路走来其实很不容易。
Unix史:1969年,贝尔实验室的天才们Ken Thompson、Dennis Ritchie和Douglas McIlroy开发了UNIX操作系统。由于贝尔实验室是AT&T(美国电话电报公司)的下属机构,所以一开始Unix的版权归AT&T所有。
但是呢,AT&T垄断了美国长途电话业务,所以美国司法部在1958年与它签了一个和解协议:AT&T同意不进入计算机业,不销售任何与计算机有关的产品,以避免司法部起诉它违反《反垄断法》。
Unix是计算机的操作系统,出于上述原因,所以AT&T不能销售unix,任何要求得到源码的机构,都能免费得到。因此AT&T公司一开始也没考虑商业化这事儿,初期纯粹出于兴趣做开发了UNIX,其源码就在研究机构和大学中流传。
其中,加州伯克利分校得到源码后,为unix添加了许多功能,成为了一个最流行的分支BSD(Berkeley Software Distribution(现今,在此基础上又有FreeBSD、OpenBSD、NetBSD等新的很多分支版本)。
但是呢,之后发生了一件谁也没有想到的事情。1974年,美国司法部再次起诉AT&T违反《反垄断法》,1982年,哥伦比亚地区法庭判决AT&T败诉,必须被拆成8家小公司。但是,这个判决也意味着1958年的和解协议失效,AT&T突然可以进入计算机业了,于是unix开始考虑商业化了。
AT&T公司在70年代后开始采用法律手段保护Unix,在1983年,AT&T发布了Unix最新版system V,这是一个商业化版本,付费才能使用,并且不得传播源码。这对BSD构成了限制,为了减少纠纷,伯克利分校规定,BSD本身依然保持免费,但是只能提供给持有AT&T源码许可的公司。不过,与此同时,伯克利的师生也开始着手另一项工作:将AT&T的专有代码从BSD中逐渐去除。
由于各UNIX版本各自发展,呈现差异越来越大,相同的源代码无法在不同的UNIX版本系统上编译成功。为了方便私有化,将系统函数库统一起来,IEEE组织认为至少要保证软件系统接口规范的一致性以此保证程序代表的兼容,于是IEEE在1985年牵头设立了一个POSIX标准(Portable Operating System Interface,可移植操作系统接口,后面的X是为了表明其对UNIX API的传承,POSIX标准主要就是针对UNIX API而制订),最终当然是由AT&T的Unix取得了这个标准制订战争的胜利,还取得了Unix这个注册商标。此时BSD的拥护者自喻为冷酷无情的公司帝国的反抗军。
80年代后期,几个伯克利毕业的学生,成立了一家Berkeley Software Design Inc.公司,简称BSDi,BSD的一个商业版本。他们在广告中宣称,自己的产品不包含任何AT&T代码。这句话惹恼了AT&T,1990年BSDi被告上法庭,稍后伯克利分校也被追加为被告。这场诉讼对BSD打击极大,所有的开发活动都被迫停止,用户人心惶惶,担心自己也遭到AT&T的追究,因此BSD的使用急剧减少。最后在1994年,双方达到和解(1994年,官司还没有结束,AT&T公式就把Unix卖给了Novell公司,从此不再与Unix发生关系),后来BSD才恢复开发。事实上,Novell从AT&T买下Unix版权后,检查了BSD的源码,在18000个组成文件中删除了3个,并对其他文件做了一些小修改,然后BSD就重新获得了自由发布源码的许可。
然而之后呢,UNIX版权的故事还没有结束,之后还有多次易主,各种商业并购后,最终UNIX商标权现归于国际开放标准组织(The Open Group)。
之后Unix的发展就集中在两个方向,一个是各个商业公司自己修改的Unix版本,比如Sun的Solaris,HP的HP-UX,IBM的AIX,另一个则是开源项目的开发,比如BSD和我们接下来要提到的——Linux。
小结:从八十年代中后期开始,AT&T捍卫自己的Unix版权,但完全不顾它的创造者和开发者的愿望,导致Unix丧失活力、一蹶不振,大量开发者无法参与,只好离开了这个平台。BSD在1992~1994年期间,开发处于停滞,错过了发展的黄金时机。官司结束以后,又不幸发生分裂,变成了FreeBSD、NetBSD和OpenBSD三个版本。这些原因导致BSD直到今天,都还在操作系统的竞争中处在落后地位。
在Unix私有化的同时,Linux诞生了,它的诞生不能不提到下面两位大神
一些主观上对RMS与Linus两位的看法
RMS走向了另一个极端,他是完全反版权的,反商业化的。把软件产品从强制收费推向了强制免费、共享和开源,这也为他带来了许多许多的争议。他的GPL被认为是一种“病毒式”的协议,BSD的fans和老牌Unix黑客们认为,他们编写Unix的年头都比GPL声明要长得多,GPL依然有太多的限制,而BSD协议则比GPL更加的自由。
在RMS组织黑客闹革命的年代里,没有多少黑客认同于RMS的理论体系,更多的他们参与GNU只是为了体现那种在互联网上协同工作,令人激动的工作模式。黑客文化没有统一于他的理想体系之下。
Linus Torvalds的中庸态度网聚了世界上顶尖的黑客,其绕过了GPL和反GPL的派系之争,使用GNU的工具从而以GPL的“传染性”保护了Linux,但他同时也不承认RMS的理论思想体系——他既开源,又支持商业化。
虽然,他没有带给黑客们什么重要的思想体系或统一的价值观,但他整合了全世界黑客的阵营,让所有的黑客的行为都围绕着Linux这一事物进行。他以“用自由软件是因为它运行得更好”轻而易举地盖过了“用自由软件是因为所有软件都该是自由的”。这令人愉快的实用主义及灵活而低调的行事风格,促使黑客文化在1993至1997年间取得了一连串令人惊奇的胜利,不仅仅在技术上的成功,还让围绕Linux操作系统的发行、服务和支持产业有了坚实的开端。
图形化系统是最被普通用户接受的系统了!
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等)。
GCC的初衷是为GNU操作系统(一款完全免费的操作系统)专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,甚至在微软的Windows上也可以使用GCC。
MinGW( Minimalist GNU For Windows(GCC compiler suite))。实际上是将经典的GNU的编译器套件中—— C语言 编译器 GCC(GNU Compiler Collection,GNU的编译器套件) 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。实际上 MinGW 并不仅是一个 C/C++ 编译器,还是一套 GNU 工具集合。
一句话来概括:MinGW 主要就是 GCC 的 Windows 版本,不需要依赖中间层 。
MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64 则可以编译生成 64位 或 32位 可执行程序。
正因为如此,MinGW 现已被 MinGW-w64 所取代,且 MinGW 也早已停止了更新,内置的 GCC 停滞在了 4.8.1 版本,而 MinGW-w64 内置的 GCC 则更新到了 6.2.0 版本。
Cygwin的项目目的是提供运行于 Windows 平台的类 Unix 环境(以 GNU 工具为代表,包括GCC),它在Windows中增加了一个中间层——兼容POSIX的模拟层(最典型的就是cygwin1.dll,它将部分 Posix 调用转换成 Windows 的 API 调用,实现相关功能)。在Cygwin里开发就相当于在linux上开发,对于开发人员来说就相当于调用linux类型的api。
Cygwin 的目录结构基本照搬了 linux 的样子,但同时,也兼容了 Windows 的许多功能:大部分应用使用 Unix 风格的路径,Windows的盘符通过类似挂载点的方式提供给 Cygwin 使用;Cygwin 中既可以运行 Cygwin 的应用(依赖模拟层),又可以运行 Windows 应用
Cygwin可以通过重新编译,将POSIX系统(例如Linux、BSD,以及其他Unix系统)上的软件移植到Windows上。当然如果要在windows上执行,运行时必须要cygwin1.dll支持。
就像先辈David Wheeler大神曾经曰过的:
“All problems in computer science can be solved by another level of indirection(计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决)”。
一句话来概括:Cygwin是在Windows下调用Unix-like的系统函数的环境,需要依赖中间层。
MSYS(全称叫Minimal SYStem,是MinGW的一个子系统),是一套运行在Windows上的bash,包括基本的bash, make, gawk and grep 等等。也就是运行在Win上的Linux Terminal。与 Cygwin 的大而全不同,MSYS 是冲着小巧玲珑的目标去的,所以整套 MSYS 以及 MinGW,主要以基本的 Linux 工具为主,大小在 200M 左右,并且没有多少扩展能力。
一句话概括:MSYS是在windows下模拟的小型linux的环境,提供在windows上模拟Unix环境来使用MinGW。
不过喜欢完整体验、不在乎磁盘占用等等,还是推荐 Cygwin 而不是 MSYS。
由于 MinGW 万年不更新,MSYS 更是,Cygwin的许多新功能 MSYS 没有同步过来,于是Alex等人建立了星一代MSYS项目——MSYS2
MSYS2基于Cygwin和MinGW-w64构建。JI集成了更优秀的包管理器 pacman,有活跃的开发者跟用户组,有大量预编译的软件包(虽然肯定没有Cygwin多)。它提供了类似Linux下的基本bash的一个环境,同时也让用户更加方便地使用MinGW-w64)开发原生的Windows应用。
一句话概括:MSYS2是MSYS的一个升级版,准确的说是集成了pacman和Mingw-w64的Cygwin升级版。(它比MSYS优秀很多呀)
对于不喜欢庞大的 Cygwin 的用户而言,推荐试试 msys2