ポータブルアプリケーションポータブルアプリケーション(英: Portable Application)とは、実行するにあたってコンピュータに固定の補助記憶装置にインストールする必要がないソフトウェアであり、CD-ROM、USBメモリ、フロッピーディスクなどの可搬媒体から実行できるものをいう。互換性のある任意のコンピュータシステム上で動作させることができ、一般にオペレーティングシステム (OS) が同じであればよい(例えば、Windows XP以上や、Linuxなど)。この場合の「ポータブル」は「可搬」という意味であり、「移植」という意味ではない(ソースコードのコンパイルによって異なるプラットフォームで動作できるよう設計されているわけではない)。 ポータブルアプリケーションは、自身の設定情報やデータもプログラム本体と同じ可搬媒体に格納できるよう設計されている。 WindowsWindows向けソフトウェアの多くは、ポータブルな設計ではない。レジストリとMicrosoft Installerの構造が、インストールしたプログラムとマシンを結び付けてしまうためである。多くのWindowsアプリケーションはレジストリを多用しており、状態情報もファイルシステムの各所に格納している。 ポータブルアプリケーションにするためには、実行前と実行後でそのコンピュータ内のファイルに変化を与えないようにしなければならない。すなわち、レジストリを使うことはできず、アプリケーションのインストールされたディレクトリ以外にファイルを残すこともできない。可搬媒体にインストールする場合、設定をレジストリではなくINIファイルなどの設定ファイルに格納する必要がある。 アプリケーションのソース修正をせずに可搬性を実現する手法として、アプリケーション仮想化がある。これは、アプリケーションがファイルシステムやレジストリにアクセスしようとしたとき、その要求を横取り(インターセプト)し、(アプリケーション自身は知らない)別の媒体上のファイルへのアクセスに変換するランタイム層を設けるものである。この場合、アプリケーション自体は変更せず、なおかつ可搬性を実現できる。 このランタイム層は、DLLインジェクションと呼ばれる技法を使って実行時にアプリケーションへ埋め込まれ、アプリケーション毎のラッパーを形成する[1]。このラッパーはアプリケーション起動時に活性化され、ファイルやレジストリに関連するシステムコールをフックしてリダイレクトし、可搬媒体上だけを操作する。 この手法[1]は、アプリケーション全体だけでなく、個々のコンポーネント(ランタイムライブラリ、COMコンポーネント、ActiveX)にも適用できる。これを利用すると、同じOS上で競合することなくそれぞれ設定の異なる複数のポータブルアプリケーションのインストールを行うことができる。このようなコンポーネントはOSが保護しているレジストリなどにアクセスしないため、インストールや管理において特権を必要としない。 macOSmacOS向けのアプリケーションは、Installerパッケージではなく"drag-install"アプリケーションバンドルとしてパッケージ化されている(例外あり)ため、ある程度の可搬性を有する。アプリケーションを実行するだけであれば、好きなボリュームから起動可能である。 しかし、完全なポータブルではないことが多く、OSのインストールされたファイルシステムに初期設定ファイルやキャッシュなどのファイルを作成することが多い。 UNIXUnix系向けのアプリケーションは、どんな仮定もしないことが多い。例えば、Windowsでは伝統的にユーザーが特権を持っていることを仮定しているアプリケーションが多かったが、Unix系では非特権ユーザーとして利用することが多いため、そのようなアプリケーションは"Permission denied"エラーとなる。従って、アプリケーションは環境変数 HOME=/mnt/home/user LD_LIBRARY_PATH=/mnt/usr/lib /mnt/usr/bin/w3m en.wikipedia.org しかし、全てのプログラムがこのようになっているわけではない。例えば、$HOMEを無視して ダブルポータビリティダブルポータビリティとは、可搬性と移植性を兼ね備えていることを意味し、クロスプラットフォームで動作するポータブルアプリケーションを意味する。MacintoshのUniversal Binaryなどのファットバイナリがあるが、必ずしも可搬とは限らない。 脚注関連項目外部リンク
|