Shim

shimについて



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

shimの利用シーン



特に古いAPIをサポートするためのshimは、APIの動作の変更によって、以前の機能に依存していたアプリケーションで互換性の問題が生じる場合に重要です。このような状況では、古いAPIの上に一種の互換性レイヤーを設けることで、古いアプリケーションが新しいシステム上でも動作するように保持されます。これにより、古いシステムや環境での円滑な運用が可能になります。

一方で、新しいAPI用のshimは、特定の環境での手段を用いて、新しいAPIを古い環境に持ち込むためのライブラリとして機能します。

実際の例



具体的な例として、Webのポリフィルが挙げられます。これは特定のウェブブラウザで新しいウェブ標準が使えないとき、古い標準やJavaScriptを使って新しい標準を実装するものです。また、AppleTalkのサポートは、MacコンピュータでAppleOpen Transportネットワークシステムを短期間支えた例です。この時、AppleTalkは古いプログラムを支えるためにOpen Transportの「スタック」として再実装された上で、さらにAPI shimとして展開されました。

Microsoft WindowsにおけるApplication Compatibility Toolkit (ACT)では、この用語は後方互換ライブラリとして解釈されます。この場合、shimは古いバージョンのWindowsに依存するアプリケーションに対して、その古い動作を仮想的にシミュレートします。特に、最小特権ユーザーアカウント (LUA)に起因する問題を解決するために利用されることがあります。

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

さらに、プログラミングにおける「type tunnel」パターンでは、汎用のインターフェース層が一連のshimを駆使して、異なる型を基にしたAPIが単一のプリミティブ型を使用できるように変換する役割も果たしています。

まとめ



shimは、プログラミング環境において非常に重要な役割を果たしています。APIの互換性を維持することで、古いアプリケーションのサポートを続け、新しいテクノロジーの導入を円滑にするための役立つツールです。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。