GNU项目简介(转自:LinuxAid)

来源:互联网 发布:bec中级网络课程 编辑:程序博客网 时间:2024/05/15 07:12

1.Project GNU 简介

  Project GNU 的起源,来自十年前, Richard Stallman, 目前为 Project GNU 的计划主持人, 在网路讨论区的一篇文章( http://www.cs.pdx.edu/~trent/gnu/begin, 10 years ago on Internet )。Richard Stallman 在这篇文章中明白的说明了他为什麽 要发起这计划。 这篇文章就是後来的 GNU Manifesto, GNU 宣言。 更详细的背景资料可参考工研院电通所杨景翔先生的UNIX使用手册中最 後一章的引言。 Richard Stallman 後来成立 Free Software Foundation 全力投入 Project GNU 的工作, 是 FSF 的终身义工。

  GNU 是 GNU's Not Unix 的缩写, 在 Manifesto 内 Stallman 提到 UNIX 虽然不是最好的作业系统,但是至少不会太差,而他自信有能力把 UNIX 不足的地方补全, 使它成为一个优良的作业系统, 就是名为 GNU 的作业系统。

  GNU 当初的策略就是先发展 UNIX 现有的程式。(因为确定 GNU 会是一 个与 UNIX 相容的系统,而 UNIX 下的标准介面都已经蛮完备了, 只要 照著标准完成的程式, 将来 GNU Kernel (注一)完成後,立刻可以有 所有 UNIX 的公用程式),因此会先有 emacs,gcc 等 utility 出来。 其中 gcc 更是 Project GNU 能够自立更生的主力(不需要依靠 Non-Free Software 来产生 / 编译自己),如今程式发展工具成熟了, 再来大家屏息以待的,就是 GNU Kernel,也就是 Hurd 了。 一旦 Hurd 完成,GNU 就是一套能够自我开机,真正自给自足,完整的作业系统。

  注一:一套 OS 就是周边的公用程式加上一个 kernel,即系统资源 管理程式。

  Hurd 是架构在 Mach 这个 micro kernel 上的作业系统核心。 Micro kernel 的由来是当初 BSD ( UNIX )发展到最後,Kernel 越写越大, 每次要多加新的功能,就要更换并 reboot 系统, 变的很不模组化,也 没有弹性。Micro kernel 的观念也应运而生,目的就是把 kernel 中最 基本的部份、最与硬体相关的部份抽取出来,形成 micro kernel。其他 的部份则降到 user program 的层次, 称为 server。 可以说 micro kernel 把硬体抽象 / 封装起来,形成一个虚拟机器,server 则在这个 虚拟机器上跑,提供传统 OS 所应该提供的功能。Server 有两种,一种 叫 Si ngle Server,一种叫 MultiServer。

  Single Server 就是一个 Server 就完成了所有 OS kernel 该提供的功 能。CMU 卡内基大学当初的 micro kernel 计划,就是先把 4.3 BSD 拆 成两部份,一个 micro kernel ( Mach )和一个 Single Server。 因 为一个 micro kernel 可以执行不少 Server,所以这的确是个蛮大的进 步, 修改 OS 後可以执行另一个 Server 来观察结果, 不用每次都 reboot 整个系统。但是这样的设计还是有盲点,就是要更动正在使用中 的 kernel,还是要终止( shutdown )该 Server,再执行新的 Server 。 充其量只是一个较 portable 的 OS 而已。因此 Multi Server 应运 而生。 MS 把 kernel 拆开成几个小单元,彼此间互相合作。比如说有 一 network server, 用来处理 tcp/ip 网路, file system server, exec server 用来执行程式等等。 如此一来,可以增加弹性,比如说一 个 exec server 可以执行 Linux 的 binary。 一个可以执行(载入) FreeBSD 的 binary,数个 file system server,分别处理不同的 file system 等,而且也减少置换 server 需要 reboot 的机会。 Hurd 就是 这样子的一组 server(s) (详情请看 Toward a New Strategy of OS Design, http://www.cs.pdx.edu/~trent/gnu/hurd-paper.html)

  Hurd 目前以 i386 PC 为发展平台, 以 CMU 的 Mach 为 micro kernel , 但是以後会使用 Utah (犹他)大学的 Mach4,也就是 flexmach 为 micro kernel,flexmach 是 fast&flexible 之意。micro kernel 带引 入了不少的 overhead。 Flexmach 则引进了一些新的 idea, 让 micro kernel 不仅方便,也有好的 performance。由於 Hurd 是架在 mach 上 之故, 所以只要 Mach 能在那些机器上跑,Hurd 也能很快的 suppport 该硬体架构,换句话说,GNU 就可以是该机型电脑的 OS。

  Hurd 其实不是 UNIX,真正让程式设计师感觉 Hurd 是 UNIX 的, 是它 的 Library,glibc -- Hurd 的 C Library。 Hurd 的 glibc 用来提供 / 处理与 UNIX 相容的系统呼叫,并转换成 Hurd 系统呼叫, 让使用者 感觉 Hurd 是 UNIX 的, 则是那些依照 UNIX 标准( IEEE 1003.1, POSIX.1 )写成的公用程式(这就是所谓的 personality )

  gcc 是 FSF 最有名的程式之一,目前是 C,C++.Pbkectove C 三合一的 compiler。 gcc 的作法是有一个先导程式( front end ),把 C,C++ , Objective C 的语法转换成一个内部的型式(一个类似 lisp 的高阶 组合语言,称为 RTL,或者说先把高阶语言转成一个想像的 CPU 的组合 语言),再由 backend 对这个虚拟组合语言进行最佳化,最後产生目的 CPU ( target )的组合语言码( UNIX 的哲学是 compiler 产生组合 语言码,再由 assembler 产生机器码),如此架构下,只要写好一个新 的语言的 frontend, 那麽因为 gcc backend 己经支援不少架构,该语 言立刻就可以在不少不同架构下的机器编绎执行。 有了一种新的 CPU, 也只要完成把虚拟 ASM 转换成真正 asm 的部份, 立即就有多种语言的 最佳化编译器。 除了 C 家族之外, gcc 还有 Fortran 90, ada9x, Pascal 的 frontend,其中 Fortran 是最晚问世的 frontend, 版本号 码 0.5。

  Project GNU 的 GUI 介面会架构在 MIT X Window 上。自从 Next 公司 公布 OpenStep 标准,把她的 Next Step OS API 公开之後, 引起一群 人的兴趣, 决定为 GNU 发展一个更完整的 GUI 介面,即 GNU Step 并 希望能够通过 Next 公司 OpenStep test suite 确认符合 OpenStep 的 标准。Next 公司自从放弃硬体事业之後,成为一个专业的系统软体公司 ,原来的作业系统已 port (移植)到 i486, HP-PA RISC 上,而 GUI 介面也有 port 到 Solaris,OSF/1, NT,Window 95 的计划。 简言之, OpenStep 可以算是NextStep中与OS无关, 物件导向化的应用程式介面。

  OpenStep 由 3 部份组成, Display Postscript, Foundation Kit, AppKit。 GNU Step 计画修改 ghostscript, 来完成 Display Postscript 的功能。 PostScript 原来是用在印表机的一个绘图语言。 DPS 则是让 PostScript 指令也能够作用在萤幕上,用以绘图。Display 与 Printing 用同一套程式码可以达到 What You See Is What You Get 的功能。

  NextStep/OpenStep 发展环境使用的是 Objective C,另一种以 C 为基 础的物件导向语言。GNU C Compiler 中的 ObjC 程式码,就是 NeXT 公 司发展後,贡献出来的。 一个程式语言除了有了定义完整的语法和编译 器的支援之外, 更需要一个通用的标准程式库, 方便写作, 这就是 OpenStep 中的 Foundation Kit。Foundation Kit 的内容是 ObjC 处理 物件时所必要的函式。 GNU Step 的作法是扩充 libobject 这套 library 来达成目标。

  OpenStep 最重要的部份就是 AppKit 了。 写个 GUI Application 最重 要的就是有个好用的 Library。AppKit 就是 OpenStep 最吸引人的部份 ,是个蛮不错的 Library 架构。 GNU Step 在这方面已经有个雏型,即 objcX。 objcX 目前是利用 Motif Widget 写成的。 由於 Motif 不是 free software,将来会用其他的方法取代掉。

2.GPL -- General Public License

  GNU 的精神在 GNU Manifesto 里面阐述的很明白,就是认为软体的原始 码应该要自由流通, 软体公司该做的,不应该是把原始码据为己有,赚 取发行 binary 的金钱,而是整合与服务的费用而已, 因为原始码自由 流通的软体才能让软体的品质提高, 让软体程式设计师可以自由的与他 人交换心得,不受智慧财产权的约束。 但是现实的环境是恶劣的,为了 怕有好利之徒把自由流通的软体占为己有, FSF 制定的 GPL,先依著作 权法获得软体的智慧财产权,再透过 GPL 释放此权力给大众:只要你遵 守 GPL,不把原始码,以及你对原始码所作的修改据为己有, 你就拥有 使用 GPL 软体的权力。GPL 的规定不怎麽适用於 Library,(太严了, 有些人不认同)为了能够鼓励更多人使用 GNU 软体, 因此 FSF 另外制 定了 LGPL--Library GPL,限制比较松一点。

  GNU maniesto/GNU General Public License/Libray GPL 皆可在 GNU mirror sites 找到(其中 GPL 放在档名为 COPYING 的档案内, LGPL 则在 COPYING.LIB 内)。另外,FSF 每年的一月与七月都会定期公布一 份名为 GNU bulletten 的文件,说明 FSF 现况与动态。 GNU bulletin 电子版只公告在 gnu.announce 上。

3.不速之客~ Linux

  1992(1991 年末?) 一位芬兰的年青资讯系学生, Linus Torvards 为了 实习使用 Andrew S. Tanenbaum 先生的 MINIX 作业系统, 买了他第一 部 486PC。但是他发现MINIX里面缺乏很多他想要的功能,於是开始了他 的伟大事业 — 自己写一个保护模式下的作业系统。 最开始的时候, Linus 是在 USENET 讨论区,comp.os.minix 呼朋引伴的, 然後这个娃 娃作业系统 ( 名为 Linux) 就以两个礼拜出一次修正版的速度快速的成 长茁壮,讨论区也从原来寄生的 comp.os.minix 中独立成非主流的 alt.os.linux,然後正名为 comp.os.linux。 之後因为使用者众多,讨 论区因此再细分成 comp.os.linux.*。 Linux 如此的受欢迎,俨然成为 正统UNIX 的继成者。

  在 Linux 早期的版本,因为发展者怕自己的程式被不肖的厂商窃据,甚 至喧宾夺主, 因此使用了一个相当严格的版权声明,禁止一切的商业行 为。 後来因为大家希望有人能够把 Linux 压成 CD-ROM,推广 Linux, 且造福那些不方便上 Internet FTP 的朋友, 所以将版权宣告换成 GPL 。从此之後,Linux便是公认的GNU作业系统。

  前面提到 GNU 的 Kernel 会是 Hurd。但是 Linux 在短短的几年内崛起 ,也使用 GNU 的版权声明,俨然有取代 Hurd 之势。甚至有不少人认为 Hurd 应该停止发展, 因为 Linux 已经成熟, GNU 实际上可以使用 Linux 当 kernel,也是一套完整的系统。FSF 的人也承认,要是 Linux 在早几年出现,也许就不须要发展 Hurd 了。但是 Linux 还是晚了一步 ,Hurd 已经规划了很久了,而且是个十分前卫的设计,能够支援的机器 也比 Linux 多,不完成太可惜了。1994 年 11 月,Hurd 的第一个雏形 (snapshot) 已经发表; 1995 年 4 月,也发表了第二次 snapshot。 不出几次 snapshot, Hurd 应该就可以被包装成一个简单的自我开机安 装套件。 然後再重演 Linux 的历史。当然,这里要强调一点,Hurd 与 Linux 不是敌对的关系, 彼此之间没有谁会取代谁的问题,因为它们各 有市场,各自的定位也不一样。

  实际上,FSF 也有发行以 Linux 为核心的 GNU 系统计画。 这个计画就 是 FSF 大力支持的 Debian Linux。Debian Linux 是 GNU Software ( 与 Public domain Software )近几年来最彻底的整合(就是一套完完 全全用 GNU 和 PD 架起来, 而且有 Commercial OS 水准的系统)。 Linux 目前的意义可以说是弥补 Hurd 未完成前的真空, 并且聚集 GNU 与 PD 软体的力量,为以後 GNU 系统的基础。 而以後 Hurd386 也能够 执行 Linux386 的 binary,彼此相辅相成。

4.天蚕再变 - BSD

  Berkerley 的 BSD UNIX 发展到 ver. 4.4 之後, 由於 DARPA( 国防先 进研究计画署 ) 不再继续经援该计画, 因此有喊停之声, 有末代 BSD 之称。 再加上 AT&T 控告 BSD 内含有它的程式码,使得 4.4 的原始码 迟迟无法公开,不见天日。

  几乎与 Linux 开始发展的同时, William Jolitz 先生也开始利用 BSD4.3 为基础 ( 详细的说是 Berkerley 发表过的 Net/2),把 BSD 移 植到 386 的 PC 上,作为 BSD 计画的延续, 并方便作业系统的研究者 继续以 BSD 作为 OS 研究的基台。 这就是 386BSD。 一开始的时候, 386BSD 发展速度太慢了,所以引起了变异,几乎同时间有两组人马发表 他们自己加强的 386BSD,即 NetBSD 与 FreeBSD。 NetBSD 以 OS 研究 用途为主,很快的又被移植回原来 BSD 支援的机器上。FreeBSD 则以实 用为主,目的就是把BSD包装的漂漂亮亮的,容易入门与安装的系统。

  这些 BSD 家族可以说都是在 Berkerley vs AT&T 的官司中发展的, 直 到官司结束, Berkerley 依照判决发表 BSD4.4Lite, 一个没有侵犯 AT&T 版权的 BSD source code 後,纷纷更新为以 4.4Lite 为基础,真 正摆脱了AT&T的阴影。

  BSD 使用的版权宣告与 GPL 大相迳庭。 我们可以说 BSD 这批人属於自 由派的, 他们认为不应该把公开的程式做任何的限制, 即使他人把 source code 拿去改一改,便占为己有也没关系, 只要不抹灭他们的贡 献就可以了。这就是一般公认的PD (Public Domain) 的定义。也因为 这个原因,FSF 与 PD 软体通常是保持距离,他们宁愿自己重写一些 PD 本来就有的程式,目的就是为了不让 PD 与 GPL 混淆不清。简单的说, GPL 限制程式码与程式码的加工品都属於 GPL,必须自由流通。 而PD 的话允许私人更改加工的部份不属於PD。 至於GPL与PD哪种比较 好也就是见仁见智的问题了。