《Linux/Unix設計思想》作者Mike Gancarz:Linux/Unix哲學的印證(圖靈訪談)
圖靈訪談之十八:專訪Mike Gancarz
20年前,X Window System的開發者Mike Gancarz將Unix社群普遍認同的一些準則整理成Unix Philosophy,讓GNU/Linux等後來者能站到巨人的肩膀上。10年前,這本書的第二版Linux/Unix Philosophy得以出版。如今,基於Unix思想體系的Linux、iOS、Android等已經成為全球範圍內的主流系統,Mike的遠見卓識得到印證。圖靈社群有幸邀請Mike Gancerz接受郵件採訪,談談《Linux/Unix設計思想》、作業系統的前世今生、開源運動的前景等。
圖靈社群: 首先,我想感謝您為我們創作了這樣一部關於Linux和Unix哲學的大作。從您個人角度出發,是什麼激勵您寫出了Unix Philosophy 與Linux and the Unix Philosophy這兩部書呢?
Mike: 謝謝你的誇獎。我很高興自己的書能帶給讀者一些啟發。當然,我其實也很享受創作這兩本書的過程。
當我還在DEC公司Ultrix(Ultrix是DEC的Unix產品)工程組工作時,人們早已就The Unix Philosophy的內在理念討論了很多年。在享用午餐時,我們會孜孜不倦地相互強調小程式是多麼好用,可移植性/便攜性是如何至關重要,等等。此外,我們不只流於討論,還在技術生活中貫徹實施了這些準則。
其實,直到我轉去DEC在佐治亞州阿爾法利塔市的Ultrix電話客戶支援中心工作之前,我並未真正意識到我是多麼地迷戀Unix哲學,並遵循其準則來構建系統。在那裡,似乎也沒有任何人意識到Unix的做法與其他系統是大相徑庭的。因此,我為大家做了一些幻燈片演示,概要闡述了Unix哲學,並將Unix系統作為一種教學工具使用,每年還會給組裡的新人分發幾次教程。後來,在一次“DEC使用者協會(DECUS)”舉辦的研討會上,當我做完演示後,有一位編輯提出我教授的這些知識可以作為一本書的創作素材。這便是The Unix Philosophy的緣起。
Linux and the Unix Philosophy的情況卻有些不同。出版商和我都意識到,儘管哲學是永恆的,但The Unix Philosophy中的一些素材卻有些過時了。於是,我們才有了出第二版的想法。但問題是,作為一個作業系統,Unix的聲望在不斷下降,而Linux卻迅速地得到了人們的普遍認可。在貫徹Unix哲學的同時,該系統並未像Unix那般商業化。經過與編輯的多次討論後,我們終於決定將這本書的書名變更為Linux and the Unix Philosophy。
圖靈社群:近年來,您為Linux(包括核心)開發和應用做了哪些新工作?
Mike: 雖然我對Linux核心開發者懷有無限敬意,但我本人的關注點卻一直是使用者空間的應用。其實,我在DEC最喜愛的專案之一便是將整個Unix指令集移植到64位DEC Alpha晶片。打個比方說,如果將Linux比作是一輛車,那我其實對它的發動機並不感興趣。我更關心它可以帶我去到何方,以及,我是否會享受這些旅程。
近年來,圍繞Linux的開發活動呈爆發性態勢,我們已經很難跟上所有專案的進展情況。比如說,就算你只想專注於Linux使用者介面這一塊,但該領域涵蓋的內容多而廣,你最多也只可能掌握其中的一部分技能。所以,目前我僅在系統編譯及工程專案部署這兩方面花了很多時間。在這兩個領域裡,指令碼工具的使用依然很頻繁。雖然,現今的指令碼工具都略有不同,但指令碼仍然是一個很強大的工具。我很享受這種只編寫一行程式碼,卻能利用上別人撰寫的數千行程式碼的喜悅感。
圖靈社群:您總結概括的這些準則都基於Unix的歷史和文化、黑客精神、自由軟體運動以及您與Unix / Linux社群人群普遍採用的做法。素材來源如此之多,再加上Unix哲學文化的博大精深,您是如何將這些精要準則提煉出來的呢?也就是怎麼通過一個短語和句子來總結Unix哲學的精髓?
Mike: 通過在使用者會議及其他論壇上的互動活動,我們大部分人開始體會到Unix有著一些核心理念。多年以來,Rob Pike、Kirk McKusick、Brad Cox、 Jon “maddog” Hall與其他人也都在談論著小程式的重要性,即它們可以輕而易舉地組合在一起去完成大規模的任務。我並未發明所謂的Unix準則,我只是把這些“大拿”們談到過的理念如實記錄了下來。
如何用一個短語或句子來總結Unix哲學呢?這確實是個難題,因為每一條準則單獨存在時,根本就體現不出其優勢。只有將它們視作一個整體,我們才會發現Unix哲學的博大精深之處。我想你們可能會認為,程式應該做且必須要做到的最重要的事情,就是與另一個程式互動。大多數Unix版本的開發都是基於這個思想,如果你能正確構建軟體,它就永遠能與其他軟體進行互動,從而始終如一地遵循Unix哲學理念。
圖靈社群: 您提出了一個有趣的概念——“人類創造的三個系統”,您還指出Linux同時兼具第二個和第三個系統的特性。那麼,目前Linux進化到了哪個階段?它是否已經達到了“第三個系統”的標準呢?
Mike: 相比本書創作時,Linux現在要更為接近“第三個系統”的狀態。事實上,我認為如果你忽略掉某些Linux發行版那繁瑣的安裝機制,其實大多數Linux已經算得上是“第三個系統”了。當然,在Linux平臺上,仍有一些子系統正處於演化程式中。例如,觸控使用者介面與移動世界就是兩大能說明Linux仍在不斷髮展的代表性領域。
圖靈社群: 您曾經預測,Unix將成為計算機世界的首選作業系統。並且,Linux作為Unix的變種,最有可能實現這一預測。十年後,Linux在企業領域與桌面領域的發展各不相同。您如何看待此前這一預測?
Mike: 雖然我預測得沒錯,但是它並沒有朝著我原本預期的方向發展。Unix確實是計算機世界的首選作業系統,今天,它已成為除Windows之外的所有主流作業系統的根源。 而Linux還牢牢雄踞企業級伺服器系統的江山。另外,叫好又叫座的Android作業系統也是基於Linux核心開發的。更不用說iOS是從Mac OS X演變而來的,要知道Mac OS X可是Unix的衍生品。單純以平臺數量而論,除掉桌面領域,從Unix派生出的作業系統幾乎可以說是無處不在。
其中,真正具有諷刺意味的是,雖然Linux因傳說中使用者介面的不好用而未能主宰桌面領域,但Linux與Unix都在移動環境下得到了蓬勃發展,這主要是因為開發人員重新為該環境定製了一些好用的使用者介面。所以Android和iOS使用者總數其實要遠超Windows的使用者數量。儘管大多數使用者不知道Linux或作業系統到底是什麼,可實際情況就是如此。
圖靈社群: 關於“可移植性/便攜性”,您曾經說過“使用最頻繁的那臺機器才是最強大的計算機”。那參照這個標準,iPad與智慧手機豈不就是最強大的計算機麼?我們還想知道,目前的移動網際網路熱潮將會給Linux帶來何種機遇與挑戰?GNU/Linux在移動網際網路的發展前景如何?
Mike: 是的,按這個標準來衡量,智慧手機與平板電腦等移動裝置早已贏得了這場戰役。這是因為大多數人都是內容消費者,而不是內容生產者。還記得“內容為王,傻瓜!”這一章節嗎?移動裝置為使用者提供了最高便利,使得他們可以隨時隨地獲取他們喜愛的內容。
此外,使用者是內容消費者而不是生產者這一傾向使得移動網際網路佔據了一定優勢,但對Linux本身而言影響不大。目前,頻寬不足這一普遍問題限制了移動網際網路的發展,但我相信它最終還是會解決的。另一個棘手問題就是,很多網頁的設計是基於讓多數使用者連線到同一Web伺服器的理念。如果同時有一百萬使用者希望能在一小時內下載某個視訊,網站就很難滿足所有人的需求。已經有人在著手解決此問題,他們將迫使Linux網路領域的人們去重新思考,到底該如何處理海量資訊的快取與傳輸。
Linux在移動領域中的最大機會之一就是“雲端計算”。每個人都希望能在世界各地通過任何裝置來獲取資料。但與此同時,他們也希望系統能做好資料備份並保證其安全。作為計算基礎設施的頭號作業系統,Linux已在“雲端計算”領域立穩了腳跟。而且,它還會在可預見的未來繼續增加市場佔有率。這恰恰印證了我們在書中提到的一個觀點,計算機應做的最重要事情之一就是與其他計算機互動。可靠的網路通訊是“雲端計算”的一個基本要求。
未來,在移動世界Linux要面對一些安全性方面的重大挑戰。這同樣是具有諷刺意味的,因為此前Linux一直被視為比其他同類產品更為安全的產品。其中,也有諸如Android這樣基於Linux的開放系統。目前,開放狀態對它們來說可謂是喜憂參半。也許,人們可以只通過認證機構來下載應用程式。亞馬遜已經在朝著這個方向努力,更不用說蘋果早就採用了這一做法,即該公司旗下的線上應用商店(App Store)。 不過,目前為止我仍然沒看到真正的解決策略,因為每個人都有自己的衡量標準,擁有絕對安全的自由度是一件很難的事情。你需要放棄一些東西,非此即彼。而且,人們都對所謂的安全界限有著不同看法。
圖靈社群: 在這本書裡,你用了很長的篇幅來抨擊“強制性的使用者介面(CUI)”,但今天CUI已成為計算機系統中的主導介面。你會如何解讀此情況?
Mike: 在命令列shell介面中,CUI指的是那些強制性獲取使用者注意力,並防止他們執行其他程式的介面。除非他們先完成此前任務才能脫離CUI的控制。然而,在圖形化環境中,CUI指的是模態(Modal)介面。例如,鎖定使用者的強制性對話方塊,此類對話方塊在使用者給出響應之前是不會釋放系統資源的。目前,大多數使用者介面已經克服了這一壁壘,哪怕是在資源有限的移動環境也一樣。這說明,曾經的哲學理念現已成為常識。
圖靈社群:有很多中國程式設計師渴望能投身到開源活動中,但他們不知道自己是否能依靠此類軟體過活。您能夠根據自己的經驗給他們一些建議嗎?
Mike: 雖然我不想假裝自己能理解中國程式設計師所面臨的軟體市場環境,但我想說的是,正經加入一家公司併為其開發某些應用程式或系統更靠譜。如果公司允許你將程式碼貢獻給開源社群的話,這會是一件好事情。也就是說,程式設計師的首要任務是生存,他們和芸芸眾生一樣,先得解決好溫飽問題才會有閒情逸致去考慮其他。所以,在滿足生存需求的前提條件下程式設計師還能做出一些無私貢獻是最理想的狀況。
那麼,如何能在為他人提供免費軟體之餘,還能養活自己呢?開源社群的普遍做法是為該軟體的使用者和其他開發人員提供技術支援,這確實可行。當然,我也見證過很多嘗試此運營模式,但最終還是失敗了的公司。因此,我建議公司與個人都應該先專注於做好自己的本職工作。在專案成功之後,如果你想與大家分享自己的程式碼,並確實這麼做了,那所有的人都會從中受益。
圖靈社群: 前兩本書闡述了相同的哲學原理。如果您有機會就類似主題創作第三本書的話,您會對Linux/Unix Philosophy的九大基本準則及和十條小準則作修訂與補充嗎?
Mike: 哲學是永恆的。這些準則依然是真理,我頂多會修改一下其中的規範,讓它們變得更為通用。比如,“使用指令碼來提高軟體槓桿效應”仍然是一個偉大的想法,但shell指令碼正在被諸多新工具取代。不考慮使用者環境,“強制性的使用者介面”其實本質上是“模態使用者介面”。所以我可能會將該準則改為“避免模態使用者介面。”
此外,蘋果目前取得的成功恰恰可以證明“哲學是永恆的”。但凡在蘋果充分實踐了Unix/Linux哲學的領域,它都獨佔鰲頭。想要“可移植性/便攜性”嗎?蘋果將使用者的整個音樂收藏庫放進你的口袋、平板電腦及桌面機中。比起iTunes桌面介面,市場上有諸多高效的使用者介面。然而,“可移植性/便攜性”這一因素卻屢獲成功。那麼,“只做好一件事”的小程式又是什麼情況?聽起來iPhone應用程式不正是在貫徹這條準則嗎?什麼是軟體槓桿效應?蘋果並沒有親自去撰寫執行在其裝置上的軟體,它只是充分調動其他開發人員來為其編寫應用。
當我興起就類似主題而編寫第三本書的念頭時,我會問自己一個問題,“Linux/Unix哲學適用於現實生活的情況嗎?”想想在非計算機世界中去“儘快建立一個原型”的適用性。 “讓每一個程式都成為過濾器”在現實生活中可以轉化為“從某處獲取資訊,整合成新資訊,然後傳送給相應的消費者”。還有“尋求90%的解決方案”變成“不要為所有人建立一攬子解決方案,能處理大部分人的需求即可”。如果人們需要一本在總體生活層面上的Unix哲學書,我也許會沿襲這些思路去改寫我的書。
圖靈社群: 在Linux and the Unix Philosophy的最後,您討論了一些在當時(2003年)就已採用了Unix哲學的“新技術”。那麼,現在您能否為我們介紹一下最近十年間還有哪些技術符合Unix哲學嗎?
Mike: 好吧,我其實可以與大家討論一些諸如近場計算(near field computing)與分析,以及整個社交網路熱潮中的技術。但是,“授人魚不如授人以漁”,我寧願選擇後者,讓我們從以下這些層面來思考吧。
隨著新技術與生活的聯絡越來越緊密,我們可以仔細觀察它們都是如何貫徹Unix哲學的。一項技術是否做到了“舍高效率而取可移植性”?公司是否達到了“只做好一件事”這個目標,還是他們試圖去取悅所有人的需求?產品在價廉之餘,是不是能夠高效執行,即滿足“更壞就是更好”這一準則?還有,你腦海裡冒出的新想法是“第一個系統”嗎?或者,你已經看到它有成為“第二個系統”的傾向?請注意,其中又有多少想法能明顯轉變成“第三個系統”呢?此外,有多少在十年前被人們視作奇思怪想的概念,到現在卻被人們視作常識了呢?你是否又有這個鑑別能力,可以洞悉今天的“第二個系統”(比如,社交網路)中真正有價值的部分思想,也就是那些能將其轉化為“第三個系統”的核心概念?
更多精彩,加入圖靈訪談微信!
相關文章
- Unix哲學(Unix程式設計藝術)程式設計
- Unix, Linux 和MacOSLinuxMac
- linux/unix程式設計手冊-16_20Linux程式設計
- 【UNIX】DBA常用的linux命令Linux
- Unix、Linux、GNU 關係梳理Linux
- Unix哲學17條原則的新感悟
- [譯]從LinkedIn,Apache Kafka到Unix哲學ApacheKafka
- Linux/Unix重要find命令詳解Linux
- 理解 Linux/Unix 登入指令碼Linux指令碼
- 《Unix 網路程式設計》15:Unix 域協議程式設計協議
- 理解 Linux/Unix 登入指令碼的技巧Linux指令碼
- Unix、Windows、Mac OS、Linux系統故事WindowsMacLinux
- Linux vs. Unix:有什麼不同?Linux
- 九、Linux/UNIX操作命令積累【rpm】Linux
- UNIX與Linux有什麼區別?學習linux哪個書好Linux
- Linux和Unix的區別是什麼?Linux基礎教程Linux
- 在Linux中,有哪幾種linux/unix發行版本?Linux
- 在Linux中,Unix和Linux之間的關係是什麼?Linux
- Linux和Unix有什麼不同之處?Linux
- 4 種繞過 Linux/Unix 命令別名的方法Linux
- 『學了就忘』Linux基礎 — 1、UNIX系統介紹Linux
- 15 條實用 Linux/Unix 磁帶管理命令Linux
- 如何區分Linux和Unix?作業系統!Linux作業系統
- Linux/unix主機環回地址的一些功用Linux
- 在 Linux/Unix/Mac 下清除 DNS 查詢快取LinuxMacDNS快取
- Windows、Linux、Unix哪個更好用?優缺點分析!WindowsLinux
- Unix Linux檔案型別與許可權管理Linux型別
- k14s - 遵循Unix哲學的簡單、可組合的Kubernetes工具
- Unix環境高階程式設計——第一章-UNIX基礎知識程式設計
- Windows、Linux、Unix、Mac OS X系統哪個更好用?WindowsLinuxMac
- Unix和Linux作業系統有什麼區別Linux作業系統
- Python_UNIX和Linux系統管理指南(四)—— 網路PythonLinux
- 漫談哲學與程式設計程式設計
- Linux 命令列引數的三種風格 Unix/Posix、BSD、GNULinux命令列
- Unix pthreadthread
- Unix高階程式設計學習筆記--系統呼叫簡介程式設計筆記
- 《UNIX網路程式設計》筆記 - select和poll程式設計筆記
- unix環境高階程式設計(中)-程式篇程式設計
- Kioptrix Level 1(Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4)ApacheLinux