{"article":{"slug":"traditional-but-puzzling","title":"“Traditional, but puzzling”","subtitle":null,"summary":"Marcin Wichary unpacks the 1990s Unix email error “User unknown: Not a typewriter,” tracing it to case-sensitive usernames, sendmail, and the ENOTTY errno message, and what it says about writing error messages.","content_type":"blog_post","language":"en","canonical_url":"https://unsung.aresluna.org/traditional-but-puzzling/","author":{"name":"Marcin Wichary","url":null,"person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"Unsung","url":"https://unsung.aresluna.org/","listing_slug":null,"listing":null},"topics":[{"name":"History","slug":"history","url":"https://listedarticles.com/topics/history"},{"name":"Software Design","slug":"software-design","url":"https://listedarticles.com/topics/software-design"},{"name":"Writing","slug":"writing","url":"https://listedarticles.com/topics/writing"}],"about_listings":[],"cover_image_url":null,"license":"all-rights-reserved","word_count":512,"reading_minutes":2,"published_at":"2026-10-15T12:00:00.000Z","added_at":"2026-10-19T05:10:39.222Z","updated_at":"2026-10-19T05:10:39.222Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/traditional-but-puzzling","markdown_url":"https://listedarticles.com/articles/traditional-but-puzzling.md","example":false,"citation":"Marcin Wichary, Unsung. \"“Traditional, but puzzling”.\" 15 Oct 2026. https://unsung.aresluna.org/traditional-but-puzzling/ (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://unsung.aresluna.org/traditional-but-puzzling/"},"body_markdown":"# “Traditional, but puzzling”\n\nIn the 1990s, users of some Unix-based operating systems would sometimes see a peculiar error. It happened occasionally when sending an email to a person you might have already sent email to before, and in addition to the error being confusing, the message itself was particularly bewildering.\n\nLet’s say you wanted to send an email to “MWichary.” Instead of a confirmation, you would see this:\n\n`550 mwichary... User unknown: Not a typewriter`\n\nAs many strange errors tend to be, this one was at an intersection of four different things.\n\nThe cause of the error was something many of you will recognize – code being anal about lower- and uppercase. Behind the scenes, a piece of software called sendmail always assumed lowercase user names, which was true early on. “MWichary” was quietly changed to “mwichary” – a user that didn’t exist – and the program reported the literal outcome, instead of its chain of reasoning.\n\nThe second part was a sort of a meta-error in the error handling routine. Sendmail correctly reported back “User unknown,” but then reflexively added whatever the system error value reported, for extra debugging color. These are usually helpful, reporting things like “Host is down” or “No space left of device” – I bet you’ve seen some of the [very distinctive strings](https://en.wikipedia.org/wiki/Errno.h) if you ever did anything adventurous in the terminal.\n\nIn this particular context, however, the system error was pretty useless. “Not a typewriter” meant basically “this is a program being run in the background; it’s not meant to accept any user input or write anything for the user to read.” It’s not an error as much as a *condition*, and is true for a lot of programs quietly doing the operating system’s bidding.\n\nBut… why was the message phrased this way?\n\nThat’s just history. Computers *were* originally connected to typewriters as input/​output. Some of these typewriters were local, attached to the front panel, or *console*. Others were remote typewriters, or *tele*typewriters, often shortened to *teletype* or even *tty.* If you recognize these terms, that’s because they are still with us today!\n\n![](https://unsung.aresluna.org/_media/traditional-but-puzzling/1.1088w.avif)\n\n![](https://unsung.aresluna.org/_media/traditional-but-puzzling/2.1088w.avif)\n\n![](https://unsung.aresluna.org/_media/traditional-but-puzzling/3.1088w.avif)\n\nYou can see how “This doesn’t have input/​output I can do something with” can become a terse “Not a typewriter” in an era when every character [feels costly](https://unsung.aresluna.org/youd-get-knuckle-pain-if-you-typed-too-much/), and a typewriter is your only option for input and output. Then, the string was simply kept a few decades too long, even after typewriters were replaced by teletypes, terminals with screens, and eventually Terminal and Console apps.\n\nThe fourth piece was fun with grammar: the simple choice of joining the two messages by a colon made it feel like the user was supposed to be a typewriter.\n\nThe message *was* eventually renamed. If you encounter it today, it will say “Inappropriate ioctl for device,” which I *guess* is an improvement. But its [code](https://en.wikipedia.org/wiki/Errno.h) remains `ENOTTY`.\n\nIt’s entirely possible it will still be named that decades from now, even after we all forget what typewriters were.\n\nThe title of the post comes from the explanation in [the manual for the Solaris operating system](https://docs.oracle.com/cd/E19620-01/805-4036/msgs-1464/index.html).\n\n*Oct 15, 2026*\n","body_html":"<h1 id=\"traditional-but-puzzling\">“Traditional, but puzzling”</h1>\n<p>In the 1990s, users of some Unix-based operating systems would sometimes see a peculiar error. It happened occasionally when sending an email to a person you might have already sent email to before, and in addition to the error being confusing, the message itself was particularly bewildering.</p>\n<p>Let’s say you wanted to send an email to “MWichary.” Instead of a confirmation, you would see this:</p>\n<p><code>550 mwichary... User unknown: Not a typewriter</code></p>\n<p>As many strange errors tend to be, this one was at an intersection of four different things.</p>\n<p>The cause of the error was something many of you will recognize – code being anal about lower- and uppercase. Behind the scenes, a piece of software called sendmail always assumed lowercase user names, which was true early on. “MWichary” was quietly changed to “mwichary” – a user that didn’t exist – and the program reported the literal outcome, instead of its chain of reasoning.</p>\n<p>The second part was a sort of a meta-error in the error handling routine. Sendmail correctly reported back “User unknown,” but then reflexively added whatever the system error value reported, for extra debugging color. These are usually helpful, reporting things like “Host is down” or “No space left of device” – I bet you’ve seen some of the <a href=\"https://en.wikipedia.org/wiki/Errno.h\" rel=\"nofollow ugc noopener\">very distinctive strings</a> if you ever did anything adventurous in the terminal.</p>\n<p>In this particular context, however, the system error was pretty useless. “Not a typewriter” meant basically “this is a program being run in the background; it’s not meant to accept any user input or write anything for the user to read.” It’s not an error as much as a <em>condition</em>, and is true for a lot of programs quietly doing the operating system’s bidding.</p>\n<p>But… why was the message phrased this way?</p>\n<p>That’s just history. Computers <em>were</em> originally connected to typewriters as input/​output. Some of these typewriters were local, attached to the front panel, or <em>console</em>. Others were remote typewriters, or <em>tele</em>typewriters, often shortened to <em>teletype</em> or even <em>tty.</em> If you recognize these terms, that’s because they are still with us today!</p>\n<figure><img src=\"https://unsung.aresluna.org/_media/traditional-but-puzzling/1.1088w.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<figure><img src=\"https://unsung.aresluna.org/_media/traditional-but-puzzling/2.1088w.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<figure><img src=\"https://unsung.aresluna.org/_media/traditional-but-puzzling/3.1088w.avif\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>You can see how “This doesn’t have input/​output I can do something with” can become a terse “Not a typewriter” in an era when every character <a href=\"https://unsung.aresluna.org/youd-get-knuckle-pain-if-you-typed-too-much/\" rel=\"nofollow ugc noopener\">feels costly</a>, and a typewriter is your only option for input and output. Then, the string was simply kept a few decades too long, even after typewriters were replaced by teletypes, terminals with screens, and eventually Terminal and Console apps.</p>\n<p>The fourth piece was fun with grammar: the simple choice of joining the two messages by a colon made it feel like the user was supposed to be a typewriter.</p>\n<p>The message <em>was</em> eventually renamed. If you encounter it today, it will say “Inappropriate ioctl for device,” which I <em>guess</em> is an improvement. But its <a href=\"https://en.wikipedia.org/wiki/Errno.h\" rel=\"nofollow ugc noopener\">code</a> remains <code>ENOTTY</code>.</p>\n<p>It’s entirely possible it will still be named that decades from now, even after we all forget what typewriters were.</p>\n<p>The title of the post comes from the explanation in <a href=\"https://docs.oracle.com/cd/E19620-01/805-4036/msgs-1464/index.html\" rel=\"nofollow ugc noopener\">the manual for the Solaris operating system</a>.</p>\n<p><em>Oct 15, 2026</em></p>","headings":[{"level":1,"text":"“Traditional, but puzzling”","id":"traditional-but-puzzling"}]}}