(译文)The Linux Programming Interface:第1章(历史和标准)

1

HISTORY AND STANDARDS

(译者:鱼时代  校对:fgn)


      Linux 是UNIX操作系统家族中的一员,在计算机出现以来,UNXI已经有很长的历史了。在这一章中的第一部分将对Unix的历史做一个简短的介绍。我们会从UNIX系统和C语言的起源讲起,接着会思考当下的两个关键因数,他们导致了如今的Linux系统的出现:GNU项目和Linux的内核发展。
      UNIX最显著的一个特征是它的发展是不被单一的供应商或组织所控制的,而是由许多属于商业和非商业的用户组所组成,他们致力与对它的不断改进。这样的历史结果导致了许多的革新性的特点加入到UNIX中去了,但也有负面的后果,随着时间的推移,UNIX实现不同。这样编写的应用程序在所有UNIX实现变得越来越困难。这导致了推动标准化的UNIX实现,我们在本章的第二部分讨论。

两个定义术语的UNIX是常用的。其中的一个代表
操作系统通过官方为单一UNIX一致性测试规范,因此被正式授予正确的品牌
“UNIX”由Open Group(UNIX商标的持有者)。
写作本文时,没有免费的UNIX实现(如。,Linux和
FreeBSD)取得了这个品牌。

其他常见的意义上来看UNIX表示
系统外观和行为都与古典UNIX系统(即。,原来的钟
后来实验室UNIX及其主要分支,System V和BSD)。通过
这个定义,Linux通常被认为是一个UNIX系统(如的
现代bsd)。虽然我们给予密切关注单一UNIX规范在这本书中,我们将遵循这第二个UNIX的定义,这样我们会
经常说诸如“Linux,像其他UNIX实现。”

1.1 A Brief History of UNIX and C

1.2 A Brief History of Linux

      Linux是常用这个词来指整个类unix操作系统Linux内核的一部分。然而,这是一种误称,因为许多的关键组件包含在一个典型的商业Linux发行版实际上来自Linux早期的项目。

1.2.1 The GNU Project

      1984年,理查德·斯托曼,一位在麻省理工学院工作的异常有才华的程序员,开始工作在创建一个“免费”UNIX实现。斯托曼的前景是一个道德和自由被定义在法律意义上,而不是金融意义(见http://www.gnu.org/philosophy/free-sw.html)。然而,法律自由,斯托曼描述了隐式结果,软件,如操作系统可以在没有或极低的成本。

     斯托尔曼阻滞了法律限制放在计算机厂商专有的操作系统。这些限制意味着购买计算机软件一般无法看到软件的源代码。他们当然不可能复制,改变,或重新分配。他指出,这样一个框架鼓励程序员互相竞争和囤积的工作,而不是合作和分享它。

     作为回应,斯托曼开始GNU项目(递归地定义缩写“GNU不是UNIX”)开发一个完整的、免费的、类UNIX系统,组成的一个内核和所有相关的软件包,并鼓励其他人加入他。1985年,斯托曼创立了自由软件基金会(FSF),一个非营利组织支持GNU项目以及开发的免费软件。

GNU项目开始时,BSD不是免费的,斯托尔曼的意思。从AT&T使用BSD仍然需要许可证,和用户不能自由修改和重新分配形成的AT&T代码BSD的一部分。(最初BSD有部分源码的版权属于AT&T).

     GNU项目的重要成果之一是发展的GNU通用公共许可证(GPL),斯托尔曼的自由软件的法律体现。大部分的软件在一个Linux发行版,包括内核,是在GPL下许可的或类似的许可。在GPL下许可的软件必须以源代码的形式提供,可再发行的自由,必须根据GPL。GPL许可下修改软件免费许可,但任何分布的修改软件也必须根据GPL。如果修改后的软件是分布在可执行形式,作者也必须允许任何接受者的选择获得修改源代码不超过分配的成本。GPL的第一个版本在1989年被释放。当前版本的许可证,第三版,在2007年被释放。版本2的许可证,在1991年发行,仍在广泛使用,许可用于Linux内核。(讨论各种自由软件许可证可以在[圣。劳伦特,2004]和[罗森,2005]。)

     GNU项目最初并没有产生一个UNIX内核工作,但并产生广泛的其他程序。因为这些项目是为了在类UNIX操作系统上运行,,,在现有的UNIX实现和使用,甚至在某些情况下,移植到其他操作系统。在越来越多的知名项目由GNU项目Emacs文本编辑器,GCC(最初GNU C编译器,但现在改名为GNU compiler collection,包括C编译器,c++,和其他语言),bash shell,glibc(GNU C库)。

    到1990年代初,GNU项目已经产生一个系统,几乎是完整的,除了一个重要组件:一个工作UNIX内核。GNU项目已经开始一项雄心勃勃的工作内核设计,称为GNU / HURD,基于马赫微核。但是,赫德是远非以一种可以被释放。(在撰写本文时,工作继续赫德,目前只运行x86-32架构。)

因为一个程序代码构成的重要组成部分是什么通常被称为Linux系统实际上来自GNU项目,斯托曼喜欢使用GNU / Linux”是指整个系统。命名的问题(Linux和GNU / Linux)的自由软件社区的一些争论。因为这本书主要关心的是Linux内核的API,我们通常使用术语Linux。

1.2.2 The Linux Kernel      在1991年,Linus Torvals,一个在赫尔辛基大学读书的芬兰学生,想给自己编写一个在英特尔80386个人电脑运行的操作系统。在他的研究中,Torvalds开始接触到Minix(一个由Andrew Tanenbaum,一个荷兰的教授在1980年代中期编写的一个类UNIX的操作系统内核开发的系统,它开发了Minix并在课堂上使用,这个内核能在386的系统上运行)。然而,由于其主要目的是作为一个教学工具,它被设计成在很大程度上独立于硬件架构,并没有充分利用386处理器的能力。
因此Torvalds开始一个项目,创建一个高效,功能齐全的UNIX内核运行并在386上。在几个月里,Torvalds开发一个基本内核,使他能够编译和运行各种GNU项目。10月5日,1991年,Torvalds请求其他程序员的帮助下,现在做出以下广为宣布comp.os 0.02版本的内核。minix Usenet新闻组:

Do you pine for the nice days of Minix-1.1, when men were men
and wrote their own device drivers? Are you without a nice
project and just dying to cut your teeth on a OS you can try to
modify for your needs? Are you finding it frustrating when
everything works on Minix? No more all-nighters to get a nifty
program working? Then this post might be just for you. As I
mentioned a month ago, I’m working on a free version of a
Minix-look-alike for AT-386 computers. It has finally reached the
stage where it’s even usable (though may not be depending on
what you want), and I am willing to put out the sources for wider
distribution. It is just version 0.02 . . . but I’ve successfully run
bash, gcc, gnu-make, gnu-sed, compress, etc. under it.

后一个由来已久的传统的UNIX克隆的名字以字母X,Linux内核(最终)洗礼。最初,Linux是置于一个更严格的许可,但Torvalds很快可以遵循GNU GPL。

呼吁支持证明是有效的。其他程序员加入Torvalds Linux的发展,增加各种功能,如改进的文件系统、网络支持、设备驱动程序和多处理器的支持。截至1994年3月,开发者能够发布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月,并导致Linux 2.6的发布,2003年12月。

An aside: the BSDs(一个旁支:BSDs)

值得注意的是,另一个免费的UNIX已经用于x86-32在1990年代初。Bill 和Lynne Jolitz 开发了端口已经成熟的x86-32 BSD系统,称为386 / BSD。这个端口是基于BSD Net/2发布于(1991年6月)。4.3 bsd版本的源代码,所有剩余的专有AT&T源代码被取代或,在六个源代码文件的情况下不能平凡地重写,删除。x86-32 Jolitzes移植Net/2代码,重写了失踪的源文件,第一个版本(版本0.0)386年2月386 / BSD。经过初始波的成功和受欢迎程度,386 / BSD滞后由于各种原因。面对越来越大的补丁,两种开发小组很快出现,创建自己的基于386 / BSD版本:NetBSD,强调多种硬件平台可移植性,FreeBSD,强调性能和现代BSD是最广范使用的。第一个NetBSD版本为0.8,1993年4月。第一个FreeBSD cd - rom(版本1.0)出现在1993年12月。另一个BSD,OpenBSD,出现在1996年(作为一个初始版本编号2.0)分叉后NetBSD项目。OpenBSD强调安全。在2003年代中期,一个新的BSD,DragonFly BSD出现从FreeBSD分裂后4. x。DragonFly BSD采用不同的方法从FreeBSD(5. x)对设计对称多处理(SMP)架构。

可能没有bsd的讨论在1990年代早期之间的诉讼是完全没有提及UNIX系统实验室(USL,AT&T子公司剥离开发和市场UNIX)和加州大学伯克利分校。1992年初,公司伯克利软件设计,合并(BSDi,如今风河的一部分)开始发布一个商业支持BSD UNIX,BSD / OS,基于Net/2释放和Jolitzes 386 / BSD添加。BSDi分布的二进制代码和源代码以995美元(美元),并建议潜在客户使用他们的电话号码1 - 800 - - - - unix。

1992年4月,USL起诉BSDi为了防止BSDi销售产品USL声称仍被专有USL源代码和商业机密。USL还要求BSDi停止使用欺骗性的电话号码。该诉讼最终被扩大到包括加州大学的索赔。法院最终驳回了所有但USL的两个主张,加利福尼亚大学的反对和反诉USL随之而来,在大学声称USL没有给由于信贷使用BSD代码在系统V。

虽然这些诉讼未决,USL被Novell收购,其首席执行官,Noorda射线,公开声明,他更愿意在市场上竞争,而不是在法庭上。结算终于达到1994年1月,加州大学被要求删除3 18000个文件的Net/2释放,其他一些文件,做一些小的改动和添加USL版权通知约70其他文件,然而大学可以继续自由分配。这个修改系统4.4 bsd-lite 1994年6月被释放。(最后一个版本是4.4 bsd-lite大学2 1995年6月发布。)在这一点上,法律的条款结算需要BSDi,FreeBSD,NetBSD Net/2基地替换为修改后的4.4 bsd-lite源代码。正如[McKusick et al .,1996)所指出的,虽然这引起了一些延迟BSD衍生品的发展,它也有积极的影响,这些系统抓取的三年大学的计算机系统开发工作的研究小组从Net/2的释放。

Linux kernel version numbers
像大多数自由软件项目一样,Linux之前也尝试release-early,经常发布的模型,所以新内核修改频繁出现(有时甚至每天)。随着Linux用户基数的增加,释放模型适应减少中断现有用户。具体来说,Linux 1.0的发布后,内核开发人员采用了内核版本与每个版本编号x.y编号方案。x.y.z: x 代表一个主要的版本,主要版本中一个小版本,和z小版本的修订(小的改进和错误修正)。

在这种模式下,两个内核版本总是在发展:一个稳定分支用于生产系统,它有一个更小版本号,和一个更不稳定发展分支,进行下一个更高的奇怪的小版本号。理论并非总是遵循严格的做法是,所有新特性应该添加在当前开发内核系列,而新的稳定内核系列的修订应该局限于小的改进和错误修正。当当前的开发分支被认为适合发布,它成为了新的稳定的分支,被分配一个更小版本号。例如,2.3。z开发内核分支导致2.4稳定内核分支。

     2.6内核发布后,发展模式被改变了。这种变化的主要动力源于问题和挫折造成的长间隔稳定的内核版本。(近三年之间传递的Linux 2.4.0和2.6.0)。定期有一些讨论微调这个模型,但必要的细节保持如下:

  • 不再有分离内核稳定和发展。每一个新的2.6。z释放可以包含的新功能,在经历一个生命周期开始时,添加新特性,然后稳定的候选发布版本。当一个候选版本被认为是足够稳定时,它是作为内核2.6.z发布。发布周期通常长约三个月。
  • 有时,一个稳定的(2.6.z)释放可能需要小补丁来修复bug或安全问题。如果这些修复有足够高的优先级,和补丁被认为很简单“显然”正确,然后,而不是等到下一个(2.6.z)释放,它们被应用来创建一个发布的形式(2.6.z.r),r是一个序列号对一个小修改(2.6.z)的内核。
  • 额外的责任转移到分销供应商确保内核提供了一个稳定的分布。

     后来章有时会注意特定的内核版本API(即改变。发生,新的或修改系统调用)。虽然之前(2.6.z)系列,最内核的变化发生在奇数发展分支,通常我们会参考以下稳定内核版本的变化出现了,因为大多数应用程序开发人员通常会使用一个稳定的内核,而不是开发内核之一。在许多情况下,手册页注意精确开发内核的特定功能或更改出现。

     变化出现在(2.6.z)内核系列中,我们注意到精确的内核版本。当我们说一个特性是新的在内核(2.6),没有z修订号,我们的意思是(2.5)的特性,实现开发内核系列
和第一次出现在稳定的内核版本(2.6.0)。

在写这篇文章的时候,仍然支持Linux内核2.4稳定的维护者合并必要的补丁和bug修复,并定期发布新修订。这允许安装系统继续使用2.4内核,而不是被迫升级到一个新内核系列(可能导致重要的工作在某些情况下)。

 Ports to other hardware architectures(对其他硬件架构的端口)
在初始开发Linux,有效实现80386在英特尔是主要目标,而不是可移植性到其他处理器架构。然而,Linux的日益普及、港口到其他处理器架构开始出现,从早期的端口数字阿尔法芯片。硬件架构的列表,Linux已经移植继续增长,包括x86 - 64、摩托罗拉/ IBM PowerPC和PowerPC64,Sun SPARC和SPARC64(UltraSPARC),MIPS,手臂(Acorn),IBM zSeries(原名System / 390),英特尔ia - 64(安腾;请参阅[Mosberger & Eranian,2002]),日立SuperH,68000年惠普PA-RISC,和摩托罗拉。

 Linux distributions(Linux发行版)
    准确地讲,这个术语Linux只是指内核由Linus Torvalds等等。然而,Linux是常用的术语,意思是内核,再加上广泛的其他软件(工具和库),传感器组合在一起形成一个完整的操作系统。在非常早期的Linux,用户被要求组装所有这些软件,创建一个文件系统,正确的地方和配置该文件系统上所有的软件。这需要相当多的时间和专业知识。因此,Linux发行商的市场打开,谁创建包(分布)自动化安装过程的大部分时间里,创建一个文件系统和安装所需的内核和其他软件。

    最早的版本出现在1992年,包括MCC临时Linux(英国曼彻斯特计算中心),TAMU(德州农工大学)和SLS(软着陆的Linux系统)。现存最古老的商业分布,Slackware,出现在1993年。非商业性Debian分布出现在大约在同一时间,和SUSE和Red Hat很快。目前非常流行的Ubuntu发行最早出现在2004年。如今,许多发行公司也雇佣程序员积极促进现有的自由软件项目或启动新项目。

1.3 Standardization

1.3.1 The C Programming Language
1.3.2 The First POSIX Standards
1.3.3 X/Open Company and The Open Group
1.3.4 SUSv3 and POSIX.1-2001
1.3.5 SUSv4 and POSIX.1-2008
1.3.6 UNIX Standards Timeline
1.3.7 Implementation Standards
1.3.8 Linux, Standards, and the Linux Standard Base

1.4 Summary
     UNIX系统于1969年首次实现在数字PDP-7小型机Ken Thompson在贝尔实验室(美国电话电报公司(AT&T)的一部分)。操作系统吸引了很多的想法,以及它的双关语的名字,从早些时候MULTICS系统。到1973年,UNIX已经搬到时通用微型计算机和重写在C语言中,一种编程语言设计和实现由丹尼斯·里奇在贝尔实验室。法律禁止销售UNIX,AT&T分布式的完整系统的大学而不是名义收取。这个发行版包括源代码,并成为非常受欢迎的在大学,因为它提供了一种廉价的操作系统可以由计算机科学研究和修改代码的学者和学生。

    加州大学伯克利分校的发展发挥了关键作用的UNIX系统。那里,Ken Thompson和许多研究生扩展操作系统。到1979年,这所大学是生产自己的UNIX分布、BSD。这个发行版成为学术界和广泛形成几个商业实现的基础。

     同时,AT&T垄断的分手允许该公司出售的UNIX系统。这导致另一个主要的UNIX变体,System V,这也形成了几个商业实现的基础。

     两个不同的电流导致的发展(GNU / Linux)。其中一个是GNU项目,由理查德·斯托曼。到1980年代末,GNU项目已经产生了几乎完全,自由可分配的UNIX实现。缺少一部分工作的内核。1991年,灵感来自Andrew Tanenbaum Minix内核由Linus Torvalds的UNIX内核工作产生英特尔x86-32架构。Torvalds邀请其他程序员开源发明网络改善内核。许多程序员这么做,随着时间的推移,Linux是扩展和移植到各种各样的硬件架构。

     可移植性问题源自UNIX和C实现的变化存在在1980年代后期创建标准化的强大压力。C语言是1989年标准化(C89),和一个修订标准是1999年生产的(C99)。第一次尝试了POSIX规范操作系统接口。1、批准作为IEEE标准1988年,并于1990年作为一个ISO标准。在1990年代,进一步标准起草,包括各种单一UNIX版本规范。2001年,合并后的POSIX 1003.1 -2001和SUSv3标准批准。这个标准巩固和扩展各种早些时候POSIX标准和单一UNIX规范的早期版本。2008年,那么广泛标准的修订完成后,产生POSIX 1003.1 -2008和SUSv4标准相结合。

posted @ 2015-06-09 12:49  鱼时代  阅读(960)  评论(0编辑  收藏  举报