第1章 從一臺打印機說起
我畏懼希臘人,哪怕他們帶著禮物來。
——維吉爾,《埃涅阿斯紀(jì)》
這可是臺全新的打印機!怎么又卡紙了?
理查德·M·斯托曼(Richard M. Stallman)剛剛發(fā)現(xiàn)了這問題,這可苦了他了。他當(dāng)年27 歲,是麻省理工學(xué)院人工智能實驗室的一名程序員。一個小時前,他給那臺激光打印機提交了一個 50 頁的打印任務(wù),之后就忙著干活去了?,F(xiàn)在他正站在那臺打印機前面,眼巴巴地看著它被紙卡?。嚎偣膊糯蛴×说乃捻摷?,還沒有一頁是自己的。換句話說,斯托曼那份 50 頁的文件,外加別人的半份文檔,全被一張紙卡住了,成了實驗室網(wǎng)絡(luò)上的兩個孤魂野鬼。
干程序員這行也是有風(fēng)險的:你總得等著機器干活。不過斯托曼還是能苦中作樂??稍僭趺凑f,等著機器干活,和在它跟前盯著它干活畢竟是兩碼事。就說現(xiàn)在吧,斯托曼正盯著打印機,看它一頁一頁慢吞吞地往外吐紙。這情景對他來說可不陌生。斯托曼好歹也是個程序員,成天都在改進機器和程序,提高它們的效率。當(dāng)下,他恨不得掀開這臺打印機,仔細(xì)查查究竟是哪里出的毛病。
可惜,憑編程的能耐,沒法解決機械工程的問題。斯托曼只能在重新打印文件的這些時間想點別的:能不能用別的辦法,繞道解決這個卡紙的問題?
這臺打印機來人工智能實驗室有多久了?斯托曼努力回憶著。這機器是施樂公司(Xerox Corporation)捐贈的。它可是新一代產(chǎn)品的原型,是從上一代的復(fù)印機改進而來。和上一代比,它不再是簡單地復(fù)印文件,而是從網(wǎng)絡(luò)上接收數(shù)據(jù),打印成專業(yè)品質(zhì)的文檔。它誕生于著名的施樂帕羅奧多研究中心(Xerox Palo Alto Research Facility)。再過大約十年,將會發(fā)生一場打印機革命,那時,許多計算機廠商都會投身其中。而這款打印機則是這場革命的先行者。
人工智能實驗室的程序員們,本能般地喜歡折騰這些新酷產(chǎn)品。當(dāng)初他們麻利地把這打印機請回來,把它和實驗室中的各種復(fù)雜的計算設(shè)備連在了一起,結(jié)果甚是喜人。比起以前的打印機,這臺新打印機打印速度飛快。平均大約一秒打印一頁紙。以前要花二十多分鐘打印的東西,如今兩分鐘就解決了。新機器的打印精度也更高了。讓它給畫個圓,它絕不會打出個雞蛋;讓它畫條直線,它也絕不會拐著彎瞎劃拉。
怎么看,這打印機都是份難以拒絕的禮物。
可沒過幾周,這機器的缺點就逐漸顯現(xiàn)了。其中最要命的,就是卡紙問題。憑著工程師的直覺,程序員們很快就洞察出了這問題背后的誘因。這臺打印機是在復(fù)印機的基礎(chǔ)上設(shè)計的。倘若是一臺復(fù)印機,它旁邊總會站個人直接操作它。遇到卡紙問題,這個人總能立即發(fā)現(xiàn),著手解決,不至于有什么大影響。用工程師的行話講,這系統(tǒng)需要用戶參與。所以,對于復(fù)印機來說,卡紙問題也就沒人關(guān)注了。設(shè)計復(fù)印機的時候,施樂公司的工程師們都沒把卡紙的事情放在心上,專心去對付其他問題了??砂杨愃频臋C械部件用在打印機上,問題就來了。
施樂公司在復(fù)印機的基礎(chǔ)之上,設(shè)計了這個打印機。這個小小的變化,卻使得人機關(guān)系發(fā)生了微妙而深刻的改變。現(xiàn)在,在同一時刻,這機器不再只服務(wù)一個用戶。它要同時給整個網(wǎng)絡(luò)的用戶提供打印服務(wù)。這些用戶也不再老老實實地站在機器前面,而是坐在網(wǎng)絡(luò)的另一端,隔著老遠,向這臺機器發(fā)布打印命令,指望它能按要求完成任務(wù)。等這些用戶回過神,想起去取打印的文件時才會發(fā)現(xiàn),大半的內(nèi)容都被一頁紙卡住出不來了。
在這臺打印機之前,斯托曼也遇到過卡紙問題,他也是實驗室里第一個提出解決方案的人。幾年前,實驗室還用著一臺舊打印機,也有類似的問題。這臺打印機的控制程序,運行在實驗室里的一臺PDP-11 計算機上。那會兒,斯托曼修改了這個控制程序,解決了這個問題。當(dāng)然,他沒法直接修理打印機來解決卡紙的問題。不過他能修改控制程序,讓它定期檢查打印機是否工作正常,再把檢查結(jié)果傳給實驗室的核心計算機——一臺 PDP-10。生怕哪個粗心用戶忘了去查看打印機,斯托曼還讓控制程序在卡紙的時候,向所有等待打印任務(wù)的用戶發(fā)送一條提醒消息。消息簡短明確:“打印機被卡住了,請去維修?!笔盏竭@消息的人都是等著要用打印機的,所以問題就迎“人”而解。
斯托曼這解決方案雖然治標(biāo)不治本,但也算討巧。它沒解決打印機機械部件的問題,卻提出了一個次優(yōu)方案:完善人機交互,及早報告問題。多虧了斯托曼加的幾行代碼,人工智能實驗室的員工,不用再跑來跑去地查看打印機狀態(tài)了。這樣,每周起碼節(jié)省了 10~15 分鐘時間。用編程的術(shù)語講,斯托曼的方案提高了網(wǎng)絡(luò)的整體智能。
“你要是收到這條消息,你可就坐不住了。你多半等不及別人去解決卡紙問題,”斯托曼回憶著其中的邏輯,“你得親力親為,跑到打印機跟前。一兩分鐘之后,要是問題還沒解決,就會聚來兩三個人。這其中,總會有個人知道怎么修理?!?/p>
類似的巧法子是人工智能實驗室的一大特色。尤其在其中的資深程序員之間,屢見不鮮。實際上,那些頂尖程序員不屑于用“程序員”這詞。他們更喜歡用圈子里的行話,自稱“黑客”。這詞兒涵蓋了不少內(nèi)容:從抖機靈、甩包袱,到改進現(xiàn)有軟件,優(yōu)化計算機系統(tǒng)。而更深之處,則蘊含著舊時美國移民的智慧。對于黑客來說,有這樣一條鐵律:從頭開發(fā)一個軟件只是小兒科;改進一個程序才顯真本事 。
這條鐵律,恰恰影響著施樂這樣的公司,讓它們樂意把自己的產(chǎn)品,以及配套的軟件捐贈到黑客聚集的地方。要是這些黑客們改進了其中的軟件,這些公司就可以把這些修改拿過來,化為己用,投入市場。用商業(yè)術(shù)語講,這叫優(yōu)勢社會資產(chǎn)。公司花小錢,就能有個附屬研發(fā)部門。
憑著這份禮尚往來的精神,斯托曼在這臺新打印機面前并不慌張。他只要找個法子,把以前那套修改方案拿過來,修理修理這機器,或者用圈子里的話說,“黑”它一下,就萬事大吉了??墒?,他剛找了找這臺施樂激光打印機的軟件,就碰了一鼻子灰。這打印機根本不提供軟件,至少沒提供任何給人讀的程序代碼。要知道,那個時代,大多數(shù)公司都會發(fā)布軟件的源代碼(一系列可供人閱讀的文本文件,用于詳細(xì)定義程序的行為)??僧?dāng)下,施樂公司提供的程序,卻只有編譯好的可執(zhí)行文件。程序員倒是可以打開這些文件,可打開之后看見的,全是 0和 1。除非他們有閑功夫,樂意去翻譯這些二進制信息,否則這些東西看起來只是一堆胡言亂語。
盡管斯托曼可謂是精通計算機,但還是沒那份閑心和時間去解釋這些二進制文件。不過作為一名黑客,他總是有法子。他知道,黑客這個圈子里,分享信息是至關(guān)重要的。過不了多久,就會有個黑客,從大學(xué)實驗室或者哪個公司的機房里,拿出這激光打印機控制軟件的源代碼,分享給圈子里的同胞。
經(jīng)歷了幾次卡紙事件之后,斯托曼還耐著性子安慰自己。不管怎么說,當(dāng)初也遇到過類似情況的。幾年前,實驗室需要一個網(wǎng)絡(luò)程序,讓那臺 PDP-11 和 PDP-10 之間協(xié)調(diào)工作。實驗室里這群黑客自然能勝任這項任務(wù)。不過,作為一名哈佛畢業(yè)的校友,斯托曼記起了當(dāng)初在哈佛計算機系,有個黑客也寫過類似的程序。就運行在哈佛的一臺PDP-10上。那臺 PDP-10,和當(dāng)下人工智能實驗室這臺一樣,只是運行了不同的操作系統(tǒng)。哈佛的機房里有規(guī)定,要求所有安裝在 PDP-10上的程序,都必須發(fā)布源代碼。
作為校友,斯托曼還可以進哈佛的機房。他就大模大樣地走進去,復(fù)制出源代碼,帶回了麻省理工的人工智能實驗室。緊接著,他改寫了程序,讓它能在人工實驗室的機器上運行。不費吹灰之力,人工智能實驗室的軟件設(shè)施又進步了一截。斯托曼甚至還在哈佛的軟件基礎(chǔ)上,增加了點新功能?!昂髞磉@個程序我們用了好幾年?!彼雇新貞浀?。
對于 20世紀(jì) 70年代的程序員來說,把軟件復(fù)制來復(fù)制去,就好比從鄰居家借碗醬油那樣稀松平常。所不同的是,你從鄰居那拿了多少醬油,鄰居就少了多少。而從別人那里復(fù)制一個程序出來,并不影響別人繼續(xù)使用那個程序。要說有影響,也是正面的。因為斯托曼對這程序還加了些功能,別的黑客可以自由地復(fù)制斯托曼改進的程序。這也算禮尚往來了。在哈佛那邊,后來確實有個從 Bolt, Beranek & Newman這家公司來的程序員,復(fù)制走了斯托曼的程序。之后還又加了點功能,斯托曼則又把改進后的程序復(fù)制了回來,用回到人工智能實驗室里。
“開發(fā)一個程序就好比開發(fā)一座城市,”斯托曼回憶著人工智能實驗室的軟件設(shè)施,“有些部分會被換掉,有些得重建翻修。新的東西會逐步加進來??扇绻阕屑?xì)看某個部分,也許會感慨這塊從風(fēng)格看應(yīng)該是 20世紀(jì) 60年代早期的;之后的部分估計是 70年代中期完成的。”
圈子里的這種氛圍簡單樸實,它讓知識逐漸積累。這種積累為以后的發(fā)明和創(chuàng)造提供了穩(wěn)固的基石。人工智能實驗室以及世界各地的黑客們,都得益于這個氛圍。比如在美國的西海岸,一群加州大學(xué)伯克利分校的計算機科學(xué)家們和 AT&T的工程師合作,遵循著如此積累知識的理念,創(chuàng)造了一整套操作系統(tǒng)。他們把這操作系統(tǒng)叫作 UNIX。UNIX 這個名字來源于另一個操作系統(tǒng)的名字——Multics,一個早期的學(xué)術(shù)研究項目。倘若是當(dāng)初的程序員,只要愿意支付成本價和運輸費,就可以買到一份 UNIX系統(tǒng)的副本。整套系統(tǒng)會被復(fù)制到一個全新的磁帶上,完整地寄到購買者手里,誰都能買,童叟無欺。參與到這個文化小圈子的程序員,不一定都把自己稱為黑客。不過,絕大多數(shù)人都有著斯托曼那般的情結(jié):要是一個程序或者一個補丁可以解決自己的問題,沒準(zhǔn)也能幫到別人。獨樂樂不如眾樂樂,何不分享給大家,起碼也算積德行善了。
一開始,施樂公司不分享源代碼的行為倒也沒惹到誰。斯托曼在找源代碼的過程中,甚至都沒想過去聯(lián)系施樂公司:“人家都送咱打印機了,何必還非得興師動眾地管他們要代碼呢?”
可是眼巴巴地等著源代碼,如今還沒找到,倒是讓斯托曼起了疑心,勾起了他幾年前一段不快的回憶。當(dāng)初,一位在卡耐基梅隆大學(xué)的計算機博士,名叫布萊恩·瑞德(Brian Reid)。他開發(fā)了一個很不錯的文本排版軟件,名叫 Scribe。這軟件可以讓用戶通過網(wǎng)絡(luò)傳遞文檔并且還支持自定義的字體,這在當(dāng)時可是首例。之后這種功能的普及則帶來了 HTML——如今 WWW 網(wǎng)絡(luò)上的通用語言。1979年,布萊恩決定把 Scribe出售給一家在匹茲堡的公司,名叫 Unilogic。他當(dāng)時剛好博士畢業(yè),正打算把開發(fā) Scribe的任務(wù)轉(zhuǎn)手給別人,免得它流落到公有領(lǐng)域里。為了讓這份訂單更吸引人,布萊恩在 Scribe中動了點小手腳:他在里面放了個“定時炸彈”,讓用戶有 90天的免費試用期。90天一過,如果用戶不交費,則不能再使用這個軟件。
對于布萊恩來說,這個買賣是個雙贏策略。一方面,正如布萊恩所期望的那樣,Scribe的代碼的確沒有流落到公有領(lǐng)域;另一方面, Unilogic也有了一個向用戶收費的途徑??蛇@對斯托曼來說,這份交易完全是背叛了程序員的良心。布萊恩非但沒遵循分享再傳播的精神,而且竟然還助紂為虐,幫助公司去強制限制用戶自由。
一周過去了,依然沒有施樂激光打印機源代碼的一丁點消息。斯托曼覺得這好像又是一筆索財要錢的勾當(dāng)。不過還沒等他給這事定性,好消息就來了:一個在卡耐基梅隆大學(xué),計算機系的教授剛剛從施樂公司離開。這位教授還在激光打印機部分工作,而且從收到的八卦消息看,他在卡耐基梅隆大學(xué)還在繼續(xù)激光打印機方面的研究。
于是,斯托曼這才拋開之前的胡思亂想,打算下次去卡耐基梅隆大學(xué)的時候,去會見這位教授。
也沒多久,他就得到了一次訪問卡耐基梅隆大學(xué)的機會。和斯托曼所在的麻省理工學(xué)院一樣,它們那里也有一個人工智能實驗室。這才幾個月不到,斯托曼就因為工作原因需要去卡耐基梅隆大學(xué)出差訪問。訪問中,他在計算機系請人幫忙找到了那位曾在施樂公司領(lǐng)導(dǎo)激光打印機項目的教授。他正好就在辦公室。
工程師之間的討論總是開門見山的。幾句簡單寒暄過后,斯托曼就直入主題,說明自己是為了激光打印機的控制程序代碼而來,以便可以修改后用到麻省理工學(xué)院的 PDP-11 計算機上。可令斯托曼吃驚的是,這位教授竟然拒絕了他的要求。
“他跟我說他答應(yīng)了公司不能泄露代碼?!彼雇新f。
記憶總是這么有趣。二十年過去了,斯托曼關(guān)于這段經(jīng)歷的回憶大部分都是空白的。他都不記得當(dāng)初為了什么事去的卡耐基梅隆大學(xué),連具體哪年去的都給忘了。他也不記得那位教授是誰。根據(jù) Scribe的作者瑞德的回憶,惹到斯托曼的那位很可能是羅伯特·斯布魯(Robert Sproull)。他曾是施樂公司 PARC 研究所的研究員,如今在Sun 研究所任部門主管。20 世紀(jì) 70年代,斯布魯在施樂公司 PARC研究所負(fù)責(zé)激光打印機程序的主要開發(fā)。他在 80年代拿到了卡耐基梅隆大學(xué)的教職,并在那里繼續(xù)他的激光打印機相關(guān)的工作。
“斯托曼想要的代碼包含的可都是前沿技術(shù),那可是斯布魯去卡耐基梅隆之前,花了幾年的時間研發(fā)的成果,”瑞德回憶道,“我想斯托曼拜訪斯布魯那會,他剛剛到卡耐基梅隆大學(xué)還不到一個月。”
可是,直接給斯布魯發(fā)郵件,詢問當(dāng)初的事情,他卻不記得這事了:“實在是無可奉告?!彼共剪斣卩]件中寫道:“我確實不記得有這么一件事?!?/p>
當(dāng)事雙方誰也不記得事情的細(xì)節(jié),甚至都無法確定是否真的發(fā)生過。至于斯托曼說的,斯布魯硬生生地拒絕了他的這件事,也就無從考證了。在之后的各種演講中,斯托曼一再提及這件事。強調(diào)斯布魯由于簽署了保密協(xié)議,從而不能泄露源代碼。如今在各個 IT 公司,簽署保密協(xié)議已經(jīng)非常普遍。不過在當(dāng)時,為軟件代碼簽署保密協(xié)議還算先例。這也間接地反映出施樂公司對激光打印機項目的重視程度?!笆饭敬蛩惆鸭す獯蛴C做成商業(yè)產(chǎn)品”,瑞德說,“他們除非瘋了,才會把代碼泄露出去。”
但在斯托曼看來,這種保密協(xié)議完全是另外一回事。那時大家都把軟件認(rèn)為是一種共有的資源,卡耐基梅隆大學(xué)一些研究員的做法,就意味著否定這個公理。這對斯托曼來說,就好比是一個農(nóng)夫眼看著用來灌溉莊稼的河流干枯了,循著河道往上巡查,竟然看到一道大壩從天而降,攔住河水。大壩上赫然印著幾個大字:施樂公司。
施樂公司用各種花言巧語,把一位程序員同胞帶入了這片新天地,與世隔絕。不過一開始,斯托曼也沒把重點集中在施樂公司那邊,而是怪罪到了個人性格上。作為一個標(biāo)準(zhǔn)技術(shù)宅男,斯托曼和人溝通起來難免有點障礙。他這次親自跑去拜訪一位程序員同行,已經(jīng)是一種充滿誠意的行為了。而到頭來卻被當(dāng)頭一棒。讓他實在覺得對方有點魯莽?!拔耶?dāng)時非常生氣,都不知道怎么表達。我二話沒說,扭頭就走了,”斯托曼說,“沒準(zhǔn)我還使勁摔了門,誰知道呢。我能記得的,就是當(dāng)時想趕快離開?!?/p>
二十多年過去了,斯托曼當(dāng)初的怨氣還在。他甚至把這個事件描述為人生轉(zhuǎn)折點。然而,那之后幾個月中,在人工智能實驗室以及斯托曼身上發(fā)生的各種事,卻比這次打印機事件還令人難以接受。斯托曼,本是一名孤獨的黑客,本能地對絕對權(quán)威存有戒心。在經(jīng)歷了這一系列事件后,他變成了一位斗士,把傳統(tǒng)的自由、平等、博愛的精神引入軟件開發(fā)領(lǐng)域。而這次的打印機事件,在其一生的無數(shù)事件中則最值得一書。
“它讓我思考了一些腦海中由來已久的問題,”斯托曼說,“我以前有過一些初步的想法,認(rèn)為軟件本該共享。可當(dāng)時還不知道怎么表述。那時的想法還沒有清晰到可以用簡單幾句話給別人介紹?!?/p>
盡管之前也有過類似的不快經(jīng)歷,可這次的打印機事件徹底讓斯托曼意識到,這一系列的事件,正悄悄地侵蝕自己所珍視的文化——那個神圣不可侵犯的小圈子。作為一名世界頂級研究機構(gòu)的頂級程序員,斯托曼之前一直都無視那些程序員同行所作的各種妥協(xié)讓步,因為他們還不至于影響到斯托曼的工作。而如今施樂激光打印機的到來,讓斯托曼開始注意到其他計算機用戶一直忍受的程序和機器。這些程序很少能影響到人工智能實驗室,斯托曼和實驗室的成員之前一直都可以自由地重寫軟件,添加功能。直到有一天,人工智能實驗室把一臺計算機的操作系統(tǒng)從不相容分時系統(tǒng)(Incompatible Time Sharing Operating System)換成了商業(yè)的 TOPS 20 系統(tǒng),這些就再也不能做了。
如今,這臺激光打印機已經(jīng)強勢入駐到人工智能實驗室了,而外面的世界也悄悄發(fā)生了變化。除了偶爾卡紙以外,打印機工作還算正常??墒前凑諅€人喜好修改軟件則不可能了。從軟件業(yè)的角度看,這臺打印機的出現(xiàn)是個信號,預(yù)示著軟件是公司的重要財產(chǎn)。誰也不會再想發(fā)布軟件源代碼,因為這可能會給潛在競爭對手機會,讓他們可以輕松山寨自己的產(chǎn)品。而在斯托曼看來,這臺打印機簡直就是個臥底。十來年的嘗試,私有軟件總算在人工智能實驗室中站得一角。私有軟件,也就是如今所說的專有軟件,這次被打扮成禮物,潛入得悄無聲息。
施樂公司后來還發(fā)出邀請,讓一些程序員再使用它們的禮品。斯托曼說,要是再早幾年,他沒準(zhǔn)也無法拒絕這種免費午餐。是那次打印機事件,讓斯托曼建立起了道德防線。它不僅給了斯托曼足夠的怒火去對以后的各種禮品心存戒備,更讓斯托曼開始思考一個讓他自己也坐立不安的問題:要是以后哪個黑客同行進到自己的辦公室,向他索要代碼,他究竟會不會拒絕復(fù)制代碼呢?
“這是我第一次碰上這種保密協(xié)議,它很快讓我明白,保密協(xié)議面前,總會有無辜的受害者”,斯托曼堅定地說,“在打印機事件中,我和整個人工智能實驗室扮演了受害者的角色?!?/p>
斯托曼帶著這種態(tài)度,經(jīng)歷了動蕩的 20世紀(jì) 80年代。在這期間,麻省理工學(xué)院的同事們紛紛離開實驗室,走進公司,簽署了保密協(xié)議。大多數(shù)保密協(xié)議都有解密時間,而這則成了很多黑客們的借口。他們會辯解說:軟件遲早會成為公共資源。而保證軟件在早期的開發(fā)階段不被泄露,則可以保證讓各位黑客朋友們可以進入頂尖項目中工作。這些借口,在斯托曼看來,則是邁向深淵的第一步。
“要是誰跟我建議,讓我以這種方式背叛我的同事,我就會回憶起在打印機事件中,我和我的同事被別人背叛的感覺,那份怒火終生難忘”,斯托曼說,“我會回敬給分發(fā)專有軟件的人,并告訴他‘謝謝你的軟件,非常棒!可是我不能接受你的那些保密協(xié)議,很遺憾,我不會用它?!?/p>
斯托曼很快就會明白,要拒絕這些要求和邀請,不僅需要一些個人犧牲,更會被其他一些黑客們疏遠。這些黑客雖然也對各種保密協(xié)議嗤之以鼻,但會更圓滑地對它加以評判。正因為如此,斯托曼被譽為“最后的黑客”。這使他與專有軟件市場漸行漸遠。拒絕提供源代碼,在斯托曼看來,不僅違背了第二次世界大戰(zhàn)以來深植入軟件開發(fā)中的科學(xué)精神,更違背了“己所不欲,勿施于人”的道德準(zhǔn)則。
打印機事件的重要意義恰在于此。正如斯托曼所言,倘若沒有這次的事件,他的人生也許就會落入平常,糾結(jié)著,一邊開發(fā)專有軟件,一邊痛苦地編寫沒人會看到的代碼。當(dāng)然也不會有著如今清晰的思路,更不會去解決別人從未想過的各種問題。最重要的,他心中也不會再有那份不平,推動著他去追求他的政治理想和道德信仰。
“從那日起,我決定絕不參與其中”談起軟件保密協(xié)議和類似的事情,斯托曼如是說,在他看來,這是一場以個人自由換取便利的交易,“我決定絕不讓第二個人為此成為像我一樣的受害者?!?/p>
- [1].要深入了解“黑客”這個詞,參閱附錄 B。