Windows 10で表示されるエラーの原因は1974年のOSにあった (original) (raw)

2018年11月05日 16時00分 ソフトウェア

Windows 10やWindows 8など、2018年時点で使われているWindows端末では、「AUX」や「CON」というファイル名をつけようとすると、「指定されたデバイス名は無効です」というエラーが表示されます。このエラーの原因は、1974年に開発されたOSにあるとして、ハードウェア関係の情報を配信する**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 BEFORE STAR WARS. This bug is as old as Watergate. pic.twitter.com/pPbkZiE57t

— foone (@Foone) 2018年11月3日

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.

2018年11月05日 16時00分00秒 in ソフトウェア, Posted by darkhorse_log

You can read the machine translated English article here.