2−2: 内省
「おっと」
コンソールを一気に流れた出力を見て、呟いた。
出力先をリダイレクトによってファイルに変更し、改めてdmesgを実行した。
そのファイルをエディタで開き眺めた。
dmesgの出力を見ると、接続されているデバイス――CPUとメモリも含めて――を見つけ、モジュールを有効にし、そのモジュールになっているドライバが再度デバイスへの接続を確保しというようなことが、起動時には行なわれている。これは、なんらかの自己認識だとは言えないか。
そのようなモジュール間での通信は、システムを一まとまりのものとして見れば、独り言かもしれない。あるいは内部に入るなら、システムの起動や維持のためのカーネルやモジュール群、そして起動されたプロセス群の通信は、それらの間の会話とは言えないか。モジュール構造ではなく、マイクロ・カーネルであれば、その傾向はより顕著であるかもしれない。
人間の言語ゲームとは異なる面もあるだろう。人間の言語ゲームでは、ルールを辿ると、「根拠なき行動様式」というところで「終点」となる。対してこれらの通信は、厳密に定められたプロトコルに従ってなされている。プロトコルは必要によって定められている。それは「根拠」によって定められているとも言えるだろう。
だが、それは、それらの通信――あるいは会話――を、外から見た場合に言えることだ。私がシステムの内部にいるならば、それらの通信に対しての「なぜ」という疑問は――そういう疑問を持つとしてだが――、そう定められているから、つまり「根拠なき行動様式」と等しくはならないか。
人間にしても、個人は、すでに行なわれている言語ゲームに遅れて参加するしかない。すでに言語ゲームが行なわれている社会に、後から生まれて、そして参加するしかない。そこでは、「終点」が「根拠なき行動様式」であるにしても、プロトコルによって定められていることとどれほどの違いがあるだろう。ルールの変更に多少の貢献ができる余地はあるが。
その余地以外にも違いはある。モジュールやプロセス間の通信は、人間が明確な目的、あるいは理由により定めたものだ。全てが、そして完全にそうだとは言えないとしても。たとえば…… HTMLのバージョンによる差異はどうだろう。必要によって、また理念によって、あるいはたんにできるからという理由によって、変更が重ねられている。
もし、一つのシステムに限らず、複数のシステムからなる全体としてのシステムを考える場合ならば、HTTPなどを含めた、いくつものプロトコルについても検討する必要があるだろう。
だが、それはもうすこし待ってから考えることにしよう。
計算機が稼働しているとき、カーネルに近いプロセス群は毎秒――あるいは毎マイクロ秒――ごとに通信を行ない、システムが全体として機能するように働いている。そこにおいて、プロトコルはなぜ定められているのか。それは、もちろん必要によってではある。では、その「必要」とはなんなのか。プロセスが連携し、必要な機能を間違いなく提供するためだ――それが誰に対してであれ。
それは、人間の言語のように自由度の高いものではない――人間の言語の自由度が実際に高いとしてだが。明確かつ限られた語彙と統語論や文法に定められたやりとりしかできない。それは、各々のプロセスが担う機能が明確に定められ、限定されているからでもある。
昔、OSがDOSの段階であったとき、あるいはその時代には、カーネルはおよそモノリシックであり、そしてOSがDOSであったなら、基本的にはプロセス間の通信は不要だった。シングル・タスクのシステムであれば、プロセス――ここではアプリケーション・プログラムとして――が起動されたなら、計算機を支配するOSは、そのアプリケーション・プログラミにその座を――すべてをではないにしても――渡していた。すこしの例外を除けば、アプリケーション・プログラムからのファンクション・コールによって呼び出されるライブラリ群が一まとまりとなったものになっていた。ファンクション・コールは、プロトコルの一種と考えてもいいだろう――それが原始的なものであれ。
ファンクション・コールが消えたわけではないが、現在のプロセス間通信のプロトコルは、より複雑なものになっている。問い合わせ、応答、処理の依頼、処理の結果の返答。そのくらいのものには。これは、「誰々さん、いますか?」、「はい、います」、「これをお願いできますか」、「これが結果です」に相当する。この範囲に限るなら、人間同士の会話と大きく異なるものではない。
ここに新らしいプロトコルが導入されたらどうだろう。そして、それはユーザによっていつでも導入できる。そのプロトコルに従うプロセス――あるいはプログラム――は、当初は孤独である。そのプロトコルを理解できる、ほかのプロセスが存在しないからだ。だが、当然、ユーザはそのプロトコルに対応する、ほかのプロセス――あるいはプログラム――を作るか、あるいはそのプログラムは、そもそも既存のプロトコルを理解できるように作るだろう。
後者で考えるなら、個人は、すでに行なわれている言語ゲームに遅れて参加するしかないという状況と似てはいるだろう。前者で考えるなら、個人がルールの変更に多少の貢献ができる余地はあることと似てはいるのかもしれない。
であるなら、この点に限るなら、人間と計算機の違いはどこにあるのだろう。