俺的温故知新「なぜ DOS (Windows, OS/2) のディレクトリセパレータは \ なのか?」

まあなんと申しますか、0x5c な文字が Unicode 変換時に(日本と韓国の)通貨記号とみなされてしまう件については「たしかに現状に対する配慮の足りない不便極まるマッピングだ……だが筋は通っている」などという金剛番長的な思いが個人的にはなくもないのです。

と申しますか、0x5c に Yen を割り振ったことよりもむしろ、なんでバックスラッシュが DOSディレクトリセパレータやねんという疑義のほうが個人的に強まっているのであります。
ふつうにスラッシュでええやん、なにバックれとんねん。だいたい DOS 2.0 出す前に名族たる袁家(と書いて AT&T とでもお読み頂ければ)の血を引く XENIX とか売ってたやん、Microsoft 自分で。わざわざ UNIX と変える意味わからんわ。

…などと思わずエセ関西弁で愚痴ってしまいましたが、この件については『MS-DOSエンサイクロペディア』に事情がすこし載っているのでした。この本の性格(ビルゲイツが巻頭言を書いている)からして、ここに書いてあることが「マイクロソフト社の公式見解」にいちばん近いものではなかろうかと思うのです。

MS-DOS 2.0 で階層ディレクトリをサポートするにあたり――

 このファイル構造では,パス中のすべてのサブディレクトリおよびファイル名はバックスラッシュで区切られていた.そして,この点だけが XENIXMS-DOS の階層的ファイルシステムの間の相違である.XENIX ではセパレータとしてフォワードスラッシュを使っていた.しかし,MS-DOS の ver.1.x では DEC のオペレーティングシステムの伝統に従って,フォワードスラッシュはコマンド行のスイッチとしてすでに使っていた.そこで,MicrosoftIBM の要求により,セパレータとして代わりにバックスラッシュを使うことに決めたのである.バックスラッシュは,そのキーのないキーボードで生じる問題以外には実質的な問題はなかったが,この決定により MS-DOS と既存の UNIX ライクなオペレーティングシステムとの間に不一致が持ち込まれることになった.キーボードの問題は,ユーザーがスイッチキャラクタをスラッシュからハイフンに変更することができるようにして解決したが,この解決方法自体が,バッチファイルの交換に際し,互換性の問題を新たに作ってしまった.
マイクロソフトプレス(編)『MS-DOSエンサイクロペディア Volume 1 システム解説編』アスキー、1989、p.37

つまり、

  • 「スラッシュもう使っちゃったよテヘ」→ MS
  • 「んじゃバックスラッシュで」→ IBM

読む限りそのような印象。なんという阿吽の共犯ぶり。

IBM は当初、DOS の国際化市場というものをあまり考慮していなかったらしい(『MS-DOSエンサイクロペディア』には IBM 側の事情に関する記述がほとんどないので、このへん多少の留保が必要かもしれません)。ただ DOS 2.0 開発時は三菱の MULTI-16 とか NEC の初代 PC-9801 あたりの時期なわけで――

同じころ,国際化のための別の要求があった.日本でも,MS-DOS の市場は成長しつつあったが,7,000 にも及ぶ漢字のサポートに問題があった.英語およびほとんどのヨーロッパの文字セットは,1 文字に対して 1 バイトが対応している.ところが,日本語の文字は漢字を扱うため 2 バイト文字が必要とされ,あるときには 1 バイト,またあるときには 2 バイトが対応している.バイト数が一定しないことにより,解析する際に問題が起こった.結果としては,MS-DOS は一度に 1 文字だけをとっておくのではなく,文字列を最初から解析するように変更しなければならなかった.
 国ごとのフォーマットと漢字のサポートは,MS-DOS 2.01 で行われた.IBM はこのパージョンを必要としなかったため,Zbikowski,Reynolds,Ulloa,Eric Evans の開発による PCjr サポートは,ver.2.1 として別個に行われた.この ver.2.1 は IBM だけに渡り,国際版 MS-DOS のための変更は含まれていなかった.

同書、pp.42-43

技術的なことが詳しく書いてないけど、たとえばディレクトリとファイル名の分割に(C で言うところの)strrchr(hoge, '\\') とか hoge[-1] != '\\' とかの安直なコードが使えなくなったであろうことがほぼ明らか。シフトJIS の呪いが DOS 2.01 の時点ですでに発生しているのでありました。

(そういやオプションセパレータにスラッシュを使っちゃってた正確な理由が書いてなかった。まあ最初の PC の BIOS とか DOS 1.0 とかは DEC-2020 上でクロス開発していたという記述があったので、後先あまり考えずにマネしちゃったのかもしれない)