|
发表于 2004-2-11 20:03:10
|
显示全部楼层
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 出?怼F渲 gcc 更是 Project GNU 能夠自立更生的主力(不需要依靠 Non-Free Software ?懋a生 / 編譯自己),如今程式發展工具成熟了,再?泶蠹移料⒁源模褪 GNU Kernel,也就是 Hurd 了。 一旦 Hurd 完成,GNU 就是一套能夠自我開機,真正自給自足,完整的作業系統。
註一:一套 OS 就是週邊的公用程式加上一個 kernel,即系統資源 管理程式。
Hurd 是架構在 Mach 這個 micro kernel 上的作業系統核心。 Micro kernel 的由?硎钱敵 BSD ( UNIX )發展到最後,Kernel 越寫越大,每次要多加新的功能,就要更換?K reboot 系統, 變的很不模組化,也沒有?椥浴icro 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 用?韴绦谐淌降鹊取 如此一?恚梢栽黾?椥裕热缯f一個 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 相容的系統呼叫,?K轉換成 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 ?K希望能夠通過 Next 公司 OpenStep test suite 確認符合 OpenStep 的標準。Next 公司自?姆艞売搀w事業之後,成為一個專業的系統軟體公司,原?淼淖鳂I系統已 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 原?硎怯迷谟”頇C的一個繪圖語言。 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 的金錢,而是整合與服務的費用而已, 因為原始碼自由流通的軟體才能讓軟體的品質提高, 讓軟體程式設計師可以自由的與他人交換心得,不受智慧財產權的約束。 但是現?的環境是?毫拥模瑸榱伺掠泻美桨炎杂闪魍ǖ能涹w?诪榧河校 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 早期的版本,因為發展者怕自己的程式被不肖的?S商竊據,甚至喧賓奪主, 因此使用了一個相當嚴格的版權聲明,禁止一切的商業行為。 後?硪驗榇蠹蚁M腥四軌虬 Linux 壓成 CD-ROM,推?V Linux,且造福那些不方便上 Internet FTP 的朋友, 所以將版權宣告換成 GPL 。?拇酥幔琇inux便是公認的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 目前的意義可以說是?浹a Hurd 未完成前的真空, ?K且聚集 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 計畫的延續, ?K方便作業系統的研究者繼續以 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哪種比較好也就是見仁見智的問題了。 |
|