Plan-9效應:為什么東西不壞就不要去修它

jopen 10年前發布 | 9K 次閱讀 Plan-9

        英文原文:The Plan-9 Effect or why you should not fix it if it ain't broken

        概述

Plan-9 是一個很棒的、很先進的,而且完全是全新實現的 Unix 系統,它的目的就是要最終解決 Unix 最初的諾言:一切皆為文件。你聽說過這套系統嗎?沒有?那好,下面就是為什么。

        我十分確信你不知道 Plan-9 是什么東西,并且很有可能你還是第一次聽說這個名字。

Plan-9效應:為什么東西不壞就不要去修它
Plan-9 是一款神奇的新版 Unix,幾乎是由 70 年代當初開發 Unix 系統的同一個團隊開發的。它的確是一款非常酷的操作系統。它跟 Unix 非常相似,但它不是 Unix,它糾正了 Unix 系統里很多不一致的、古怪的、至今仍然存在的特性。

        Unix 在當初立項時有個這樣的許諾:系統里任何的東西都是‘文件’——根據某些文件的定義。例如,sockets,也許稱作網絡連接更合適,它們就不是文件,進程也不是文件。

        在 Plan-9 中,所有的這些問題都解決了!先進的 9P 虛擬文件系統協議最終讓所有東西都成為了文件。目錄變成了“命名空間”,資源被映射成了文件。多么神奇!現在,你可以通過對/proc目錄(現在應該成其為一個命名空間)里的一個文件使用“cat”命令來查看進程的情況。同樣,打開一個網絡連接的方式變成了打開/net/tcp目錄里的一個文件,這就是它。”iotcl”系統調用在這個系統里完全被根除了,因為基于操作系統上的現代文件形式中的這種怪胎已經不再需要了。

        那么,為什么你從來沒有聽說過這樣一款神奇的操作系統呢?

        你從來沒有聽說過它的原因是,它并不是一款成功的操作系統。這怎么可能呢?是這樣的,是因為 Plan-9 實際上沒有解決任何問題。在 Unix 世界里,從來沒有人抱怨說 Unix 沒有兌現當初關于文件抽象的諾言。

        在隨后的日子里,Plan-9 里的/proc文件系統概念被人移植到到了 Solaris 等很多其他商業版 Unix 系統里(Linux 也采用了它)。 Plan-9 里另外一個非常著名的首創——UTF-8——被迅速的被眾多其它操作系統采用,不僅僅是 Unix 家族。在所有的操作系統里,即使存在一些由于各種原因沒有采用 UTF-8 的,它們也開發出來將 UTF-8 和本地編碼轉換的程序庫。

        Plan-9 的對于網絡通信的特殊的處理方式需要在這里特別的說明一下。雖然用基于命名空間/文件系統的方式來代替專用 API 來處理網絡操作,聽起來很吸引人,但是整個 Unix 世界,不僅所有人都已經接受了使用伯克利 Socket API 做為標準方式來進行網絡編程,甚至 Windows 平臺也實現了幾乎相同的 API 里簡化各種網絡應用向 Windows 上移植——雖然存在一些小問題。

        更重要的是,Plan-9 發明的這種與眾不同的網絡編程編程方式在誕生之日就注定了毫無用處。因為在當時,大部分做網絡編程的人都已經轉向了更高的網絡抽象層。RPC 和 Corba 已經誕生,所有的需要跟遠程服務器通信的應用全都轉向了它們。程序員為了跟遠程服務通信時需要打開 sockets 的機會越來越少,所有的他們都已經習慣了使用 Berkeley API。(旁注:曾經有一個 POSIX 模擬層,叫做 APE“ANSI/POSIX Environment”,試圖將 Plan-9 上的某些功能映射到 POSIX 對應的功能上。這個模擬層一直都沒實現,因為一些應用——例如 X11——的遷移過于復雜,不可能完成。“維持它正確運行的工作量太過巨大”——維基百科)。)

        Plan-9 的一個最主要的問題出在 AT&T和 Unix 幕后的這群人身上,盡管他們都是才華橫溢的科學家和程序員,但他們不懂得如何去開發商業軟件,而 AT&T也從來沒打算進入軟件業。這些,我承認聽起來有些大不敬,但事實就是這樣。他們使用軟件,他們喜歡開發內部軟件來運行他們的高端網絡設 備,但是他們卻從來不去開發要賣給別人的軟件,而且跟 Sun,IBM,微軟等商業公司不一樣,這從來不是他們的資金的主要來源。這就意味著他們不需要有外部世界需要什么樣的軟件的意識。舉個例子,Sun 公司就需要這樣的意識,所以他們開發出了 RPC。他們認識到人們在進行網絡編程時很痛苦,他們看到了創建一個網絡抽象層的商業機會:“嗨,大伙們,SunOS 有一個很酷的東西,讓我們能夠不直接跟 sockets 打交道就可以開發出網絡應用!你絕對應該使用 SunOS”。

        還有,在 Plan-9 中,很多“好的老的東西”被刪除了,大量的跟其它 Unix 不兼容的東西被加入了系統。這幾乎打消了眾多公司試圖將他們的應用遷移到 Plan-9 的念頭。如果你不知道這樣一個新系統是否能夠獲得成功,那為什么要耗費了大量的工作把自己的應用遷移到這個新平臺上呢?這就是典型的雞生蛋蛋生雞問題:一 個操作系統的價值就在于上面有大量應用可運行,無它。如果一個系統很新,你要做的是必須發展一個能夠支持各種應用的生態系統,通過它們讓這個系統變得有價 值。只有兩條路能做到這樣。第一個就是讓這個系統跟目前現存的系統保持最大的兼容,也就是 Unix, POSIX 和 Motif 這些系統。第二個就是創建自己的生態系統,以此來提升新系統的價值,微軟 Windows 和 Office 辦公系統軟件就是典型例子。

        我們應該從 Plan-9 的歷史教訓中總結出一些經驗嗎?

        當然,我們至少可以獲得下面這些:

  • 首先是,不要試圖去修改那些沒有壞或你認為不夠好的東西,如果要修,只去修改出問題的部分,不要去修改看起來很笨——但事實上是在按要求工作的東 西。例如,UTF-8 是個非常棒的創意,你需要它,但你可以用程序庫或子系統實現它,這樣其它系統也能使用它,而不是去基于這個編碼開發出一套全新的操作系統。
  • 第二個是,在開發一個你的系統前,先去搞清楚它是否有市場,或者人們是否需要這個東西。例如,/net/tcp文件系統絕對是一個精彩的純學術課題,如果是早幾年,它一定能完勝 Berkeley sockets,但不應該是在直接使用 Socket 的人群已經沒剩幾個的時候。
  • 第三,要么完全的獨立自主,要么跟現有的系統保持最大兼容。但 Plan-9 卻處在它完全不應該的位置:中間。這套系統既不跟現有的所有 Unix 系統兼容,同時也不提供其它 Unix 系統中都有的、必要的工具。沒有高級文本編輯器、表格軟件、CAD 程序和服務器軟件。它就是一個神奇的空盒子,卻沒有提供任何方法讓人們容易的把東西放進去。

        這些看起來都是一些非常高層的東西,并不是特別跟程序員的日常開發相關。看起來是這樣,但事實遠非如此。現如今,你可以很容易的開創自己的事 業,開始向用戶提供某種的服務。然而,你的服務是一個有價值的產品?還是變成了另外一個 Plan-9 傳奇?這并不是很容易判斷的事。例如,你的打算開發一個報表系統,來展現監控數據或其它任何可視的狀態,如果你沒有提供用它將這些報表導入到 Excel 的功能,那你在寫第一行代碼前就輸了。如果你打算開發一個新的 Web 社交應用,而你沒有提供使用 Fackbook、推ter 或 LinkedIn 登錄的方式,那你在搭建 WEB 服務器前就輸了。如果你 web 服務中信息的導出方式沒有采用 RSS 或 ATOM,而是采用了一種全新的格式,猜會怎么樣?你在吸引到第一個用戶前就輸了。但是,比著一切更重要的是:你的產品真正的解決了一個現實存在的問題 嗎?

來自: 外刊IT評論
                    <span id="shareA4" class="fl">                          </span>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!