多くの出来事というのは、当時の時代背景を考えなければ成立しないものだ。
ゆとりの映画バカが、なんでNASAはスペースシャトル使ってアポロ13号の乗組員を助けなかったんだ、と疑問に思うごとく、今日のコンピューターユーザーは、昔の事情に対して、そもそも存在していなかった技術の存在を前提に考えようとする。
例えば、Windows 3.1にコンソールサブシステムがなかったということは、ipconfigをキャラクターモードのアプリケーションとして提供しない言い訳にはならないという意見だ。「ま、コンソールサブシステムがなかったとしてもだ、なんでDOSを使わないんだ」
MS-DOSプロンプトというのは、MS-DOSを走らせる仮想マシンである。仮想マシンであるがゆえに、MS-DOSプロンプトは、あたかもMS-DOSそのものであるかのようにふるまう。現実には、もちろん、Windowsによってコントロールされているシミュレーターの中で走っているに過ぎない。しかし、シミュレーションの目的は、古いアプリケーションを、あたかもMS-DOS上で走っているものと信じさせて実行させることにあるのだ。
「Win 3.1にセキュリティなんて概念はなかったじゃないか。だったら、DOS上で動くプログラムがシステムにどんな影響を及ぼしたところで、別に構わないじゃないか」
MS-DOSプロンプトは、仮想マシン上で走っていたため、あらゆる挙動は、仮想マシンマネージャーの監視下にあった。もし、アクセス権限のないメモリーにアクセスしようとしたならば、例外が発生し、仮想マシンマネージャーによってハンドルされる。もし、特権命令を実行しようとしたならば、例外が発生し、仮想マシンマネージャーが、「いいや、限界だ。押すね」とばかりに、仮想マシンを停止させる。そういう意味では、MS-DOSプロンプト上で走るプログラムは、デスクトップ上で走るWindowsアプリケーションより、保護、隔離されていたということになる。何故ならば、Windowsは、各MS-DOSプロンプトごとに、別々の天地を作り出していたからだ。
仮想化における前提条件としては、MS-DOSプロンプト上で走るプログラムは、昔の普通のMS-DOSアプリケーションである。Windowsアプリケーションではない。MS-DOSには、Windows APIは存在しない。したがって、MS-DOSプロンプトにも、Windows APIは存在しない。WindowsをLinux上の仮想マシンで走らせておきながら、なんでWindowsプログラムがXCreateWindowを呼び出せないのかと疑問に思うようなものだ。XCreateWindowは、ホストシステムの関数だから呼び出せないのだ。仮想マシンには存在しない。
確かに、仮想マシンに穴をあけて、MS-DOSプログラムからWinSock APIを呼び出せるようにすることは可能である。
しかし、仮にそのようなはからいがあったとしても、やはり、MS-DOSプログラムのipconfigは欲しくないだろう。
思い出して欲しい。Windows 3.1には、二種類のモードがあったことを。スタンダードモードと、エンハンスドモードである。スタンダードモードは、80286プロセッサー向けの設計である。80286には、仮想メモリーや、仮想マシンのサポートなどといった機能はなかったのだ。MS-DOSプロンプトを実行したら、スタンダードモードのWindowsは、すべてのWindowsプログラムを休眠し、自分自身も休眠する。その後、MS-DOSプログラムを実行するのである。(もちろん、フルスクリーンである。なぜならば、ウインドウを表示させるべきWindowsは存在しないのだから)。しかる後に、MS-DOSプログラムが終了したら、Windowsは自分自身を復帰させ、MS-DOSプロンプトを開く前の状態に戻すのである。
単にコンピューターのIPアドレスを得るためだけに、一切の作業をやめ、Windowsを事実上シャットダウンし、ディスプレイをキャラクターモードに切り替える。その結果、たかだか16文字を画面に表示できるようになるというのは、実に馬鹿馬鹿しい次第である。
「んでも、スタンダードモードのWindowsなんてどうでもいーじゃん。エンハンスドモードだけで動くってことにしたらどうよ。エンハンスドモードなら、MS-DOSプロンプトをマルチタスクできて、Windows上で動かせるじゃん」
思い出して欲しい。Windows 3.1のエンハンスドモードにおける、最小メモリー要求は、1664KBであったことを。さらに、各DOS窓は、約1MBのメモリーを消費する。つまり、たかだか16文字を画面上に表示するために、コンピューターの半分以上ものメモリーが必要になるのである。
「えーと、サポセンは問題解決のために、俺のIPアドレスを聞いてきた。IPを調べるには、このプログラムを実行しないといけないな。そのためには、まず作業をセーブして、今開いているプログラムを全部閉じないと、プログラムを実行するだけのメモリーが空かない」
単にWindowsアプリケーションを使ったほうがいい。
ボーナスコメント:640kが、なんでwinipcfgはipconfigを呼ばないのかと質問してきた。
いいかね。「全く別物で互換性のないプログラムに、同じ名前をつけよう」。問題解決からますます遠ざかるだけだな。
64bitコードへ移行はすみやかに行われるのだろうか。
> なんでwinipcfgはipconfigを呼ばないのか
ReplyDelete後の文と意味がつながらなかったので原文を確認しましたが、
なんでwinipcfgをipconfigと呼ばなかったのか
→なんでwinipcfgをipconfigという名前にしなかったのか
じゃないですか?
> なんでwinipcfgはipconfigを呼ばないのか
ReplyDelete後の文と意味がつながらなかったので原文を確認してみましたが、
なんでwinipcfgはipconfigと呼ばれなかったのか
→なんでwinipcfgをipconfigという名前にしなかったのか
ではありませんか。
なぜかポストが消える…
ReplyDelete