2008-01-31

如何成為駭客

1. 為何有這文章?


身為 Jargon File 的作者,我常收到熱心的網際網路新秀的電子郵件,問及「如何可以成為駭客?」奇怪地,在網際網路上像沒有文件或 FAQ 介紹這個重要問題,所以,我寫了這篇文章。

若你只是離線地閱讀本文,你可到這裡閱讀本文的最新中文版本。

Jargon File 裡有數個駭客的定義,主要形容「技術專材」或「有志解決問題及超越極限之人士」。其實要成為駭客,只有兩個要點。

最初駭客是形容一班早期微電腦及 ARPAnet 實驗的專業程式員及網際網路專材。他們崇尚共享主義,他們建立網際網路,他們建立及發展成現今的 Unix 作業系統。他們管理 Usenet 討論組。亦是他們令網際網路運作。因此,若你有上述的特性及參與同類的社群,亦有對以上種種作出貢獻,同時社群的人知你是誰又稱你為駭客,你便是駭客。

然而,駭客的理念並非只局限於這「軟體」的社群。有很多人應用駭客的態度於其他事物,如電子或音樂上 – 實際上,駭客的理念存在於任何科學及文學。由於了解駭客的理念及精神,軟體社群的駭客亦會稱後者為駭客。有些人亦認為駭客的理念是獨立於駭客所從事的媒體。然而,我們將在這篇文章專注討論軟體駭客的技巧,態度及傳統。

另外,有一群人亦稱自已為「駭客」,他們 (多數是年青人) 用電腦侵入其他電腦的系統作出破壞。駭客們稱這群人為「破壞者 (Cracker)」,亦不認同他們為駭客。多數駭客會認為破壞者是懶惰,不負責任,不傑出的人。有能力侵入保安系統並不能使你成為駭客,正如可以用鐵線來偷車並不能使你成為工程師一樣。不幸的是很多作家及報導員均稱這群人為「駭客」。

Cracker 與 Hacker 的主要分別是前者破壞,後者建立。

若你想成為駭客,請看下去,若你只想成為 Cracker,請到 alt.2600 討論小組,準備作出系統破壞。我相信你不會感到自己是想像中的聰穎。我對 Cracker 便說到這裡為止。

2. 駭客的態度


駭客解決問題,建立事物,相信自由及共享主義。要成為駭客及被接受為駭客,你的行為須「表現」出上述的態度。要「表現」上述的態度,你須「真正相信」上述的態度是正確

相信上述的態度並非只認為要被接受為駭客,而是要使能學習及保持成為駭客的自發性。正如其他的創作藝術一樣。學習必須同時著重理念與態度。

所以,要成為駭客,仔細了解下列各點,直至你相信為止:

2.1. 世界是有大量有趣的問題是等待解決的

成為駭客是一件滿有趣的事情,但背後同時要付出努力。努力卻須要自發性。成功的運動家有強烈的慾望去使自己發揮至極限,正如駭客必須有慾望去解決問題,不斷加強技術及運用智慧。

若你並非此類人,要成為駭客你便需要作出改變。否則你的駭客生涯及能量只會被性慾,金錢及社會的既定價值觀所消耗,一點一滴地消耗。

(你亦需有強烈信念,相信縱使你暫停不能解決整個問題,只是你能解決其中一部份,及能從中學習,你會可以解決另外的一部份  直至解決整個問題。)

2.2. 沒有人應該有需要解決同樣問題兩次

你的智慧是一個很有價值,但同時很「有限」的資源。請不要將這有價值的資源用來「重新發明車輪」。因為有很多其他尚未解決的問題是等待著你的。

要成為駭客,你必須相信其他駭客的思想時間非常寶貴,所以你有道德上的責任去分享資訊,解決問題及將其解決方法分享,使其他駭客不須再花時間解決同樣問題,而可以用時間解決的難題。

(你不須相信你必須將所有你的創作分享,縱使願意如此做的駭客是最從人尊重的。售賣足夠的創作以購買食物,支付租金及使用電腦的費用並不違反駭客的價值觀。運用你的駭客技能養活家庭,甚至致富亦可以,只要你做這些事時不要忘記你是一名駭客。)

2.3. 拒絕沉悶及乏味的事情

正如一般的創作者,駭客不應做沉悶及乏味,愚蠢及反反覆覆的事情。因為這表示他們不是做著只有他們才可以做的事  解決新問題。這樣實在太浪費了。因此,沉悶及乏味的事情對駭客而言不僅只是不良,而是邪惡的。

要成為駭客,你必須相信此觀念以令你將所有沉悶及乏味的事情儘量自動化,不止為自己而是為其他人 (其他駭客)。

(但有時為了鍛鍊,或獲得某種技術及經驗,駭客亦要做那些重複又乏味的事情,但這是個人選擇,沒有一個善於思想的人應被逼做沉悶的事。)

2.4. 自由

駭客天生反霸權主義。若有人可以向你下達命令,他便足以停止你  停止你去解決一些你認為有意義的問題。極權主義的人,由於思想特殊,會給你一個極愚蠢的理由去停止你解決這些有意義的問題。為了不令你和其他駭客窒息,必須打擊霸權主義。

(這並不是向所有權力挑戰,正如小孩需要成人指導,罪犯須被壓抑。駭客可同意接受某些權力。但只是有限及有意識地同意接受。那種極權主義的人所要求的絕非駭客所能認同。)

極權主義者很喜歡「禁制」及「保密」,他們不相信自由合作及資訊交流  他們由接受可以由他們操控的「合作」形式。因此,駭客必須對抗不合理的禁制,保密及以暴力或欺瞞壓逼人民的手段。

2.5. 信念不能替代能力

作為駭客,你必須發展上述的態度及擁有其信念,但有信念不能使你成為駭客,正如有信念不能使你成為出色的運動家或搖滾樂手一樣。要成為駭客,你須付出智慧,鍛煉及勤奮。

因此,駭客須要相信能力。任何方面的能力都是好的,一些只有少數人可領略的才能「更好」,而「最好」是一些需要高度智慧,技巧及高度集中力的才能。

若你尊敬才能,亦渴望得到 – 你所付出的努力將成為樂趣而非沉悶的事情,這亦是駭客必須擁有的。

3. 基本駭客技能


駭客態度固然重要,但駭客技能更重要。態度絕不能替代才能,因此,你必須學習一些基本知識才會被稱為駭客。

由於科技不斷演進,這些基本知識會不斷改變。(例如,以前須要機械碼才能撰寫電腦程式,但近來人們卻愛用 HTML。) 在現在,你需要下列知識:

3.1. 學如何寫電腦程式

這,當然是最基本的駭客技能。如果你不懂任何電腦程式語言,我便建議你學 Python。這是一個清楚地設計的,有清析記錄語法的,適合初學者的電腦程式語言。雖然它可能是你的第一種學習的電腦程式語言,但它絕非一件玩具。它是非常強力,有彈性而又適用於大型項目的電腦程式語言。

但慬記,若你只懂一種電腦程式語言,你不能成為電腦程式員,更遑論成為駭客  你需要了解程式撰寫方法,而且不受任何一種電腦程式語言限制。因此,你要學習如何只參看使用者指引,將其中內容與你所學關聯,便能於數天內學懂一種新的電腦程式語言。即是你要學習多種不同的電腦程式語言。

如果你對電腦程式要求嚴格,你必須學習 Unix 的核心語言  C (雖然 C 並不應是你第一種學習的電腦程式語言)。其他駭客需要學習的包括 PerlLISP。由於實用性,Perl 是值得學的,Perl 是廣泛地用於 Active Web Pages 及系統管理上的,因此就算你不會用 Perl 來撰寫程式你亦需學習如何閱讀及了解 Perl。至於學習 LISP 能給你一個意想不到的寶貴經驗,有助你於日後的日子裡寫便好的電腦程式,縱使你可能不會時常用 LISP 來撰寫程式。

因此,你最好完成以上四種電腦程式語言的學習 (Python, C, Perl 及 LISP)。除了是最重要的駭客語言,它們亦代表不同的程式撰寫方法。每種語言都從不同方向使你獲得寶貴經驗。

我不可能在此教導你如何撰寫電腦程式,因為這是一門複雜的技能。我只可對你說的就是  書本與課程並不有效 (很多,甚或是大多數的駭客都是自學的)。最有效學習電腦程式是 閱讀程式碼撰寫程式碼

學習撰寫電腦程式就如學習普通語言一樣,最佳方法是閱讀一些別人的大作,然後寫一些程式,再閱讀多些,再寫多些 ..。直至你發展出你獨有的一套撰寫電腦程式方法。

尋找好的程式用以閱讀和學習是非常困難的,以往是很缺乏一些比較大型的程式供初學的駭客練習。但現在情況已經有所改變;開放程式碼的軟體,電腦程式撰寫工具,及作業系統 (都是由駭客創造) 現時是很容易便可以取得。正好帶領我們到下一個題目 ..。

3.2. 取得一份開放程式碼的 Unix 作業系統,然後學習它。

我假設你擁有/或者可以使用一台個人電腦 (現今的小孩隨時都可以很容易地得到 :-))。成為駭客的第一步是在你的電腦上安裝一套 GNU/Linux 或 BSD-Unix 的作業系統,及使用它。

當然,世界上除了 Unix 外還有很多其他作業系統,但它們都是以二進制形式分發的  你不但不能閱讀那些程式碼,你亦不能改動它們。在 DOS,Windows 或 Mac OSX 或等作業系統上從事駭客活動,便像穿著盔甲學跳舞一樣。

另外,Unix 是網際網路上的作業系統、 雖然你可以不懂 Unix 但仍能使用網際網路,但若你不懂 Unix,你不能在網際網路上從事駭客活動。因此,現今駭客們大多是精於及偏愛 Unix 的。(以前的駭客可能不同意,但網際網路及 Unix 的相互關係已令其他  包括微軟的作業系統難於取代。

所以,請安裝一套 Unix  我個人喜愛 GNU/Linux 但其實有其他種類的 (你可以同時安裝 GNU/Linux 及 DOS/Windows 在同一電腦上)。學習它,使用它,把玩它。用它來上網際網路。閱讀及改動它的程式碼。它比微軟等的作業系統提供更好的程式工具 (包括 C, LISP, Python 及 Perl)。你會得到趣味及學到比你想像更多更佳的知識。

要知多點關於學習 Unix 的資料請到 Loginataka

要得到 GNU/Linux,請到

要知多點關於 BSD Unix 的資料及協助請到 www.bsd.org.

(註:若你是初學者,我不建議你獨自安裝 GNU/Linux 或 BSD。若你欲安裝 GNU/Linux,到一些 GNU/Linux 的使用者團體尋求協助; 或到 Linux Internet Support Co-operative (LISC)IRC 頻道看看。)

3.3. 學習如何用網際網路及用 HTML 來寫網頁

大部份駭客所做的事情,如在工廠及辦公室或大學裡的工作,是不會對非駭客做成影響的。但網際網路卻是一個例外,就算政治家都承認網際網路是一個足以影響世界的東西。亦由於這原因 (及其他種種原因) 你要學如何在網際網路上工作。

這不是說你要學如何使用瀏覽器 (人人都懂使用..),我是說你首先要學用 HTML 來寫網頁。若你根本不懂寫程式,用 HTML 來寫網頁可幫助你得到一些程式撰寫的基本概念。

可是寫網頁仍不足夠,在網際網路上有很多網頁,但大部份是沒有方向,明顯地沒有內涵的網頁。(你大可到 The HTML Hell Page看看)

所以,你的網頁一定要有內容  必須是有趣的及/或有用的 (對其他駭客),這便是我在下一個題目要說的..

4. 駭客社群的身份


像大部份非謀利的社群,駭客以名譽為重。你會嘗試解決有趣的問題,但問題是否有趣及你的解決方法是否有效,卻只有其他具有技能的駭客們可以去品評。

因此,要玩駭客這個遊戲,你要以其他駭客對你的觀感作為自己的評價。(正如我說你不是駭客,除非其他駭客亦稱你為駭客)。不過這事實卻有時被人誤解,因為他們多以為駭客是孤獨地工作的人。

人類學家稱駭客為貢獻社群。駭客得到地位及名譽並非來自強於他人的權力,亦非由於外表美麗,或有異於常人的能力,而是源於施與。清晰地說,是將你的時間,創意及創意的結果貢獻他人。

基本上,你可以貢獻 5 方面的東西以獲得其他駭客的尊重:

4.1. 撰寫開放原始碼的軟體

首先 (最傳統及基本的方法),是撰寫一些其他駭客認為有趣又有用的程式,而且將程式碼公開。

(人們以前會稱此類程式為”免費軟體”,但由於太多人將”免費軟體”的意義誤解。現時大部份人稱此類程式為 開放原始碼的軟體。)

駭客界最受人尊重的聖者是一些撰寫大型,功能強勁而又很有用的開放原始碼軟體,供其他人使用。

4.2. 幫助他人測試及除錯開放原始碼的軟體

在這不完美的世界,人們無法避免花很長的時間用於測試及為軟體除錯。因此,很多開放原始碼軟體的作者都會高度評價那些好的程式測試員 (可以清楚表達程式錯誤表徵,程式錯誤位置,能接受軟體在開發期間的暫時性錯誤及繼續測試)。 一個好的程式測試員可以使如惡夢的測試及除錯工作變為一件值得經歷的小煩惱。

若你是初學者,你可以找一些正在開發階段而你又感興趣的程式來做測試及除錯。當你懂得測試及除錯,你自然會學習更改程式。這樣,你不單可以學習,亦可以與其他專家建立良好的關係,而他們亦很可能會於未來給予你幫助。

4.3. 發行有用的資訊

另外一點是你可以收集及挑選有用的資訊並製成網頁或FAQ(常問問題),以供諸同好。

技術性FAQ的經營者往往很多人的尊重,如同撰寫開放原始碼的軟體的專家一樣。

4.4. 幫助系統運作

駭客社群 (特別是網際網路的發展者) 是由自願者組成的。當中有大量必須但平淡的工作須要有人去處理  例如管理電子郵件,監察討論小組,經營大型程式的儲存網站,及發展技術性標準等。

做以上工作的人得到很多人的尊重,因為人人都知道此種工作是很花費時間但又不如撰寫程式般有趣。此等工作須要使命感。

4.5. 為駭客社群服務

最後,你可以為駭客社群服務及傳揚(例如你可以寫一篇如何成為駭客的文章 :-))。 通常你不會做這些工作,直至你已做了以上四種的工作的其中一樣。

駭客社群沒有一個既定的領導者,但卻有為人尊重的英雄及長老級人物等發言人。當你在此有一段時間的經驗,你可能會成為其中的英雄或長老。但記著,駭客社群對傲慢的自我中心者並不認同,所以不要成為如斯的領導人物。你不應追求成為領導人物,你應了解自己的方向及以謙虛的心來看自己的地位及身份。

5. 駭客與怪客的關係


與傳說不同,駭客並不一定是怪客,但有很多駭客卻實在是怪客。通常社會不甚認同的怪客會有更多時間習中思考及從事駭客活動。

因此,很多駭客都以怪客為名,並以此表示自己獨立於社會一般的觀念。你可看這裡得到更多此等討論。

若你可以集中精神從事駭客活動,做得又好而又可以維持生命,實在是很難得的事。比起70年代來說現在做駭客是比較容易的了。人們亦開始了解駭客其實是高質素的人才。

但若你是由於太苦悶而做駭客的話,我亦歡迎你,最少你可以比較專心地從事駭客活動,可能有一天你會得到人生的樂趣。

6. 其他事項


我想再說一次,若你要成為駭客,你必需要有駭客的理念。就算你不是在電腦前面你亦可以做以下與此理念有關的事情。當然,沒有事情可以取代駭客的電腦活動。
  • 閱讀科技故事,參與科技會議 (在場內很可能遇到其他駭客)
  • 學習禪及工夫武術 (理念與駭客的理念在很多方面相近)
  • 發展分析音樂的聽覺。學習欣賞特定的音樂,學習以一種或以上的學器,學習唱歌。
  • 學習欣賞文字及雙關語
  • 學好你本土的語言 (有很多駭客都是有能的作家)

多做以上的行為,你更容易成為駭客,可能因為上述的行為是會將左腦及右腦的混合使用 (駭客需要以理性分析事情及於一瞬間以邏輯以外的思考來處理有關工作) 最後,一些你應做的事情。
  • 不要用愚蠢,浮誇的User ID或假名
  • 不要捲入Usenet及其他討論的罵戰
  • 不要自稱為’電腦流氓’,亦不要與此類人交往
  • 不要發放有大量錯字或錯文法的電子郵件及電子討論

若你做出上述的事情,你將會得到很壞的名譽,駭客有很好的記性,你最期的所作所為會令你將要經過多年才可以被其他駭客接受。 用假名的問題值得我們深思。將身份隱藏是小孩子的做法,另是Cracker,warez d00dz 及其他低等生物的特徵。駭客不會做這些事; 他們對自己的創作及行為表示驕傲,因此愛用名。因此,若你現在用假名,請你立即放棄。在駭客社群裡只會將用假名的人視為失敗者。

7. 其他的資源

Peter Seebach 維護著一個很好的 駭客 FAQ 供不懂處理駭客的人士閱覽。若上述超連結沒有反應你可到 Excite 搜尋器來尋找 Loginataka 有一些關於 Unix 駭客的訓練和應有態度的資料,本人亦寫了一個 有關駭客社群的簡短歷史的網頁 我亦寫了一篇文章,名為 The Cathedral and the Bazaar ,以解釋有關 GNU/Linux 及開放式程式碼等的文化。我亦在續篇 Homesteading the Noosphere 一文中再將此題目直接地說明。

8. 常問問題


問: 你會否教授我如何成為駭客 ?

自從寫了這個網頁,我每星期(有時每天有數次)收到上述的要求,可惜的是我並沒有時間及精力去教人如何成為駭客。我自己所從事的駭客活動已用了我 110%的時間。 就算我有時間,駭客本身是一種態度及技巧你要自我學習。你會發現真駭客們很願意提供協助,但若你只是不斷地像嬰兒般要求餵養,他們不會尊重你。 所以,你應先學一些基本知識。表現出你是正在嘗試,及你有能力自學。接著才與駭客們討論特殊的難題。

我要如何開始?

最好先到 LUG (Linux 使用者團體) 討論。你可以在LDP General Linux Information Page找到此類小組; 很多時你可以找到一個接近你的小組,多數是大學提供的。LUG的成員可能會提供一套GNU/Linux給你,及教你如何安裝及開始。

你會否教我如何破解系統,或教我破解術?

我不會。任何已閱讀此FAQ而仍問此問題的人實在是太愚蠢及不能教導(就算我有時間教導)任何此類電子郵件會被忽略或以粗暴語氣回答。

我的系統剛被破解。你會否幫我防範再被破解 ?

不會。每次我收到這類要求的,都是用視窗作業系統的。基本上是不可能有效地防止視窗作業系統被破解; 因為這作業系統有太多的程式及結構缺點,就像要用篩子來將船划動一樣。只有轉用GNU/Linux等有真正安全的作業系統方可解決這個問題。

在那兒可以與真駭客通訊?

最好是找一個你本區的Unix或GNU/Linux的討論小組,並參與討論(你可以在 LDP的網頁找到超連結) 我曾說在IRC(網路聊天室)不能找到真駭客,但我發覺現在情況有所改變。(現時有些真駭客亦在GIMP及Perl等的IRC出現。)

你可否介紹一些有關駭客的有用書籍?

你可到本人維護的Linux Reading List HOWTO看看,Loginataka亦有相關的資料。

我應先學那種程式語言?

若你不懂HTML,你應先學它。在坊間有很多不好的 HTML 書,好的 HTML 書卻很少。我本人最喜歡 HTML: The Definitive Guide。但 HTML 並不是完全的程式語言。當你有心理準備開始學寫程式,我提議你學Python。可能已有很多人提議你學Perl,而事實上Perl是比Python更多人用。但對初學者來說,Perl比較難學。而且(我認為)Perl的設計比不上Python.在網上有很多Python的資訊供初學者。 C語言是非常重要,但比Python及Perl更難學。不要以它為起點。 對於視窗作業系統的用家,請你們不要只學Visual Basic。它會使你得到壞的撰寫程式習慣,亦並不能於不同的作業系統平台使用。儘量不要用它。

問: 但撰寫開放式程式的人會否不能賺錢過活?

看來不會 – 直至現在,開放式程式工業是在創造就業機會而非減少就業機會。若成功撰寫一個程式是經濟正收益,程式撰寫員,無論是開放式或非開放式的,亦可得到薪金。另外,無論有多少的開放式程式,亦有更多需求新的及度身訂做的應用程式。我在Open Source網頁有更詳盡的解說。

問: 我應如何開始,我在那裡可以很到免費的 GNU/Linux ?

在這網頁的其他地方已有超連結帶你到可以得到免費 Unix 的地方。要成為駭客,你需要有主動性,自發性及自學能力。現在開始吧…。

資料來源:
Eric Raymond - 如何成為駭客