shimとは、コンピュータプログラミングにおいて、透過的にAPI呼び出しを傍受し、渡される引数を変更したり、操作自体を処理したり、他の場所へ操作をリダイレクトするライブラリである。shimは、新しい環境で古いAPIをサポートするため、あるいは古い環境で新しいAPIをサポートするために使用されることがある。また、開発されたソフトウェアプラットフォームとは異なるプラットフォーム上でプログラムを実行するためにも使用される。

古いAPI用のshimは、通常APIの動作が変更されたことで、従来の機能に依存していた古いアプリケーションが互換性の問題を起こすときに登場する。このような場合、古いAPIは新しいコードの上に薄い互換レイヤーを設けることでサポートされ得る。新しいAPI用のshimは「その環境の手段のみを用いて、新しいAPIを古い環境にもたらすライブラリ」と定義される。

例 Webのは、特定のウェブブラウザで新しいウェブ標準が利用できない場合に、古い標準やJavaScriptを用いて新しい標準を実装する。

AppleTalkのサポートは、Macコンピュータにおいて、AppleがOpen Transportネットワークシステムを短期間サポートしていた時期に実現された。何千ものMac用プログラムがAppleTalkプロトコルに基づいており、これらをサポートするためにAppleTalkはOpen Transportの「スタック」として再実装され、さらにこの新しいライブラリ上にAPI shimとして再実装された。

Microsoft WindowsのApplication Compatibility Toolkit (ACT) では、この用語は後方互換ライブラリを意味する。shimは、古いバージョンのWindowsに依存するレガシーアプリケーションのために、古いバージョンの動作をシミュレートしたり、変更されていないAPIの呼び出し方法が不適切なアプリケーションに対処したりする。たとえば、最小特権ユーザーアカウント (LUA)に関連するバグを修正する目的で用いられる。

bind.soは、Linux用のshimライブラリであり、任意のアプリケーションが、権限にかかわらず、リッスンソケットへのバインドや送信元IPアドレスの指定を可能にする。これは、任意のプログラムにshimや他のライブラリを読み込むことができるLD_PRELOADメカニズムを利用している。

「type tunnel」パターンにおいては、汎用のインターフェース層が一連のshimを利用して、異種の型集合を基盤となるAPIが使用する単一のプリミティブ型に変換する。

関連項目

Adapter パターン アプリケーション仮想化 グルーコード スタブ

脚注

外部リンク Microsoft Dev-Center - Windows 8 Client and Server 2012 application Compatibility Microsoft TechNet - Understanding Shims