第3回 これでいいのか,パソコンの内部状態

 大学で情報工学を専攻すると,初期の授業で必ずオートマトンという計算機機械のモデルについての講義がある.簡単に説明すると,オートマトンは内部状態の集合と状態遷移式の組み合わせで定義され,状態表現のモデルと,状態遷移式の記述方法でいくつかのクラスに分類されるというものである.

 普通のコンピュータに置き換えると,内部状態はレジスタ,フラグ,メモリ,ディスクなどのすべての記憶情報であり,状態遷移式は命令実行機構ということになる.とはいえ,頭からすべてのコンピュータはオートマトンであるといわれた学生の立場になってみると,だからどうしたというのが本音ではないだろうか.

 もし,読者が学生と同じ感想をもたれたなら,1975年頃のIntel 8080CPUのマニュアルを見てみるとよい.このマニュアルの最初のページに出てくるのは,8080の状態遷移図なのである.

Windows95と一言で言っても…

 唐突にオートマトンを話題にしたのには訳がある.最近,Windowsプラットホーム上でちょっと大きめのシステムを開発しているのだが,Windowsがあまりにもたくさんの内部状態を抱えていることに嫌気がさしてきたのである.

 現在,世の中のPCのほとんどがWindowsになってきたということは,一つのプラットホームを想定してソフトを開発しさえすれば,その先に巨大なマーケットが控えていることだから開発側にとってハッピーな状況になるのではなかったのか?

 ところが実際は,基本となるWin32 APIは共通なのだが,その上に乗っかる環境は千差万別であり,世の中に二つと同じ状態のPCはないという状況が出現しつつある.ActiveXもその元凶の一つである.

 だから,開発環境ではしっかり動いたので自信満々で配布キットを作ってみたら,動く環境と動かない環境が出てくるということが,Windowsでアプリケーションを開発する側にとって共通の悩みになっているのではないかと思う.

知らない間に変わっている内部状態

 Windows95ではアプリケーションのバージョンアップにともなって,システムで共通に使うDLLやActiveXも更新されている.アプリケーションの配布時に無断で共通コンポーネントをバージョンアップすることもある.

 知らない間にActiveXの実体が変わっていることなど,Windowsの世界では普通のことになっている.新版のコンポーネントは過去の仕様を完全に満足したうえで“改良”されているという前提である.ところが,その結果として別のアプリケーションが動かなくなってしまう.

 改良は多くの場合,バグフィックスなのだから問題はないといわれるが,別なアプリケーションでは無意識にバグを前提にプログラムが書かれていることもある.バグも仕様の一部というのは,この世界の常識なのである.

インストールの順序すら影響する現実

 インストールの順序も内部状態として残ることがある.実行時ライセンスだけで導入されているActiveXがすでにある環境では,後から開発環境を入れると実行時ライセンスを開発ライセンスに切り替えてくれないということもあった.

 すなわち,後から入れる開発環境のインストーラは,自分のもっているActiveXより新版があると上書きしないから,ライセンスも実行環境だけのままなのである.デバッグしようと思ったら,ライセンスがなくてActiveXがロードできないというエラーになる.

 開発環境を入れたあとでサービスパックをかぶせると良いだろうと思ったが,サービスパックはすでに実行環境の最新版があるので,それ以上の手当てをしてくれなかった.それがわかるまでに丸一日かかってしまった.

 所詮,セットアップキットのバグだから,いずれ直るということなのだろうが,そういうトラブルの元をActiveXのライセンスやバージョン管理のメカニズムはもっているのである.その根底にあるのは,あまりに増えてしまったWindowsの内部状態,とくに履歴を引きずる状態変数なのである.

裏目に出たオープンシステム

 また,内部状態といっても,機械に固定的に焼き付いている状態と実行時に時々刻々変化する状態とがある.今問題にしているのは履歴を引きずる状態のほうであり,大半の問題は起動時の状態が揃っていさえすれば解決する問題なのである.

 どうして,履歴の違うコンピュータがたくさん出てくるかといえば,それはオープンシステムという戦略が,利用する側で何をやってもよいという状況を作ったからに他ならない.

 オープンシステムの対極にあるのが家電的な情報機器である.ゲーム機はその典型で,電源投入のたびに買ったときと同じ状態になるのである.だから,数千万台の規模で売られているのに,ソフトが動かなかったという話は聞かない.

 電源投入時の内部状態が基本的に同じなのである.Javaはオープンシステムであるという立場で,かつ履歴を引きずらないことを目指したが,そのためのオーバヘッドが大きすぎて苦戦している.

 Intel+Windowsの弱みは,このあまりに複雑になったPCの状態管理にある.もし,それを解決できる新しい仕組みを生み出すことができたら,21世紀のビル君になれるかもしれない.

山本 強・北海道大学



「移り気な情報工学」のトップへ戻る

Interfaceのホームページへ戻る