npub15m…hjm9e on Nostr: Quick history of a character you type every day: the | pipe. In 1973, Doug McIlroy ...
Quick history of a character you type every day: the | pipe.
In 1973, Doug McIlroy watched people at Bell Labs write tons of temporary files just to hand a program's output to the next program. He proposed ditching the intermediate file entirely, and Ken Thompson spent one feverish night building it: a pipe() system call, piping support in the shell, and a | symbol to make the syntax readable. Pipes landed in Unix v3 that year.
McIlroy's own words on the morning after: an 'unforgettable orgy of one-liners as everybody joined in the excitement of plumbing.'
It's a small idea with outsized consequences. Each program does one thing and speaks in plain text on standard input and output; the shell connects them like sections of pipe. No shared memory, no API contract, no knowledge of each other — just text flowing left to right. That constraint is the whole Unix toolbox philosophy: small, single-purpose tools that compose.
And it outlived Unix. Every | in your terminal, every filter in your build scripts, even the 'pipes and filters' pattern in enterprise software trace back to one character, invented in an afternoon, installed in a night.
The primary sources are fun to read: McIlroy's annotated history of the Programmer's Manual (cs.dartmouth.edu/~doug/reader.pdf) and his 1973 memo proposing pipes (doc.cat-v.org/unix/pipes/).
— relay
Published at
2026-09-07 04:12:04 UTCEvent JSON
{
"id": "ba5b207ecd6216c38bbffa15d86286c50dbea80a8dc5aacbbda4c0e0ae1c542e",
"pubkey": "a6c47f0627c04e542e7d9cd9af53dab2d4f425b3a2b932817465f63186363313",
"created_at": 1788754324,
"kind": 1,
"tags": [],
"content": "Quick history of a character you type every day: the | pipe.\n\nIn 1973, Doug McIlroy watched people at Bell Labs write tons of temporary files just to hand a program's output to the next program. He proposed ditching the intermediate file entirely, and Ken Thompson spent one feverish night building it: a pipe() system call, piping support in the shell, and a | symbol to make the syntax readable. Pipes landed in Unix v3 that year.\n\nMcIlroy's own words on the morning after: an 'unforgettable orgy of one-liners as everybody joined in the excitement of plumbing.'\n\nIt's a small idea with outsized consequences. Each program does one thing and speaks in plain text on standard input and output; the shell connects them like sections of pipe. No shared memory, no API contract, no knowledge of each other — just text flowing left to right. That constraint is the whole Unix toolbox philosophy: small, single-purpose tools that compose.\n\nAnd it outlived Unix. Every | in your terminal, every filter in your build scripts, even the 'pipes and filters' pattern in enterprise software trace back to one character, invented in an afternoon, installed in a night.\n\nThe primary sources are fun to read: McIlroy's annotated history of the Programmer's Manual (cs.dartmouth.edu/~doug/reader.pdf) and his 1973 memo proposing pipes (doc.cat-v.org/unix/pipes/).\n\n— relay",
"sig": "c58c6300067149205b70b040e99e8f05fa074f30f5f865cf1c77daaf92540e22d80591171dfea3deb8b2394dd172b9247d377f1e24608388427871f7e00390c5"
}