身為新黑客詞典(The Jargon File)和許多其他廣為人知的同類文章的作者,我常收到熱心的網絡新人的電子郵件,問及(大意上是)「如何成為一名魔法師似的黑客?」。1996年的時候我注意到這個重要的問題並沒有相關的FAQ或文檔頁面,所以我寫了一份。許多黑客認為這篇文章是權威的,我覺得它應該是吧。此外,我不會尋求在這個話題上的獨立著作權,如果你不喜歡在這裡讀到的內容,自己寫一篇吧。
如果你是在離線閱讀本文,可以在http://catb.org/~esr/faqs/hacker-howto.html找到本文的最新版本。(譯註:本文的最新中文版可以在這裡找到)
注意:本文的末尾有一系列常見問題。請在向我發郵件詢問關於本文的任何問題前再三閱讀。
目前本文有許多語言的翻譯版:阿拉伯語,白俄羅斯語, 中文,捷克語,丹麥語,荷蘭語,愛沙尼亞語,德語,希臘語,義大利語,希伯來語,挪威語, 波斯語,巴西葡萄牙語,羅馬尼亞語,西班牙語,土耳其語,瑞典語。請注意,由於本文不定期更新,這些翻譯版可能存在不同程度的過時。
本文裡九宮格中的5個黑點的裝飾圖被稱作glider。這是一個使很多黑客多年痴迷的被稱作康威生命遊戲(LIFE)中,具有令人驚奇特性的簡單圖案。我認為它是很好的黑客精神徽章 —— 抽象,初見的時候感覺有點神秘,通過它複雜的邏輯可以通向整個世界。如果你想了解更多關於glider的信息,請看這裡。
如果你覺得這篇文章有價值,請在Gittip上給我一點讚助。也請考慮贊助其他為你提供了有價值代碼的黑客。小額的贊助也能夠聚小流成江海,使為你提供幫助的人從繁重的勞動中解放出來,創造更多的價值。
新黑客詞典(Jargon File)中有數個「黑客」的定義,主要形容」技術專才」或」有志解決問題及超越極限之人」。要成為黑客,有兩個要點。
這可以追溯到幾十年前第一臺分時小型電腦誕生, ARPAnet 實驗也剛展開的年代,那時有一個由程序設計專家和網絡名人所組成的, 具有分享特點的文化社群。這種文化的成員創造了 「hacker」 這個詞。他們建立了網際網路,他們發明了現在使用的Unix作業系統,他們管理Usenet討論組,他們令WWW運作。因此,若你有上述的特性及參與同類的社區,亦有對以上種種作出貢獻,同時社區的人知道你是誰又稱你為「hacker」,你便是黑客。
然而,黑客的理念並非只局限於軟體社區。有很多人將黑客的態度應用於其他事物,如電子學或音樂上——實際上,黑客的理念存在於任何學科領域。由於了解黑客的理念及精神,軟體社區的黑客亦會稱後者為黑客。有些人亦認為黑客的理念是獨立於黑客所從事的實際工作。本篇文章我們將專注於討論軟體黑客的技巧,態度及傳統。
另外,有一群人也稱自已為「黑客」,他們(多數是年青人)用電腦侵入其他電腦的系統作出破壞。黑客們稱這群人為「Cracker(破壞者)」,並不認同他們為黑客。多數黑客會認為Cracker是懶惰, 不負責任,不傑出的人。有能力侵入安全系統並不能使你成為黑客,正如可以用鐵絲來偷車並不能使你成為汽車工程師一樣。不幸的是很多作家及報導均稱這群人為「黑客」。這一直使黑客們非常惱火。
黑客與Cracker的主要區別在於,前者搞建設,後者搞破壞。
如果你想成為一個黑客,請繼續讀下去。如果你只想做一個Cracker,請到alt.2600討論組,並做好當你發現自己不如想像中聰穎的時候進5到10次監獄的準備。關於Cracker我就說這麼多。
黑客們解決問題,建設事物,他們崇尚自由和無私的雙向幫助。要被他人承認是一名黑客,你必須表現得你具備了這樣的態度。而要表現得你具備了這種態度,你必須徹徹底底的堅持它。
如果你認為培養黑客的態度只是一條在這個文化圈中得到認同的路子,那就錯了。成為具備這種素質的人,對你非常重要——促使你保持學習和成為黑客的自發性。正如所有創造性藝術一樣,成為大師的最有效途徑就是效仿大師的精神——不僅從理念上,還要從態度上效仿。
或許下面的這首現代禪詩很好的闡述了這個意思:
To follow the path: 沿著這樣一條道路:
look to the master, 關注大師,
follow the master, 跟隨大師,
walk with the master, 與大師同行,
see through the master, 洞察大師,
become the master. 成為大師。
如果你想成為一名黑客,反覆閱讀以下內容直到你相信它們:
1. 世上仍有大量迷人的事情等待解決
作為一名黑客可以享受很多樂趣,同時需要付出相當多的努力。努力需要動力。成功的運動員從鍛鍊身體、超越身體極限中獲得精神愉悅。類似的,作為一名黑客,你可以從解決問題、磨練技術和鍛鍊智力中獲得樂趣。
如果你天生不是這樣的人,那你需要設法變成這樣的人以使你能夠成為一名黑客。否則你將會發現你的精力會被諸如性、金錢、社會上的虛名之類讓人分心的東西所消磨掉。
(你還需要對自己的學習能力樹立信心——相信儘管你對某一問題了解得不多,只要你能解決其中一部分,並從中學習,你可以解決其他的部分——直到解決它。)
2. 同樣的問題不應被重複處理兩次
創造性的智慧是非常有價值且稀缺的資源。它們不應當被浪費在重複造輪子上,世上仍有大量迷人的新問題等著解決。
作為一名黑客,你應該堅信其他黑客的時間非常寶貴,所以你有義務共享信息,解決問題之後公布方案,這樣其他人可以去解決新的問題,而不是忙於應付舊問題。
注意,「同一個問題不應該被重複處理兩次」並不是說你必須認為所有已有方案都是最優的,或每個問題只有唯一的解決方案。通常我們從一個問題的最初解決方案中能夠學習到很多東西。這很好,並且對於我們思考如何能做得更好來說,這通常是必要的。我們反對的是人為的技術、法律上的,或者機構性的設置障礙(例如閉源軟體),使得一個好的方案不能被重複使用,逼得人們重造輪子。
(你不必認為你必須將所有你的創造發明都公布出去,雖然這樣做的黑客將會贏得大家極度尊重。適當賣一些錢來換取足夠的食物、租金和電腦並不違反黑客的價值觀。用你的技能來養家餬口甚至致富都可以,只要你在做這些的時候別忘記你是一名黑客。)
3. 拒絕重複和沉悶的事情
黑客(以及富有創造力的所有人)不應當被愚蠢的重複性勞動所困擾,因為這意味著他們並沒有在做只有他們才能做的事情——解決新問題。這樣的浪費會傷害所有人。因此,無聊和乏味的工作不僅僅是令人不爽,而是罪惡。
作為一個黑客,你應該堅信這一點並儘可能的將枯燥的工作自動化,這不僅僅是為了你自己,也為了其他人(尤其是其他黑客)。
(這裡有一個例外。黑客有時會做一些看起來重複或枯燥的事情以進行腦力休息,或以此來鍛鍊一種技能,或以此獲得某種除此以外無法獲取的經驗。但這是有選擇的——有腦子的人不該被強迫做枯燥的事。)
4. 自由萬歲
黑客是天生的反獨裁主義者。任何能向你發號施令的人能夠迫使你停止解決令你著迷的問題。同時,按照獨裁者的一般思路,他通常會給出一些極端愚昧的理由。因此,不論何處,任何獨裁主義的作法,只要它壓迫你和其他黑客,你就要和它鬥到底。
(這並非向所有權威挑戰。兒童需要監護,罪犯要被看管起來。如果服從命令得到某種東西比起用其他方式得到它更節約時間,黑客可以同意接受某種形式的權威。但這是一個有限度的,有意的交易,那種權威想要的個人服從不是你應該同意給予的。)
權威喜歡審查和保密。他們不信任自願的合作和信息共享——他們只喜歡由他們控制的所謂「合作」。因此,作為一個黑客,你得對審查、保密,以及使用武力或欺騙去壓迫有行為能力的人們的做法有一種本能的敵意。同時你要有為此信念鬥爭的意願。
5. 精神不能代替能力
作為一個黑客,你必須培養起這些精神。但是僅僅有精神並不能使你成為黑客,也不能使你成為運動健將或搖滾明星。成為一名黑客還需要智力,實踐,奉獻精神和辛勤工作。
因此,你需要學會有懷疑態度和尊重任何能力。黑客不會為裝模作樣的人浪費時間,但他們尊重能力——尤其是從事黑客工作的能力,不過任何能力都是好的。很少人能具備的高要求能力尤其好,其中涉及腦力,技巧和專注方面的能力最好。
尊重能力,你就會享受到提高自己的能力所帶來的樂趣——辛苦的工作和奉獻將不再是苦差而是一種高度娛樂。想要成為一名黑客,這一點尤其重要。
黑客的態度很重要,但技能更重要。態度不能替代能力,在被別的黑客稱你為黑客之前,你有一些基本技能需要掌握。
這些基本技能隨著時間的推移和技術的革新也緩慢的變化著。例如,以前的內容中包括了使用機器語言編程,最近包含進了HTML。總的來說當前包括以下內容:
1. 學習編程
理所當然,這是最基本的黑客技能。如果你一門計算機語言都不懂,我建議你從Python學起。它設計良好,文檔詳盡,並且對新人十分友好。儘管它是一門很好的入門語言,但它不只是玩具水平。它非常強大靈活,並且適用於大型項目。我寫過一篇詳細的對Python的評價。在Python的網站可以找到很好的教程。在Computer Science Circles也有一篇不錯的第三方教程。
我早前曾經建議使用Java作為入門語言,但這篇評價改變了我的看法(請在文檔中搜索「The Pitfalls of Java as a First Programming Language」)。如同文中尖銳指出的一樣,一個黑客不能「像五金店中的管道工一樣處理問題」。你需要知道所有的組件事實上都幹了什麼。現在,我認為最好先學C和Lisp,然後再學Java。
另外有一點需要注意。如果一門語言幫你做了太多工作,它會同時是一個好的生產工具和一個不好的初學對象。不僅語言有這個問題,比如Web框架RubyOnRails,CakePHP,Django也很容易讓你流於表面,面對困難問題的時候束手無策,甚至無法對一個簡單問題進行追查並給出解決方案。
如果你需要做一些重要的編程工作,你需要學習C語言,它是Unix的核心語言。C++跟C關係密切。如果你了解其中一種,學習另外一種應該不難。但是這兩種語言都不適合作為入門學習。此外,如果你越避免用C編程,你的工作效率會越高。
C的執行效率非常高,並且非常節省機器資源。不幸的是C的高效是通過讓你手動進行許多底層資源(例如內存)管理來獲得的。底層代碼複雜並且容易出bug,你需要花費很多時間來進行調試。鑑於當今的機器性能如此之高,這樣的做法通常很不划算——通常更好的做法是使用一種稍微慢一些,不那麼高效,但是能夠大幅節省你的時間的語言。那便是Python。
其他對黑客而言比較重要的語言包括Perl和LISP。Perl很實用,它廣泛應用於動態網頁和系統管理方面,因此即使你從不寫Perl代碼,至少也得能看懂。許多人使用Perl的理由和我建議你使用Python的理由一樣,都是為了避免用C完成那些執行效率需求不那麼高的工作。你需要能夠看懂他們的代碼。
LISP之所以值得一學是基於另外的理由——當你最終掌握了它的時候,你將會獲得巨大的啟迪。它將使你成在今後為一個更好的程式設計師,即使你實際上很少使用LISP本身。(你可以通過為Emacs文本編輯器或者GIMP的Script-Fu編寫插件或修改現有插件來很容易的學習LISP。)
當然,你最好五種語言都會(Python,C/C++,Java,Perl和LISP)。除了是重要的黑客語言之外,它們也代表了截然不同的編程思路和方法,每一種都能讓你受益匪淺。
但是單純的堆砌語言是不可能成為一個黑客,甚至程式設計師的。你需要學會如何獨立於任何具體的語言之外來思考編程問題。作為一名真正的黑客,你需要通過手冊和你已有的知識掌握到在幾天之內學會一門語言的要點。這意味著你需要學習許許多多不同的語言。
這裡我無法給你完完全全的指導教會你如何編程——這是個複雜的技能。但我可以告訴你,書本和課程也不能做到(最好的黑客中,有許多,也許幾乎都是自學成材的)。你可以從書本上學到語言的特點——這只是皮毛,但要使書面知識成為自身技能只能通過實踐和虛心向他人學習。因此要做到讀代碼及寫代碼。
Peter Norvig,Google最頂級的黑客之一,也是世界上最受歡迎的AI教材(譯註:指「人工智慧:一種現代方法」和「人工智慧程序設計範例:通用Lisp語言的案例研究」等)的共同作者。他寫了一篇名為Teach Yourself Programming in Ten Years的短文。他在文中提到的「編程成功的訣竅(recipe for programming success)」特別值得留意。
學習編程就像學習用優美的自然語言書寫一樣。最好的辦法就是閱讀大師的名著,試著自己寫點東西,再讀一些,再寫一點,再讀一些,再寫一點……如此往復,直到你的作品達到如你在範文中所見的簡潔和健壯。
我必須再提一下How To Learn Hacking,這是一些簡單的說明,但是學起來並不容易。
以前很難找到適合閱讀的好代碼,因為幾乎沒有大型程序的代碼能夠供新人閱讀和練手。這種情況已經發生戲劇性的變化。開源軟體,編程工具和作業系統(都是由黑客創造的)現在隨處可見。這剛好帶我們到下一個話題……
2. 獲取一個開源的Unix並學習運行和使用它
我假定你擁有或者能使用一臺個人電腦(現在的孩子真幸福。黑客文化建立之初電腦貴得要死,沒人買得起)。新手們向黑客技能邁出的最重要一步就是獲取一份Linux或BSD-Unix的拷貝,將其安裝在個人電腦上,並運行它。
沒錯,世上除了Unix還有其他作業系統。但它們都是以二進位形式發布的——你讀不到源碼,你也不能修改代碼。在類似Microsoft Windows那樣的閉源作業系統上學習黑客技術就像戴著腳鐐學跳舞。
在Mac OS X上倒是可以,不過它只有一部分是開源的——你可能會撞牆,也必須很小心的避免養成依賴Apple專有代碼的壞習慣。如果你專注於底層的Unix,你可以學到一些有用的東西。
Unix是網際網路上的作業系統。雖然你不懂Unix仍然可以學會使用網際網路,但若你不懂Unix,你將不能在網際網路上從事黑客活動。因此,現今的黑客文化是嚴重以Unix為中心的。(曾經不是這樣,並且有一些老派的黑客對此仍然感到不太高興。但是現今Unix和網際網路的羈絆如此之強,連Microsoft也無法撼動分毫。)
所以,請安裝一套Unix - 我個人喜愛Linux但還有其他種類的(並且,你可以在同一臺電腦上運行Linux和Windows)。學習它,使用它,調教它。用它在網際網路上衝浪。閱讀它的代碼,修改它的代碼。你將獲得比Windows作業系統上更好的編程工具(包括C,LISP,Python和Perl)。你會覺得其樂無窮,學到比你想像更多更好的知識。
想要獲取更多和學習Unix相關的信息,請參考Loginataka。你或許還想看看《Unix編程藝術》[The Art Of Unix Programming](譯註:這裡給出的是原文連結。國內有翻譯版出售)。
我認為博客Let’s Go Larval!對於處在學習Linux階段中的用戶是非常易懂和有用的。這篇文章How I Learned Linux 就是一個很好的起點。
想開始Linux之旅,請參考Linux Online!。你可以從那裡下載Linux或者(更好的主意是)找到一個當地的Linux用戶群為你的安裝過程提供幫助。
在本文最初的10年間,我認為從一個初學者的角度來說,所有Linux發行版都差不多。不過在2006~2007年間,一個事實上最好的選擇出現了:Ubuntu。其他發行版各有所長,而Ubuntu對初學者最友好。注意,相比Ubuntu默認那個醜陋的幾乎不可用的「Unity」桌面,Xubuntu和Kubuntu更好用一點。
你可以在www.bsd.org找到BSD相關的幫助和資源。
一個試水的好辦法是試試被Linux愛好者稱為「Live CD」的東西,那是一個完全在光碟或者U盤上運行,而不修改你硬碟的發行版。它運行起來比較慢,因為光碟很慢,但是這是一個在做出任何不可挽救的改變前看看可行性的辦法。
我寫過一篇關於Unix和網際網路基礎的入門文章。
我曾經不建議新手獨自安裝Linux或者BSD。現在它們的安裝程序已經做得足夠好,你作為新人也完全搞得定。儘管如此,我仍然建議和你當地的Linux用戶群取得聯繫並尋求幫助。這沒壞處,並且可以讓整個過程更順利。
3. 學習使用全球資訊網(World Wide Web,WWW)和HTML(超文本標記語言)
大多數的黑客造物在你所不知的地方發揮著作用,幫助工廠、辦公室和學校運轉,這看上去跟普通人沒太大關係。Web是一個大大的例外,即便政客也承認這個巨大耀眼的黑客玩具正在改變著世界。單就這一個原因(當然還有其他理由)你就需要學習掌握Web。
這並不僅僅意味著如何使用瀏覽器(誰都會),而是要學會如何寫HTML,Web的標記語言。如果你不會編程,寫HTML會教你一些有助於學習的思考習慣。因此,先完成一個主頁。嘗試堅持使用XHTML,一種比標準HTML更清晰的語言。
但僅僅擁有一個主頁不能使你成為一名黑客。Web裡充滿了各種網頁。大多數是毫無意義的,零信息量的垃圾——界面時髦,能奪人眼球的垃圾還是垃圾(更多信息訪問The HTML Hell Page)。
所以,你的頁面必須有內容——得是有趣並且對其他黑客來說有用的內容。這是我們下一個議題要說的……
4. 學習實用英語
作為一個美國人和一個以英語為母語的人,我以前很不情願提到這點,免得成為一種文化上的帝國主義。但相當多以其他語言為母語的人一直勸我指出這一點,那就是英語是黑客文化和Internet的工作語言,你需要懂得以便在黑客社區順利工作。
大概1991年的時候我了解到許多黑客在技術討論中使用英語,即使在他們的母語都相同,英語對他們而言只是第二語言的時候也常如此。據我所知,當前英語有著比其他語言豐富得多的技術詞彙,因此是一個對於工作來說相當好的工具。基於同樣的理由,英文技術書籍的翻譯(如果有的話)通常都不能令讀者滿意。
芬蘭人Linus Torvalds用英語注釋他的代碼(很明顯這不是湊巧)。他流利的英語成為他能夠管理全球範圍的Linux開發人員社區的重要因素。這是一個值得學習的例子。
即使作為一個以英語為母語的人也不代表你就具備了成為黑客所需的語言技能。一般而言,如果你寫得像個半文盲似的,文中充斥著各種語法、拼寫錯誤,多半得不到理睬。雖然不嚴謹的文筆並不總是意味著不嚴謹的思維,但我們發現這兩者之間的關聯還是挺緊密的。而我們不需要這種思維不嚴謹的人。如果你現在還沒有具備這樣的書寫能力,趕緊培養。
像大部分非盈利社區一樣,黑客社區靠聲譽運轉。你設法解決有趣的問題,但問題是否有趣及解決方法是否有效,需要由那些和你具有同樣甚至更高技術水平的人去評判。
因此,要玩黑客這個遊戲,你需要以其他黑客對你技能的評判作為對自己的評價(所以我說,在其他黑客稱你為黑客之前,你不是一個真正的黑客)。這個事實常被人誤解(從1990年代後有所好轉,但還是很嚴重),人們認為黑客都是不在乎別人的評價,孤僻的人。這實際上是一個黑客文化的禁忌。
特別地,黑客被人類學家們稱為奉獻社區。在這裡你不是憑藉你對別人的統治來建立地位和名望,也不是靠美貌,或擁有其他人想要的東西,而是靠你的奉獻。尤其是奉獻你的時間,你的創造力和你的技術成果。
要想獲得黑客的尊重,你基本上有5件事情可幹:
1. 編寫開源軟體
首先(也是最傳統和最重要的)是寫一些其他黑客覺得有趣或有用的程序,並且開放原始碼。
(我們曾經把這些程序稱為「自由軟體(free software)」,但是太多人不能確定這裡的「free」是什麼意思。現在我們通常使用「開源」軟體這個詞。
黑客間最受尊敬的聖人是那些編寫了大型的,功能強勁且滿足了廣泛需求的開源軟體供他人使用的人。
但是這裡有段有趣的歷史。雖然黑客一直敬重開源軟體開發者,並且他們是我們社區的核心,但是直到1990年代中期,絕大部分黑客絕大多數時間是在閉源軟體上工作的。在我1996年寫本文的第一版的時候仍然如此。到1997年之後開源軟體逐漸成為主流並改變了這一點。現在,「黑客社區」和「開源軟體開發者」本質上是對同一文化和同一人群的兩種表述——但值得記住的是,曾經不是如此。(想了解更多,請看「歷史記錄:黑客活動,開源,和自由軟體」。)
2. 幫助測試和調試開源軟體
黑客也尊敬那些為開源軟體進行測試和除錯的人。在這個並非完美的世界上,我們不可避免地要花大多數的開發時間在調試階段。這就是為什麼許多開源軟體作者都會高度評價那些好的beta測試員(知道如何清楚描述出錯症狀,很好地定位錯誤,能忍受快速發布中的bug,並且願意使用一些簡單的診斷工具),認為他們像紅寶石一樣珍貴。一個好的測試員可以使如惡夢的測試及除錯工作變為一件值得經歷的小煩惱。
如果你是個新手,試著找一個你感興趣的正在開發的程序,嘗試做一個好的beta測試員。你會自然地從幫著測試,進步到幫著抓bug,到最後幫著改程序。你會從中學到很多,並且與未來會幫到你的人結下友誼。
3. 發布有用的信息
另一個好事是收集整理有用有趣的信息做成網頁或文檔如FAQ(常見問題)列表,且讓他們容易獲得。
技術性FAQ的維護者往往如同開源軟體作者一樣很受人尊重。
4. 幫助維護基礎設施運轉
黑客社區(也包括網際網路發展)是靠自願者組成的。有大量重要但平淡的事情需要處理——管理郵件列表,新聞組,維護大型軟體歸檔庫,開發RFC和其他技術標準等。
做以上事情的人會得到很多人的尊敬,因為大家都知道這些事情需要大量的時間並且不如編寫軟體那麼有趣。這類工作需要使命感。
5. 為黑客社區服務
最後,你還可以為黑客社區做服務和宣揚(比如寫一篇「如何成為黑客」的文章 :-))。通常你不會做這些工作,直到你已經做了以上四種中的一樣,並且取得了相當的知名度。
黑客社區沒有既定的領導者,但是有被人們尊重的英雄,長老級人物,史學家和發言人。當你在這個圈裡足夠久,你可能會成為他們中的一員。但請謹記,黑客對於自我誇耀的長老並不認同,因此不要嘗試大舉追求這種名譽。與其奮力追求,不如先擺正自己的位置,等它自己到你手中,那時需要做到謙虛和優雅。
與流行的傳說不同,黑客並不是書呆子。但這確實對你成為黑客有幫助,並且很多黑客確實是書呆子。做一個深居簡出的人有助於使你更能集中精力做一些重要的事,例如思考和從事黑客活動。
因此,許多黑客甚至以「極客(geek)」(譯註:這個詞原本在美國俚語中指「反常的人」)為名——這是一種宣布他們獨立於普通社會的方式(此外,黑客也通常沉迷於其他一些事情例如科幻和戰略遊戲)。「書呆子」這個詞通常在1990年代也被如此使用,那時候「書呆子」這個詞略含貶義,而「極客」貶義更重。2000年以後這兩個詞的關係發生了轉變,至少在美國流行文化上是如此,現在甚至在非技術專家中也出現了以標榜為極客為豪的情況。
如果你能集中足夠的精力做好黑客工作同時還能有正常的生活,這很好。現在做到這一點比我在1970年代還是新手的時候要容易的多;如今主流文化對技術怪人要友善的多。甚至有越來越多的人意識到黑客通常是很好的戀人和配偶侯選。
如果你因為生活上的不如意而成為黑客,那也不錯——至少你不用分神了。或許今後你能有一個不錯的生活。
當我在1996年末剛開始寫這篇文檔的時候,很多情況跟現在是不同的。簡單的介紹一下這個變化對於對開放原始碼、自由軟體和Linux跟黑客社區的關係感到困惑的人們可會有所幫助。如果你對這些不感興趣,可以直接跳過這裡,前往FAQ和參考資料部分。
我描述的黑客精神和黑客社區遠早於1990年出現的Linux。我最初進入這個圈子大概是在1976年,其原因可以追溯到1960年代早期。但是在Linux出現前,多數黑客行為是在專有作業系統,或一些自主研發的實驗性系統上,例如MIT的ITS,這個系統從未在實驗室以外的地方使用過。雖然在早期(Linux出現之前)有過一些試圖改變這種狀況的努力,但是它們的影響都非常輕微,僅限於真正懷抱這樣理想的人群,即使在當時的黑客社區這也是絕對少數,更不論對於世界範圍內的通用軟體群體的影響了。
現在被稱為「開放原始碼」的行為,其歷史與黑客社區一樣久遠,但是直到1985年這都只是一個無名的民間行為,沒有相關的理論和宣言。這段史前時代在1985年結束,大黑客Richard Stallman(「RMS」)嘗試給了它一個名字——「自由軟體(Free Software)」。但是這個命名行為也是一個強制要求行為,他為「自由軟體」標籤加上了大多數已有的黑客社區從不接受的意識形態的包袱。「自由軟體」的標籤被黑客社區中的一部分重要人物(尤其是與BSD Unix有關聯的社區)明確拒絕,並且其餘的大部分人也在嚴肅並且持保留意見的情況下使用它(包括我本人)。
除此之外,大約在1990年代中期以前,RMS想要在「自由軟體」口號下定義和引領黑客社區。在Linux崛起之後,這受到了極大挑戰。Linux為開放原始碼開發活動提供了一個天然的環境。許多在現今被稱為「開放原始碼」條款下發布的項目紛紛從專有Unix向Linux遷移。圍繞Linux的社區呈現爆炸式的增長,比在Linux出現前的黑客文化規模更大且更多樣化。RMS想要將這些活動與他的「自由軟體」運動關聯起來,但是由於Linux社區爆炸式的多樣性和該社區的創始人,Linus Torvalds的公開懷疑所阻礙。Torvalds仍然使用「自由軟體」這一詞彙,因為找不到更好的替代品,但他公開拒絕了RMS的意識形態觀念。許多年輕黑客紛紛效仿。
在1996年,當我第一次發布本文的時候,黑客社區正在圍繞Linux和一些其他開放原始碼的作業系統(尤其是BSD Unix的繼承者)進行重組。我們中的許多人曾經在封閉原始碼的作業系統上花費大量時間開發封閉原始碼軟體的集體記憶並沒有因此褪色,但是這看起來已經是過去。黑客們將自己作為黑客的定義與開發原始碼項目例如Linux和Apache越來越緊密的結合在一起。
然而「開放原始碼」這個詞直到1998年初才出現。當它出現之後,多數黑客社區在6個月之內採用了它,除了與「自由軟體」在意識形態層面綁定的極少數例外。自1998年起,尤其是2003年之後,「黑客」和「開放原始碼(和自由軟體)開發」越來越緊密相連。今天,幾乎已經無法也沒必要將它們區分開,並且這一點看起來在將來也不會改變。
然而,曾經並不是這樣,這一點值得我們記住。
Paul Graham寫了一篇名為「Great Hackers」和一篇名為「Undergraduation」的文章,有很多精妙的見解。(中文版詳見國內出版圖書《黑客與畫家》)
年輕的黑客可能會發現Things Every Hacker Once Knew有趣並且有用。
有一篇名為How To Be A Programmer的文章,對如何成為程式設計師做了詳盡的說明。它的價值不僅限於代碼及其相關能力上,對於如何在一個程式設計師團隊中工作也有建設性價值。
我寫過一篇A Brief History Of Hackerdom。
我寫過一篇名為「大教堂與市集(The Cathedral and the Bazaar)」的文章,在文中解釋了Linux和開源社區是如何運作的。在它的續集「開拓智域(Homesteading the Noosphere)」中,我進一步深入探討了這個問題。
Rick Moen寫了一篇很棒的關於如何運營一個Linux用戶組的文章。
Rick Moen和我共著了一篇關於提問的智慧的文章。它將使你更容易獲取到幫助。
如果需要個人電腦、Unix 和網際網路如何工作的基礎知識,參閱Unix和網際網路工作的基本原理。
當你發布軟體或補丁時,試著按軟體發布實踐操作。
如果你對禪詩感興趣,你可能會喜歡Rootless Root: The Unix Koans of Master Foo。