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曆史中,最大的規律就是:
距開源越近就越繁榮。任何将Unix專有化的企圖,隻能陷入停滞和衰敗。
回顧過去,我們早該認識到這一點。1984年至今,我們浪費了十年時間才學到這個教訓。如果我們日後不思悔改,可能還得大吃苦頭。
雖然我們在軟體設計這個重要但狹窄的領域比其他人聰明,但這不能使我們擺脫對技術與經濟互相作用影響的茫然,而這些就發生在我們的眼皮底下。即使Unix社群中最具洞察力、最具遠見卓識的思想家,他們的眼光終究有限。對今後的教訓就是:過度依賴任何一種技術或者商業模式都是錯誤的——相反,保持軟體及其設計傳統的的靈活性才是長存之道。
另一個教訓是:别和低價而靈活的方案較勁。或者,換句話說,低檔的硬體隻要數量足夠,就能爬上性能曲線而最終獲勝。經濟學家Clayton Christensen稱之為“破壞性技術”,他在《創新者窘境》(The Innovator's Dilemma)[Christensen]一書中以磁盤驅動器、蒸汽挖土機和機車為例闡明了這種現象的發生。當小型機取代大型機、工作站和伺服器取代小型機以及日用Intel機器又取代工作站和伺服器時,我們也看到了這種現象。開源運動獲得成功正是由于軟體的大衆化。Unix要繁榮,就必須繼續采用吸納低價而靈活的方案的訣竅,而不是去反對它們。
最後,舊學派的Unix社群因采用了傳統的公司組織、财務和市場等指令機制而最終未能實作“職業化”。隻有癡迷的“黑客”和具有創造力的怪人結成的反叛聯盟才能把我們從愚蠢中拯救出來——他們接着教導我們,真正的專業和奉獻精神,正是我們在屈服于世俗觀念的“合理商業做法”之前的所作所為。
Unix族譜
Unix的故事仍舊延續着……,許多網站也為這段曆史留下記錄。一個詳細記錄Unix曆史的網站([url]http://www.levenez.com/unix/[/url]),這個網站忠實記載着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)
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多年過去了,這些東西早已變成經典)
l Everything (including hardware) is a file
所有的事物(甚至硬體本身)都是一個的檔案。
l Configuration data stored in text
以檔案形式儲存配置資料。
l Small, single-purpose program
程式盡量朝向小而單一的目标設計
l Avoid captive user interfaces
盡量避免令人困惑的使用者接口
l Ability to chain program together to perform complex tasks
将幾個程式連結起來,處理大而複雜的工作。
Unix的影響和哲學
Unix是第三次工業革命中計算機軟體領域最具代表性的産物。在這近40年中,由Unix造成的影響是最有深遠意義的。就我看來,Unix為軟體領域帶來了至少以下有積極的東西,由這些東西所引發的直接或間接的事物更是舉不勝數。
1) 軟體開發的若幹哲學和思想。
2) 全民參與推動軟體,代碼共享的模式。
3) 開啟了黑客文化和開源項目。
4) 免費和商業的完美結合的Linux。
5) C語言,而後發展的C++,Java等等類C的語言和腳本。
6) TCP/IP,其的Socket程式設計已成為今天通用的網絡程式設計主流。
不能不說,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)。在[url]http://en.wikipedia.org/wiki/Unix_philosophy[/url] 上有很多的基本上大同小異的Unix哲學,都是很經典的。
Doug McIlroy 是認為UNIX的哲學是這樣的:三條哲學,簡明扼要,就是這三條哲學貫穿着整個Unix世界。尤其是第一條“do one thing and do it well”真是相當精彩!
l Write programs that do one thing and do it well.
l Write programs to work together.
l 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 給出了下面九條哲學思想
Small is beautiful.
Make each program do one thing well.
Build a prototype as soon as possible.
Choose portability over efficiency.
Store data in flat text files.
Use software leverage to your advantage.
Use shell scripts to increase leverage and portability.
Avoid captive user interfaces.
Make every program a filter.
在今天,這種思想依然被傳承着,在影響着世界上各個角落的每一個程式員。
Unix痛恨者手冊
這裡還需要值得一提的是一本叫《The Unix-Haters Handbook》,中文譯做《Unix痛恨者手冊》。可以在這裡下載下傳:[url]http://research.microsoft.com/~daniel/uhh-download.html[/url]。其中以調侃的語氣聲讨了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的歲月裡,大夥為了科研目的或個人興趣在Unix上進行各種開發,并且不計較金錢利益,将這些源碼公開,互相共享。在那裡,開發和自由成為主題,正因為如此,當今的世界才如此豐富多采。在近40年Unix文化和技術積澱的裡面,蘊涵着比較純正的計算機文化和思想。
縱觀整個Unix的曆史過程中,許許多多的程式員、工程師前輩們在Unix中所摸爬滾打,他們的辛勤地、他們嘔心瀝血地跟随Unix,努力建立一個繁榮的計算機世界的文明。Unix不是一個簡簡單單的作業系統。有人說,Unix是程式員設計給程式員的,一點沒錯。Unix的近40年曆史造就了它的博大精深,它給程式員們帶來的絕不僅僅隻是技術上的知識。它的失誤,它的無奈,它的精神,它的榮耀,它從技術和思想上都啟迪着我們。對于程式員來說,學習Unix就等同于向前輩程式學習。無論你是什麼樣的程式員,你都應該了解Unix,這是開發人員的根,前面的開發者造就了它,而它又在引領後面的開發人員,它是前輩程式員們交給我們的一份禮物,一個接力棒,它是開發人員賴以生存的土壤,是上一輩程式員留給我們這一代程式員開啟未來的鑰匙。Unix就像一個程式員教父一樣,理當受到我們的尊敬和崇拜。
參考資料
l Peter H. Salus 的《A Quarter Century of UNIX》,這被認為是UNIX的标準曆史。
l Eric S. Raymond 的《The Art of Unix Programming》
l [url]http://www.wikipedia.org/[/url] 維基百科
l [url]http://www.computerhope.com/history/[/url] Computer History
l [url]http://www.lotsir.com/Blog/article.asp?id=494[/url] Lotsir's Blog — 《Unix&Linux曆史重溫》
l [url]http://www.aka.org.cn/Docs/hacker-history.html[/url] 《黑客文化簡史》
l [url]http://www.simson.net/ref/ugh.pdf[/url] 《The UNIX-HATERS Handbook》
l [url]http://free-electrons.com/doc/free_software/img0.html[/url] 《GNU/Linux Free Software》幻燈片
l [url]http://cm.bell-labs.com/cm/cs/who/dmr/hist.html[/url] Dennis M. Ritchie 《The Evolution of the Unix Time-sharing System》