- 术语Linux通常用来指代完整的类Unix操作系统,Linux内核只是其中的一部分
- 这么定义多少有些措辞不当,因为一般商业Linux发布版中所含的很多关键组件实际上发源于另一项目,早于Linux问世前就已经启动了
GNU项目
- 为开发出一套完整而又可自由获取,包含内核以及所有相关软件包的类UNIX 系统,Stallman 发起了 GNU 项目(“GNU’s not UNIX”的递归缩写形式),并积极邀请有志之士加盟。1985 年,Stallman 创立了非盈利机构—自由软件基金会(FSF),以支持 GNU项目和广义意义上的自由软件开发
- GNU 项目的重要成果之一是制定了 GNU GPL(通用公共许可协议): GPL 许可协议发布的软件不但必须开放源码,而
且应能在 GPL 条款的约束下自由对其进行重新发布。可以不受限制的修改以 GPL 许可协议发布的软件,但任何经修改后发布的软件仍需遵守 GPL 条款。若经过修改的软件以二进制(可执行)形式发布,那么软件的修改者必需满足软件使用者的以下要求:以不高于发行成本的价格,获得修改后的软件源码。 - GPL 的第一版发布于 1989 年,第二版本发布于1991年(Linux 内核就是以该版许可协议发布的),第三版发布于2007年
- Linux 发布版中的大多数软件,包括 Linux 内核,都是以 GPL 或与之类似的许可协议发布的。
最初,GNU 项目未能开发出能够有效运作的 UNIX 内核,但却开发了大量其他程序:
- 由于这些程序全都针对类 UNIX 系统而设计,因此(理论上)均有可能在现有的 UNIX 实现上运行(实际情况也的确如此),更有甚者,有时还被移植到了其他操作系统上。
- Emacs 文本编辑器、GCC(原名为 GNU C 编译器,现更名为 GNU 编译器集合,集 C、C++,以及其他编程
语言的编译器于一身)、bash shell 以及 glibc(GNU C 语言库)便是 GNU 项目结出的硕果
到了 20 世纪 90 年代早期,GNU 项目已经开发出了一套几乎完整的操作系统,除了还缺少其中最重要的一环:能够有效运转的 UNIX 内核。于是,GNU 项目以 Mach 微内核为基础,发起了一项雄心勃勃的内核设计计划,史称 GNU/HURD 计划。然而,时至今日,HURD 的发布还遥遥无期。
万事具备,独缺内核。只要再拥有一个能够有效运作的内核,就能使 GNU 项目开发出的UNIX 系统“功德圆满”
在构成通常所说的“Linux 系统”的程序代码中,由于有相当一部分都源自 GNU 项目,因此 Stallman 更愿意用“GNU/Linux”一词来称呼整个系统。这一称谓问题(Linux Vs. GNU/Linux))也在自由软件社区中引发了一些口舌之争。
Linux内核
- 1991 年,Linus Torvalds,一位芬兰赫尔辛基大学的学生,在一门学习课程中,Torvalds 开始接触 Minix—由荷兰大学教授 Andrew Tanenbaum 于 20 世纪 80 年代中期开发的一款小型、类 UNIX 的操作系统内核
- Tanenbaum 将 Minix 连同源码完全开放,作为大学操作系统设计课程的教学工具。人们可以在386 系统上构建并运行 Minix 内核。当然,正因为其主要用于教学,Minix 在设计上几乎独立于硬件架构,故而也未对 386 处理器的能力充分加以利用。
- 因此,为了开发出一个高效而又功能齐备的 UNIX 内核,Torvalds 开始“自力更生”。数月之后,Torvalds 开发出一个内核“雏形”,可以编译并运行各种 GNU 程序。随之,于 1991年 10 月 5 日,为求得其他程序员的帮助,Torvalds 在 Usenet 新闻组 comp.os.minix 上就其内核 0.02 版发表了如下申明,如今已被广为引用
还在念叨 minix1.1 的好日子—人人都能给自个儿写设备驱动,不用看别人的脸色?手头没有称心的项目?是不是特想有一个操作系统,能依着自个的想法来回折腾,还能长见识?瞧瞧 minix 上面跑的那些玩意吧,是不是挺没劲?不想再为调个酷毙了的程序,一宿一宿熬个没完?真这样,那我可找对人了。一个月前在帖子里就提过,我正在写一个操作系统,在 AT-386 上面跑,免费的,挺像 minix。现在总算到了这份上,凑合能用(当然,这得看您想干吗)。现在,我愿意公布系统的源码,请大家多瞅瞅,多用用。系统版本只是0.02,不过 bash、gcc、gnu-make、gnu-sed 还有 compress 等等倒是都跑通了。
- 为了传承 UNIX 历史悠久的光荣传统,在为 UNIX 系统克隆命名时,总以字母“X”结尾,故而,人们最终将这一内核命名为 Linux。最初,Linux 的使用许可协议要严格得多,但 Torvalds很快就将其归于 GNU GPL 阵营
- 于是,其他程序员与 Torvalds 一起加入到 Linux 的开发行列,添加了很多新特性,诸如:改进型的文件系统、对网络的支持、设备驱动程序以及对多处理器的支持等。
- 1994 年 3 月,开发者们发布了 Linux 1.0 版本。随之,Linux 1.2 发布于 1995 年 3月,Linux 2.0 发布于 1996 年 6 月,Linux 2.2 发布于 1999 年 1 月,Linux 2.4 发布于 2001 年 1月。对内核 2.5 版本的开发始于 2001 年 11 月,并最终于 2003 年 12 月发布了 Linux 内核 2.6
Linux 内核版本
在 Linux1.0 版本之后,内核开发者针对每次发布所采用的内核版本编号方案为 x.y.z。x 表示主版本号,y 为附属于主版本号的次版本号,z 是从属于次版本号的修订版本号(细微的改进和 BUG 修复)
采用这一发布模式,内核的两个版本会一直处于开发之中。
- 一个是用于生产系统的稳定(stable)分支,其次版本号为偶数;
- 另一个是经常变动的开发(development)分支,其次版本号为奇数(当前稳定版次版本号+1)
指导思想是(在实践中并未严格执行)应将所有新特性添加到内核当前的开发分支系列中,而对内核稳定分支系列的修订应严格限定为细微的改进及 bug修复。当开发者认为当前的开发分支已宜于发布时,会将该开发分支转换成新的稳定分支,并为其分配一个偶数的次版本号。例如,内核开发分支 2.3.z 会“进化”为内核稳定分支 2.4。
随着 2.6 内核的发布,内核开发模式再次发生改变。稳定内核版本之间发布间隔过长,因而导致诸多问题和不便,这是内核开发模型改变的主要原因(从 Linux 2.4.0 到 2.6.0 的发布历时近 3 年)。虽然还会就该模型的微调定期开展讨论,但基本细节已经确定如下
- 不再有稳定内核和开发内核的概念。每个新的 2.6.z 发布版都可以包含新特性,其生命周期始于对新特性的追加,然后历经一系列候选发布版本让新特性稳定下来。当开发者认为某个候选版本足够稳定时,便可将其作为内核 2.6.z 发布。一般情况下,发布周期约为 3 个月
- 有时,也可能需要为某个稳定的 2.6.z 发布版打上些小补丁程序,以修复 bug 或安全问题。如果这样的修复工作具有足够高的优先级,并且补丁程序的正确性也“毋庸置疑”,那么无需等待下一个 2.6.z 发布版,可以直接应用补丁创建一个版本号形如 2.6.z.r 的发布版本,其中,r 作为该 2.6.z 内核版本的次修订版序号
- 额外责任将转嫁给Linux 发行厂商,由他们来确保随Linux 发行版一同发行内核的稳定性
Linux 发行版
准确说来,术语 Linux 只是指由 Linus Torvalds 和其他人所开发出的内核。可是,也常使用该术语来指代内核外加一大堆其他软件(工具和库)所构成的完整操作系统。Linux 草创之际,需要用户自行组装上述所有软件,创建文件系统,在文件系统上正确地安置并配置所有软件。用户不但要具备专业知识,还需为此耗费大量时间。如此一来,这便为 Linux 发行商们开启了市场,他们创建软件包(发行版),来自动完成大部分安装过程,其中包括了建立文件系统以及安装内核和其他所需软件等。
- Linux 的发行版最早出现于 1992 年,包括 MCC Interim Linux(英国,曼彻斯特计算机中心)、TAMU(德克萨斯 A&M 大学)以及 SLS(SoftLanding Linux System)。
- 至今健在的商业发行版 Slackware 诞生于 1993 年。
- 几乎与此同时,也诞生了非商业的 Debian 发行版,SUSE和 Red Hat 紧随其后。
- 时下最流行的 Ubuntu 发行版问世于 2004 年。
如今,对于那些在自由软件项目中表现活跃的程序员,许多 Linux 发行公司也会加以雇佣