ハッカーのフォークロア
コンピュータ用語の中には、意外な来歴を持つものがあります。多くは、とっくに廃れてしまった技術に由来しています。この記事では、毎日何気なく使っているのに、由来をよく知らない言葉たちの興味深い歴史を掘り起こしてみたいと思います。さっそく見ていきましょう!
バイクシェディング
現在の意味:些細な問題をめぐる無意味な議論。
「バイクシェッド効果」あるいは「バイクシェディング」という言葉は、「些末の法則」を分かりやすく示す比喩として作られました。1999年にデンマークの開発者ポール=ヘニング・カンプ(Poul-Henning Kamp)がFreeBSDのメーリングリストで紹介してBerkeley Software Distributionのコミュニティで広まり、そこからソフトウェア業界全体に定着しました。
この概念は、もともとマネジメントを風刺した「パーキンソンの法則」の系として提示されたものです。カンプはこの「些末の法則」を、委員会が原子炉について審議する様子と、自転車小屋について審議する様子を対比させて戯画化しました。彼が言うには、「議題の各項目に費やされる時間は、関わる金額に反比例する」のです。
原子炉はあまりにも高価で複雑なため、一般の人には理解できず、担当者が分かっているのだろうと誰もが考えます。一方で、安価で単純な自転車小屋なら誰でもイメージできるため、計画をめぐっては誰もが一言加え、自分の貢献を示そうとして議論が延々と続いてしまうのです。
参考 - Wikipedia: Law of Triviality
ボイラープレート

出典: Wikimedia Commons
現在の意味:ほとんど変更を加えずに何度もコピーして使われるコードのひとかたまり。
boiler plateは本来、給湯ボイラーを作るために圧延された鋼板を指す言葉でしたが、メディアでは陳腐で独創性のない文章を指すようにもなりました。この言葉は、広告やシンジケート配信のコラムなど、あらかじめ用意された文章を印刷するための金属製の印刷版を指します。こうした印刷版が、比喩的に「ボイラープレート」と呼ばれるようになったのです。こうしたボイラープレートを新聞社に大規模に供給していた一社が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紙に次のように登場しています。「マーフィー氏はこれで、ブーツのストラップでカンバーランド川や納屋の柵を越えられるようになるだろうと推測されている。」
Merriam-Websterにも分かりやすいまとめがあります。
Bug
現在の意味:コードやハードウェアの欠陥。
起源は不明です!
よく信じられているのとは異なり、この言葉はグレース・ホッパーがMark IIコンピュータで見つけたバグよりも前から存在します。
この言葉はそれよりずっと以前、少なくとも1870年代から技術者に使われていました。電子計算機やコンピュータソフトウェアよりも古いのです。トーマス・エジソンも自身のメモで「bug」という言葉を使っています。参考
Bit
この言葉の考案はジョン・W・テューキー(John W. Tukey)に帰せられています。1947年1月9日にベル研究所向けに書いたメモの中で、「binary information digit」を縮めて「bit」としたのです。参考
Byte
「byte」という言葉は1956年6月にヴェルナー・ブッフホルツによって初めて導入されました。IBM Stretchコンピュータの初期設計段階でのことです。このコンピュータは個々のビット単位までアドレス指定でき、バイトのサイズ自体が命令の中にエンコードされる可変長フィールド命令を可能にする設計でした。綴りを「bite」ではなく「byte」としたのは、誤って「bit」に直されてしまうのを防ぐための意図的な選択でした。
Carriage ReturnとLine Feed
現在の意味:カーソルを次の行の先頭に移動すること。
この二つの言葉はタイプライターに由来します。
キャリッジは紙を保持し、キーが押されるたびに左から右へ移動して打刻位置を進めます。紙を「運ぶ(carry)」ことからそう呼ばれます。キャリッジリターンは、キャリッジを紙のいちばん左端の元の位置に戻す操作です。
ただし、キャリッジを左に戻すだけでは新しい行を始めることはできません。同じ行の先頭に戻るだけだからです。新しい行に移るにはラインフィードが必要でした。これはタイプライター内部の紙を1行分上に送る操作です。
この二つの操作、キャリッジリターン(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キーを使おうとしていましたが、スティーブ・ジョブズは、キー操作の横にメニュー上で「リンゴ」が並ぶのを見て苛立ちました。企業ロゴの使いすぎだと感じたからです。そこで別のキー記号を選ぶことにしました。締切まであと数日というところで、チームのビットマップアーティストだったスーザン・ケアがAppleロゴの後継を探し始めました。彼女が記号辞典をめくっていると、北欧諸国で文化施設や観光名所を示すのによく使われる、クローバーの葉のような記号を見つけました(デンマーク、フィンランド、アイスランド、ノルウェー、スウェーデンで観光名所の公式道路標識として使われており、スウェーデンのMacユーザーにはFornminne=古代記念物、デンマークのユーザーにはSeværdighedstegnと呼ばれることもあります)。彼女がそれをチームの他のメンバーに見せると、皆が気に入り、こうして1984年のMacintoshのコマンドキーの記号になりました。スーザン・ケアによれば、後にこの記号は、上から見下ろしたときに四隅に丸い塔を持つ方形の城の形に似ていることから、とりわけボルホルム城をモデルにスカンジナビアでの用法に基づいて選ばれたのだと聞かされたそうです。

出典: Wikimedia Commons

出典: Wikimedia Commons
参考:
- Wikipedia: Command Key
- Cult of Mac: What Are The Mac’s Command ⌘ And Option ⌥ Symbols Supposed To Represent?
Cookie
現在の意味:ウェブサイトから送信され、ユーザーのウェブブラウザに保存される小さなデータ。
cookieという言葉を作ったのは、当時23歳のウェブブラウザプログラマー、ルー・モントゥリ(Lou Montulli)で、1994年秋のことでした。Unixプログラマが使っていたマジッククッキーという言葉に着想を得たものです。これは、プログラムが受け取ってそのまま送り返すデータの塊を指します。この言葉自体は、メッセージ入りの菓子であるフォーチュンクッキーに由来します。
モントゥリは、ウェブブラウザが受け取ってウェブサーバーにそのまま送り返す小さなデータの塊を表すのにcookieという言葉を使いました。
「そう、クッキーですね」とモントゥリは笑いながら言います。「人生の一週間が、僕がやったことの中で最も重要なことになったんです。」(参考)
Core Dump
現在の意味:クラッシュしたプログラムなどの状態をスナップショットとして取得し、メモリ全体を保存してオフラインで解析すること。
この名前は磁気コアメモリに由来します。トロイダル状の磁石を格子状に並べた初期の記憶装置で、今では廃れましたが、コンピュータのプロセスのスナップショットを取得するという意味で今でも使われています。参考

出典: Wikimedia Commons
Cursor
現在の意味:画面上でデータ入力位置などを示す視覚的な目印(点滅する縦線など)。Merriam-Webster
cursorはラテン語で走者(runner)を意味します。計算尺で、目盛りの位置を示すために使われる、髪の毛ほどの線が刻まれた透明なスライダー部分をカーソルと呼びました。この言葉が、類推によってコンピュータに転用されたのです。参考

Daemon
コンピューティングにおいてdaemonとは、印刷スプールやファイル転送などのサービス要求を処理し、その後終了するバックグラウンドプロセスのことです。この言葉は1963年にMITのProject MAC(Mathematics and Computation)のプログラマたちによって作られました。彼らは、常にバックグラウンドで働き分子を選り分けるという思考実験上の仮説の存在、マクスウェルの悪魔から名前を取りました。
MITのプログラマたちは、システムの雑務を休みなくこなすバックグラウンドプロセスにはdemonという名前がふさわしいと考えました。しかしdemonという語を使う代わりに、より古い形であるdaemonを使ったのです。(参考)
Dashboard
現在の意味:システムの状態を一目で把握できるユーザーインターフェース。
もともとは、馬車の前部に取り付けられた木の板で、馬の蹄が跳ね上げる泥から御者を守るためのものでした。泥が「跳ねる(dashed)」ことからそう呼ばれました。
自動車が製造されるようになると、運転手の前の板も同じ名前で呼ばれました。そこは必要な計器類を運転手が見やすいように置くのにうってつけの場所だったからです。やがてこの言葉は、保護する板そのものよりも、そこに並ぶ計器表示を指すようになりました。参考

出典: Wikimedia Commons
Firewall
現在の意味:信頼された内部ネットワークとインターネットのような信頼できない外部ネットワークとの間に障壁を設けるネットワークセキュリティシステム。
防火壁(fire wall)は主に連棟住宅で使われますが、独立住宅でも使われます。火災の際に火や煙が建物の別の部分へ広がるのを防ぎ、大火災を防ぐ役割を果たします。コンピューティングでは1980年代からこの言葉が使われています。参考

出典: Wikimedia Commons
Firmware
現在の意味:デバイス固有のハードウェアを低水準で制御し、ハードウェアと密接に結びついたコンピュータソフトウェアの一種。
アッシャー・オプラーが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)に帰せられるのが一般的です。複雑な鉄道模型システムには、列車が障害物に全速で突っ込むといった望ましくない事態が起きそうなときに切り替えるスクラムスイッチが、部屋のあちこちに設置されていました。
私の理解では、彼らは文字通り、他に適当な名前がなかったためにfooとラベル付けされた非常ボタンを備えていたということです。おそらく、物事が非常にまずい状況にあることを示すFUBARの本来の軍事的な意味と関係があるのでしょう。

fooとラベル付けされたボタンがあったのかもしれない出典: Wikimedia Commons
参考:
Freelancer
現在の意味:特定の雇用主に長期的に縛られない自営業者。
この言葉が最初に登場するのは、サー・ウォルター・スコットの小説『アイヴァンホー』です(この小説はロビン・フッド伝説にも大きな影響を与えました)。

出典: Wikimedia Commons
作中で、ある領主がリチャード王に自らの有料の「自由な槍(free lances)」の軍隊をこう申し出ます。
私はリチャードに自由槍騎兵(Free Lances)の奉仕を申し出たが、彼は断った。私は彼らをハルへ導き、船を奪ってフランドルへ向かおう。この騒がしい時世では、行動する者に仕事は事欠かないのだ。
したがって「free lancer」とは、最も高く買ってくれる者のために戦う人のことです。freeは「無償」を意味するのではなく、どの雇用主のためにでも働けるという追加の自由を指します。参考
Hash
現在の意味:任意のサイズのデータを固定長の値にマッピングするために使える関数、ハッシュ関数。
Wikipediaによれば、ハッシュ関数における「hash」という言葉の用法は、「切り刻んで混ぜ合わせる」という非専門的な意味からの類推によるものです。実際、mod演算のような典型的なハッシュ関数は、入力領域を多くの部分領域に「切り刻み」、それらを出力範囲に「混ぜ合わせる」ことで、キーの分布の均一性を高めています。
参考:
Log/Logfile
現在の意味:コンピュータのプログラムやシステムの出来事を記録するファイル。
船乗りたちは、航手丸太(log line)と呼ばれる道具で船の速さを測っていました。平らな木片(log)に長いロープを付け、そのロープには等間隔で結び目が付いています。丸太が流されていく間に、一定時間内に何個の結び目が出ていったかを数え、それが船の速さ、すなわちノット(knot)になったのです。
船の速さは航海にとって重要だったため、船乗りたちはそれを本に記録しました。これが航海日誌(log book)と呼ばれるもので、船の位置をより正確に把握するための他の情報、例えば陸標の目視や天候なども一緒に記されました。後には、港湾料金や食料の異常な減少など、船に関するより一般的な情報も追加され、記録(log)されるようになりました。
参考。

出典: The Pilgrims & Plymouth Colony:1620 by Duane A. Cline

出典: The Pilgrims & Plymouth Colony:1620 by Duane A. Cline

出典: Navigation and Logbooks in the Age of Sail by Peter Reaveley
Patch
現在の意味:コンピュータプログラムを修正・改善するために適用されるコード片。
コンピュータ史の初期には、プログラミングでミスをすると、紙テープやパンチカードの穴の上にパッチ(継ぎ当て)を貼って修正しなければなりませんでした。

出典: Smithsonian Archives Center
Ping
現在の意味:ネットワーク越しにコンピュータが応答可能か、また応答時間を調べる方法。
pingは、1983年にマイク・ムース(Mike Muuss)が書いた端末プログラムで、UNIX、Windows、macOSのすべてのバージョンに含まれています。彼は「ソナーが発する音にちなんで」名付けました。反響定位(エコーロケーション)の原理全体に着想を得たものです。「……pingは、時間を計測したIP/ICMP ECHO_REQUESTパケットとECHO_REPLYパケットを使って、対象マシンまでの“距離”を探るのです。」参考は一読の価値があります。
Pixel
現在の意味:画面に表示される画像を構成する制御可能な最小要素。
pixelという言葉は、pix(「pictures」を縮めた「pics」)とel(「element」の略)を組み合わせたものです。同様に、voxelは体積要素、texelはテクスチャ要素です。参考
Shell
現在の意味:コンピュータシステムと対話するための、一般にテキストベースの対話型ランタイム。
この言葉を作ったルイ・プーザン(Louis Pouzin)は、自身のエッセイThe Origins of the Shellで名前の由来を説明していません。しかし、Unixの前身であるMulticsにさかのぼることができます。Multicsの用語集では次のように説明されています。
[シェルは] リスナーによって実行のためにコマンドラインを渡される。
エリック・S・レイモンドによるThe New Hacker's Dictionary(Jargon Fileとしても知られる)には次のようにあります。
歴史的な注記:どうやら、元々のMulticsのシェル(意味1)は、シェル(意味3)であったためにそう呼ばれたらしい。
ここで意味3とは次のことです。
手作業または他のプログラム(例えばパーサジェネレータ)によって作成された、あるタスクを設定するために必要な定型処理とそれを駆動する制御フローを提供するスケルトンプログラム(driverという言葉が同義で使われることもある)。ユーザーは実際に仕事をさせるために必要なコードを埋めることが想定されている。この用法はAIやMicrosoft Windowsの世界では一般的で、Unixハッカーを混乱させる。
残念ながら、この本はこの主張を裏付ける証拠を示していません。
私は、ナッツの殻が外側にあって中身(カーネル)を守っているという、(歴史的には正しくないかもしれない)比喩が気に入っています。
Slab allocator
現在の意味:以前の割り当てを再利用する効率的なメモリ割り当て手法。
Slab allocationは1994年にジョン・ボンウィック(John Bonwick)(注: PDFファイル)によって考案され、以来MemcachedやLinuxカーネルなどで使われています。
slab allocationでは、特定の型やサイズのデータオブジェクト用のキャッシュが、事前に割り当てられた多数の「slab(塊)」を持ち、各slabの中にはオブジェクトに適した固定サイズのメモリチャンクが存在する。(Wikipedia)
slabという名前は、ボンウィックの10代の頃の友人に由来します。彼はOracleのブログでその経緯を語っています。
一緒にテレビを見ていたとき、ケロッグのCMが流れ、「1インチつまめますか?(Can you pinch an inch?)」というキャッチフレーズが流れました。
1インチ以上つまめるなら太りすぎで、コーンフレークを一杯食べれば改善するという意味合いでした。
すかさず、体重が約250ポンド(約113kg)あったトミーは、自分の腹に手を伸ばしてこう返しました。「なんだよ、俺は“塊(slab)”をつかめるぜ!」
10年後、ボンウィックはより大きなメモリの塊の割り当てを表す言葉を探していたときに、この言葉を思い出したのです。
こちらが当時のケロッグのCMです:
Spam
現在の意味:大量のメールを送ったりフォーラムやチャットに投稿したりする、 unsolicited な(受信者の同意を得ない)電子的コミュニケーション。
この言葉は1970年のイギリスのコメディグループ、モンティ・パイソンのスケッチにさかのぼります。スケッチでは、カフェがほとんどの料理にSpam(缶詰の豚肉加工品のブランド)を入れています。Spamはspicedとhamのかばん語です。やたらとSpamが登場するのは、第二次世界大戦後のイギリスで配給が続く中、農業基盤の再建に苦しむ中で輸入缶詰肉製品などが遍在していたことを指しています。参考

出典: ユーザーJamie(jbcurio)on flickr.comより
Monty Pythons Flying Circus (1974) - SPAM from Testing Tester on Vimeo.
Mainframe
現在の意味:大企業などでよく使われる大型のコンピュータシステム。
もともとこの言葉は、コンピュータの主要コンポーネントを保持するフレームを指していました。主要コンポーネントとはCPU、メモリ、入出力装置のことです。この言葉は、コンピュータが大型で広い設置場所を必要とした1960年代から1970年代に使われました。
![回路にアクセスするためにIBM 701メインフレームが開く様子を示す図。『Type 701 EDPM [Electronic Data Processing Machine] Installation Manual』(IBM刊)より。Computer History Museum所蔵](https://endler.dev/2020/folklore/mainframe.jpg)
詳しくはKen Shirriff氏のブログをご覧ください。
Radio Button
現在の意味:あらかじめ定義された排他的な選択肢の中から一つを選べるUI要素。
「ラジオボタン」は、ラジオで使われていた機械式のボタンにちなんで名付けられました。このUIの概念は後にテープレコーダー、カセットレコーダー、ウェアラブルオーディオプレーヤー(有名な「ウォークマン」など)で使われ、さらにVCRやビデオカメラでも使われるようになりました。参考

出典: Matt Coady氏による画像
Uppercaseとlowercase
現在の意味:キーボード上の大文字と小文字の区別。
活版印刷が、鉛でできた一文字一文字を並べて単語や文章を作る手作業だった頃、大文字と小文字はこの面倒な作業を少しでも速くするために別々の容器、すなわちケースに分けて保管されていました。

出典: Daniel Berkeley Updike(1860-1941)著『Printing types, their history, forms, and use; a study in survivals』より。archive.orgで自由に閲覧できます。
Honorable mentions
404
現在の意味:HTTPステータスコード「File not found(ファイルが見つかりません)」。
この番号は、World Wide Webの中央データベースがあったサーバールームに由来するという話があります。そこでは、管理者が要求されたファイルを手作業で探し、ネットワーク経由で要求者に転送していました。ファイルが存在しない場合は、「Room 404: file not found」というエラーメッセージを返したというのです。
しかしこれは作り話のようで、ステータスコードは当時すでに確立していたFTPのステータスコードに基づいて、むしろ恣意的に選ばれたものです。参考
プログラミング言語と略語
プログラミング言語名や一般的な略語の語源は、おそらくそれだけで一つの記事になるでしょうが、ここではお気に入りのものをいくつか書き留めておきます。
C++
C++はビャーネ・ストロヴストルップ(Bjarne Stroustrup)によるCをベースにしたプログラミング言語です。名前はストロヴストルップの同僚リック・マスキッティ(Rick Mascitti)によるプログラマー的ジョークです。++は多くのC系言語で一般的な後置インクリメント演算子を指し、変数の値を1増やします。そういう意味で、C++はCの精神的な「後継者」と見ることができます。参考
C Sharp
C++と同様に、C#もC系のプログラミング言語です。名前は再びC++からの「漸進的な」改良を指しています。名前の#は四つのプラス記号のように見えます。つまりC# == (C++)++というわけです。さらに、この名前は音楽の記号にも着想を得ており、シャープは書かれた音を半音上げることを示します。参考
出典: Wikimedia Commons
PNG
公式にはPNGはPortable Network Graphicsの略です。1994年にCompuServeがGIFをサポートするプログラムは今後ライセンス料を支払わなければならないと発表したことへの不満から生まれました。ハッカーのトーマス・ボーテル(Thomas Boutell)が率いるワーキンググループが、GIFの特許のない代替として.webpファイル形式を作成しました。だからこそ私は、このフォーマットの非公式な名前の方が好きです。PNG's Not GIF。PNGの歴史についてはこちらの素晴らしい記事をどうぞ。参考
クレジット
内容の多くはWikipediaなどの情報源(適切な箇所で出典を明記)に基づいていますが、何を探せばよいか分からないと説明を見つけるのは困難です。
この文書は生きたドキュメントであり、読者の方からの投稿があれば更新していく予定です。
まとめ
過去を知らなければ、現在を理解することはできない。
— カール・セーガン博士(1980年)
記憶をたどる旅を楽しんでいただけたでしょうか。次はあなたの番です!
👉 他にも知っている話はありますか?メッセージを送ってください。こちらに追加します。
記事をランダムに読む