HN 日本語サマリー

← 一覧へ戻る
プログラミング

伝統的だが不可解なエラー

"Traditional, but Puzzling" (unsung.aresluna.org)

39 pointsby colinprince6 コメント

要約

1990年代のUnix系OSで発生した「User unknown: Not a typewriter」という不可解なメール送信エラーについて解説しています。このエラーは、sendmailの小文字強制、エラーハンドリングの仕組み、バックグラウンドプロセスを示す「Not a typewriter」というシステムエラー、そしてタイプライター時代の歴史的背景が複雑に絡み合って発生していました。現在では「Inappropriate ioctl for device」に改称されていますが、その根本的なコードENOTTYは残っています。

全文翻訳

“Traditional, but puzzling”

1990年代、一部のUnixベースのオペレーティングシステムでは、ユーザーが奇妙なエラーを目にすることがありました。これは、以前にメールを送ったことのある相手にメールを送る際に時折発生し、エラー自体が分かりにくいだけでなく、メッセージの内容も特に不可解なものでした。

例えば、「MWichary」という人物にメールを送ろうとしたとします。確認の代わりに、次のようなメッセージが表示されました。

550 mwichary... User unknown: Not a typewriter

多くの奇妙なエラーと同様に、このエラーは4つの異なる事柄の交差点で発生していました。

エラーの原因は、皆さんもよくご存知であろう、大文字と小文字にうるさいコードでした。舞台裏では、sendmailというソフトウェアが常に小文字のユーザー名を想定していました。これは初期の頃は正しいことでした。「MWichary」は静かに「mwichary」に変更されましたが、これは存在しないユーザー名でした。そしてプログラムは、その推論の連鎖ではなく、文字通りの結果を報告しました。

2番目の部分は、エラーハンドリングルーチンにおける一種のメタエラーでした。Sendmailは正しく「User unknown」と報告しましたが、デバッグのための追加情報として、システムエラー値が報告したものを反射的に付け加えていました。これらは通常役立ち、例えば「Host is down」や「No space left of device」などを報告します。ターミナルで何か冒険的なことをしたことがあるなら、非常に特徴的な文字列を見たことがあるはずです。

しかし、この特定の場合、システムエラーはほとんど役に立ちませんでした。「Not a typewriter」は基本的に、「これはバックグラウンドで実行されているプログラムであり、ユーザー入力を受け付けたり、ユーザーが読めるものを書き込んだりするようには設計されていません」という意味でした。これはエラーというよりは状態であり、静かにオペレーティングシステムの指示を実行している多くのプログラムに当てはまります。

しかし…なぜメッセージはこのような言葉遣いだったのでしょうか?

それは単なる歴史です。コンピューターは元々タイプライターと入出力のために接続されていました。これらのタイプライターの一部はローカルで、フロントパネルやコンソールに接続されていました。他のものはリモートタイプライター、つまりテレタイプライターで、しばしばteletype、さらにはttyと短縮されました。これらの用語を認識できるなら、それは今日でもそれらが私たちと共に存在しているからです!

[画像: 1960年代のTeletype Model 33 ASR]

[画像: 1970年代のDEC VT100端末]

[画像: 現代のmacOSのターミナルアプリケーション]

「これでは私が何かできるような入出力がない」というメッセージが、文字がコストがかかるように感じられ、タイプライターが唯一の入出力手段であった時代には、簡潔な「Not a typewriter」になったことがわかります。そして、タイプライターがテレタイプ、画面付き端末、そして最終的にはTerminalやConsoleアプリに置き換えられた後も、その文字列は単に数十年長持ちしたのです。

メッセージは最終的に名前が変更されました。今日これに遭遇した場合、「Inappropriate ioctl for device」と表示されるはずです。これは改善だと思います。しかし、そのコードは ENOTTY のままです。

私たちがタイプライターが何であったかをすべて忘れてしまったとしても、数十年後も名前がそのまま残っている可能性は十分にあります。

この投稿のタイトルは、Solarisオペレーティングシステムの мануал の説明に由来しています。