UTF-8 began on a placemat
Ken Thompson and Rob Pike designed UTF-8 in one evening. Thompson worked out the bit layout on a placemat, then returned to the lab and implemented it before the night was over.
grep was once an editor command
The name grep comes from the ed command g/re/p: globally find lines matching a regular expression and print them. A tiny command line eventually became the name of a program and then a verb.
- DEVICE
- /dev/audio0
- TRACK
- 04 / 04
- ARTIST
- โ
- TITLE
- โ
- TIME
- 00:00 / 00:10
user@vladymir:~$ mpg321 ~/music/track01.mp3 High Performance MPEG 1.0/2.0/2.5 Audio Player Version 0.3.2 Playing MPEG stream from track01.mp3 ... MPEG 1.0 layer III, 192 kbit/s, 44100 Hz stereo File: 01 - test tone โ 220 Hz.mp3 [00:00 / 00:10] >......... volume: [######--] 70% keys: p pause/resume < previous > next - volume down + volume up q stop mpg321> โฎ
beige boxes / green phosphor / good manuals
Old computers reward attention because their constraints are visible. They are useful reminders that interaction styles and system boundaries were choices, not natural laws.
Ken Thompson and Rob Pike designed UTF-8 in one evening. Thompson worked out the bit layout on a placemat, then returned to the lab and implemented it before the night was over.
Plan 9 was named after Ed Wood's film Plan 9 from Outer Space. Its terminals were called Gnot, after another Ed Wood film, and Glenda the bunny echoes the film Glen or Glenda.
The name grep comes from the ed command g/re/p: globally find lines matching a regular expression and print them. A tiny command line eventually became the name of a program and then a verb.
Lua was created at PUC-Rio in Brazil. Its name is the Portuguese word for โmoonโ, so the project explicitly asks people to write Lua, not the all-caps LUA.
Mars Pathfinder suffered repeated resets caused by priority inversion. Engineers reproduced the problem on Earth and enabled priority inheritance remotely because the necessary code was already present in the spacecraft's operating system.
The Unix command yes prints y forever by default, but it can repeat any arguments: yes "still testing". It is useful for feeding predictable input into another programโand surprisingly effective at exposing the cost of terminal output.
Given two sorted files, comm produces three columns: lines unique to the first, lines unique to the second and lines shared by both. Options such as -12 suppress columns, turning it into a compact set-intersection tool.
Traditional Make requires recipe lines to begin with a tab. The syntax survived for decades, becoming both a recognizable convention and a recurring source of invisible formatting errors.
Operators of the Harvard Mark II taped a moth found in a relay into their logbook and described it as the โfirst actual case of bug being found.โ The word bug already meant a technical defect; the moth made the joke literal.
In 1971, Ray Tomlinson sent the first network email between two machines and chose the @ sign to separate the user from the host โ a character that was almost never used in names. The first message was something forgettable, and Tomlinson later said he sent it to himself.
In 1971, Bob Thomas wrote Creeper, generally considered the first self-replicating computer program. It did no harm: it displayed a message and moved itself to another PDP-10 on the ARPANET. A follow-up called Reaper was written to clean it up โ arguably the first antivirus.
foo, bar and baz โ the placeholder names used in code examples โ descend from FUBAR, wartime slang for "Fouled Up Beyond All Recognition". foo appeared early in hacker culture and settled in as the canonical example name, followed by bar and a trail of variations.
ping, the network reachability tool, was written by Mike Muuss in 1983 and named after the pulse of active sonar โ a short sound sent out and reflected back. The name fits the behavior so well that people later invented a backronym, "Packet InterNet Groper".
The term spam for unwanted messages comes from a 1970 Monty Python sketch in which a cafe menu repeats the word "spam" until it drowns out everything else. When early Usenet users flooded newsgroups, the sketch's endless spam became the obvious comparison.
When Linus Torvalds started the kernel in 1991, he named it Freax โ a blend of "free", "freak" and the Unix "x". The administrator of the FTP server thought the name was ugly and, without asking, published the files under a directory called "linux". The name stuck.
The command tac is cat spelled backwards, and it behaves accordingly: it prints a file's lines in reverse order, last line first. Useful for turning a chronological log on its head so the newest entries appear at the top.
The command rev reverses the characters of each line of its input. It is a one-trick tool, but it pairs well with other utilities when text needs to be processed from the end โ say, right-aligned fields or reversed lookups.
The command nl numbers the lines of a file โ a job it does with surprising options: numbering only non-empty lines, controlling the format, or numbering logical pages. A plain cat -n does a rough version, but nl is the tool that takes numbering seriously.
The command factor prints the prime factors of each number it is given. It is mostly a curiosity now, but it comes from a long tradition of Unix arithmetic utilities, and it remains a quick way to decompose an integer without reaching for a calculator.
The command seq prints a sequence of numbers โ one per line by default, with control over start, end and step. It is the loop body's quiet helper: instead of writing a counter by hand, shell scripts call seq to generate the range.
The command look prints lines that begin with a given prefix, using a binary search that assumed a sorted word list like /usr/share/dict/words. It is the spellchecker's quiet ancestor โ a fast way to check whether a word exists or to list completions.
The command paste merges corresponding lines of files, placing them side by side separated by a tab. It turns several single-column files into a table in one step โ the textual cousin of the spreadsheet paste, done entirely in the shell.
The command join combines two sorted files on a common field, the way a database joins tables. It is picky โ the files must be sorted on the join field โ but for flat text data it brings a small slice of relational power to the command line.

