前号: No 400 / 次号: No 402 / 一覧(note.com)へ / ブログページに戻る

メールマガジン「がんばりすぎないセキュリティ」No401 (25/04/07)

アップデートすると動かなくなる理由(401号)



前々号ではWindows10がもうすぐ終わるという話を書きました。
 あと半年でWindows10が終わりですよ(399号)
 https://note.com/egao_it/n/n961e8fbdac9c

ですが、Windows10では動作しても、Windows11では動かなくなるプログラム(アプリ)というのがあります。

これは、一般に非互換などと呼ばれるのですが、なぜこんなことが起きるのか?ということを今回はお話します。

なお、非互換の理由は実に様々で、すべてを書くことはとてもできません。今回のお話は非互換の代表例とお考え下さい。


1. OSとアプリケーション

現代的なプログラムというのは階層構造になっていて、一番下の部分がOS(オーエス。Operating Systemの略)と呼ばれ、一番上の部分をアプリケーションと呼びます。 OSというと、パソコン用ならWindowsやMacintoshOS、スマホ用ならiOSやAndroidOSなどが代表的です。 このOSが何をやっているのか?というのは一言で言えばコンピュータシステムの裏方の面倒を一手に引き受けてくれるプログラムのことです。 一方で、アプリケーションというのは、アプリやソフトウェア、プログラムなどと呼ばれるもののことです。 皆さんが日常的に使っているアプリ、ソフトウェア、プログラムは全て「アプリケーション」に含まれます。 OSがあるおかげで、アプリケーションを作る人はコンピュータの隅々まで把握しなくても目的のアプリが作れるわけです。 例えば、OSは画面を描画する仕組み、ファイルを作る機構、マウスの制御、キーボード入力(日本語入力を含む)、無線LAN接続、USB機器の接続、などはOSが提供する機能の一部です。 また、外からは見えませんが、内部メモリの効率的な利用、アプリの並行動作、といったアプリケーションの動作制御もOSの重要な役割です。 ★ところで、OSの機能のほとんどは一般の利用者からは見えません。 ★こういったOSの機能を利用できるのは、アプリケーション(とそれを開発するプログラマ)に限ります。

2. API

上で書いたOSが提供する機能は細かく数えると何千種類もあります。 各アプリケーションが、OSに何かを依頼する時にはAPI(エーピーアイ:Application Program Interfaceの略)という依頼ルールに基づいて依頼を行います。 役所で手続きをする時には、定められた書面に必要項目を書いて提出しますよね。手続きによって必要な書類も違えば、必要な添付書類も異なります。 アプリケーションがOSに依頼する時には、書面の代わりにパラメータを指定し、受付に提出する代わりにOSにAPIの実施をお願いします。 APIはこの依頼ルールそのもの(狭義のAPI)を指します。 実際には、そのAPIのルールによる依頼と結果を受け取るところまでを指すことも多いです。この文章でも後者の意味でAPIをいう言葉を使います。 例えば、Windows上でアプリケーション(Excelなど)がファイルを作る時には CreateFileWというAPIを用います。このAPIでは必要パラメータが7つ(ファイル名、アクセス方法、共有モード、アクセス権、作成モード、ファイル属性、拡張属性)あります。 ファイルを作るのは割と単純そうな処理ですが、アプリケーションの開発者はこの7つのパラメータをきちんと理解しておかないとアプリケーションが正しく作れません。 中にはCreateProcessWのように13個ものパラメータを必要とするAPIもありますので、アプリケーションの開発者は大変です。 Windowsの場合、その構造が複雑すぎて、公式マニュアル以外にAPIの解説書がたくさん出ている始末です。 さらに、APIの呼び出し方やAPIの構成はOSによって全く異なります。 同じようにファイルを作るだけでも、iOSではCreateFile というAPIを3つのパラメータで依頼でき、AndroidOSでは File.io.FileWriter というAPIを1つのパラメタで依頼できるようになっています。 このような違いは設計思想の違いですので、一概にどちらが優秀というものではありません。 アプリケーションプログラマはその違いを認識して、それぞれのOSの設計思想を学んだ上でアプリケーションを作らなければならないという点です。

3. APIの誤用

このような複雑さがあるため、特に不慣れなOSでアプリケーションを作る際にはAPIの誤用が多発します。 そのほとんどはアプリケーションの販売前のテストで見つけて対処します。 それでも、それを見落としてしまう場合もあります。 特に誤用しているにも関わらず、OSのAPIがそれを受け入れてしまうケースです。 この結果、開発者は意図通りの動作だと思い込んでしまい、その誤用を含んだまま、販売されてしまいます。 出荷した時点では問題なく動作するわけですから、ここまではいいんです。 ところが、OSの提供側が「その誤用を受け入れてしまう」ことをバグだ、と認識したケースです。 特に、その誤用によって、本来は許されない処理が実行できるようになるといったセキュリティ上の問題をはらんでいると、OS側は確実にそれを修正します。 OSの提供元はWindows Updateやセキュリティアップデートとして改善版を提供します。 その結果、誤用しているアプリケーションは動かなくなるわけです。 これが、OSのバージョンアップやWindows Updateによってそれまで動いていたアプリケーションが動かなくなる原因です。 なお、動かなくなる原因はAPIの修正によるものだけではありません。OS側の改善で動作条件が微妙に変わった点(メモリ配置の影響など)にひっかかることもよくあります。

4. まとめ

今まで機嫌よく動いていたアプリケーションがOSのバージョンアップによって動かなくなったという経験をお持ちの方は多いと思います。 その理由の多くはOSが提供している機能を誤用しているケースです。 主要なOSが提供するAPIは数千を越えます。(頻繁に利用するものだけでも数百はあります)その全てに精通することは難しいため、誤用のリスクは常に存在します。 もちろん、誤用によってエラーが出てくれればすぐに気づくからいいのですが、エラーも返さずにそれなりに動いてしまうと、その誤用に気づかないままとなるケースもあります。 ところが、OS側がそれをバグだと認識して修正をされてしまうと、アプリケーションが動作しなくなってしまいます。 こうなると、そのアプリケーションの開発元がその誤用を認識して修正しない限り、プログラムが動くことはありません。 アプリケーションによっては、販売元の動作保証がなくても新バージョンで動作することもありますが、これは上記の誤用なく作られているからと言えます。 もっとも、正しく動作しているように見えて、実はちゃんと動いていないかもしれません。 仕事で使うアプリケーションは販売元が動作保証しているバージョンで利用したいものです。 今回は、OSのアップデートによってアプリケーションが動作しなくなる理由についてお話しました。 次回もお楽しみに。 (本稿は 2025年4月に作成しました)

前号: No 400 / 次号: No 402 / 一覧(note.com)へ / ブログページに戻る