「端末」「ターミナル」「コンソール」

DOS の話をしたり Linux の話をしたりと忙しく行き来してる中で、やはり人さまの情報も読むには読むわけで、気になったりすることもあったりなかったり。

CMD.EXE 批判記事があればいいのにってネタを書いた際は当然 cmd.exe の使い方的な記事も目に留まるわけなのね。当然件の「有名情報サイト」の記事も見出しくらいは即座にヒットする:

cmd.exeを起動することで動作する対話型コマンドラインインターフェイスソフトウェア(コマンドシェル)の名前は「コマンドプロンプト」、cmd.exeでも使われる例の黒いウィンドウの名前は「コンソール」です。*nixではないので「ターミナル」とか「端末」とは呼びません(実際違います)。

合ってるとも言えるし合ってないとも言える。というよりは、「結果としては」何一つ間違ったことも言っていないが、正しい理解に基づく「主張」にも見えない。

wikipedia を参照するまでもなく、「コマンドプロンプト」は本来はワタシがよくコード引用する際に使うこれだ:

1 me@host: ~$

シェルプログラムが「入力しなはれや」と促すための、シェルによる出力のことな。けど「名前は「コマンドプロンプト」」が間違ってないのは Microsoft が確かにそう呼んでいるからね、正しい。(正しいっつーか、「コマンドシェルの正式タイトル」のことしか言ってないんだよ、その意味でなら正しいとしか言いようがないでしょ。)

コンソールも、ググるとトップで出てくる説明「コンソールとは、広義でパソコン全般の入力・出力用の装置のことを指し、主にキーボードやディスプレイのことをいいます。」がまぁまぁ的を射てる。その通り。パソコン言うてるのが実際は随分違っていて、なんなら航空関係者、特にパイロットに「コンソールってなぁに?」と質問してみるがいい。まぁそこまでは言い過ぎとしても、PC の文脈で使う場合は普通は「ユーザがじかに対面する入出力インターフェイス」のことを総称している。だけれどももちろん「cmd.exeでも使われる例の黒いウィンドウの名前は「コンソール」」が正しいのは「コマンドプロンプト」のときと同じで、Microsoft がそう呼んじゃってるしな、てことで。

「*nixではないので「ターミナル」とか「端末」とは呼びません(実際違います)。」もまさしく「正しい」んだけれども、これは Microsoft がそう言わないので、とかではなくて、「ターミナル」「端末」て何よ、て元々の定義だけからくる話。今回したいのはここの話。

もうね、「ワタシが生まれて初めて Unix に触れたその日」からして X Window System は十二分に成熟していたし、なにせ「一人一台ワークステーション」時代だったので、つまりはその時代から「なんで端末言うの?」はわかりにくくはなっていたんだけれども…、ただオンラインマニュアルだったりで xterm やら kterm を「仮想端末」とちゃんと呼びならわしていて、「どうして?」と考えるだけの情報は一応身近にはあったんだね。

どういうことか、というのはまさに「仮想端末」(pseudo terminal)からワタシは当時推測していた。もどき、つーことやね。そのもどく元ネタの「端末とはなんぞ?」

無論これは Unix が「マルチユーザ」システムであることに関係している。Unix は「一台の Unix 機に多くのユーザがよってたかってログインして使うもの」として設計されたのだ。だから利用者は実際に遠隔からログインして使うこともあったし、ワタシの時代のように、「オレのワークステーション」に「仮想マルチログイン」して使うこともあった。

そのログインする相手システムではなく、「オレ」側が「端末」である。無論それが物理機器の場合もあるし、xterm 的な「仮想」の場合もある。大抵の場合は端末でありうるものはコンソールでもある。「オレさまが入出力のためにまさに目の前にしているもの」こそが端末でありコンソールだ。プログラムとしては別物であったとしてもである。少なくともエンドユーザにとってはそれ以上のものではない。そして時代とともに「それが物理機器の場合もある」ことは次第に忘れられがちとなり、少なくとも古きを知らない者にとっては、端末は仮想のものでしかなくなってしまった。

terminal を「端末」と訳したのは言いえて妙と言うかね、最初にこの訳をあてた人は上手。terminal というと即座に「駅」だと思う人も結構いると思うけれども、原義としてはまさに「末端点」というか。こんな絵:「○—>●」では「●」は terminal よね。コンピュータにおいての terminal は「機—>人」の「人側端点」を意味していたのであろうなぁと思う。リモートから利用するのが当然だった時代ほど、このイメージはよりわかりやすく伝わっていただろうとも思う。(ちなみに「リモート」を現代のようなインターネット的なものを想像するとちょっと違う。そうではなくて、一台の「デカ」い Unix 機に複数のキーボード・ディスプレィを接続して使うようなことを想像すると良い。)

そういうわけで「コンソール的なユーザインターフェイス」を「(仮想)端末(terminal)」と呼びならわす風習自体は確かに Unix 文化に根ざした言い回しであることには違いはないし、実際 Unix の「仮想端末」は「実際にマルチログイン出来る能力を持っている」、ので、「「ターミナル」とか「端末」とは呼びません(実際違います)。」という理解は実際に正しい。

そうなんだけどね、言ったじゃない、「仮想」って。実際はあえて「仮想端末」と言わない限りは、Unix においてだって「端末」という言葉の定義自体は上で説明の通り曖昧で、まぁほとんどの場合はコンソールと同義なんだと思うよ。もちろん文脈にはよるけれど。本当に厳密に言わなければならない技術文書なら「仮想」は絶対に省かない。逆に言えば、「cmd.exe を端末とみなすことには、実害がないなら別にとやかく言わんでもよろしい」ということすら言える。

ま、実害あるから「言うなよ」てことなんだと思うぞ、実際は。というのは TeraTerm など「本物の仮想端末」がいるからさ、cmd.exe のそれを端末というと確かに紛らわしいし誤解を招く。つまりは Windows な cmd.exe を「端末と呼ばない」のは本当のところは「Unix ではないので」とはあんまし関係ない。機能面での境界で言い分けたいわけよね、Windows でだって。

結局「「*nixではないので「ターミナル」とか「端末」とは呼びません(実際違います)。」」という、これはまぁ「主張」だね、この「主張」がいまひとつイケてないのは、「機能面で言い分けたいのである」という論点なくして「Unix vs Windows」という二元論に矮小化しちゃってるから、と思うぞ。