Hacker Folklore

Matthias Endler

駭客軼事

原文由 Matthias Endler 發布,訂閱此部落格

有些電腦術語有著令人意外的歷史淵源。許多詞彙其實源自早已過時的技術。本文試著拂去塵埃,發掘那些我們每天都在使用、卻不太確定其由來的詞彙背後精彩的歷史。馬上開始吧!

自行車棚效應(Bike-Shedding)

今日涵義:針對瑣碎議題的無謂討論。

「自行車棚效應」或「bike-shedding」一詞是為了闡明「瑣碎定律」而創造的隱喻;它由丹麥電腦開發者Poul-Henning Kamp 於 1999 年在 FreeBSD 郵件論壇上在柏克萊軟體套件(Berkeley Software Distribution)社群中發揚光大,並自此擴散至整個軟體產業。

這個概念最初是作為他對管理學「帕金森定律」戲仿的延伸推論而提出。他以委員會對原子反應爐的審議,對比對自行車棚的審議,來戲劇化地呈現這個「瑣碎定律」。正如他所說:「花在議程上任何一項的時間,與涉及的金額成反比。」

反應爐既昂貴又複雜到一般人無法理解,因此人們便假設負責的人自然懂。相反地,每個人都能想像出一座便宜、簡單的自行車棚,因此在規劃時反而會引發無止盡的討論,因為每個人都想加點意見、展現自己的貢獻。
參考資料 - Wikipedia:瑣碎定律

樣板程式碼(Boilerplate)

一台用來彎折鋼板以製造鍋爐的老式機器。
一台用來彎折鋼板以製造鍋爐的老式機器。
來源:Wikimedia Commons

今日涵義:一再被複製貼上、幾乎不做或僅做些微修改的程式碼片段。

Boiler plate 原本指的是用來製造鍋爐的軋製鋼板,但在媒體領域則用來指陳腔濫調或缺乏原創的文字。這個詞指的是預先準備好的文字的金屬印刷版,例如廣告或聯播專欄,這些會被分發給小型地方報社。這些印刷版因類比而被稱為「boilerplate」。這類 boilerplate 的一大供應商是 Western Newspaper Union,它向版圖較小的地方報紙提供「包含國內或國際新聞的現成待印故事」,其中可能在一般內容旁就預先印好了廣告。

參考資料:

前景中的男子手持一塊弧形的印刷版,像這樣的印版由 Western Newspaper Union 等公司提供給許多小型報社。
前景中的男子手持一塊弧形的印刷版。像這樣的印版由 Western Newspaper Union 等公司提供給許多小型報社。
來源:Wikimedia Commons

開機/重新開機/自舉(Boot / Reboot / Bootstrapping)

孟豪森男爵抓著自己的辮子把自己從沼澤中拉出來的石版畫
孟豪森男爵抓著自己的辮子把自己從沼澤中拉出來的石版畫
來源:Wikimedia

在電腦的脈絡中,boot 指的是啟動電腦的過程。

在編譯器開發中,bootstrapping(自舉)指的是用新語言重寫編譯器的過程:第一個編譯器先用既有語言撰寫,然後再用新語言重寫,並由它自己來編譯自己。

「靠自己的靴帶把自己拉起來(to pull oneself up by one’s bootstraps)」這句俗諺可追溯至 19 世紀。高筒靴頂部可能有拉環、袢帶或提把,方便穿靴時拉起。這個隱喻衍生出更多用來形容無需外力、自我維持的過程的比喻。

根據Wikipedia

這句俗諺至少可追溯至 1834 年,當時出現在《Workingman’s Advocate》上:「據推測,Murphee 先生現在將能夠靠著靴子上的帶子把自己拉過坎伯蘭河或跨過穀倉的柵欄。」

另可參考 Merriam-Webster 上的精要整理。

Bug(錯誤)

今日涵義:程式碼或硬體中的缺陷。

起源不明!

與普遍的誤解相反,它早於 Grace Hopper 在 Mark II 電腦中發現的那隻蟲

工程師們早在此之前就已使用這個詞,至少可追溯至 1870 年代。它比電子電腦和電腦軟體更早出現。Thomas Edison 就曾在筆記中使用「bug」一詞。參考資料

位元(Bit)

這個詞的發明歸功於 John W. Tukey,他在 1947 年 1 月 9 日為貝爾實驗室撰寫的備忘錄中,將「binary information digit」(二進位資訊單位)縮寫為「bit」。參考資料

位元組(Byte)

「byte」一詞最早由Werner Buchholz 於 1956 年 6 月提出。當時正值 IBM Stretch 電腦的初期設計階段。該電腦的設計可定址到單一位元,並允許可變長度欄位的指令,位元組的大小就編碼在指令本身之中。刻意拼作「byte」而非「bite」,是為了避免被意外改成「bit」。

歸位與換行(Carriage Return and Line Feed)

今日涵義:將游標移至下一行開頭。

這兩個詞彙源自打字機。

承載紙張的「字車(carriage)」會隨著按鍵敲擊,從左向右移動以推進打字位置。它「承載」著紙張。所謂歸位(carriage return),就是將字車移回紙張最左側初始位置的操作。

然而,僅僅把字車歸位並不足以開始新的一行,字車仍停留在同一行的開頭。要換到新的一行,就需要「換行(line feed)」。它會將打字機內的紙張向上捲動一行。

這兩個操作——歸位(CR)與換行(LF)——通常是透過推動歸位操縱桿一次完成。

一台機械式打字機,歸位操縱桿位於最左側。
一台機械式打字機,歸位操縱桿位於最左側。
來源:piqsels
  • 在 Unix 系統(如 Linux 或 macOS)中,\n 仍代表換行(ASCII 符號:LF)或換行字元(newline)
  • 在 CP/M、DOS 與 Windows 中,則使用 \r\n,其中 \r 代表歸位\n 代表換行(CR+LF)。
  • 參考資料

以下這支老影片展示了歸位與換行的基本機械原理:

Command 鍵符號(⌘)

今日涵義:Apple 電腦上用來提供額外快捷鍵組合的特殊鍵。

以下直接引述 Wikipedia(粗體為筆者所加):

⌘ 符號是在 Macintosh 專案的後期才加入的。開發團隊原本沿用舊有的 Apple 鍵,但 Steve Jobs 覺得選單中指令旁塞滿「蘋果」很煩人,因為他認為這是過度使用公司標誌。於是他決定改用不同的按鍵符號。在截止日前僅剩幾天時,團隊的點陣圖美術設計師 Susan Kare 開始為 Apple 標誌的繼任者做研究。她在翻閱符號字典時,發現了這個三葉草般的符號,它在北歐國家常被用來標示文化據點與景點(它是丹麥、芬蘭、冰島、挪威與瑞典官方的觀光景點道路標誌,瑞典的 Mac 使用者常稱這個電腦按鍵為 Fornminne——古代遺跡,丹麥使用者則稱為 Seværdighedstegn)。當她把這個符號展示給團隊其他人看時,大家都很喜歡,於是它就成了 1984 年 Macintosh 的 command 鍵符號。Susan Kare 表示,後來有人告訴她,這個符號之所以因其斯堪地那維亞的用法而被選中,是因為它俯視看起來像一座四角帶有圓形角塔的方形城堡,特別是博格霍爾姆城堡。

挪威的 Severdighet(景點)道路標誌
挪威的 Severdighet 道路標誌
來源:Wikimedia Commons
博格霍爾姆城堡的空拍圖,據說是該符號的原型
博格霍爾姆城堡的空拍圖,據說是該符號的原型
來源:Wikimedia Commons

參考資料:

Cookie

今日涵義:網站傳送並儲存在使用者瀏覽器中的一小塊資料。

cookie 一詞由年僅 23 歲的網頁瀏覽器程式設計師 Lou Montulli 於 1994 年秋季創造。靈感來自 magic cookie 一詞,那是 Unix 程式設計師用來指稱程式收到後會原封不動送回的資料封包。這個詞彙本身又源自幸運餅乾(fortune cookie),也就是內藏籤語的餅乾。

Montulli 用 cookie 來描述瀏覽器收到後會原封不動送回給伺服器的小封包資料。

「對啊,就是 cookie,」Montulli 笑著說。「那是我人生中一週的工作,卻成了我做過最重要的事。」(參考資料

核心傾印(Core Dump)

今日涵義:透過儲存程式的所有記憶體內容,來擷取(當機)程式狀態快照以供離線分析。

這個名稱來自磁芯記憶體(magnetic core memory),這是一種基於環形磁鐵網格的早期儲存機制。它早已過時,但這個詞至今仍被用來指稱擷取電腦處理程序快照。參考資料

一個 32 x 32 的磁芯記憶體平面,儲存 1024 位元(或 128 位元組)的資料。最早的核心傾印是印在紙上的,以當時這麼小的容量來說相當合理。
一個 32 x 32 的磁芯記憶體平面,儲存 1024 位元(或 128 位元組)的資料。最早的核心傾印是印在紙上的,以當時這麼小的容量來說相當合理。
來源:Wikimedia Commons

游標(Cursor)

今日涵義:在顯示器上指示位置(例如供資料輸入)的視覺提示(如閃爍的垂直線)。Merriam-Webster

Cursor 在拉丁文中有「跑者」之意。Cursor 原本是指計算尺上帶有髮絲刻線的透明滑件,用來標示尺上的某個點。這個詞後來透過類比被轉用到電腦上。參考資料

1951 年 12 月 IBM 604 電子計算穿孔機的廣告,該機型於 1948 年首次生產。廣告宣稱 IBM 604 能完成 150 位使用計算尺的工程師的工作量。游標(或稱 runner)是計算尺中間的透明滑件。
來源:1951 年 12 月 IBM 604 電子計算穿孔機的廣告,該機型於 1948 年首次生產。廣告宣稱 IBM 604 能完成 150 位使用計算尺的工程師的工作量。游標(或稱 runner)是計算尺中間的透明滑件。

Daemon(常駐程式)

在電腦領域,daemon 是一種在背景處理列印排程、檔案傳輸等服務請求,然後結束執行的背景行程。這個詞由MIT 的 Project MAC(Mathematics and Computation)的程式設計師於 1963 年創造。他們取自馬克士威妖(Maxwell’s demon),那是思想實驗中假想的、不斷在背景工作、分選分子的生物。

MIT 的程式設計師認為 demon 會是對在背景不知疲倦地執行系統雜務的處理程序的恰當名稱。但他們沒有使用 demon 一詞,而是用了 daemon,這是該字的較古老拼法。(參考資料

儀表板(Dashboard)

今日涵義:提供系統狀態快速總覽的使用者介面。

原本是指馬車前方的木板,用來阻擋馬蹄向後「濺起(dash)」的泥巴,以保護駕駛。

當汽車被製造出來時,駕駛前方的那塊板子也被賦予了同樣的名稱。那個位置正好適合放置必要的儀表,讓駕駛易於觀看。久而久之,這個詞與其說是指防護功能,不如說更常與上面的讀數相關聯。參考資料

馬車的擋泥板。
馬車的擋泥板。
來源:Wikimedia Commons

防火牆(Firewall)

今日涵義:在受信任的內部網路與不受信任的外部網路(如網際網路)之間建立屏障的網路安全系統。

防火牆主要用於連棟住宅,但也用於獨棟住宅。它能在發生火災時防止火勢與煙霧蔓延至建築物的另一部分,從而避免大火。這個詞自 80 年代起在電腦領域中使用。參考資料

住宅建築中的防火牆,將建築分隔成兩個獨立的居住單元與防火區劃。
住宅建築中的防火牆,將建築分隔成兩個獨立的居住單元與防火區劃。
來源:Wikimedia Commons

韌體(Firmware)

今日涵義:一類為裝置的特定硬體提供低階控制、且與其運行的硬體緊密結合的電腦軟體。

Ascher Opler 在 1967 年《Datamation》雜誌的一篇文章中創造了 firmware 一詞。如最初所用,firmware 是相對於硬體(CPU 本身)與軟體(在 CPU 上執行的一般指令)而言。它存在於硬體與軟體之間的邊界上,故名「firmware」。原始文章可在 Internet Archive 上找到。參考資料

Foo 與 Bar

今日涵義:常見的佔位變數名稱。

這個詞最初可能來自軍事術語 FUBAR。說法有幾種,但常見的解釋是 FUBAR:「f***ed up beyond all recognition」(爛到無法辨識)

在程式設計語境中使用 foo,一般認為源自約 1960 年 MIT 的 Tech Model Railroad Club(TMRC)。在複雜的模型系統中,房間各處都設有緊急開關(scram switches),若有不妙的事即將發生,例如列車全速衝向障礙物,就可以扳動開關。

就我所理解,他們當時真的有標示為 foo 的緊急按鈕,只是取不出更好的名字。或許與 FUBAR 原本「出了非常嚴重的狀況」的軍事涵義有關。

一個緊急停止開關(按鈕),按下可防止意外運作。或許 TMRC 的按鈕上標示的就是 `foo`
一個緊急停止開關(按鈕),按下可防止意外運作。或許 TMRC 的按鈕上標示的就是 foo
來源:Wikimedia Commons

參考資料:

自由工作者(Freelancer)

今日涵義:不受僱於特定雇主、長期自僱的人。

這個詞最早出現在 Sir Walter Scott 的小說 《Ivanhoe》(《艾凡赫》)中。(該小說對羅賓漢傳說也產生了深遠影響。)

Classic Comics 漫畫書封面
Classic Comics 漫畫書封面
來源:Wikimedia Commons

書中,一位領主向理查王提供其麾下有償的「自由長矛兵」軍隊:

我曾向理查提供我的自由長矛兵的效忠,而他拒絕了——我將帶他們前往 Hull,奪取船隻,航向法蘭德斯;多虧這動盪的時局,有作為的人總能找到工作。

因此,「free lancer」就是為出價最高者而戰的人。Free 並非指「無償」,而是指可為任何雇主工作的額外自由。參考資料

雜湊(Hash)

今日涵義:雜湊函式是可將任意大小的資料對應至固定大小數值的任何函式。

根據 Wikipedia,雜湊函式中「hash」一詞的用法「是透過類比其非技術性的含義,即『切碎並混合』而來。事實上,典型的雜湊函式,如取餘數運算,會將輸入域『切碎』成許多子域,再『混合』到輸出範圍中,以提升鍵值分佈的均勻性。」

參考資料:

紀錄/紀錄檔(Log / Logfile)

今日涵義:記錄電腦程式或系統事件的檔案。

水手曾使用所謂的測程繩(log lines)來測量船速。一塊扁平的木片(log)被繫在一條長繩上,繩上有等距的繩結。當木片隨水漂離時,水手會計算在固定時間內放出的繩結數,那便是船速——以「節(knots)」為單位。

船速對航行至關重要,因此水手會將其記錄在書中,稱為航海日誌(log book),並一同記下其他有助於更精確定位船隻的資訊,如地標觀測與天氣事件。後來,更多與船隻整體相關的資訊也被加入——或記錄——其中,例如港口費用與異常的給養消耗。

參考資料

水手使用測程繩測量船速
水手使用測程繩測量船速
來源:The Pilgrims & Plymouth Colony:1620 by Duane A. Cline
測程繩的各個部件
測程繩的各個部件
來源:The Pilgrims & Plymouth Colony:1620 by Duane A. Cline
英國 Winchelsea 號的航海日誌頁面,第二欄為以測程繩測得的節數,代表船速
英國 Winchelsea 號的航海日誌頁面,第二欄為以測程繩測得的節數,代表船速
來源:Navigation and Logbooks in the Age of Sail by Peter Reaveley

修補程式(Patch)

今日涵義:可套用於修正或改進電腦程式的一段程式碼。

在電腦歷史的早期,如果你犯了程式錯誤,就必須透過在紙帶或打孔卡上的孔洞上貼補片來修正。

一條用實體貼片覆蓋修正穿孔的程式紙帶。
一條用實體貼片覆蓋修正穿孔的程式紙帶。
來源:Smithsonian Archives Center

Ping

今日涵義:一種檢查電腦在網路上是否可達及其回應時間的方法。

Ping 是一個最初由 Mike Muuss 於 1983 年撰寫的終端機程式,包含在每個版本的 UNIX、Windows 與 macOS 中。他以「聲納發出的聲音來命名,靈感來自整個回聲定位的原理。[…] ping 使用定時的 IP/ICMP ECHO_REQUESTECHO_REPLY 封包來探測與目標機器的『距離』。」參考資料非常值得一讀。

像素(Pixel)

今日涵義:螢幕上所呈現的影像中可控制的最小單位。

pixel 這個字是 pix(來自「pictures」,縮寫為「pics」)與 el(「element」元素)的組合。類似地,voxel 是體積元素,texel 是紋理元素。參考資料

殼層(Shell)

今日涵義:用來與電腦系統互動的互動式、通常為文字介面的執行環境。

這個詞的發明者 Louis Pouzin 在其論文 The Origins of the Shell 中並未對名稱做出解釋。不過,它可追溯至 Unix 的前身 Multics。在 Multics 詞彙表中是這樣描述的:

[殼層] 會被傳遞一個命令列以供 listener 執行。

Eric S. Raymond 所著的《The New Hacker’s Dictionary》(亦稱《Jargon File》)中包含如下內容

歷史註記:顯然,最初的 Multics shell(意義 1)之所以被稱為 shell,是因為它是 shell(意義 3);

其中意義 3 指的是

一個由手工或由另一個程式(如解析器產生器)所建立的骨架程式,它提供了執行某項任務所需的必要咒語與驅動其控制流程(driver 一詞有時被用作同義詞)。使用者需填入實際工作所需的程式碼。這種用法在 AI 與 Microsoft Windows 領域很常見,並讓 Unix 駭客感到困惑。

遺憾的是,該書並未提供任何證據來支持此說法。

我喜歡(或許在歷史上並不正確的)堅果的類比:外層是殼(shell),保護著內部的果仁(kernel)。

參考資料

Slab 配置器(Slab allocator)

今日涵義:一種高效率的記憶體配置技術,會重複使用先前的配置。

Slab 配置由 John Bonwick(註:PDF 檔案)於 1994 年發明,自此被 Memcached 與 Linux 核心等服務所採用。

透過 slab 配置,針對特定類型或大小的資料物件的快取,會擁有若干預先配置的「slab」記憶體;在每個 slab 內,則有適合放置物件的固定大小的記憶體區塊。(Wikpedia

slab 這個名稱來自 Bonwick 青少年時期的一位朋友。他在 Oracle 部落格上講述了這個故事

當時他們一起看電視,Kellogg’s 的一則廣告播出,標語是「Can you pinch an inch?」

其含義是,如果你能在腰間捏起超過一英吋的脂肪,就代表你過重了——而吃一碗玉米片會有幫助。

Tommy 毫不猶豫地抓住自己的肚子,體重約 250 磅的他給出了回應:「Hell, I can grab a slab!」(見鬼,我能抓起一整塊!)

十年後,Bonwick 在尋找一個詞來描述配置一大塊記憶體時,想起了這個詞。

以下是當時那則 Kellogg’s 廣告:

垃圾訊息(Spam)

今日涵義:未經請求的電子通訊,例如大量發送電子郵件或在論壇與聊天室中洗版。

這個詞可追溯至英國喜劇團體 Monty Python 在 1970 年的一段小品。在小品中,一家咖啡館幾乎在每道菜中都加入了 Spam(一個罐裝豬肉品牌)。Spam 是 spicedham 的混成詞。被提及的過量 Spam 是影射該產品與其他進口罐裝肉品在二戰後英國的氾濫(當時英國正處於配給時期),因為國家在重建農業基礎的過程中苦苦掙扎。參考資料

復古廣告:看看一罐 Spam 能做出多少花樣
復古廣告:看看一罐 Spam 能做出多少花樣
來源:使用者 Jamie (jbcurio) on flickr.com

Monty Pythons Flying Circus (1974) - SPAM 來自 Testing Tester,發表於 Vimeo

大型主機(Mainframe)

今日涵義:一種大型電腦系統,常被大型組織所使用。

這個詞原本指的是固定電腦主要元件的框架。主要元件包括 CPU、記憶體與 I/O 裝置。這個詞在 1960 與 1970 年代電腦體積龐大、需要大量空間時被使用。

此圖顯示 IBM 701 大型主機如何向外展開以便檢修電路。圖片來自 IBM《Type 701 EDPM(電子資料處理機)安裝手冊》,由電腦歷史博物館典藏。
此圖顯示 IBM 701 大型主機如何向外展開以便檢修電路。圖片來自 IBM《Type 701 EDPM(電子資料處理機)安裝手冊》,由電腦歷史博物館典藏。

更多內容可參考 Ken Shirriff 的部落格

選項按鈕(Radio Button)

今日涵義:一種讓使用者從一組互斥的預設選項中擇一的 UI 元件

「選項按鈕(radio buttons)」之名來自收音機上類似的機械按鈕。這個 UI 概念後來被用於錄音機、卡式錄音機與隨身聽(著名的「Walkman」及其同類產品),之後又用於錄影機與攝影機。參考資料

老式汽車收音機(左)與 CSS 選項按鈕(右)。任何時刻只能選擇一個選項。小時候我會一次按兩個按鈕讓它們卡住,很有趣。
老式汽車收音機(左)與 CSS 選項按鈕(右)。任何時刻只能選擇一個選項。小時候我會一次按兩個按鈕讓它們卡住,很有趣。
來源:圖片由 Matt Coady 提供

大小寫(Uppercase and lowercase)

今日涵義:鍵盤上大寫字母與小寫字母的區分。

在活字排版仍是手工、用鉛製的單個字母「排版」成詞彙與句子的年代,大寫與小寫字母會被分開存放在不同的容器——或稱字盤(case)——中,以讓這個相當繁瑣的過程稍微加快一些。

一組排版用的字盤
一組排版用的字盤
來源:出自 Daniel Berkeley Updike(1860-1941)所著《Printing types, their history, forms, and use; a study in survivals》。可於 archive.org 免費取得

榮譽提及

404

今日涵義:HTTP 狀態碼「找不到檔案」。

有個說法是,這個數字來自存放全球資訊網中央資料庫的伺服器機房。在那裡,管理員會手動尋找被請求的檔案,並透過網路將其傳輸給發出請求的人。如果檔案不存在,他們就會回傳錯誤訊息:「Room 404: file not found」(404 室:找不到檔案)。

然而,這似乎是個迷思,該狀態碼其實是根據當時已確立的 FTP 狀態碼相當隨意地選定的。參考資料

程式語言與縮寫

程式語言名稱與常見縮寫的語源大概值得另寫一篇專文,但我暫且在此記下幾個我最喜歡的例子。

C++

C++ 是由 Bjarne Stroustrup 以 C 語言為基礎所發展的程式語言。這個名稱是 Stroustrup 的同事 Rick Mascitti 開的一個程式設計師玩笑。++ 指的是許多類 C 語言中常見的後置遞增運算子,它會將變數的值加 1。從這個意義上說,C++ 可被視為 C 在精神上的「後繼者」。參考資料

C#(C Sharp)

與 C++ 類似,C# 也是一種類似 C 的程式語言。名稱同樣指涉在 C++ 之上的「漸進式」改進。名稱中的 # 看起來像四個加號,因此 C# == (C++)++。但除此之外,這個名稱也受到了樂譜記號的啟發,其中升記號(sharp)表示所標示的音符應升高半音。參考資料

一個升 C 音符。
一個升 C 音符。
來源:Wikimedia Commons

PNG

官方上,PNG 代表 Portable Network Graphics(可攜式網路圖形)。它誕生於對 CompuServe 在 1994 年宣布支援 GIF 的程式此後必須支付授權費用的不滿。由駭客 Thomas Boutell 領導的工作小組創建了 .webp 檔案格式,一個無專利的 GIF 替代方案。因此我更喜歡這個格式的非官方名稱:PNG’s Not GIF。這裡有一篇很棒的文章介紹 PNG 的歷史。參考資料

致謝

大部分內容來自 Wikipedia 等來源(已在適當處標註參考資料),但若你不知道自己在找什麼,這些解釋其實很難尋覓。
這是一份持續更新的文件,若有讀者投稿,我計畫隨時更新。

結語

你必須了解過去,才能理解現在。
— Carl Sagan 博士(1980)

希望你喜歡這趟回憶之旅。現在換你了!
👉 你還知道其他故事嗎?傳訊息給我,我會把它們加到這裡。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言