Unix傳奇

Unix的歷史教訓

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

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

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

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

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

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

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


Unix的特色

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

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

下面是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.

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

相關文章
相關標籤/搜索