アプリケーション仮想化は、コンピュータプログラムを、実行される基盤となるオペレーティングシステムからカプセル化するソフトウェア技術です。完全に仮想化されたアプリケーションは、従来の意味ではインストールされませんが、[ 1 ]インストールされたかのように実行されます。アプリケーションは実行時に、元のオペレーティングシステムおよびそれによって管理されるすべてのリソースと直接インターフェースしているかのように動作しますが、さまざまな程度で分離またはサンドボックス化することができます。
この文脈における「仮想化」という用語は、カプセル化される成果物(アプリケーション)を指し、抽象化される成果物(物理ハードウェア)を指すハードウェア仮想化における意味とは全く異なります。

完全なアプリケーション仮想化には仮想化レイヤーが必要です。[ 2 ]アプリケーション仮想化レイヤーは、通常オペレーティングシステムによって提供されるランタイム環境の一部を置き換えます。このレイヤーは、仮想化されたアプリケーションのすべてのディスク操作をインターセプトし、それらを仮想化された場所(多くの場合、単一のファイル)に透過的にリダイレクトします。 [ 3 ] アプリケーションは、物理リソースではなく仮想リソースにアクセスしていることに気づきません。アプリケーションは、システム全体に分散した多数のファイルではなく、1つのファイルで作業するようになったため、別のコンピュータでアプリケーションを実行することが容易になり、以前は互換性がなかったアプリケーションを並行して実行できるようになります。
アプリケーション仮想化により、アプリケーションは本来の環境に適さない環境でも実行できるようになります。例えば、Wineを使えば、一部のMicrosoft WindowsアプリケーションをLinux上で実行できます。
アプリケーション仮想化は、組織内の複数の異なるコンピュータ間で共通のソフトウェアベースラインを維持することで、システム統合と管理のコストを削減します。統合の度合いが低いため、オペレーティングシステムや他のアプリケーションが、不適切に記述されたコードやバグのあるコードから保護されます。場合によっては、メモリ保護やIDEスタイルのデバッグ機能を提供し、読み取り専用のシステム所有の場所にユーザーデータを保存しようとするアプリケーションなど、正しく記述されていないアプリケーションを実行することさえ可能です。(この機能は、不適切に記述されたアプリケーションを実行するためにエンドユーザーが管理者権限を持つ必要性をなくすことで、最小権限の原則の実装を支援します。)互換性のないアプリケーションを同時に並行して実行でき[ 4 ]、相互の回帰テストを最小限に抑えることができます[ 5 ] 。アプリケーションをオペレーティングシステムから分離することにはセキュリティ上の利点もあり、仮想化されたアプリケーションの公開が、OS全体の公開を自動的に意味するわけではありません[ 4 ] 。
アプリケーション仮想化により、オペレーティングシステムの移行も簡素化されます。[ 4 ]アプリケーションはインストールせずにリムーバブルメディアやコンピュータ間で転送できるため、ポータブルソフトウェアになります。
アプリケーション仮想化は、個別の仮想マシンよりも少ないリソースで済みます。
すべてのコンピュータプログラムが仮想化できるわけではありません。例としては、デバイスドライバ(OSとの統合の一形態)を必要とするアプリケーションや、共有メモリ空間で実行する必要がある16ビットアプリケーションなどがあります。[ 6 ]ウイルス対策プログラムや、 WindowBlindsやStyleXPのようにOSとの高度な統合を必要とするアプリケーションは、仮想化が困難です。
さらに、ソフトウェアライセンスにおいては、アプリケーション仮想化にはライセンス上の大きな落とし穴がある。これは主に、アプリケーション仮想化ソフトウェアと仮想化されたアプリケーションの両方に適切なライセンスが必要であるためである。[ 7 ]
アプリケーション仮想化によって、レガシーアプリケーションと新しいオペレーティングシステム間のファイルおよびレジストリレベルの互換性の問題に対処できますが、ヒープを正しく管理しないアプリケーションは、仮想化されているかどうかに関わらず、メモリの割り当て方法が同じであるため、Windows Vistaでは実行されません。 [ 8 ]このため、アプリケーションが仮想化されている場合でも、専門的なアプリケーション互換性修正 (シム) が必要になる場合があります。[ 9 ]
マルチコンパティビリティ モデル内の機能的な不一致は、公共ネットワーク内でユーティリティ駆動型アクセス ポイントが共有される場合の追加的な制限です。これらの制限は、システム レベルの共有ポイント ドライバを指定することによって克服されます。[ 10 ]
アプリケーション仮想化に含まれる技術カテゴリは以下のとおりです。