Linux 版 (精华区)

发信人: clx (楚留香), 信区: Unix
标  题: GNU 计画简介
发信站: 紫 丁 香 (Sat Jun 27 17:40:30 1998), 转信

GNU 计画简介

                                by 萧永庆, 1995.
本文为初稿, 欢迎来信指教 --yhsiao@cae.wisc.edu

     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,将来会用其他的方法取代掉。 

     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 上。 

     不速之客~ 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,彼此相辅相成。 

     天蚕再变 - 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哪种比较 好也就是见仁见智的问题了。 


--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.244.16]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:204.536毫秒