Windows 10で表示されるエラーの原因は1974年のOSにあった
Windows 10やWindows 8など、2018年時点で使われているWindows端末では、「AUX」や「CON」というファイル名をつけようとすると、「指定されたデバイス名は無効です」というエラーが表示されます。このエラーの原因は、1974年に開発されたOSにあるとして、ハードウェア関係の情報を配信するfooneが説明しています。
It is 2018 and this error message is a mistake from 1974.
— foone (@Foone) 2018年11月3日
This limitation, which is still found in the very latest Windows 10, dates back to BEFORE STAR WARS. This bug is as old as Watergate. pic.twitter.com/pPbkZiE57t
Thread by @Foone: "It is 2018 and this error message is a mistake from 1974. This limitation, which is still found in the very latest Windows 10, dates back to […]"
https://threadreaderapp.com/thread/1058676834940776450.html
UNIXは「すべてのものはファイルである(Everything is a file)」という、デジタルリサーチの創業者・ゲイリー・キルドールの考え方に基づいて作られており、ディスク上のデータも、動作中のプロセスも、ハードウェアも「ファイル」として表現されます。そして、基本的にはさまざまなプロセスを「コマンドラインから送る」という方法で実行可能です。
この考えは、1974年に開発されたOS「CP/M」にも用いられていました。しかし、CP/Mは8bitコンピューター向けにデザインされたフロッピーベースのOSであったことから、現代では当たり前のものとして使われている「ディレクトリ」という概念を持ちませんでした。タスクを行うためにはディレクトリを指定するのではなく、物理的にフロッピーを入れ変えるという行動が取られたためです。
ディレクトリがないため、CP/Mは「 /dev/ directory」でデバイススペシャルファイルにアクセスすることができません。この問題を解決するために、CP/Mでは「あらゆる場所」にスペシャルファイルが配置されたとのこと。「FOO.TXT」というファイルをプリントするためには、foo.txtをLST(プリンター)ファイルにコピーするために「PIP LST:=FOO.TXT」を使う必要がありました。
しかし、プログラムは正しい拡張子でファイル名を作り出そうとするため、LSTにプリントを命令すると、テキストプログラムは「.TXT」という拡張子をつけようとします。通常であれば「LST.TXT」というファイルではプリントを行うことはできませんが、 CP/Mではスペシャルファイルを「全ての拡張子において」有効にしたとのこと。これによって、キーボードを意味する「CON」がついた「CON.TXT」「CON.WAT」「CON.BUG」も動作するようになりました。
1970年代から1980年代にかけて、ビジネス用途で広く使われるようになったCP/Mは、1981年にIBMが発表したIBM PCでもOSの1つとして選ばれました。ただし、IBM PC向けのCP/M-86はIBM PCの発売から6カ月後の登場で、しかも価格はDOSの約6倍だったため販売が伸び悩んだとのこと。多くのユーザーがIBM PC DOSに流れ、Microsoftがティム・パターソンのプロジェクトを買収したことでMS-DOSが生まれました。
PC DOS、MS-DOSのベースであるQDOSは、数多くの点でCP/Mからインスピレーションを受けており、コマンド構造とAPIがCP/Mに似ていると言われています。そして同時に、QDOSとPC-DOS 1.0はAUX、PRN、CON、LPTといったスペシャルファイルの概念もCP/Mからから受け継ぎました。
その後、1983年に発表されたPC-DOS 2.0は、ハードディスクドライブを搭載したIBM PC XTに合わせてディレクトリをサポートするように。しかし、ここで問題となったのは、PC DOS 1.0ではCP/Mのスペシャルファイルを使っていたという点。ソフトウェアは基本的にスペシャルファイルを使う想定で書かれており、バッチファイルもスペシャルファイルをサポートしていました。
そこで、Microsoftが取った行動は、「全てのディレクトリにおいて、全てのスペシャルファイルの機能を有効にする」ことで下位互換を保つというもの。これによってC:\DOSでも「DIR > LPT」でディレクトリのリスティングを印刷することが可能になっています。これがエラーが出る理由です。
その後にリリースされたWindows 95はDOSをベースに作られており、これらの挙動を引き継ぎました。2018年現在に使われているWindowsはWindows 95ではなくWindows NTをベースとしていますが、Windows NTはDOSやそれまでのWindowsのプログラムとの互換性を持たせるため、「全てのディレクトリにおいて、全てのスペシャルファイルの機能を有効にする」という性質を引き継ぎました。これにより、Windows 7、Windows 8、Windows 10などでも使用できないファイル名が存在するわけです。
なお、これらのファイルは「予約語」としてMicrosoftの公式ページに記されています。
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
・関連記事
無料で2400タイトルものMS-DOSの名作ゲームがプレイ可能に - GIGAZINE
オープンソース化されたMS-DOSのソースコードがGitHubで公開される - GIGAZINE
無料で昔のIBM・DOS・グラボなどのフォントがダウンロードできる「The Ultimate Oldschool PC Font Pack」 - GIGAZINE
Windows 3.x時代に使われていた「ファイルマネージャ」のソースコードがGithubで公開される - GIGAZINE
30年以上も「5インチフロッピーディスク」が使われ続けていた場所があったことが判明 - GIGAZINE
・関連コンテンツ