vi簡史

NetBSD_6.1_vi_C_Hello_World.png

歷史的道路不是涅瓦大街上的人行道,它完全是在田野中前進的,有時穿過塵埃,有時穿過泥濘,有時橫渡沼澤,有時行經叢林。---- 車爾尼雪夫斯基

當我們每天打開電腦,使用vi的時候,一切顯得是那麼順理成章,覺得vi這個編輯器從古老的Unix走來,似乎理所應當地成爲我們系統中的默認編輯器,卻不知道它曾經經歷了怎樣的曲折甚至是九死一生。我們用它,我們恨它,最終我們又離不了它,這就是vi

混沌初開

1964年,一個21歲的年輕人Butler Lampson從哈佛大學文學院畢業,來到加州大學伯克利分校讀博,在這裏,他遇到了另一個天才少年,18歲的Peter Deutsch在這裏讀本科,他們的任務是共同爲一臺SDS-940電腦編寫一個分時操作系統:

102649032p-03-01.jpg?w=600

在當時,絕大部分計算機使用的都是批處理方式運行指令,一個用戶的使用是獨佔式的,在他的程序運行期間不會被別的程序打斷。而Butler Lampson他們編寫的操作系統是第一款通用型的分時操作系統。因此他們需要編寫一個內核和一個命令行界面,需要可以能夠編輯文本,所以他們開發了一個小程序叫做QED,它的名稱的來源是Quick Editor快速編輯器)。

除此之外,Butler Lampson的貢獻還包括後來在施樂公司期間領導開發了Alto,這個操作系統就是日後激發喬布斯靈感並從施樂偷師學藝的那一款操作系統。並且Butler本人在1992年獲得了計算機學界最高獎圖靈獎

這時候,加州大學伯克利分校的另一個天才少年Ken Thompson(這個名字日後將如雷貫耳,因爲是他發明了Unix),剛剛獲得了電子工程學士學位,一年後,獲得了計算機科學碩士學位,並拿到了貝爾實驗室的Offer

在貝爾實驗室,Ken的工作之一是把他母校的QED移植到另一個比較大型的分時操作系統CTSS上,只不過這個CTSS是另一個學校的產物——麻省理工學院。在移植的過程中,Ken加入了他當時正在研究的,也是他最喜歡的Regular Expression正則表達式)。在此過程中,KenQED變得非常熟悉。

Ken最終在1969年發明了Unix,而Unix系統中一個重要組件是ed,這個ed的很多功能直接來源於Ken的母校加州大學伯克利分校的QED。由ed而又衍生出來了一系列著名的Unix命令,例如grepsedgrep這個名詞的來源其實是g/re/p,第一個字母g代表global全局檢索),re代表regular express正則表達式),而p表示print顯示)。sed裏面則加入了很多ed裏沒有實現的script腳本)功能。

至此,ed已經成爲Unix操作系統的標配。

我們來看一下一個標準的ed的編輯界面(下文標黑的粗體字是屏幕顯示的內容,其餘是用戶輸入的命令):

a
ed is the standard Unix text editor.
This is line number two.
.
2i

.
,l
ed is the standard Unix text editor.$
$
This is line number two.$
3s/two/three/
,l
ed is the standard Unix text editor.$
$
This is line number three.$
w text
65
q

是不是已經看到了一些vi的影子了呢?只是這時的ed還只是一個行編輯器,遠遠不是後來vi的樣子。

脫胎換骨

Ken發明Unix6年之後,1975年,他回到母校伯克利分校,這一次,他的使命是在伯克利分校的電腦系統上安裝他自己發明的Unix,而這一套Unix日後將成爲Unix界極富盛名的BSDBerkeley Software Distribution伯克利軟件套裝)。也就是這一年的夏天,Ken在伯克利分校遇到了我們故事的主人公Bill Joy,那一年,Bill21歲,正在伯克利分校讀研。

Bill後來回憶說:

Ken Thompson來到伯克利並且帶來了一臺壞掉的Pascal系統,而我們準備在那個暑期修好它。當我們對它進行修理時,發現我們正在使用的名爲ed的編輯器完全無法使用了。

由於Unix系統的廣爲流行,遠在倫敦瑪麗王后大學擔任講師的George Coulouris也不得不使用ed,但他得出的結論是:ed的難用程度達到了神級,根本就不是給人用的。所以他開始着手改進ed,並把改進之後的軟件版本起名爲em(editor for mortal給人類使用的編輯器)。1976年夏天,George訪問伯克利分校,他帶着一卷磁帶,裏面包含了他的em代碼,並演示給別人看。其他人對此不感興趣,而Bill Joy對此很受啓發,他要來了em的源碼,並在此基礎上不斷做改進,起名爲en,然後又在en的基礎上不斷改進,一直改進到了ex(中間是否還有eo, ep, eq, ...已經不得而知)。

197710月,Bill Joyex的基礎上,增加了全屏幕顯示的功能,並將此功能命名爲ex的可視化模式(visual mode),別名——vi

因爲Bill Joy在開發vi的時候用的是一臺ADM-3A電腦:

Adm3aimage.jpg

而這臺電腦的鍵盤排布方式是這樣的:

圖片描述

這個鍵盤上並沒有上下左右方向鍵,而上下左右鍵是印在了HJKL這四個字母上,通過按下Ctrl+HJKL來實現上下左右移動,所以vi裏的上下左右是通過HJKL來實現的,和遊戲玩家裏熱愛的WASD是如此不同,以至於很多人認爲這是一種反人類的設計。但你們要知道,WASD很多很多年之後才被大多數人接受的設置

在當時的各款主流電腦上,方向鍵要麼沒有,要麼也是一字排開。例如蘋果的Apple II系統:

Apple_IIc_Plus_%28front%29.jpg

同時還應該注意到,ADM-3A電腦鍵盤上Esc鍵的位置有多麼特殊,就在Q鍵的左側,正好是我們目前Tab鍵的位置,簡直是觸手可及,所以vi用它來做模式切換鍵是非常自然,而不像現在的Esc鍵離我們的手那麼遠,要把小指伸出去很遠才能夠得到。

還有一個細節是在ADM-3A鍵盤上,除了上下左右四個鍵外,還有一個Home鍵,它也可以通過按下Ctrl來實現回到行頭的效果,而更關鍵的是這個鍵同時也是~鍵,這也就是爲什麼Unix系統裏會用~來代表home目錄的原因。

黯淡時光

vi的第一個正式版本是在19783月隨着BSD 1.0同時發佈的,這注定了它以後將走過一段不平凡的歲月。

Bill Joy繼續對vi進行升級,中間經過無數次疊代,在19796月發表了vi2.7版本後,退出主要開發者行列,但仍持續貢獻到19808月的3.5版本,從那以後徹底淡出。在談到他爲什麼要退出vi開發者行列時,他說:

我希望我們沒有用盡鍵盤上的每一個鍵。我覺得vi一個最有趣的特點是它是一款基於模式的編輯器。作爲一款基於模式的編輯器,vi做的非常棒。EMACS的優點之一是它是一款無模式的編輯器。但我從來沒有想過要把vi做成EMACS那樣。我也不擅長於優化vi的代碼。我覺得編輯器的重繪功能非常棘手。vi完成它目前的工作非常不錯,但你總是在學習的過程中編寫程序……所以我不再繼續這樣做了。
實際上,我當時正在試圖給vi加上多窗口編輯的功能,那是1978年的12月。我的磁帶機壞了,而我沒有任何備份。我的代碼都丟失了,而我連文件目錄都沒有。我必須重寫關於多窗口編輯功能的所有代碼,我放棄了。我退回到上一版本,給代碼增加了一些說明文檔,完成了用戶手冊,然後就退出了。如果不是那一次事故的話,也許vi就會有多窗口編輯功能了,但,誰知道呢?
vi的最根本問題是它沒有鼠標,所以纔有了各式各樣的命令。但你不能用現在的眼光去看當時的軟件。我覺得如果能加上多級回退這個功能也很不錯。但無論如何,vi的內核實際上還是ed,你不可能脫離這個事實。
這就有點像用一層層紙包裹起來的糖果,它沒有一個統一的概念。我覺得如果可以回到過去,我不會回去重新再來一遍。

1982224日,3個斯坦福大學畢業的學生Vinod KhoslaAndy BechtolsheimScott McNealy創辦了Sun公司,他們挖來了伯克利分校畢業的Bill Joy,從而導致伯克利分校Unix BSDvi被鎖死在3.7版本上。其他各家商業公司,包括IBMSunHPDEC都能在Bill Joy開發的vi的代碼基礎之上做改進,但其他人卻不可以了。因爲AT&T開始了那場臭名昭著的官司,控告BSD侵犯了他們的知識產權,而vi是基於BSD裏面的ed做開發的,也屬於被禁止使用之列。

關於這場官司,詳細情況可以看阮一峯的文章《Unix版權史》。阮一峯在文章中評論道:

AT&TBSD之間的訴訟,是當代版權制度最惡劣的應用之一。
爲什麼這麼說?
首先,起訴者其實與Unix毫無關係。這是AT&T經理層的決定,而不是開發者的決定。事實上,包括Ken Thompson在內的技術人員一直希望,公司能夠公開源碼。他們完全有理由這麼要求,因爲Unix從來不是AT&T的業務重點,最初是個人項目,後來也沒有佔用公司太多資源。銷售Unix的利潤,在公司全部業務中,幾乎可以忽略不計。爲了一點點錢,去打擊一個使許多人受益的產品,何必這樣做呢。
其次,AT&T根本不關心Unix的發展。它真正關心的是金錢和削弱對手。1994年,官司還沒有結束,它就把Unix賣給了Novell公司,從此不再與Unix發生關係,官司也因此不了了之。既然你不想要這個產品,爲什麼要提起訴訟呢?真是不可理解。
最後,所謂的侵權幾乎是不存在的。因爲NovellAT&T買下Unix版權後,檢查了BSD的源碼,在18000個組成文件中刪除了3個,並對其他文件做了一些小修改,然後BSD就重新獲得了自由發佈源碼的許可。這意味着,至多隻有千分之一的BSD代碼有版權問題,但是就因爲這千分之一的問題,導致百分之百的產品被迫中斷,完全不符合比例原則。
所以,這場版權官司就是一家利益至上的公司,以微不足道的理由,爲了一個自己根本不在乎的產品,悍然發動一場損人不利己的戰爭。

BSD在法律糾紛中艱難前行,並分裂出了3個版本分支:FreeBSD, NetBSDOpenBSD。而在此之前,喬布斯黯然離開蘋果,開始自己的第二次創業的時候,開發的NexT操作系統,也是從BSD上拉的分支,最後還吸取了很多FreeBSD的成果,最後成就了今天的Mac OSX,以及你手機裏使用的iOS

圖片描述

鳳凰涅磐

在這場曠日持久的官司當中,vi不能用了,但是vi的熱愛者並不願意切換到emacs上,直到1990年,Steve Kirkendall才發佈了一個vi的克隆版,起名叫Elvis1992年,Elvis被納入BSD1994年,Keith BosticElvis基礎上開發了nvi,一直沿用至今。

花開兩朵,各表一枝。1991年,芬蘭大學生Linus Torvalds,他想學習Unix,但是買不起工作站,就自己寫了一個能在386上運行的操作系統內核,並以自己的名字命名爲:LinuxLinus Torvalds後來說:

如果我早知道BSD沒有法律問題,並且可以被移植到386,我會加入BSD的開發,而不會自己動手寫一個。

Linus寫的Linux並不是一個完整的操作系統,它只是一個內核,在內核之外,還應該有像vi這樣的編輯器。於是在20006月,Gunnar Ritter基於Bill Joyvi源代碼,把vi發佈到了Linux操作系統和FreeBSD操作系統上(這時候的BSD由於法律訴訟的原因已經被拆分成了FreeBSD, NetBSDOpenBSD三個分支)。一開始,這又是一個違法的舉動,因爲Ritter根本就沒有獲得AT&T的授權,但是隨着20021月,對相關授權限制的逐漸解除,這個版本才正式成爲一個合法的版本,也就是我們今天使用的Linux上的vi

然而,令人唏噓的是,雖然現在vi已經可以用在BSD的直系後裔FreeBSD上了,但是FreeBSD已經有了自己的替代品nvi,不願再使用vi。反倒是那些一開始沒有viUnix版本,例如HP-UXAIX等等,可以繼續堂而皇之地使用vi

雖然如此,但是由於Linux的普及,以及Mac OSX這個BSD的變種的流行,vi依然成爲了各大操作系統中事實上的標配。vi這個編輯器的王者稱號當之無愧,並將隨着開源軟件的發展一直永遠流傳。

最後,讓我們記住vi的作者Bill Joy。是他,給我們帶來了vi

Bill_joy.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章