Windows 秘話互換性の問題への対処

Raymond Chen

コントロール パネルの [プリンタ] を開くことを目的とした、Windows® 3.1 用に作成されたプログラムがありました。このプログラムでは、[コントロール パネル] ウィンドウを検索し、[ファイル] メニューにアクセスして、"プリンタ" というアイテムを検索していました。Windows 95 では、コントロール パネルの [ファイル] の下に [プリンタ] オプションがなくなりました。その結果、このプログラムを Windows 95 で実行すると、意味のないコマンド メッセージをコントロール パネルに送信することになります。Windows 95 ではこのような問題に対処するために、このプログラムが検出するためのおとりの [コントロール パネル] ウィンドウを作成しました。その結果、このプログラムがメッセージをおとりのコントロール パネルに送信すると、[プリンタ] フォルダが開きました。

Windows 3.1 は、プログラムがコントロール パネルに関して不適切な推測を行ったことを検出して、警告を表示すべきであるという意見もあります。そうすれば、プログラムの作成者は製品をリリースする前に、こうした警告を確認して問題を解決できることになります。しかし、一連のコードの意図を見抜くには、人工知能の領域に踏み込むほどの分析が必要になります。実際には、Windows 3.1 は、プログラムが "プリンタ" という用語と strcmp を実行していることを検出し、この strcmp を分析して、不適切な比較かどうかを判断する必要があります。しかし、これでは "プリンタ" との比較を検出できるだけです。システムでは、こうした互換性に関するチェックを何回実行することになるでしょうか。また、間違って検出してしまった場合はどうなるでしょうか。

もう 1 つ、Windows 95 は "プログラム XYZ が不適切な動作を行っている" ことを示す警告ダイアログを表示して、こうした不適切な推測に対応すべきであるという意見もあります。しかし、コントロール パネルで意味の無いメッセージの送信元を知るには、こうした検出機能をウィンドウ マネージャに用意しなければなりません。その結果、コントロール パネルとウィンドウ マネージャという 2 つのコンポーネント間に疎結合が生じます。しかも、これで対処できる事例は 1 つだけです。ウィンドウ マネージャとシステム内の他のすべてのコンポーネントとの間にこのような疎結合が生じてもよいのでしょうか。

アプリケーションを特定しない汎用のメッセージを用意するのは簡単です。しかし、これは適切な解決策とはいえません。あいまいなエラー メッセージは、まったくエラー メッセージを表示しないことと同じです。その上、このようなダイアログ ボックスでは具体的に特定の手順を推奨していないため、ほぼ間違いなくユーザーに無視されます。ユーザーは、このようなダイアログ ボックスを迷惑なものと感じます。このことは非常に重要です。どのようなエラー メッセージも実用的であることが不可欠です。ユーザーが警告への対処方法を理解すれば、こうしたダイアログ ボックスは有益なものになります。

  

もう 1 つの問題は、ダイアログ ボックスのループにより、再入可能なポイントが作成されることです。これは技術的な問題ですが、予期しない再入可能性は、UI プログラミングにおけるバグの主な原因になります。さらに、コントロール パネル自体はモーダル状態にする必要がありますが、ダイアログ ボックスを表示すると、このモーダル構造が壊れます。

また、こうしたダイアログ ボックスを用意することで、ローカライズの負担も新たに発生します。互換性の問題のそれぞれにダイアログ ボックスを作成すると、システム全体にわたり多数のダイアログ ボックスが存在することになります。各ダイアログ ボックスは、Windows が完全なローカライズ版を提供している 33 か国語に翻訳する必要があります。

最後に、競合他社の製品にこうしたダイアログ ボックスのいずれかが表示される場合の各社の反応を考えてみましょう。こうしたベンダは、「マイクロソフトは自社のオペレーティング システムのバグで他社を非難している」とか「マイクロソフトは意図的に競合他社のプログラムの見かけを悪くしている」とか非難するでしょう。マイクロソフトが他社のソフトウェアを故意に標的として使用できないようにしていると、連邦議会に訴えた企業もありました。実は詳しく調査したところ、その企業のプログラムにバグがあったことがわかりました。率直に言えば、延々と続く議会の調査に耐えるよりも、他社のバグを修正する方がましです。

その結果、現在のバージョンの Windows では、プログラムが Windows と互換性がないことが原因で、まったく実行できなかったり、厳しい制限付きで実行される場合、警告のダイアログ ボックスを表示することのみにとどめています。その場合でも、顧客が足止めされた状態のままにならないように、マイクロソフトはベンダとの協力を試みます。いずれにせよ、ユーザーは購入したオペレーティング システムでプログラムを実行することになります。プログラムが動作しなければ、それが誰のせいかは気にしません。その作業を可能にしたいだけです。

Raymond Chenの Web サイト The Old New Thing (英語) では、Windows の歴史と Win32 プログラミングを扱っています。同時期に『The Old New Thing』 (Addison-Wesley、2007 年) というタイトルの書籍の執筆にも取り組んでいます。**

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; 許可なしに一部または全体を複製することは禁止されています.