Unix 傳奇

俗話說,讀史使人明智。關於Linux,基本上每本全面的Linux 書籍都會簡單介紹Linux的歷史,但是還不算足夠豐富足夠有趣,所謂“成功之人必有過人之處”,Unix是一個很奇妙的東西。

廢話不多說,在酷殼上看到這麼有趣的文章不得不轉載,以警世人~~

原文鏈接》 注:皓哥分了上下兩篇,我轉載就放在一起了,看起來也方便~

===========================================

前言

瞭解過去,我們才能知其然,更知所以然。總結過去,我們纔會知道我們明天該如何去規劃,該如何去走。在時間的滾輪中,許許多的東西就像流星一樣一閃而逝,而有些東西卻能經受着時間的考驗散發着經久的魅力,讓人津津樂道,流傳至今。要知道明天怎麼去選擇,怎麼去做,不是盲目地跟從今天各種各樣琳琅滿目前沿技術,而應該是去 —— 認認真真地瞭解和回顧歷史。 

Unix是目前還在存活的操作系統的元老了,走過了40年的歷程(參看《Unix 40年:Unix年鑑》、《Unix 40年:昨天,今天和明天》)。在技術更新如此迅速的計算機世界的今天,Unix始終保持它那神聖的光環,它那曲折和令人嘆息的歷史,以及由它引發的思想變革,對當今計算機文化造成的深遠影響,這40年所產生的人和事,讓它成爲了一個傳奇,不能不讓人爲之驚歎。

這是一段所有從事計算機行業人員尤其是軟件開發人員需要了解的歷史。Unix的傳奇歷史是整個計算機世界文化最具代表性的,它對整個計算機世界文化的影響也是最巨大,最深遠的。他給人帶來的不單單的對過去的回味,更爲我們帶來了計算機世界的新思潮。

瞭解這段的歷史的人,才能體會計算機世界變遷過程中的是是非非,才能瞭解計算機世界中的文化,從而才能參與到整個計算機革命的大潮中。希望這段歷史,這篇文章能讓你感受到計算機世界那強力的脈搏,從而讓你踏上這條令人充滿激情的道路。

上篇

  • Unix起源
  • Unix分裂
  • Unix的法律糾紛
  • GNU開源組織
  • Linux橫空出世
  • Linux今天的領袖

下篇

  • Unix與黑客文化
  • Unix的歷史教訓
  • Unix 家族譜
  • Unix的特點
  • Unix的影響和哲學
  • Unix痛恨者手冊

 

================= 上篇 =================

Unix 起源

 回顧Unix歷史,我們就要說一下一個叫MULTICS(Multiplexed Information and Computing Service)的項目。上世紀六十年代時,大部份計算機都是採用批處理(Batch Processing)的方式(也就是說,當作業積累一定數量的時候,計算機纔會進行處理)。那時,我們熟知的美國電話及電報公司(American Telephone and Telegraph Inc.;AT&T)、通用電器公司(General Electrics;G.E.)及麻省理工學院(Massachusetts Institute of Technology;MIT)計劃合作開發一個多用途(General-Purpose)、分時(Time-Sharing)及多用戶(Multi-User)的操作系統,也就是這個MULTICS,其被設計運行在GE-645大型主機上。不過,這個項目由於太過複雜,整個目標過於龐大,糅合了太多的特性,進展太慢,幾年下來都沒有任何成果,而且性能都很低。於是到了1969年2月,貝爾實驗室(Bell Labs)決定退出這個項目。

 熟悉這段歷史的人都知道,貝爾實驗室中的有個叫Ken Thompson的人,他爲MULTICS這個操作系統寫遊戲了個叫“Space Travel”的遊戲,在MULTICS上經過實際運行後,他發現遊戲速度很慢而且耗費昂貴 —— 每次運行會花費75美元。退出這個項目以後。他爲了讓這個遊戲能玩,所以他找來Dennis Ritchie爲這個遊戲開發一個極其簡單的操作系統。這就是後來的Unix。(值得一提的是,當時他們本想在DEC-10上寫,後來沒有申請到,只好在實驗室的牆角邊找了一臺被人遺棄的Digital PDP-7的迷你計算機進行他們的計劃,這臺計算機上連個操作系統都沒有,於是他們用彙編語言僅一個月的時間就開發了一個操作系統的原型)他們的同事Brian Kernighan非常不喜歡這個系統,嘲笑Ken Thompson說:“你寫的系統好真差勁,乾脆叫Unics算了。”Unics的名字就是相對於MULTICS的一種戲稱,後業改成了Unix。於是,Unix就在這樣被遊戲和玩笑創造了,當時是1969年8月。也就是這一年,Linux之父Linus Torvalds在芬蘭出生了。

1971年,Ken Thompson寫了充分長篇的申請報告,申請到了一臺PDP-11/24的機器。於是Unix第一版出來了。在一臺PDP-11/24的機器上完成。這臺電腦只有24KB的物理內存和500K磁盤空間。Unix佔用了12KB的內存,剩下的一半內存可以支持兩用戶進行Space Travel的遊戲。而著名的fork()系統調用也就是在這時出現的。

到了1973年的時候,Ken Thompson 與Dennis Ritchie感到用彙編語言做移植太過於頭痛,他們想用高級語言來完成第三版,對於當時完全以彙編語言來開發程序的年代,他們的想法算是相當的瘋狂。一開始他們想嘗試用Fortran,可是失敗了。後來他們用一個叫BCPL(Basic Combined Programming Language)的語言開發,他們整合了BCPL形成B語言,後來Dennis Ritchie覺得B語言還是不能滿足要求,就是就改良了B語言,這就是今天的大名鼎鼎的C語言。於是,Ken Thompson 與Dennis Ritchie成功地用C語言重寫了Unix的第三版內核。至此,Unix這個操作系統修改、移植相當便利,爲Unix日後的普及打下了堅實的基礎。而Unix和C完美地結合成爲一個統一體,C與Unix很快成爲世界的主導。

Unix的第一篇文章 “The UNIX Time Sharing System”由Ken Thompson和Dennis

Ritchie於1974年7月的 the Communications of the ACM發表。這是UNIX與外界的首次接觸。結果引起了學術界的廣泛興趣並對其源碼索取,所以,Unix第五版就以“僅用於教育目的”的協議,提供給各大學作爲教學之用,成爲當時操作系統課程中的範例教材。各大學公司開始通過Unix源碼對Unix進行了各種各樣的改進和擴展。於是,Unix開始廣泛流行。


Ken Thompson & Dennis Ritchie

 

Unix分裂

1978年,對 Unix而言是革命性的一年;因爲學術界的老大柏克利大學 (UC Berkeley),推出了一份以第六版爲基礎,加上一些改進和新功能而成的 Unix。這就是著名的“1 BSD(1st Berkeley Software Distribution)”,開創了Unix的另一個分支:BSD 系列。 同時期,AT&T成立USG(Unix Support Group),將 Unix變成商業化的產品。從此,BSD的 Unix 便和AT&T 的Unix 分庭抗禮,Unix就分爲System IV和4.x BSD這兩大主流,各自蓬勃發展。

1979年發佈的Unix 第七版被稱爲是“最後一個真正的Unix”,這個版本的Unix內核只有40K bytes。後來這個版本被移植到VAX機上(我在大學時學習C語言時用過這個VAX機,我還記得那時上VAX機最大的愛好就是使用talk命令和別人聊天,呵呵)。20世紀80年代相繼發佈的8、9、10版本只授權給了少數大學。

1982年,AT&T基於版本7開發了UNIX System Ⅲ的第一個版本,這是一個商業版本僅供出售。爲了解決混亂的UNIX版本情況,AT&T綜合了其他大學和公司開發的各種UNIX,開發了UNIX System V Release 1。這個新的UNIX商業發佈版本不再包含源代碼,所以加州大學Berkeley分校繼續開發BSD UNIX,作爲UNIX System III和V的替代選擇。BSD對UNIX最重要的貢獻之一是TCP/IP。BSD 有8個主要的發行版中包含了TCP/IP:4.1c、4.2、4.3、4.3-Tahoe、4.3-Reno、Net2、4.4以及 4.4-lite。這些發佈版中的TCP/IP代碼幾乎是現在所有系統中TCP/IP實現的前輩,包括AT&T System V UNIX 和Microsoft Windows中的TCP/IP都參照了BSD的源碼。

同時,其他一些公司也開始爲其自己的小型機或工作站提供商業版本的UNIX系統,有些選擇System V作爲基礎版本,有些則選擇了BSD。BSD的一名主要開發者,Bill Joy,在BSD基礎上開發了SunOS,並最終創辦了Sun Microsystems。

 
Bill Joy

 1991年,一羣BSD開發者(Donn Seeley、Mike Karels、Bill Jolitz 和 Trent Hein)離開了加州大學,創辦了Berkeley Software Design, Inc (BSDI)。BSDI是第一家在便宜常見的Intel平臺上提供全功能商業BSD UNIX的廠商。後來Bill Jolitz 離開了BSDI,開始了386BSD的工作。386BSD被認爲是FreeBSD、OpenBSD 和 NetBSD、DragonFlyBSD的先輩。

這是一個AT&T妄圖私有化的Unix的時代。爲了私有化Unix,1986年IEEE指定了一個委員會制定了一個一個開放作業系統的標準,稱爲 POSIX (Portable Operating Systems Interface)。最後加上個X,不知道是爲了好聽,還是因爲這本質上是UNIX的標準。當然,AT&T的Unix取得了這個標準制訂戰爭的勝利,還取得了Unix這個註冊商標。此時BSD的擁護者自喻爲冷酷無情的公司帝國的反抗軍。就銷售量來說,AT&T UNIX始終趕不上BSD/Sun。到1990年,AT&T與BSD版本已難明顯區分,因爲彼此都有采用對方的新發明。

 這段時期,從實驗室出來的被全世界所分享的Unix,正處於被私有化的關鍵時期。(這裏有一個笑話——《Alice夢遊UNIX仙境》)

Unix的法律糾紛

 Berkeley Software Design, Inc(BSDI)很快就與AT&T的UNIX Systems Laboratories(USL)附屬公司產生了法律糾紛,USL是AT&T註冊的公司。AT&T爲了擁有System V版權,以及Unix商標,爲了壟斷Unix,1992年,USL正式對BSDI提起訴訟,說BSD剽竊他的源碼。而最終了結了好評如潮的BSD系統。

由於最後判決懸而未決,這樁法律訴訟將BSD後裔的開發,特別是自由軟件,延遲了兩年,這導致沒有法律問題的Linux內核獲得了極大的支持。Linux跟386BSD的開發幾乎同時起步,Linus說,當時如果有自由的基於386的Unix-like操作系統,他就可能不會創造Linux。儘管無法預料這給以後的軟件業究竟造成了什麼樣的影響(如果沒有這個法律糾紛,很有可能沒有今天的革命性的Linux),但有一點可以肯定,Linux更加豐富了這塊土壤。

這場官司一直打到 AT&T將自己的Unix系統實驗室賣掉,新接手的Novell公司採取了一種比較開明的做法,允許BSDI自由發佈自己的BSD,但是前提是必須將來自於AT&T的代碼完全刪除,於是誕生了4.4 BSD Lite版,由於這個版本不存在法律問題,4.4BSD Lite成爲了現代BSD系統的基礎版本。

這樁訴訟最終在1994年1月了結,更多地滿足了BSDI的利益。伯克利套件的18,000個文件中,只有3個文件要求刪除,另有70個文件要求修改,並顯示USL的版權說明。這項調解另外要求,USL不得對4.4BSD提起訴訟,不管是用戶還是BSDI代碼的分發者。於是,BSD Unix走上了復興的道路。BSD的開發也走向了幾個不同的方向,並最終導致了FreeBSD、OpenBSD和NetBSD的出現。

從AT&T意識到了Unix的商業價值,不再將Unix源碼授權給學術機構以來,到以後的幾十年,Unix仍在不斷變化,其版權所有者不斷變更,授權者的數量也在增加。Unix的版權曾經爲AT&T所有,之後Novell擁有了Unix,再之後Novell又將版權出售給了SCO(這一事實雙方尚存在爭議)。有很多大公司在取得了Unix的授權之後,開發了自己的Unix產品。(幾年前,據傳聞微軟爲了限制Linux,微軟讓SCO到法院告Linux剽竊其源碼)

由於Unix是由C語言寫的,所以修改和移植都很容易,因此,很多商業公司及學術機構均加入這個操作系統的研發,各個不同版本的Unix也開始蓬勃發展。這才產生了今天這麼多的各式各樣的Unix衍生產品。如AIX、Solaris、HP-UX、IRIX、OSF、Ultrix等等。(這些商業化的Unix基本上都是源於AT&T授權的Unix System V)

Unix開源組織

AT&T的這種商業態度,讓當時許許多的Unix的愛好者和軟件開發者們感到相當的痛心和憂慮,他們認爲商業化的種種限制並不利於產生的發展,相反還能導制產品出現諸多的問題。隨着商業化Unix的版本的種種限制和諸多問題,引起了大衆的不滿和反對。於是,大家開始有組織地結成“反叛聯盟”以此對抗欺行罷市的AT&T等商業化行爲。

另一方面,關於“大教堂”(集權、封閉、受控、保密)和“集市”(分權、公開、精細的同僚複審)兩種開發模式的對比成爲了新思潮的中心思想。這個新思潮對IT業產生了非常深遠影響。爲整個計算機世界帶來了革命性的價值觀。

此時,一個名叫Richard Stallman的領袖出現了,他認爲Unix是一個相當好的操作系統,如果大家都能夠將自己所學貢獻出來,那麼這個系統將會更加的優異!他倡導的Open Source的概念,就是針對Unix這一事實反對實驗室裏的產品商業化私有化。儘管Stallman既不是、也從來沒有成爲一個Unix程序員,但在後1980的大環境下,實現一個仿Unix操作系統成了他追求的明確戰略目標。Richard Stallman早期的捐助者大都是新踏入Unix土地的老牌ARPANET黑客,他們對代碼共享的使命感甚至比那些有更多Unix背景的人強烈。

爲了這個理想,Richard Stallman於1984年創業了GNU,計劃開發一套與Unix相互兼容的的軟件。1985 年 Richard Stallman 又創立了自由軟件基金會(Free Software Foundation)來爲 GNU 計劃提供技術、法律以及財政支持。儘管 GNU 計劃大部分時候是由個人自願無償貢獻,但 FSF 有時還是會聘請程序員幫助編寫。當 GNU 計劃開始逐漸獲得成功時,一些商業公司開始介入開發和技術支持。當中最著名的就是之後被 Red Hat 兼併的 Cygnus Solutions。

GNU組織的建立,延續了當年Unix剛出現時的情形,併爲這種情形建立了可靠的法律和財務保障。GNU 工程十幾年以來, 已經成爲一個對軟件開發主要的影響力量, 創造了無數的重要的工具。例如:強健的編譯器,有力的文本編輯器,甚至一個全功能的操作系統。從那時開始,許多程序員聚集起來開始開發一個自由的、高質量、易理解的軟件,讓這使得Unix社區生機勃勃,一派繁榮景象。

 自90年代發起這個計劃以來,GNU 開始大量的產生或收集各種系統所必備的組件,像是——函數庫(libraries)、編譯器(compilers)、調式工具(debugs)、文本編輯器(text editors)、網站服務器(web server),以及一個Unix的使用者接口(Unix shell)等等,等等。但由於種種原因,GNU一直沒有開發操作系統的kernel。正當Richard Stallman在爲操作系統內核傷腦筋的時候,Linux出現了。

Linux橫空出世

1990年,Linus Torvalds還是芬蘭赫爾辛基大學的一名學生,最初是用彙編語言寫了一個在80386保護模式下處理多任務切換的程序,後來從Minix(Andy Tanenbaum教授所寫的很小 的Unix操作系統,主要用於操作系統教學)得到靈感,進一步產生了自認爲狂妄的想法——寫一個比Minix更好的Minix,於是開始寫了一些硬件的設備驅動程序,一個小的文件系統。這樣0.0.1版本的Linux就出來了,但是它只具有操作系統內核的勉強的雛形,甚至不能運行,你必須在有Minix的機器上編譯以後才能玩。這時候Linus已經完全着迷而不想停止,決定踢開Minix,於是在1991年10 月5號發佈Linux 0.0.2版本,在這個版本中已經可以運行bash 和gcc。

從一開始,Linus就決定自由擴散Linux,包括原代碼,隨即Linux引起黑客們(hacker)的注意,通過計算機網絡加入了Linux的內核開發。Linux傾向於成爲一個黑客的系統——直到今天,在Linux社區裏內核的開發被認爲是真正的編程。由於一批高水平黑客的加入,使Linux 發展迅猛,幾乎一兩個禮拜就有新版或修正版的出現,到1993年底94年初,Linux 1.0終於誕生了!Linux 1.0已經是一個功能完備的操作系統,而且內核寫得緊湊高效,可以充分發揮硬件的性能,在4M內存的80386機器上也表現得非常好,至今人們還在津津樂道。時至今日,kernel的版本已經出到2.6。Linux的發展不像傳統的軟件工程,它完全是透過網絡,集合世界各地的高手而成的一套操作系統,在這裏我們也可以見識到網絡快速傳播的威力。Linux初次讓整個世界感覺到了開源力量和網絡力量的如此強大。(Linux 的標誌和吉祥物是一隻名字叫做 Tux 的 企鵝,標誌的由來是因爲Linus在澳洲時曾被一隻動物園裏的企鵝咬了一口,便選擇了企鵝作爲Linux的標誌。)

Linux 的歷史是和GNU緊密聯繫在一起的。從1983年開始的GNU計劃致力於開發一個自由並且完整的類Unix操作系統,包括軟件開發工具和各種應用程序。到1991年 Linux 內核發佈的時候,GNU已經幾乎完成了除了系統內核之外的各種必備軟件的開發。在 Linus Torvalds 和其它開發人員的努力下,GNU組件可以運行於Linux內核之上。整個內核是基於 GNU 通用公共許可,也就是GPL(GNU General Public License,GNU通用公共許可證)的,但是Linux內核並不是GNU 計劃的一部分。1994年3月,Linux1.0版正式發佈,Marc Ewing成立了 Red Hat 軟件公司,成爲最著名的 Linux 分銷商之一。

嚴格來講,Linux這個詞本身只表示Linux內核,但在實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU 工程各種工具和應用程序的操作系統(也被稱爲GNU/Linux)。基於這些組件的Linux軟件被稱爲Linux發行版。一般來講,一個Linux發行套件包含大量的軟件,比如軟件開發工具,數據庫,Web服務器(例如Apache),X Window,桌面環境(比如GNOME和KDE),辦公套件(比如OpenOffice.org),等等。

1991至1995年間,Linux從概念型的0.1版本內核原型,發展成爲能夠在性能和特性上均堪媲美專有Unix的操作系統,並且在連續正常工作時間等重要統計數據上打敗了這些Unix中的絕大部分。1995年,Linux找到了自己的殺手級應用——開源的web服務器Apache。就像Linux,Apache出衆地穩定和高效。很快,運行Apache的Linux機器成了全球ISP平臺的首選。約60%的網站選用Apache,輕鬆擊敗了另兩個主要的專有型競爭對手。今天的LAMP(Linux , Apache, MySQL, PHP)已經成爲了架構Web服務器的主要首選。

 現如今的Linux不但可以裝在幾乎所有的主流服務器上,當然也包括桌面的X86系統中。其還常常被用於嵌入式系統,機頂盒、手機、交換機、遊戲機、PDA、網絡交換機、路由器、等等,都是因爲Linux那精彩的內核。

Linux的出現,不僅僅給世界帶來了一個免費的操作系統,也不僅僅是對Unix自由、共享的文化的延續,它的出現帶給了計算機世界自Unix、GNU以來更爲成熟的思想和文化。

Linux今天的領袖

 

Linux和GNU關係是比較微妙的。那時,自由軟件基金會編寫的用戶軟件工具包鋪平了一條擺脫高成本專有軟件開發工具的前進道路。意識服從經濟,而不是領導:一些新手加入了RMS的革命運動,高舉GPL大旗,另一些人則更認同整體意義上的Unix傳統,加入了反對GPL的陣營,但其他大部分人置身事外,一心編碼。

Linus Torvalds巧妙地跨越了GPL和反GPL的派別之爭。他利用GNU工具包搭起了自創的Linux內核,用GPL的傳染性質保護它,但拒絕認同Richard Stallman的許可協議反映的思想體系計劃。Linus Torvalds明確表示他認爲自由軟件一般情況下更好,但他偶爾也用專有軟件。即使在他自己的事業中,他也拒絕成爲狂熱分子。這一點極大地吸引了大多數黑客,他們雖然早就反感Richard Stallman的言辭,但他們的懷疑論一直缺個有影響力或者令人信服的代言人。而Linus Torvalds正好充當了這一角色。

 Linus Torvalds令人愉快的實用主義及靈活而低調的行事風格,促使黑客文化在1993至1997年間取得了一連串令人驚奇的勝利,不僅僅在技術上的成功,還讓圍繞Linux操作系統的發行、服務和支持產業有了堅實的開端。結果,他的名望和影響也一飛沖天。Torvalds成爲了互聯網時代的英雄;到1995年爲止,他只用了四年時間就在整個黑客文化界聲名顯赫,而Richard Stallman爲此花了十五年,而且他還遠遠超過了Stallman向外界販賣“自由軟件”的記錄。與Torvalds相比,Richard Stallman的言辭漸漸顯得既刺耳又無力。(參看《Linus Torvalds 語錄 Top 10》)

今天,我們也說不清楚是GNU Linux還是Linux GNU。Linux既不排斥開源,也不排斥商業化,Linus認爲好的軟件是需要免費和商業化共同推進的。正是這種革命性的想法,造就了今天的Linux火紅的局面(參看《誰寫了Linux》、《Linux基金會的廣告》、《Linux Distribution Timeline》)。Linux就像一股清泉流入了所有人的心中,引發了很多的啓迪和思考。


================= 下篇 =================


Unix與黑客文化

黑客的文化和Unix的商業化存在着必然的聯繫。自從Unix出現,黑客文化就與之而來。

1993初,一個悲觀的觀察家撰文指出,已經有理由認爲Unix的傳奇故事連同他帶有黑客文明將一同破產。許多人預測,從那時起Unix將在六月內死亡。他們很清楚,十年的Unix商業化,使自由跨平臺的Unix夢以失敗告終。Unix允諾的跨平臺可移植性,在一打大公司專有的Unix版本之間不停地鬥嘴中丟失,一個完美的操作系統最終淪爲多種版本的一團亂麻,這應該說是人類文明史上的一個重大悲劇。

在專有軟件社會中,只有像微軟一樣的“集權制,大教堂”生產方式才能成功。那個時代的人悲觀地相信,技術世界的個人英雄主義時代已經結束,軟件工業和發展中的互聯網絡將逐漸地由像微軟一樣的巨型企業支配,再也沒有“佐羅”,世界是愷撒大帝的世界,計算機文明將進入黑暗的帝國時代。黑客已經死了,自由不付存在。

自從Unix出現以來,第一代的Unix黑客似乎垂垂老矣,衣食不飽( Berkeley計算機科學研究組在1994丟失了自己基金)。這是一個抑壓的時代。專有的商業Unix的結果證明那麼沉重、那麼盲目、那麼不適當,以致微軟能夠用那次等技術的Windows搶走他們生存的空間,拿走他們的乾糧。黑客世界的殘餘力量被逼到了世界上的角落裏,苟延殘喘。

就在黑客文化日漸衰落之時,美國新聞週刊的資深記者Steven Levy完成了著名的《黑客列傳》一書,書中着力介紹了一個人物:Richard M. Stallman的故事,他是麻省理工學院(MIT)人工智能實驗室領袖人物,堅決反對實驗室的研究成果商業化。他是商業軟件社會中堅強的一員,決不隨波逐流,建立了全新的黑客文化。

Richard M. Stallman(他的登陸名RMS更爲人熟知)早在1970年代晚期就已經證明他是當時最有能力的程序員之一。Emacs編輯器就是他衆多發明中的一項。RMS的目標是將後1980的鬆散黑客社羣變成一臺有組織的社會化機器以達到一個單純的革命目標。也許他未意識到,他的言行與當年卡爾·馬克思號召產業無產階級反抗工作的努力如出一轍。RMS宣言引發的爭論至今仍存於黑客文化中。他的綱要遠不止於維護一個代碼庫,已經暗含了廢除軟件知識產權主張的精髓。RMS通過“自由軟件(free software)”讓黑客文化更加有自我意識。當然,這個充滿魅力又具爭議的人物本身已經成爲了一個黑客文化英雄。

只有癡迷的“黑客”和具有創造力的怪人結成的反叛聯盟才能把我們從愚蠢中拯救出來——他們接着教導我們,真正的專業和奉獻精神,正是我們在屈服於世俗觀念的“合理商業做法”之前的所作所爲。 ——The Art of Unix Programming

RMS讓世界上所有的人都知道,入侵電腦系統只是低級不入流的黑客乾的事,真正的黑客,是爲了自由,爲了軟件的自由,爲了挑戰計算機世界中的霸權主義而鬥爭。他們不是街頭小混混,他們更像是綠林好漢,更像是羅賓漢,更像是佐羅。就像渴望民主的人民同專制的政府鬥爭一樣。RMS領導着許多的黑客通過互聯網向專有軟件發出宣戰。

X Windows是首批由服務於全球各地不同組織的許多個人以團隊形式開發的大規模開源項目之一。電子郵件使創意得以在這個羣體中快速傳播,問題由此得以快速解決,而開發者可以人盡其才。軟件更新可以在數小時之內發送到位,使得每個節點在整個開發過程中步調一致。網絡改變了軟件的開發模式。

另一方面,RMS的理論體系有許多東西非常有爭議,他的GPL被認爲是一種“病毒式”的協議,BSD的fans和老牌Unix黑客們認爲,他們編寫Unix的年頭都比GPL聲明要長得多,GPL依然有太多的限制,而BSD協議則比GPL更加的自由。另一方面,RMS走向了另一個極端,他是完全反版權的,反商業化的。把軟件產品從強制收費推向了強制免費、共享和開源,這也爲他帶來了許多許多的爭議。

在RMS組織黑客鬧革命的年代裏,沒有多少黑客認同於RMS的理論體系,更多的他們參與GNU只是爲了體現那種在互聯網上協同工作,令人激動的工作模式。自從GNU設立以來,爭議不斷,而黑客文化卻從未有統一在他的理想體系之下。

自從Linux出現以後,一個新的黑客領袖出現了,Linus Torvalds的中庸態度網聚了世界上頂尖的黑客,其繞過了GPL和反GPL的派系之爭,他使用GNU的工具從而以GPL的“傳染性”保護了Linux,但他同時也不承認RMS的理論思想體系,他即開源,又支持商業化。雖然,他沒有帶給黑客們什麼重要的思想體系或統一的價值觀,但他整合了全世界黑客的陣營,讓所有的黑客的行爲都圍繞着Linux這一事物進行。他以“用自由軟件是因爲它運行得更好”輕而易舉地蓋過了“用自由軟件是因爲所有軟件都該是自由的”。

1998年初,這種新思潮促使網景公司(Netscape Communications)公佈了其Mozilla瀏覽器的源碼。媒體對此事件的關注促成了Linux在華爾街的上市,推動了1999-2001年間科技股的繁榮。事實證明,此事無論對黑客文化的歷史還是對Unix的歷史都是一個轉折點。

Unix的歷史教訓

下面的文字出自《The Art of Unix Programming》(Unix編程藝術)。令今天我們所有人所反思。

在Unix歷史中,最大的規律就是: (看看《誰寫了Linux》你就會知道這一規律)

距開源越近就越繁榮。任何將Unix專有化的企圖,只能陷入停滯和衰敗。

回顧過去,我們早該認識到這一點。1984年至今,我們浪費了十年時間才學到這個教訓。如果我們日後不思悔改,可能還得大吃苦頭。

雖然我們在軟件設計這個重要但狹窄的領域比其他人聰明,但這不能使我們擺脫對技術與經濟相互作用影響的茫然,而這些就發生在我們的眼皮底下。即使Unix社區中最具洞察力、最具遠見卓識的思想家,他們的眼光終究有限。對今後的教訓就是:過度依賴任何一種技術或者商業模式都是錯誤的——相反,保持軟件及其設計傳統的的靈活性纔是長存之道。

另一個教訓是:別和低價而靈活的方案較勁。或者,換句話說,低檔的硬件只要數量足夠,就能爬上性能曲線而最終獲勝。經濟學家Clayton Christensen稱之爲“破壞性技術”,他在《創新者窘境》(The Innovator’s Dilemma)[Christensen]一書中以磁盤驅動器、蒸汽挖土機和摩托車爲例闡明瞭這種現象的發生。當小型機取代大型機、工作站和服務器取代小型機以及日用Intel機器又取代工作站和服務器時,我們也看到了這種現象。開源運動獲得成功正是由於軟件的大衆化。Unix要繁榮,就必須繼續採用吸納低價而靈活的方案的訣竅,而不是去反對它們。

最後,舊學派的Unix社區因採用了傳統的公司組織、財務和市場等命令機制而最終未能實現“職業化”。只有癡迷的“黑客”和具有創造力的怪人結成的反叛聯盟才能把我們從愚蠢中拯救出來——他們接着教導我們,真正的專業和奉獻精神,正是我們在屈服於世俗觀念的“合理商業做法”之前的所作所爲。

Unix族譜

Unix的故事仍舊延續着……,許多網站也爲這段歷史留下記錄。一個詳細記錄Unix歷史的網站(http://www.levenez.com/unix/),這個網站忠實記載着1969~2005 年Unix發展的大事,而且還有 PDF 檔案可供下載,上面有一個龐大的UNIX家族版本樹,讓人歎爲觀止。網站的首頁陳列每個時期Unix的歷史,也代表着無數工程師的心血與努力。

下面是一個簡單的Unix的族譜:

     |--AT&T (1969)-----\
     |                  |
     |              V6 (1976)
     |                  |
     |              V7 (1979)
     |                  |
     |   Novell owns AT&T's Unix (by 1994)
     |     _____________|____________________
     |     |       |      |        |         |
     |    AIX    IRIX    SCO   HP-UX   Solaris 2.X
     |   (IBM)   (SGI)          (HP)     (Sun)
     |
     |
     |--Berkley (1977)-----\
     |                     |
     |                  1BSD (1977)
UNIX-|                     |
     |                4.4BSD (1993)
     |                     |
     |                   Net/2
     |                     |
     |               4.4BSD-Lite (by 1995)
     |     ________________|____________________________________
     |     |       |          |         |          |            |
     |   SunOS   Ultrix   NetBSD    OSF/1   NeXTSTEP   Mac OS X
     |   (Sun)   (DEC)   (Various)  (DEC)    (NeXT)    (Apple)
     |                   (FreeBSD)
     |
     |
     |--Hybrids----\
                   |
                Linux (Various)
                   |
                   |____________________________________________
                   |    |      |          |              |      |
                   | RedHat  Debian  Mandrake   Slackware    S.u.S.E.
                   |                          (Walnut Creek)
                   |
                   |_____________________________________________
                       |        |           |          |        |
                    MkLinux  LinuxPPC  TurboLinux  OpenLinux  CorelLinux
                    (Apple)                        (Caldera)   (Corel)

點些查看《Linux 分發包族譜

Unix的特點

現在的文獻中提到Unix基本上是說,由Ken Thompson和Dennis Ritchie共同開發的。而通過歷史我們也能發現,Unix的主要是由Ken Thompson寫下的。但在學術界,Dennis Ritchie的名字往往被排在了Ken Thompson前面的。這就是因爲,Dennis Ritchie不但發明了C語言,而且當時他設計Unix操作系統的設計思想,影響了整個世界,直到今天。

當時,他們開發UNIX,沒有正式立項,是Ken Thompson和Dennis Ritchie等少數幾個人偷偷乾的,如果一切都要從頭從新設計,那幾乎是不可能的。所以,Unix吸取與借鑑了Multics的經驗,如內核,進程,層次式目錄,面向流的I/O,把設備當作文件,……等等。但是Unix在繼承中又有創新,比如Unix採用一種無格式的文件結構,文件由字節串加\0組成。這帶來兩大好處:一是在說明文件時不必加進許多無關的“填充物”,二是任何程序的輸出可直接用作其他任何程序的輸入,不必經過轉換。後面這一點叫做“管道”(piping),這就是Unix首創的。此外,像把設備當作文件,從而簡化了設備管理這一操作系統設計中的難題,雖然不是UNIX的發明,但是實現上它採用了一些新方法,比Multics更高明一些。

下面是Unix的特點:(30多年過去了,這些東西早已變成經典)

  • Everything (including hardware) is a file
    所有的事物(甚至硬件本身)都是一個的文件。
  • Configuration data stored in text
    以文本形式儲存配置數據。
  • Small, single-purpose program
    程序儘量朝向小而單一的目標設計
  • Avoid captive user interfaces
    儘量避免令人困惑的用戶接口
  • Ability to chain program together to perform complex tasks
    將幾個程序連結起來,處理大而複雜的工作。

Unix的影響和哲學

Unix是第三次工業革命中計算機軟件領域最具代表性的產物。在這近40年中,由Unix造成的影響是最有深遠意義的。就我看來,Unix爲軟件領域帶來了至少以下有積極的東西,由這些東西所引發的直接或間接的事物更是舉不勝數。

  1. 軟件開發的若干哲學和思想。
  2. 全民參與推動軟件,代碼共享的模式。
  3. 開啓了黑客文化和開源項目。
  4. 免費和商業的完美結合的Linux。
  5. C語言,而後發展的C++,Java等等類C的語言和腳本。(參看《C語言的演變史》)
  6. TCP/IP,其的Socket編程已成爲今天通用的網絡編程主流。(參看《到處都是Unix的胎記》)

不能不說,AT&T雖然發展了Unix,但今天Unix的混亂的局面也和AT&T 有着直接原因。但反過來說,如果沒有AT&T的反面教材,今天的GNU/Linux很有可能也不會出現。AT&T究竟是限制了Unix的發展,還是以反面示例促進了Unix社區,已不好評說。今天,軟件是商業化好還是開源好的爭論還在繼續,縱觀這幾十年來Unix的歷史,Linux的劃時代地出現。相信你會得出自己的結論。不管怎麼樣,Unix的經歷對計算機領域貢獻的不單單是技術,他給我們提供了豐富而生動的教材。特別是Unix引發的哲學,讓今天的我們依然受益不淺。

說到Unix爲我們所帶來的軟件開發的哲學,我必需要說一說。Unix遵循的原則是KISS(Keep it simple, stupid)。在http://en.wikipedia.org/wiki/Unix_philosophy 上有很多的基本上大同小異的Unix哲學,都是很經典的。

Doug McIlroy 是認爲UNIX的哲學是這樣的:三條哲學,簡明扼要,就是這三條哲學貫穿着整個Unix世界。尤其是第一條“do one thing and do it well”真是相當精彩!

  • Write programs that do one thing and do it well.
  • Write programs to work together.
  • Write programs to handle text streams, because that is a universal interface.

只要是Unix的程序員,他們會比別的程序員在任何時候都會不停地強調着這三條哲學。

而《The Art of Unix Programming》總結了下面這些哲學,都是至理名言啊。

  • Rule of Modularity: Write simple parts connected by clean interfaces.
  • Rule of Clarity: Clarity is better than cleverness.
  • Rule of Composition: Design programs to be connected to other programs.
  • Rule of Separation: Separate policy from mechanism; separate interfaces from engines.
  • Rule of Simplicity: Design for simplicity; add complexity only where you must.
  • Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing else will do.
  • Rule of Transparency: Design for visibility to make inspection and debugging easier.
  • Rule of Robustness: Robustness is the child of transparency and simplicity.
  • Rule of Representation: Fold knowledge into data so program logic can be stupid and robust.
  • Rule of Least Surprise: In interface design, always do the least surprising thing.
  • Rule of Silence: When a program has nothing surprising to say, it should say nothing.
  • Rule of Repair: When you must fail, fail noisily and as soon as possible.
  • Rule of Economy: Programmer time is expensive; conserve it in preference to machine time.
  • Rule of Generation: Avoid hand-hacking; write programs to write programs when you can.
  • Rule of Optimization: Prototype before polishing. Get it working before you optimize it.
  • Rule of Diversity: Distrust all claims for “one true way”.
  • Rule of Extensibility: Design for the future, because it will be here sooner than you think.

X Windows 的設計者 Mike Gancarz 給出了下面九條哲學思想

  1. Small is beautiful.
  2. Make each program do one thing well.
  3. Build a prototype as soon as possible.
  4. Choose portability over efficiency.
  5. Store data in flat text files.
  6. Use software leverage to your advantage.
  7. Use shell scripts to increase leverage and portability.
  8. Avoid captive user interfaces.
  9. Make every program a filter.

在今天,這種思想依然被傳承着,在影響着世界上各個角落的每一個程序員。

Unix痛恨者手冊

這裏還需要值得一提的是一本叫《The Unix-Haters Handbook》,中文譯做《Unix痛恨者手冊》。可以在這裏下載:http://research.microsoft.com/~daniel/uhh-download.html。其中以調侃的語氣聲討了Unix的種種不是。雖然這是十年前的一本書了,但還是值得一讀。這本書指出了許多Unix的設計錯誤,指出了種種看起來很合理的設計走向了荒謬,還這樣調侃了C語言——“如果說C語言給足了讓你上吊的繩子,那麼,C++在給了你足夠的繩子把你的鄰居全部捆起來之後,還給了你足夠的繩子讓你爲一艘小帆船裝上帆,最後你還有足夠的繩子把自己吊死在帆船的桅杆上”。呵呵,相當的尖酸刻薄吧。裏面有一句對操作系統的評價是這樣的:“The fundamental difference between Unix and the Macintosh operating system is that Unix was designed to please programmers, whereas the Mac was designed to please users. (Windows, on the other hand, was designed to please accountants.”(Windows設計給會計人員?!連計算機用戶都不是了,呵呵)

不過,我可以感覺得到這本書的作者在書中對Unix的感情是比較複雜的,愛恨交加,在書的最後有這樣一句話“would anyone have spent this much time and effort writing about how much they hated Unix if they didn’t secretly love it? I’ll leave that to the readers to judge, but in the end, it really doesn’t matter: If this book doesn’t kill Unix, nothing will”。是的,如果Unix能夠存活這麼長的時間,那麼,不會有什麼東西可以把他消滅了。

從《Unix痛恨者手冊》這本書,再加上Unix的歷史,我們可以感到Unix的經歷的風風雨雨,在Unix上面出現有種種教訓,近40年的歷程,Unix歷經磨難,幾近夭折,一路走來的確很不容易,讓人由衷感嘆。今天的Unix,今天的軟件工業和以前相比已是不可同日而語。很大程度上,這些都要歸功於這個充滿蒼桑的Unix。

後記

在中國我們開始學習計算機的時候,我們被Microsoft所創造的文化所籠罩裏。就在Unix出現革命性的轉變,在Unix影響計算機世界文化的那幾年裏,科班出生專業開發人員學習的是MS-DOS和微軟的文化,我們猶如一個井底之蛙一樣,對外面的翻天覆地的變化無動於衷。微軟創造的文化在我們這裏尤其地根深蒂固,我們幾乎忘記了另外一邊的Unix(參看《Unix 40年:Unix年鑑》、《Unix 40年:昨天,今天和明天》)。

在那充滿激情的Unix的歲月裏,大夥爲了科研目的或個人興趣在Unix上進行各種開發,並且不計較金錢利益,將這些源碼公開,互相共享。在那裏,開發和自由成爲主題,正因爲如此,當今的世界才如此豐富多采。在40年Unix文化和技術積澱的裏面,蘊涵着比較純正的計算機文化和思想。

縱觀整個Unix的歷史過程中,許許多多的程序員、工程師前輩們在Unix中所摸爬滾打,他們的辛勤地、他們嘔心瀝血地跟隨Unix,努力建立一個繁榮的計算機世界的文明。Unix不是一個簡簡單單的操作系統。有人說,Unix是程序員設計給程序員的,一點沒錯。Unix的近40年曆史造就了它的博大精深,它給程序員們帶來的絕不僅僅只是技術上的知識。它的失誤,它的無奈,它的精神,它的榮耀,它從技術和思想上都啓迪着我們。對於程序員來說,學習Unix就等同於向前輩程序學習。無論你是什麼樣的程序員,你都應該瞭解Unix,這是開發人員的根,前面的開發者造就了它,而它又在引領後面的開發人員,它是前輩程序員們交給我們的一份禮物,一個接力棒,它是開發人員賴以生存的土壤,是上一輩程序員留給我們這一代程序員開啓未來的鑰匙。Unix就像一個程序員教父一樣,理當受到我們的尊敬和崇拜。

參考資料

發佈了90 篇原創文章 · 獲贊 434 · 訪問量 106萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章