Dit artikel legt de oorsprong uit van de verwarrende foutmelding "User unknown: Not a typewriter" in oude Unix-gebaseerde systemen. De fout ontstond door een samenloop van vier factoren:
- Technische oorzaak: Het programma sendmail zette gebruikersnamen strikt om naar kleine letters, waardoor er gezocht werd naar gebruikers die niet bestonden.
- Foutafhandeling: Het systeem voegde reflexmatig een systeemfoutwaarde toe voor debugging-doeleinden.
- Historische context: De tekst "Not a typewriter" stamt uit de tijd van teletypewriters (tty). Het gaf aan dat het programma geen geschikte invoer/uitvoer-interface had.
- Grammatica: Door het gebruik van een dubbele punt leek het alsof de gebruiker zelf een typmachine had moeten zijn.
Huidig worden deze fouten aangeduid als "Inappropriate ioctl for device", maar de onderliggende foutcode ENOTTY is nog steeds in gebruik.
“Traditioneel, maar raadselachtig”
Stel dat je een e-mail wilde sturen naar “MWichary”. In plaats van een bevestiging zag je dit:
550 mwichary... User unknown: Not a typewriter
Zoals veel vreemde foutmeldingen was ook deze het resultaat van een samenloop van vier verschillende factoren.
De technische oorzaak
De oorzaak van de fout is iets wat velen van jullie zullen herkennen: code die extreem strikt is wat betreft hoofdletters en kleine letters. Achter de schermen ging een programma genaamd sendmail er altijd van uit dat gebruikersnamen in kleine letters waren geschreven, wat in de beginperiode ook klopte. “MWichary” werd stilletjes veranderd in “mwichary” — een gebruiker die niet bestond — en het programma rapporteerde het letterlijke resultaat in plaats van de redenering die daaraan voorafging.
De foutafhandeling
Het tweede deel was een soort meta-fout in de routine voor foutafhandeling. Sendmail rapporteerde correct “User unknown”, maar voegde daar reflexmatig aan toe wat de systeemfoutwaarde rapporteerde, voor extra debugging-informatie. Deze zijn meestal nuttig en rapporteren zaken als “Host is down” of “No space left on device” — waarschijnlijk heb je enkele van deze zeer kenmerkende teksten gezien als je ooit iets avontuurlijks in de terminal hebt gedaan.
In deze specifieke context was de systeemfout echter vrij nutteloos. “Not a typewriter” betekende in feite: “dit is een programma dat op de achtergrond wordt uitgevoerd; het is niet bedoeld om gebruikersinvoer te accepteren of iets te schrijven dat de gebruiker kan lezen.” Het is minder een fout dan een conditie, en dit is waar voor veel programma's die stilletjes de opdrachten van het besturingssysteem uitvoeren.
De historische context
Maar... waarom was het bericht op deze manier geformuleerd?
Dat is simpelweg historie. Computers waren oorspronkelijk verbonden met typemachines voor invoer en uitvoer (I/O). Sommige van deze typemachines waren lokaal, verbonden met het voorpaneel of de console. Andere waren externe typemachines, of teletypewriters, vaak afgekort tot teletype of zelfs tty. Als je deze termen herkent, is dat omdat ze vandaag de dag nog steeds bestaan!
Je kunt je voorstellen hoe “Dit heeft geen invoer/uitvoer waar ik iets mee kan doen” kon veranderen in een bondig “Not a typewriter” in een tijd waarin elk teken kostbaar was en een typmachine je enige optie was voor invoer en uitvoer. De tekst is vervolgens simpelweg een paar decennia te lang bewaard gebleven, zelfs nadat typemachines waren vervangen door teletypes, terminals met schermen en uiteindelijk Terminal- en Console-apps.
De grammatica
Het vierde element was een kwestie van grammatica: de eenvoudige keuze om de twee berichten te scheiden met een dubbele punt zorgde ervoor dat het leek alsof de gebruiker zelf een typmachine had moeten zijn.
Huidige status
Het bericht is uiteindelijk hernoemd. Als je het vandaag de dag tegenkomt, zal er staan: “Inappropriate ioctl for device”, wat naar mijn idee een verbetering is. Maar de bijbehorende code blijft ENOTTY.
Het is heel goed mogelijk dat het over decennia nog steeds zo heet, zelfs nadat we allemaal vergeten zijn wat typemachines waren.
***
De titel van dit artikel is afgeleid van de uitleg in de handleiding voor het Solaris-besturingssysteem.
“Traditioneel, maar raadselachtig”
Stel dat je een e-mail wilde sturen naar “MWichary”. In plaats van een bevestiging zag je dit:
550 mwichary... User unknown: Not a typewriter
Zoals veel vreemde foutmeldingen was ook deze het resultaat van een samenloop van vier verschillende factoren.
De technische oorzaak
De oorzaak van de fout is iets wat velen van jullie zullen herkennen: code die extreem strikt is wat betreft hoofdletters en kleine letters. Achter de schermen ging een programma genaamd sendmail er altijd van uit dat gebruikersnamen in kleine letters waren geschreven, wat in de beginperiode ook klopte. “MWichary” werd stilletjes veranderd in “mwichary” — een gebruiker die niet bestond — en het programma rapporteerde het letterlijke resultaat in plaats van de redenering die daaraan voorafging.
De foutafhandeling
Het tweede deel was een soort meta-fout in de routine voor foutafhandeling. Sendmail rapporteerde correct “User unknown”, maar voegde daar reflexmatig aan toe wat de systeemfoutwaarde rapporteerde, voor extra debugging-informatie. Deze zijn meestal nuttig en rapporteren zaken als “Host is down” of “No space left on device” — waarschijnlijk heb je enkele van deze zeer kenmerkende teksten gezien als je ooit iets avontuurlijks in de terminal hebt gedaan.
In deze specifieke context was de systeemfout echter vrij nutteloos. “Not a typewriter” betekende in feite: “dit is een programma dat op de achtergrond wordt uitgevoerd; het is niet bedoeld om gebruikersinvoer te accepteren of iets te schrijven dat de gebruiker kan lezen.” Het is minder een fout dan een conditie, en dit is waar voor veel programma's die stilletjes de opdrachten van het besturingssysteem uitvoeren.
De historische context
Maar... waarom was het bericht op deze manier geformuleerd?
Dat is simpelweg historie. Computers waren oorspronkelijk verbonden met typemachines voor invoer en uitvoer (I/O). Sommige van deze typemachines waren lokaal, verbonden met het voorpaneel of de console. Andere waren externe typemachines, of teletypewriters, vaak afgekort tot teletype of zelfs tty. Als je deze termen herkent, is dat omdat ze vandaag de dag nog steeds bestaan!
Je kunt je voorstellen hoe “Dit heeft geen invoer/uitvoer waar ik iets mee kan doen” kon veranderen in een bondig “Not a typewriter” in een tijd waarin elk teken kostbaar was en een typmachine je enige optie was voor invoer en uitvoer. De tekst is vervolgens simpelweg een paar decennia te lang bewaard gebleven, zelfs nadat typemachines waren vervangen door teletypes, terminals met schermen en uiteindelijk Terminal- en Console-apps.
De grammatica
Het vierde element was een kwestie van grammatica: de eenvoudige keuze om de twee berichten te scheiden met een dubbele punt zorgde ervoor dat het leek alsof de gebruiker zelf een typmachine had moeten zijn.
Huidige status
Het bericht is uiteindelijk hernoemd. Als je het vandaag de dag tegenkomt, zal er staan: “Inappropriate ioctl for device”, wat naar mijn idee een verbetering is. Maar de bijbehorende code blijft ENOTTY.
Het is heel goed mogelijk dat het over decennia nog steeds zo heet, zelfs nadat we allemaal vergeten zijn wat typemachines waren.
***
De titel van dit artikel is afgeleid van de uitleg in de handleiding voor het Solaris-besturingssysteem.