(57)【特許請求の範囲】
【請求項１】
第一のコンピュータシステムが、第二のコンピュータシステムから、ダウンロード可能なソフトウェアプログラムを特定するＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）を含むソフトウェアスタブを受信する段階と；
前記第一のコンピュータシステムが、受信した前記ソフトウェアスタブをインストールする段階と； 
前記ソフトウェアスタブが、前記ＵＲＩを含む要求であって、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードについての前記要求を送信する段階と； 
前記第一のコンピュータシステムと前記第二のコンピュータシステムとの間のネットワーク接続を通じて、前記第一のコンピュータシステムの前記ソフトウェアスタブが、前記第二のコンピュータシステムから送信されたデータストリームにおける前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを受信する段階であって、前記データストリームは、ソフトウェアプログラムの実行可能なコードを含む、段階と；
前記第一のコンピュータシステムが、前記データストリームから、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを抽出する段階と；
前記第一のコンピュータシステムが、動的メモリを、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードのために割り当てる段階と；
前記第一のコンピュータシステムが、前記データストリームから抽出された前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを、割り当てられた前記動的メモリへと直接ロードし、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードは、前記第一のコンピュータシステムの永続的なストレージに保管またはインストールされない、段階と； 
前記第一のコンピュータシステムが、割り当てられた前記動的メモリにロードされた、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを起動することにより、前記ダウンロード可能なソフトウェアプログラムを実行する段階と；
を含む、方法。
【請求項２】
前記データストリームは、ビデオストリームであり、
前記ダウンロード可能なソフトウェアプログラムの実行可能なコードは、前記ビデオストリームに埋め込まれる、
請求項１に記載の方法。
【請求項３】
前記ダウンロード可能なソフトウェアプログラムの実行可能なコードは、機械コード又はネイティブコードである、
請求項１に記載の方法。
【請求項４】
前記ダウンロード可能なソフトウェアプログラムの実行の可能なコードは、前記第二のコンピュータシステムによって圧縮されており、
前記第一のコンピュータシステムが、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを展開する段階
をさらに含む、請求項１に記載の方法。
【請求項５】
前記第一のコンピュータシステムが、実行可能なコードを含むものとして、割り当てられた前記動的メモリをマークする段階と；
前記第一のコンピュータシステムが、分岐テーブルの一以上のエントリを調整して、割り当てられた前記動的メモリと、割り当てられた前記動的メモリにロードされた前記ダウンロード可能なソフトウェアプログラムの実行可能なコードに反映させる段階と； 
をさらに含む、請求項１に記載の方法。
【請求項６】
前記データストリームは、第一の部分と第二の部分を含み；
前記データストリームの前記第一の部分は、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを含み、
前記データストリームの前記第二の部分は、前記ダウンロード可能なソフトウェアプログラムによって使用される複数のデータを含む、
請求項１に記載の方法。
【請求項７】
前記第一のコンピュータシステムが、前記データストリームと関連付けられたネットワークソケットを、前記ダウンロード可能なソフトウェアプログラムに渡す段階であって、前記データストリームの前記第二の部分に含まれる前記データが、前記ソフトウェアプログラムの実行中に、前記ダウンロード可能なソフトウェアプログラムによって使用される、段階
をさらに含む、請求項６に記載の方法。
【請求項８】
前記第一のコンピュータシステムが、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを検証する段階
をさらに含む、請求項１に記載の方法。
【請求項９】
前記第一のコンピュータシステムが、前記ダウンロード可能なソフトウェアプログラムの実行が完了した後に、割り当てられた前記動的メモリを開放する段階
をさらに含む、請求項１に記載の方法。
【請求項１０】
第一のシステムであって：
一以上のプロセッサにより実行可能な命令を有するメモリと；
前記メモリに接続され、前記命令を実行するよう機能する、一以上のプロセッサと；
を有し、
前記一以上のプロセッサは、前記命令を実行するとき：
第二のシステムから、ダウンロード可能なソフトウェアプログラムを特定するＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）を含むソフトウェアスタブを受信し；
受信した前記ソフトウェアスタブをインストールし；
前記ソフトウェアスタブが、前記ＵＲＩを含む要求であって、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードについての前記要求を送信し； 
当該第一のシステムと第二のシステムとの間のネットワーク接続を通じて、前記第二のシステムから送信されたデータストリームにおける前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを受信し、前記データストリームは、ソフトウェアプログラムの実行可能なコードを含み； 
前記データストリームから、前記ソフトウェアプログラムの実行可能なコードを抽出し；
動的メモリを、前記ソフトウェアプログラムの実行可能なコードのために割り当て；
前記データストリームから抽出された前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを、割り当てられた前記動的メモリへと直接ロードし、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードは、前記第一のシステムの永続的なストレージに保管またはインストールされず；
割り当てられた前記動的メモリにロードされた、前記ソフトウェアプログラムの実行可能なコードを起動することにより、前記ソフトウェアプログラムを実行する；
よう機能する、システム。
【請求項１１】
前記データストリームは、ビデオストリームであり、
前記ソフトウェアプログラムの実行可能なコードは、前記ビデオストリームに埋め込まれる、
請求項１０に記載のシステム。
【請求項１２】
前記ソフトウェアプログラムの実行可能なコードは、機械コード又はネイティブコードである、
請求項１０に記載のシステム。
【請求項１３】
前記ソフトウェアプログラムの実行の可能なコードは、前記第二のシステムによって圧縮されており、
前記一以上のプロセッサは、前記命令を実行するとき、前記ソフトウェアプログラムの実行可能なコードを展開するようさらに機能する、
請求項１０に記載のシステム。
【請求項１４】
前記一以上のプロセッサは、前記命令を実行するとき：
実行可能なコードを含むものとして、割り当てられた前記動的メモリをマークし；
分岐テーブルの一以上のエントリを調整して、割り当てられた前記動的メモリと、割り当てられた前記動的メモリにロードされた前記ソフトウェアプログラムの実行可能なコードに反映させる；
ようさらに機能する、請求項１０に記載のシステム。
【請求項１５】
前記データストリームは、第一の部分と第二の部分を含み；
前記データストリームの前記第一の部分は、前記ソフトウェアプログラムの実行可能なコードを含み；
前記データストリームの前記第二の部分は、前記ソフトウェアプログラムによって使用される複数のデータを含む；
請求項１０に記載のシステム。
【請求項１６】
前記一以上のプロセッサは、前記命令を実行するとき：
前記データストリームと関連付けられたネットワークソケットを、前記ソフトウェアプログラムに渡すようさらに機能し、
前記データストリームの前記第二の部分に含まれる前記データが、前記ソフトウェアプログラムの実行中に、前記ソフトウェアプログラムによって使用される、
請求項１５に記載のシステム。
【請求項１７】
前記一以上のプロセッサは、前記命令を実行するとき、前記ソフトウェアプログラムの実行可能なコードを検証する
ようさらに機能する、請求項１０に記載のシステム。
【請求項１８】
前記一以上のプロセッサは、前記命令を実行するとき、前記ソフトウェアプログラムの実行が完了した後に、割り当てられた前記動的メモリを開放する
ようさらに機能する、請求項１０に記載のシステム。
【請求項１９】
一以上のコンピュータ読取可能な記憶媒体であって、第一のコンピュータシステムによって実行されるとき、
第二のコンピュータシステムから、ダウンロード可能なソフトウェアプログラムを特定するＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）を含むソフトウェアスタブを受信し；
受信した前記ソフトウェアスタブをインストールし；
前記ＵＲＩを含む要求であって、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードについての前記要求を送信し；
前記第一のコンピュータシステムと第二のコンピュータシステムとの間のネットワーク接続を通じて、前記第二のコンピュータシステムから送信されたデータストリームにおける前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを受信し、前記データストリームは、ソフトウェアプログラムの実行可能なコードを含み；
前記データストリームから、前記ソフトウェアプログラムの実行可能なコードを抽出し；
動的メモリを、前記ソフトウェアプログラムの実行可能なコードのために割り当て；
前記データストリームから抽出された前記ソフトウェアプログラムの実行可能なコードを、割り当てられた前記動的メモリへと直接ロードし、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードは、前記第一のコンピュータシステムの永続的なストレージに保管またはインストールされず；
割り当てられた前記動的メモリにロードされた、前記ソフトウェアプログラムの実行可能なコードを起動することにより、前記ソフトウェアプログラムを実行する；
よう機能するソフトウェアを具体化する、コンピュータ読取可能な記憶媒体。
【請求項２０】
前記データストリームは、ビデオストリームであり、
前記ソフトウェアプログラムの実行可能なコードは、前記ビデオストリームに埋め込まれる、
請求項１９に記載の記憶媒体。
【請求項２１】
前記ソフトウェアプログラムの実行可能なコードは、機械コード又はネイティブコードである、
請求項１９に記載の記憶媒体。
【請求項２２】
前記ソフトウェアプログラムの実行の可能なコードは、前記第二のコンピュータシステムによって圧縮されており、
前記ソフトウェアは、前記第一のコンピュータシステムによって実行されるとき、前記ソフトウェアプログラムの実行可能なコードを展開するようさらに機能する、
請求項１９に記載の記憶媒体。
【請求項２３】
前記ソフトウェアは、前記第一のコンピュータシステムによって実行されるとき：
実行可能なコードを含むものとして、割り当てられた前記動的メモリをマークし；
分岐テーブルの一以上のエントリを調整して、割り当てられた前記動的メモリと、割り当てられた前記動的メモリにロードされた前記ソフトウェアプログラムの実行可能なコードに反映させる；
ようさらに機能する、請求項１９に記載の記憶媒体。
【請求項２４】
前記データストリームは、第一の部分と第二の部分を含み；
前記データストリームの前記第一の部分は、前記ソフトウェアプログラムの実行可能なコードを含み；
前記データストリームの前記第二の部分は、前記ソフトウェアプログラムによって使用される複数のデータを含む；
請求項１９に記載の記憶媒体。
【請求項２５】
前記ソフトウェアは、前記第一のコンピュータシステムによって実行されるとき：
前記データストリームと関連付けられたネットワークソケットを、前記ソフトウェアプログラムに渡すようさらに機能し、
前記データストリームの前記第二の部分に含まれる前記データが、前記ソフトウェアプログラムの実行中に、前記ソフトウェアプログラムによって使用される、
請求項２４に記載の記憶媒体。
【請求項２６】
前記ソフトウェアは、前記第一のコンピュータシステムによって実行されるとき、前記ソフトウェアプログラムの実行可能なコードを検証する、
請求項１９に記載の記憶媒体。
【請求項２７】
前記ソフトウェアは、前記第一のコンピュータシステムによって実行されるとき、前記ソフトウェアプログラムの実行が完了した後に、割り当てられた前記動的メモリを開放する、
請求項１９に記載の記憶媒体。
【請求項２８】
コンピュータネットワークを通じてソフトウェアを配信する方法であって、
サーバシステムと関連付けられたプロセッサが、ダウンロード可能なソフトウェアプログラムを特定するＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）を含むソフトウェアスタブを構成し；
前記プロセッサが、クライアントシステムに対してインストールのために前記ソフトウェアスタブを送信し；
前記プロセッサは、前記クライアントシステムが前記ＵＲＩを前記サーバシステムのＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスにマップできるようにし；
前記プロセッサは、前記ＵＲＩを含む要求であって、前記ソフトウェアスタブからの、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードについての前記要求を受信し； 
前記ダウンロード可能なソフトウェアプログラムの実行可能なコードが、データストリームから抽出され、かつ、前記クライアントシステムの割り当てられた動的メモリに直接ロードされるように、前記プロセッサは、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを含むデータストリームを構成し、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードは、前記クライアントシステムの永続的なストレージに保管またはインストールされず；
前記プロセッサは、前記データストリームを前記クライアントシステムに送信する；
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータネットワークを通じた、コンピュータソフトウェアの配信に関し、特には、クライアントで実行するために、コンピュータネットワークを通じて、コンピュータソフトウェアを、サーバからクライアントへと提供することに関する。
【背景技術】
【０００２】
コンピュータソフトウェアは、様々な方法で、個々のコンピュータシステムへと配信され得る。例えば、一のソフトウェアは、ＣＤ（Compact  Disc）又はＤＶＤ（Digital  Versatile  Disc）に保管され得る。ユーザは、そのようなディスクを、コンピュータシステムのディスクドライブに挿入し、ディスクに保管された一のソフトウェアを、コンピュータシステムへとインストールすることができる。最近では、コンピュータネットワークが、ソフトウェア配信のための、別のチャネルを提供する。ユーザは、別の、遠隔のコンピュータシステム（例えば、サーバ）から、コンピュータネットワーク（例えば、インターネット）を通じて、一のソフトウェアを、自らのコンピュータシステム（例えば、クライアント）へとダウンロードすることができる。ネットワークを通じてダウンロードされたファイルは、一のソフトウェアが組み込まれた、インストールスイート、スクリプト又は実行ファイルであることが多い。ユーザは、コンピュータシステムのハードドライブの、永続的な場所か、又は一時的なディレクトリに、ダウンロードしたファイルを保存することができる。そして、ユーザは、保存されたファイルを実行し、コンピュータシステムに、一のソフトウェアをインストールすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
コンピュータネットワークを通じてダウンロードしたソフトウェアプログラムを、ソフトウェアを実行するために、コンピュータシステムのハードドライブに保存し、又はインストールすることは、時に、不都合で、煩わしいことがある。
【０００４】
そこで、本発明のある特定の実施形態において、実行可能なコードオブジェクトを、マルチメディアデータのようなデータストリームへと埋め込む方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
特定の実施形態において、方法は：
第一のコンピュータシステムが、第二のコンピュータシステムから、ダウンロード可能なソフトウェアプログラムを特定するＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）を含むソフトウェアスタブを受信する段階と；
前記第一のコンピュータシステムが、受信した前記ソフトウェアスタブをインストールする段階と；
前記ソフトウェアスタブが、前記ＵＲＩを含む要求であって、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードについての前記要求を送信する段階と； 
前記第一のコンピュータシステムと前記第二のコンピュータシステムとの間のネットワーク接続を通じて、前記第一のコンピュータシステムの前記ソフトウェアスタブが、前記第二のコンピュータシステムから送信されたデータストリームにおける前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを受信する段階であって、前記データストリームは、ソフトウェアプログラムの実行可能なコードを含む、段階と；
前記第一のコンピュータシステムが、前記データストリームから、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを抽出する段階と；
前記第一のコンピュータシステムが、動的メモリを、前記ダウンロード可能なソフトウェアプログラムの前記実行可能なコードに割り当てる段階と；
前記第一のコンピュータシステムが、前記データストリームから抽出された前記ダウンロード可能なソフトウェアプログラムの実行可能なコードを、割り当てられた前記動的メモリへと直接ロードし、前記ダウンロード可能なソフトウェアプログラムの実行可能なコードは、前記第一のコンピュータシステムの永続的なストレージに保管またはインストールされない、段階と；
前記第一のコンピュータシステムが、割り当てられた前記動的メモリにロードされた、前記ダウンロード可能なソフトウェアプログラムの前記実行可能なコードを起動することにより、前記ダウンロード可能なソフトウェアプログラムを実行する段階と；を含む。
【０００６】
本開示の、これらの特徴、態様及び利点及び他の特徴、態様及び利点は、以下の詳細な説明中で、次の図面とともに、より詳細に説明される。
【図面の簡単な説明】
【０００７】
【図１】クライアントで実行するために、サーバからクライアントへ、一のコンピュータソフトウェアを提供する例示的な方法を表す図。
【図２】例示的なネットワーク環境を表す図。
【図３】例示的なコンピュータシステムを表す図。
【発明を実施するための形態】
【０００８】
本開示は、いくつかの実施形態への参照とともに、添付される図面を用いて説明される。以下の説明において、本開示の完全な理解を提供するために、多数の特定の詳細について説明される。しかしながら、当業者にとって、本開示が、これらの特定の詳細のいくつか又は全てがなくとも実行可能であることは、明らかである。他の例において、既知の処理ステップ及び／又は構造は、本開示を不要に曖昧としないよう、詳細には説明されない。さらに、本開示は、特定の実施形態に関して説明されるが、かかる説明は、説明される実施形態への開示を限定することを意図していない。一方で、かかる説明は、添付されるクレームによって定義される開示の精神及び範囲に含まれ得る、代替、修正及び均等物をカバーすることを意図している。
【０００９】
コンピュータソフトウェアは、コンピュータネットワーク（例えば、インターネット）を通じて、あるコンピュータシステムから、別のコンピュータシステムへと、配信され得る。実際に、多くのソフトウェア開発者、製造者及び配信者は、ソフトウェア配信のために、コンピュータネットワークが、便利で、高速で、コストパフォーマンスの高いチャネルであると考えている。例えば、ユーザは、企業のウェブサイトから、企業によって開発された、一のコンピュータソフトウェアの最新バージョンを、ダウンロードすることができる。典型的なシナリオにおいて、ユーザは、自らのコンピュータシステムで実行されるウェブブラウザで、一のソフトウェアへのダウンロードリンクを含むウェブページを読み込み、ウェブページ内で提供されるダウンロードリンクをクリックすることができる。これにより、ファイルが、ユーザのコンピュータシステムへとダウンロードされる。このファイルは、インストールスクリプト、実行ファイル又はソフトウェア本体の実行可能なコードであり得る。ユーザは、自らのコンピュータシステムのハードドライブに、そのファイルを保存することができる。そのファイルが、インストールスクリプト又は実行ファイルである場合には、ユーザは、ダウンロードしたファイルを実行して、自らのコンピュータシステムに、ソフトウェアをインストールすることができる。一方で、そのファイルがソフトウェアの実行可能なコードである場合には、ユーザは、直接、ソフトウェアを実行することができる（例えば、実行可能なファイルをダブルクリックすることにより）。
【００１０】
コンピュータネットワークを通じてダウンロードしたソフトウェアプログラムを、ソフトウェアを実行するために、コンピュータシステムのハードドライブに保存し、又はインストールする必要があることは、時に、不都合で、煩わしいことがある。例えば、第一に、ハードドライブへダウンロードしたファイルを保管すること、および、コンピュータシステムにソフトウェアをインストールすることは、たびたび、時間がかかる。そして、一のソフトウェアのサイズが大きい場合には（例えば、Adobe社のPDF  Reader（登録商標））、インストール処理に、顕著に時間がかかる可能性がある。コンピュータシステムのユーザは、ダウンロードしたソフトウェアを実行する前に、いくつかのステップ（例えば、インストール、セットアップ等）を踏む必要がある。第二に、ファイルをハードドライブに保存し、ソフトウェアをコンピュータシステムにインストールすることは、コンピュータシステムのストレージ容量（例えば、ハードドライブ空間）を使い果たす。時に、コンピュータシステム（例えば、ネットブック又はノートブックコンピュータ）は、ユーザがコンピュータシステムにインストールしたいと思っているソフトウェアの全てに対して、十分なストレージ空間を有していないことがある。第三に、ソフトウェア開発者は、時々、ソフトウェアを更新し、そのソフトウェアの新しいバージョンをリリースし得る。一のソフトウェアの新しいバージョンは、通常、古いバージョンより、よりよい品質である。
従って、ユーザは、ソフトウェアを適度に最新に保ちたいと考え得る。しかしながら、一のソフトウェアを更新するために、ユーザは、現在、自らのコンピュータシステムにインストールされている古いバージョンのソフトウェアをアンインストールしてから、新しいバージョンのものをダウンロードし、インストールする必要がある。
【００１１】
これらの問題のいくつかに対処する目的で、特定の実施形態では、あるコンピュータシステム（例えば、クライアント）のユーザは、ユーザのコンピュータシステムの永続的なストレージ（例えば、ハードドライブ）へ、ダウンロードしたソフトウェアプログラムを保管し、あるいはインストールする必要なく、ユーザのコンピュータでの実行を行うために、コンピュータネットワーク（例えば、インターネット）を通じて、別のコンピュータシステム（例えば、サーバ）から、コンピュータソフトウェアプログラムをダウンロードすることができる。明確化のために、以後、ソフトウェアをダウンロードし、そのソフトウェアが実行されるコンピュータシステムを、「クライアント」と呼び、ソフトウェアがダウンロードされるコンピュータシステムを、「サーバ」と呼ぶ。しかしながら、当業者は、以下でより詳細に説明される実施形態が、あらゆる二つのコンピュータシステム（例えば、二つのサーバ、二つのクライアント、一つのサーバと一つのクライアント）にうまく適応可能であることを理解することができる。
【００１２】
特定の実施形態において、ここでは「ソフトウェアスタブ」又は、単に「スタブ」と呼ばれる、ソフトウェアプログラムが、クライアントにインストールされ、実行され得る。特定の実施形態において、スタブは、クライアントとサーバの間のネットワーク接続を確立し、そのネットワーク接続を通じて、サーバからクライアントへ、コンピュータソフトウェアプログラムをダウンロードすることができる。特定の実施形態において、サーバからクライアントへダウンロードされた一のソフトウェアについての実行可能なコードは、ネットワーク接続を通じて、サーバからクライアントへ送信される、データストリームの中に組み込まれ得る。データストリームを受信すると、スタブは、一のソフトウェアの実行可能なコードを抽出し、クライアントにおける実行のために、該コードを、クライアントのランダムアクセスメモリ（ＲＡＭ）に直接読込むことができる。一のソフトウェアは、クライアントの如何なる永続的なストレージ（例えば、ハードドライブ）には保存されず、または、インストールされない。一のソフトウェアは、クライアントでのコードの実行を終えると、一のソフトウェアが読込まれた実行可能なコードのＲＡＭ空間が開放され、一のソフトウェアは、クライアント上の何処にも存在しなくなる。
【００１３】
特定の実施形態において、スタブは、クライアントに保管若しくはインストールされたスタンドアロンのソフトウェアプログラムか、又は、クライアントにインストールされたウェブブラウザのプラグイン若しくはアドオンであってもよい。スタブは、コンピュータソフトウェアプログラムを、個々のコンピュータシステムに配信するために適切な、既存のあらゆる方法（例えば、ＣＤ、ＤＶＤ、ネットワークによるダウンロード等）を用いて、クライアントに保管され、あるいはインストールされてもよい。特定の実施形態において、スタブは、小さなソフトウェア（すなわち、サイズが小さい）であり得るため、クライアントのストレージ容量を多く消費しない。スタブは、スタンドアロンのソフトウェアプログラムである場合には、単独で実行され、プラグイン又はアドオンソフトウェアである場合には、ウェブブラウザを通じて実行され得る。
【００１４】
コンピュータソフトウェアプログラムをダウンロードして、起動するために、クライアント上で、スタブを用いることにより、スタブのみが、クライアント上に、永続的に保存され、あるいはインストールされる必要がある。他のソフトウェアは、クライアント上で、保管され、あるいはインストールされる必要なく、ダウンロードされ、起動され得る。このことは、クライアントで使用されるストレージ容量を減少させ得る。さらに、一のソフトウェアは、その実行の直前に、クライアント上にダウンロードされる。そのため、特定の実施形態は、そのソフトウェアがダウンロードされ、起動されるたびに、そのソフトウェアの最新のバージョン（又は、いかなる所望のバージョン）を提供することを容易にする。
【００１５】
図１は、クライアント上で永続的にコンピュータソフトウェアを保管し、又はインストールすることなく、クライアントの実行可能なメモリへと直接インストールして、クライアント上で実行するための、サーバからクライアントへの、例示的なコンピュータプログラムのダウンロード方法を示す。特定の実施形態において、図１に示されるステップは、クライアント上で実行されるスタブによって、実行され得る。特定の実施形態において、スタブは、図１に示されるステップを実行可能なように、スタンドアロンのアプリケーションか、又は、クライアントにインストールされたウェブブラウザのプラグイン若しくはアドオンとして、実行され得る。特定の実施形態において、ダウンロードされているソフトウェアプログラムは、アプリケーションプログラムである。
【００１６】
ステップ１００において示されるように、特定の実施形態は、クライアントとサーバの間のネットワーク接続を確立することができる。ネットワーク接続は、コンピュータネットワークに接続された、二つのコンピュータシステムの間で、適切なハンドシェイクを行う方法により、確立され得る。例えば、クライアント上で実行中のスタブは、サーバに接続要求を送信する。そして、サーバは、接続要求を受信すると、その接続要求が受け入れられたか、拒否されたかを示す、応答を送信することができる。サーバが接続要求を受け入れると、特定の実施形態は、これに応じて、クライアントとサーバとの間のネットワーク接続を確立することができる。
【００１７】
特定の実施形態において、クライアント上で実行中のスタブによって、サーバからクライアントへとダウンロードされた各ソフトウェアプログラムは、固有の識別子によって、識別され得る。この固有の識別子は、クライアントのスタブがダウンロードを所望するソフトウェアが何であるかを、サーバに通知するために用いられ得る。特定の実施形態において、ダウンロード可能な各ソフトウェアは、ネットワーク資源とみなすことができる。従って、ダウンロード可能な特定のソフトウェアは、その固有のネットワークパス又はＵＲＩ（Uniform  Resource  Identifier）によって、特定することができる。
【００１８】
特定の実施形態において、特定のソフトウェアをダウンロードする目的で、ネットワーク接続を確立するために、クライアントのユーザは、特定のソフトウェアの固有の識別子（例えば、ＵＲＩ）を、スタブがスタンドアロンのアプリケーションである場合にはクライアント上で実行中のスタブへ直接提供することができ、あるいは、プラグインとしてのスタブを有するウェブブラウザへ提供することができる。このプロセスは、ウェブページのＵＲＬ（Uniform  Resource  Locator）をウェブブラウザへ提供することによって、ウェブページを要求することに、とても似ている。例えば、ユーザは、ビデオデータストリームに対応するＵＲＬをクリックすることができる。それにより、プラグインは、ＵＲＬを受け取り、以下に示される処理フローを開始する。スタブは、ユーザが要求している特定のソフトウェアの識別子に基づいて（例えば、要求されているソフトウェアのＵＲＩを、サーバのＩＰアドレスとマッピングすることにより）、ネットワーク接続がどの特定のサーバに対して確立されるべきかを決定する。特定の実施形態において、スタブは、ユーザが、ソフトウェアを都合よく検索できるような、ソフトウェアの個々の識別子のブックマークを可能とする、ユーザインターフェース（UI）を提供することができる。
【００１９】
特定の実施形態において、特定のサーバにネットワーク接続を要求するとき、スタブは、ユーザが要求している特定のソフトウェアの固有の識別子を、接続要求とともに、あるいは接続要求の一部として、サーバに送信することができる。サーバは、どの特定のソフトウェアを要求するクライアントに送信すべきかを決定することができる。その処理は、ウェブブラウザを介して、（例えば、ウェブページに含まれた、ダウンロード可能なファイルへのＵＲＬ又はＵＲＩリンクをクリックすることにより）データストリームを呼び出すことと類似し得る。
【００２０】
ステップ１０２において示されるように、特定の実施形態において、サーバは、データストリームを、要求したクライアント、特に、要求したクライアント上で実行中のスタブに、送信することができる。ネットワーク接続は、ＴＣＰ（Transport  Control  Protocol）接続、ＵＤＰ（User  Datagram  Protocol）接続又は他の適切な接続であってもよい。特定の実施形態において、データストリームは、ビデオストリーム又はオーディオストリームであってもよい。特定の実施形態において、スタブによって要求された特定のソフトウェアは、一以上のデータパケットとして、データストリーム内に埋め込まれ得る。例えば、ソフトウェアは、ビデオコーデックによりエンコードされたビデオストリームを受信し、そのデータをデコードし、クライアントのディスプレイ上にビデオデータを描画する、ビデオデコーダであってもよい。
【００２１】
特定の実施形態において、要求されたソフトウェアの実行可能なコードは、データストリームの中に埋め込まれ得る。特定の実施形態において、要求されたソフトウェアの実行可能なコードは、機械コード又はネイティブコードであってもよく、プラットフォーム依存であってもよい。特定の実施形態において、要求されたソフトウェアの実行可能なコードは、（例えば、クライアントのアーキテクチャとオペレーティングシステムに基づいて）ソフトウェアを要求した、特定のクライアントのプラットフォームで実行するように、コンパイルされている。
【００２２】
特定の実施形態において、データストリームは、二つの部分を含み得る。特定の実施形態において、データストリームの第一の部分（すなわち、データストリームの最初の部分）は、ソフトウェアの実行可能なコードを含み得る。特定の実施形態において、ソフトウェアの実行可能なコードは、適切な圧縮方法を用いて、任意に圧縮され得る。例えば、zipやgzipのような、ロスレスの圧縮方法が、ソフトウェアの実行可能なコードを圧縮するために、用いられ得る。特定の実施形態において、ソフトウェアの実行可能なコードは、ビデオストリーム内に埋め込まれ得る。ほとんどの種類のビデオストリームは、一般的なコンテナの形式であるため、データ、特にソフトウェアの実行可能なコードは、そのようなビデオストリームの中に、埋め込まれ得る。特定の実施形態において、データストリームの第一の部分は、ソフトウェアの実行可能なコードをロードして実行するために必要なメモリ空間（例えば、ＲＡＭメモリ空間）のサイズを示すパラメータのような、操作上の変数及びパラメータを、さらに含み得る。
【００２３】
特定の実施形態において、データストリームの第二の部分は、ソフトウェアの実行中に、ソフトウェアによって使用され得る、追加のデータを任意に含んでもよい。特定の実施形態において、追加のデータは、適切なエンコーディング方法又は圧縮方法を用いて、任意に、エンコード又は圧縮され、一以上のデータパケットとして、送信され得る。再び、データストリームがビデオストリームである場合には、追加のデータは、ＭＰＥＧエンコーディングのような、ビデオエンコーディング方法を用いて、エンコードされ得る。
【００２４】
特定の実施形態において、データストリームを受信すると、スタブは、そのデータストリームの第一の部分にアクセスすることができ、埋め込まれたソフトウェアの実行可能なコードを抽出する。必要であれば、スタブは、抽出された、ソフトウェアの実行可能なコードをデコードし、あるいは展開してもよい。スタブによって用いられるデコーディング方法又は展開方法は、ソフトウェアの実行可能なコードを送信するサーバによって用いられた、エンコーディング方法又は圧縮方法と対応し得る。例えば、ソフトウェアの実行可能なコードが、適切な圧縮アルゴリズム（例えば、ロスレス圧縮アルゴリズム）を用いて圧縮されている場合には、スタブは、対応する展開アルゴリズムを用いて、そのコードを展開することができる。同様に、ソフトウェアの実行可能なコードが、適切なエンコーディングアルゴリズムを用いてエンコードされている場合には、スタブは、対応するデコーディングアルゴリズムを用いて、デコードし得る。さらに、特定の実施形態において、スタブは、データストリームの第一の部分にアクセスし、ソフトウェアの実行可能なコードをロードし実行するために必要な、メモリ空間のサイズを示すパラメータを抽出することができる。
【００２５】
ステップ１０４において示されるように、特定の実施形態において、クライアント上に、認可されていない、あるいは悪意のあるソフトウェアがダウンロードされることを防止するため、スタブは、適切な検証方法を用いて、データストリームの第一の部分から抽出された、ソフトウェアの実行の可能なコードを検証することができる。特定の実施形態において、信頼されるソース（例えば、信頼されるサーバのドメイン名又はＩＰアドレス）のホワイトリストが、スタブとともに提供され得る。ソフトウェアを受信すると、スタブは、ソフトウェアを送信するソース（例えば、サーバ又はウェブサイト）を、ホワイトリストと比較することができる。ホワイトリストに載っている、信頼されるソースにより送信されたソフトウェアのみが、クライアント上で実行され得る。ホワイトリストにないソースから受信されたソフトウェアは、破棄され、あるいは検疫され得る。特定の実施形態において、データストリームの第一の部分に埋め込まれた、ソフトウェアの実行可能なコードは、署名され、デジタル証明書と関連付けられ得る。スタブは、関連付けられたデジタル証明書を用いて、ソフトウェアの実行可能なコードを検証することができる。
【００２６】
ソフトウェアの実行可能なコードが有効でない場合には（ステップ１０６で「ＮＯ」）、ソフトウェアの実行可能なコードは、クライアント上で起動されず、破棄され得る。一方で、ソフトウェアの実行可能なコードが有効である場合には（ステップ１０６で「はい」）、ステップ１０８に示されるように、特定の実施形態において、スタブが、ソフトウェアの実行可能なコードをロードし、実行するために、十分な量のメモリを割り当てることができる。特定の実施形態において、割り当てられたメモリ量は、データストリームの第一の部分に含まれる変数によって示される、ソフトウェアの実行可能なコードをロードして実行するために必要な、メモリ空間のサイズより小さくなってはならない。特定の実施形態において、割り当てられたメモリは、クライアントの動的なメモリ、仮想メモリ又はＲＡＭであってもよい。
【００２７】
ほとんどのオペレーティングシステムは、アプリケーションプログラムが、動的にメモリを割り当て、開放することのできる、ライブラリ関数を提供し、実行時に、メモリに関連する他の種類の関数を実行する。特定の実施形態において、スタブは、クライアントのオペレーティングシステムによって提供される、適切なライブラリ関数を起動することができ、ソフトウェアの実行可能なコードの、必要なメモリ空間を割り当てる。例えば、「malloc()」は、動的にメモリ空間を確保するための、Ｃ言語及びＣ＋＋言語の標準ライブラリ関数である。マイクロソフト社のWindows（登録商標）プラットフォームにおいて、「VirtualAlloc()」は、仮想アドレス空間において、ページのある領域を予約するためのＷｉｎ３２ライブラリ関数である。一度メモリが割り当てられると、スタブは、割り当てられたメモリ空間に対して、「実行可能」のフラグをセットするために、適切なライブラリ関数を起動することができる。そのフラグは、割り当てられたメモリの中に保管されるデータが、実行可能なコードであるということを、オペレーティングシステムに示す。例えば、マイクロソフト社のWindows（登録商標）プラットフォームでは、オペレーティングシステムに、読み込み、書き込み、実行の権限を有する、十分な量の仮想メモリを要求するために、「PAGE-EXECUTE-READWRITE」フラグを特定することができる。
【００２８】
ステップ１１０において示されるように、特定の実施形態において、スタブは、ソフトウェアの実行可能なコードを、クライアントのハードドライブ上に保存する必要なく、割り当てられたメモリへと、直接にロードすることができる。特定の実施形態において、スタブは、ソフトウェアの実行可能なコードを表すバイナリデータを、割り当てられた動的なメモリ空間へと直接にコピーするために、クライアントのオペレーティングシステムによって提供される、適切なライブラリ関数を起動することができる。例えば、「memcpy（）」は、一のメモリ領域から別のメモリ領域へとデータをコピーするための、Ｃ言語及びＣ＋＋言語の、標準ライブラリ関数である。
【００２９】
特定の実施形態において、スタブは、割り当てられたメモリの中にロードされた、ソフトウェアの実行可能なコードに関する情報を含むための、分岐テーブル（又はジャンプテーブルとも呼ばれる）をさらに調整することができる。かかる処理は、「フィックスアップ（ｆｉｘ−ｕｐ）」処理と呼ばれる。分岐テーブルは、プログラムの制御を、プログラムのある部分から別の部分へ、又は、あるプログラムから別のプログラムへ、転送する効率的な方法である。適切な分岐テーブルのエントリを調整することにより、オペレーションシステムは、現在、割り当てられたメモリにロードされたソフトウェアの実行可能なコードを知ることができる。
【００３０】
フィックスアップ処理の間に実行される実際のステップは、コンピュータシステムのプラットフォーム又はOSによって異なる可能性がある。例えば、マイクロソフト社のWindows（登録商標）プラットフォームでは、実行可能な形式は、典型的に、再配置（relocation）テーブルとインポートテーブルを含む。一般に、実行可能なコードは、固定されたアドレスへロードされることを前提に、リンクされる。実行可能なコードを異なるアドレスへロードするために、実行可能なコードによって使用される絶対アドレスの全てが検出され、ベースのアドレス内での変更に応じるよう、「フィックスアップ」される。
このことは、再配置テーブルを用いることで、達成され得る。特定の実施形態において、実行可能なコードがロードされたとき、全ての絶対アドレスがフィックスアップされるように、再配置テーブルは、実行可能なコードの中の、全ての絶対アドレスのリストを編集する。インポートテーブルは、実行可能なコードが呼び出す可能性のある全てのルーチンの絶対アドレスをリストする。これにより、ＡＰＩルーチンと、他のダイナミックリンクライブラリ（ＤＬＬ）の中のルーチンの両方を含むことができる。これらのインポートアドレスは、現在のプロセスについてのアドレス空間内の、ルーチンの実際のアドレスで置き換えられる。インポートテーブルは、実行可能なコードの中の、それらのアドレスの位置のリストである（アドレスは、ジャンプテーブル又はトランポリン領域内に存在し得るが、間接呼び出しのためのデータのリストでもあり得る）。
【００３１】
特定の実施形態は、マイクロソフト社のWindows（登録商標）オペレーティングシステムにおいて使用される、実行可能ファイル、オブジェクトコード及びＤＬＬのための一つのファイルフォーマットである、ＰＥ（Portable  Executable）フォーマットを活用する。ＰＥフォーマットは、オペレーティングシステムのソフトウェアアーキテクチャの多数の環境において、幅広い用途を有する。一般に、ＰＥフォーマットは、ラップされた実行可能なコードを管理するための、マイクロソフト社のWindows（登録商標）オペレーションシステムローダのために必要な情報をカプセル化する、データ構造である。特定の実施形態は、ＰＥフォーマットを用いて、ソフトウェアの実行可能なコードをコンパイルし、保存することができる。
【００３２】
ステップ１１２において示されるように、特定の実施形態において、ソフトウェアは、クライアント上で実行され得る。特定の実施形態において、ソフトウェアの実行可能なコードは、自身が保管される、割り当てられた動的なメモリから、直接に起動され得る。特定の実施形態において、スタブは、割り当てられたメモリ内にロードされたソフトウェアの実行可能なコードに、実行を開始させることができる。したがって、スタブは、その実行を、ソフトウェアへと移すことができる。
【００３３】
１１４において示されるように、特定の実施形態において、スタブは、ソケット、より正確には、クライアントとサーバ間のネットワーク接続と関連付けられた、インターネットソケット又はネットワークソケットを、クライアント上で現在実行されているソフトウェアに、渡す（pass）ことができる。ネットワークソケットは、入ってくるデータパケットを、適切なアプリケーションプロセス又はスレッドに、伝達するためのメカニズムを構成する。データストリームと関連付けられたネットワークソケットをソフトウェアに渡すことにより、ソフトウェアは、データストリームの第二の部分の中の追加のデータを含む、追加のデータパケットを、受け取ることができる。ソフトウェアは、データストリームの第二の部分に含まれる追加のデータを使う（例えば、処理する）ことができる。特定の実施形態において、スタブは、クライアントのオペレーティングシステムによって提供される、適切なライブラリ関数を呼び出し、ネットワークソケットを、現在実行中のソフトウェアに渡すことができる。例えば、Ｗｉｎｓｏｃｋとも呼ばれる，Windows（登録商標）ソケットアプリケーションプログラミングインターフェース（ＡＰＩ）では、ネットワークソケットは、「WSADuplicateSocket()」関数により、一のプロセスから別のプロセスへ、渡され得る。
【００３４】
ソフトウェアプログラムは、完了するまで、その実行を継続することができる。特定の実施形態において、ソフトウェアプログラムが、その実行を完了すると（すなわち、終了すると）、ソフトウェアの実行可能なコードをロードするために使用されていた動的なメモリ空間は、（例えば、クライアントのオペレーティングシステムにより）開放され得る。後に、かかるメモリ空間は、他の目的のために使用され得る。他のデータは、そのメモリ空間にロードされ、ソフトウェアプログラムの実行可能なコードを上書きする。この点において、ソフトウェアプログラムは、クライアントへあらゆる状態の変更（例えば、ドライブ上のファイル、システムのレジストリの変更等）を加えることなく、クライアント上に存在しないものとなる。なぜならば、ソフトウェアプログラムは、スタブ２３２によって、メモリに直接にインストールされており、いくつかの実施形態における、ブラウザキャッシュ又は他の一時的なデータ記憶方式を含む、クライアント上の永続的な媒体には、保管されていないためである。
【００３５】
ユーザのプリファレンス、設定、及びダウンロードされた、データストリームからの実行可能なコードのモジュールそのもののような、様々な状態やアプリケーションデータのキャッシュを可能にするために、スタブ２３０は、リソースフォークを介して、自らのファイルコンテナの中に、そのようなデータを保管することができる。この方式により、スタブ２３２は、複数のシステムにわたって、完全にポータブルとなる。例えば、スタブの既知のインスタンス（ファイルコンテナを含む）は、電子メールに添付され、又は、ＵＳＢドライブにロード等されて、別のシステムへと移転させられ得る。
【００３６】
いくつかの実装において、ストリームに埋め込まれ、スタブ２３２によって起動される、第一の実行可能なコードオブジェクトは、それ自身が、第二の実行可能なコードオブジェクトを含む、別のデータストリームを要求することによって、別のプロセスを生成させることができる。第二の実行可能なコードは、第一のコードのオブジェクトの子プロセスとして、起動され、第一の実行可能なコードオブジェクトにより生成された、同一のサンドボックスのファイルシステムを共有することができる。例えば、第一の実行可能なコードオブジェクトは、仮想マシンであり、該コードオブジェクトは、一以上の第二の実行可能なコードオブジェクトを、メモリ内で、かつ、第一の仮想マシンのコードオブジェクトによるサンドボックスの中で、完全に実行させることができる。特定の実装において、例えば、第二のコードオブジェクトによるデータ記憶サブシステムへの書き込みは、仮想マシンによって、メモリへとなされ、ユーザがクライアント２３０からログオフした場合に分析され得る、周辺機器にはなされない。例えば、この実施形態は、ソフトウェアのデモ版を準備するために用いられ得る。第一の実行可能なコードオブジェクトが、デモ又はテストされる第二のプログラムのサンドボックスを提供する仮想マシンであり得るためである。上述したように、第一及び第二のコードオブジェクトが終了したとき、メモリ内のそれらの全ての形跡は消去される。上述の実施形態は、一般的に、アプリケーションの実行中にキャッシュされるデータへの、認可されないアクセスを防ぐためにも、用いられ得る。
【００３７】
特定の実施形態は、ネットワーク環境において、実装され得る。図２は、例示的なネットワーク環境２００を示す。ネットワーク環境２００は、一以上のサーバ２２０と、一以上のクライアント２３０とを、互いに接続するネットワーク２１０を含む。特定の実施形態において、ネットワーク２１０は、イントラネット、エクストラネット、仮想プライベートネットワーク（ＶＰＮ）、ローカルエリアネットワーク（ＬＡＮ）、無線ＬＡＮ（ＷＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、メトロポリタンエラアネットワーク（ＭＡＮ）、通信ネットワーク、衛星ネットワーク、インターネットの一部、別のネットワーク２１０又はそのようなネットワーク２１０の二以上の組み合わせである。本開示は、あらゆる適切なネットワーク２１０を意図している。
【００３８】
一以上のリンク２５０は、サーバ２２０又はクライアント２３０を、ネットワーク２１０に接続する。特定の実施形態において、一以上のリンク２５０のそれぞれは、一以上の、有線、無線又は光学のリンク２５０を含む。特定の実施形態において、一以上のリンク２５０のそれぞれは、イントラネット、エクストラネット、ＶＰＮ、ＬＡＮ、ＷＬＡＮ、ＷＡＮ、ＭＡＮ、通信ネットワーク、衛星ネットワーク、イントラネットの一部、別のリンク２５０又はそのようなリンク２５０の二以上の組み合わせを含む。本開示は、サーバ２２０とクライアント２３０をネットワーク２１０に接続する、あらゆる適切なリンク２５０を意図している。
【００３９】
特定の実施形態において、各サーバ２２０は、集中型のサーバであるか、又は、複数のコンピュータ又は複数のデータセンタにわたる、分散型のサーバであり得る。サーバ２２０は、ウェブサーバ、ニュースサーバ、メールサーバ、メッセージサーバ、広告サーバ、ファイルサーバ、アプリケーションサーバ、交換サーバ、データベースサーバ又はプロキシサーバのような、様々な種類のサーバであってもよい（但しこれに限られない）。特定の実施形態において、各サーバ２２０は、サーバ２２０によって実現され、又はサポートされる、適切な機能を実行するために、ハードウェア、ソフトウェア若しくは組み込みロジック部品又はそのような部品の二以上の組み合わせを含み得る。例えば、ウェブサーバは、一般に、ウェブページ又はウェブページの特定の要素を含む、ウェブサイトをホストすることができる。より明確には、ウェブサーバは、ＨＴＭＬファイル又は他の種類のファイルをホストし、あるいは、要求に応じてファイルを動的に生成若しくは構成することができ、クライアント２３０からのＨＴＴＰ要求又は他の要求に応じて、クライアントへそれらのファイルを送信することができる。メールサーバは、一般に、電子メールサービスを、様々なクライアント２３０へ提供することができる。データベースサーバは、一般に、一以上のデータストアに保管されたデータを管理するインターフェースを提供することができる。
【００４０】
特定の実施形態において、各クライアント２３０は、ハードウェア、ソフトウェア若しくは組み込みロジック部品又はそのような部品の二以上の組み合わせを含む、電子デバイスであり、クライアント２３０によって実現され、あるいはサポートされる、適切な機能を実行することができる。例えば、クライアント２３０は、デスクトップコンピュータシステム、ノートブックコンピュータシステム、ネットブックコンピュータシステム、ハンドヘルド電子デバイス又は携帯電話であり得るが、これに限られない。クライアント２３０は、クライアント２３０のネットワークユーザが、ネットワーク２１０にアクセスすることを可能にする。クライアント２３０は、マイクロソフトインターネットエクスプローラ又はMozilla  Firefoxのようなウェブブラウザを有し、Googleツールバー又はYahooツールバーのような、一以上のアドオン、プラグイン又は他の拡張を有し得る。クライアント２３０は、そのユーザが、他のクライアント２３０の他のユーザとやりとりすることを可能にする。本開示は、あらゆる適切なクライアント２３０を意図している。
【００４１】
特定の実施形態において、一以上のデータ記憶装置２４０が、一以上のリンク２５０を通じて、一以上のサーバ２２０と、通信でリンクされ得る。特定の実施形態において、データ記憶装置２４０は、様々な種類の情報を保管するために用いられ得る。特定の実施形態において、データ記憶装置２４０に保管される情報は、特定のデータ構造に従って、組織化される。いくつかの特定の実施形態は、サーバ２２０又はクライアント２３０に、データ記憶装置２４０に格納される情報を管理（例えば、検索、修正、追加又は削除）させる、インターフェースを提供することができる。
【００４２】
特定の実施形態において、スタブ２３２は、クライアント２３０上でインストールされ、実行され得る。特定の実施形態では、スタブ２３２は、スタンドアロンのソフトウェアプログラムであるか、又は、クライアント２３０上でインストールされて実行される、ウェブブラウザのような他のソフトウェアプログラムへのプラグイン若しくはアドオンであってもよい。スタブ２３２は、クライアント２３０上で実行されるとき、図１に示されるステップを実行することができる。特定の実施形態において、スタブ２３２は、データストリームに埋め込まれた、ソフトウェアプログラムの実行可能なコードを展開するための、一以上の追加のモジュールを含み得る。別の実施例において、展開モジュールは、そのものがデータストリーム内で符号化されており、データストリームの中に埋め込まれた、一以上の追加のコードモジュールを展開するために、スタブ２３２によって起動されてもよい。
【００４３】
さらに、特定の実施形態では、データストリーム内に埋め込まれた、実行可能なコードモジュールが、例えばデバイス種別、ハードウェア能力、表示モード、周辺機器、グラフィックアクセラレータの能力等のような、一以上のクライアント２３０の属性に基づいて、動的に決定することができる。例えば、異なった実行可能なコードモジュールが、データストリーム内に埋め込まれていてもよく、異なるクライアントに、同一のメディアストリームを使用させることができる。
【００４４】
特定の実施形態は、ハードウェア、ソフトウェア又はハードウェアとソフトウェアの組み合わせとして、実装され得る。例えば、一以上のコンピュータシステムは、特定のロジック又はソフトウェアを実行することができ、ここで記述され、あるいは説明された、一以上のプロセスについての、一以上のステップを実行する（但しこれに制限されない）。一以上のコンピュータシステムは、集中型か、あるいは適切な場所にある複数のコンピュータシステム又は複数のデータセンタを結ぶ、分散型であってもよい。本明細書は、あらゆる適切なコンピュータシステムを意図している。特定の実施形態において、ここで記述され、あるいは説明された、一以上のプロセスについての、一以上のステップの実行は、必ずしも、一以上の特定の地理的な場所に限定される必要は無く、また、必ずしも、時間的に限定される必要は無い。例として、一以上のコンピュータシステムは、リアルタイム、オフライン、バッチモード、又は、それらの適切な組み合わせで、機能を実行することができる（但しこれに制限されない）。一以上のコンピュータシステムは、異なる時間に、異なる場所で、必要に応じて、異なる処理を用いて、一以上の機能の一部を実行することができる。ここで、ロジックとは、ソフトウェアを包含し、適切な場合には、その逆も成り立つ。ソフトウェアとは、一以上のコンピュータプログラムを包含し、必要に応じて、その逆も成り立つ。ソフトウェアとは、データ、命令又はその両方を包含し、必要に応じて、その逆も成り立つ。同様に、データとは、命令を包含し、必要に応じて、その逆も成り立つ。
【００４５】
一以上のコンピュータ読取可能な記憶媒体は、特定の実施形態を実現するソフトウェアを保管するか、別の方法でそのようなソフトウェアを具体化し得る。コンピュータ読取可能な媒体は、必要に応じて、ソフトウェアを、運び、通信し、包含し、収容し、維持し、伝播し、保持し、保管し、送信し、輸送し、あるいは別の方法で具体化することができる、あらゆる媒体であってもよい。コンピュータ読取可能な媒体は、生物学的、化学的、電子、電磁気、赤外線、磁気、光学、量子若しくは他の適切な媒体又はそのような媒体の二以上の組み合わせであってもよい。コンピュータ読取可能な媒体は、一以上のナノメートル規模の部品を含むか、あるいは、ナノメートル規模の設計又は製造を具体化し得る。例示的なコンピュータ読取可能な記憶媒体は、コンパクトディスク（ＣＤ）、ＦＰＧＡ（field-progＲＡＭmable  gate  arrays）、フロッピーディスク、フロプティカル（floptical）ディスク、ハードディスク、ホログラフィック記憶装置、（ＡＳＩＣ（application-specific  integrated  circuits）のような）集積回路（ＩＣ）、磁気テープ、キャッシュ、プログラマブルロジックデバイス（ＰＬＤ）、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、半導体メモリ及び他の適切なコンピュータ読取可能な記憶媒体を含むが、これに限られない。
【００４６】
特定の実施形態を実現するソフトウェアは、あらゆる適切な（手続き型又はオブジェクト指向の）プログラミング言語で記述され、あるいは、必要に応じて、複数のプログラミング言語の組み合わせによって記述される。（シングルプロセッサ又はマルチプロセッサのコンピュータシステムのような）適切な種類のコンピュータシステム又は複数のシステムは、必要に応じて、特定の実施形態を実現するソフトウェアを実行することができる。汎用のコンピュータシステムは、必要に応じて、特定の実施形態を実現するソフトウェアを実行することができる。
【００４７】
例えば、図３は、特定の実施形態の一以上の部品を実現するために適する、例示的名コンピュータシステム３００を示している。本明細書は、ある特定の構成において、特定の部品を有する、特定のコンピュータシステム３００を記述し、説明するが、本明細書は、あらゆる適切な構成おいて、あらゆる適切な部品を有する、あらゆる適切なコンピュータシステムを意図する。さらに、コンピュータシステム３００は、例えば、一以上の集積回路（ＩＣ）、一以上のプリント基板（ＰＣＢ）、（携帯電話又はＰＤＡのような）一以上のハンドヘルドデバイス若しくは他のデバイス、一以上のＰＣ又は一以上のスーパーコンピュータのような、適切な物理的な形状をとり得る。
【００４８】
システムバス３１０は、コンピュータシステム３００のサブシステムを、互いに接続する。ここでのバスとは、共通の機能を提供する、一以上のデジタル信号線を包含する。本明細書は、適切なバスアーキテクチャを有する、（一以上のメモリバス、一以上の周辺バス、一以上のローカルバス又はそれらの組み合わせのような）あらゆる適切なバスアーキテクチャを含む、あらゆる適切なシステムバス３１０を意図する。例示的なバスアーキテクチャは、ＩＳＡ（Industry  Standard  Architecture）バス、ＥＩＳＡ（Enhanced  ISA）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、ビデオエレクトロニクススタンダーズアソシエーションバス（ＶＬＢ）、ＰＣＩ（Peripheral  Component  Interconnect）バス、ＰＣＩエクスプレス（ＰＣＩ−Ｘ）バス、ＡＧＰ（Accelerated  Graphics  Port）バスを含むが、これに限られない。
【００４９】
コンピュータシステム３００は、一以上のプロセッサ３２０（又は中央処理装置（ＣＰＵ））を含む。プロセッサ３２０は、命令、データ又はコンピュータのアドレスの、一時的なローカルでの記憶のための、キャッシュ３２２を含み得る。プロセッサ３２０は、メモリ３３０を含む、一以上の記憶装置と接続される。メモリ３３０は、ランダムアクセスメモリ（ＲＡＭ）３３２と、リードオンリーメモリ（ＲＯＭ）３３４とを含み得る。データと命令は、プロセッサ３２０とＲＡＭ３３２との間で、双方向にデータを転送し得る。データと命令は、ＲＯＭ３３４からプロセッサ３２０へ、一方向に、データを転送し得る。ＲＡＭ３３２とＲＯＭ３３４は、あらゆる適切なコンピュータ読取可能な記憶媒体を含み得る。
【００５０】
コンピュータシステム３００は、プロセッサ３２０へ、双方向に接続された、固定記憶装置３４０を含む。固定記憶装置３４０は、記憶装置制御ユニット３５２を介して、プロセッサ３２０と接続され得る。固定記憶装置３４０は、追加のデータ記憶容量を提供することができ、あらゆる適切なコンピュータ読取可能な媒体を含むことができる。固定記憶装置３４０は、オペレーティングシステム（ＯＳ）３４２、一以上の実行可能ファイル３４４、一以上のアプリケーション又はプログラム３４６、データ３４８等を保管することができる。固定記憶装置３４０は、一般的に、一次記憶装置より低速な、（ハードディスクのような）二次記憶媒体である。適切な場合には、固定記憶装置３４０に保管される情報は、仮想メモリとして、メモリ３３０に結合され得る。
【００５１】
プロセッサ３２０は、例えば、グラフィックスコントロール３５４、ビデオインターフェース３５８、入力インターフェース３６０、出力インターフェース３６２及び記憶装置インターフェース３６４のような、様々なインターフェースへと接続され得る。それらは、それぞれ、順に、適切な装置へと接続され得る、例示的な入力装置又は出力装置は、ビデオディスプレイ、トラックボール、マウス、キーボード、マイク、タッチディスプレイ、トランスデューサカードリーダ、磁気テープ又は紙テープリーダ、タブレット、スタイラス、音声又は手書き認識装置、バイオメトリクスリーダ又はコンピュータシステムを含むが、これに限られない。ネットワークインターフェース３５６は、プロセッサ３２０を、別のコンピュータシステム又はネットワーク３８０と接続し得る。ネットワークインターフェース３５６により、プロセッサ３２０は、特定の実施形態についてのステップを実行する間に、ネットワーク３８０から情報を読み出し、ネットワーク３８０へ情報を送信することができる。特定の実施形態は、プロセッサ３２０において、単独で実行し得る。特定の実施形態は、プロセッサ３２０と、一以上のリモートプロセッサにおいて、ともに実行し得る。
【００５２】
ネットワーク環境において、コンピュータシステム３００がネットワーク３８０に接続されているとき、コンピュータシステム３００は、ネットワーク３８０に接続されている、他の装置と通信することができる。コンピュータシステム３００は、ネットワークインターフェース３５６を介して、ネットワーク３８０と通信することができる。例えば、コンピュータシステム３００は、（別の装置からの要求又は応答のような）ネットワーク３８０からの情報を、ネットワークインターフェース３５６で、一以上の着信パケットとして、受信することができる。そして、メモリ３３０は、後続の処理のために、その着信パケットを保管することができる。コンピュータシステム３００は、（別の装置への要求又は応答のような）情報を、ネットワークインターフェース３５６から、一以上の発信パケットとして、ネットワーク３８０へ送信することができる。メモリ３３０は、送信に先立って、これを保管することができる。プロセッサ３２０は、メモリ３３０の着信パケット又は発信パケットにアクセスすることができ、必要に応じて、それを処理する。
【００５３】
コンピュータシステム３００は、一以上の入力装置３６６（キーパッド、キーボード、マウス、スタイラスを含む）、一以上の出力装置３６８（一以上のディスプレイ、一以上のスピーカ、一以上のプリンタ等を含む）、一以上の記憶装置３７０及び一以上の記憶媒体３７２を有してもよい。入力装置３６６は、コンピュータシステム３００に外付けされていてもよく、あるいは内蔵されていてもよい。出力装置３６８は、コンピュータシステム３００に外付けされていてもよく、あるいは内蔵されていてもよい。記憶装置３７０は、コンピュータシステム３００に外付けされていてもよく、あるいは内蔵されていてもよい。記憶媒体３７２は、コンピュータシステム３００に外付けされていてもよく、あるいは内蔵されていてもよい。
【００５４】
特定の実施形態は、本明細書で記述され、説明された、一以上の処理についての、一以上のステップを実行するソフトウェアを具体化する、一以上のコンピュータ読取可能な記録媒体を含む、一以上のコンピュータ記憶製品（computer-storage  product）を含む。特定の実施形態において、媒体、ソフトウェア又はその両方の、一以上の部品は、本明細書で記述され、説明された、一以上の処理についての、一以上のステップを特に実行するよう設計され、製造され得る。さらに、あるいは代替として、特定の実施形態において、媒体、ソフトウェア又はその両方の、一以上の部品は、本明細書で記述され、説明された処理専用の設計又は製造ではなく、一般的に利用可能なものであってもよい。例示的な、コンピュータ読取可能な記憶媒体は、（ＣＤ−ＲＯＭのような）ＣＤ、ＦＰＧＡ、フロッピーディスク、フロプティカルディスク、ハードディスク、ホログラフィック記憶装置、（ＡＳＩＣのような）ＩＣ、磁気テープ、キャッシュ、ＰＤＬ、ＲＡＭ、ＲＯＭ、半導体メモリ及び他の適切なコンピュータ読取可能な記憶媒体を含むが、これに限られない。特定の実施形態において、ソフトウェアは、コンパイラが生成する機械語又はコンパイラがインタプリタを用いて実行可能な高級コードを含む一以上のファイルであり得る。
【００５５】
例として、メモリ３３０は、ソフトウェアを具体化する、一以上のコンピュータ読取可能な記憶媒体を含んでもよい。そして、コンピュータシステム３００は、プロセッサ３２０がそのソフトウェアを実行した結果として、本明細書で記述され、あるいは説明された、特定の機能を提供することができる。メモリ３３０は、そのソフトウェアを保管することができ、プロセッサ３２０は、そのソフトウェアを実行することができる。メモリ３３０は、そのソフトウェアを具体化する大容量記憶装置３３０中の、コンピュータ読取可能な記憶媒体から、あるいは、ネットワークインターフェース３５６を介して、一以上の他のソースから、そのソフトウェアを読み出すことができる。ソフトウェアを実行するとき、プロセッサ３２０は、本明細書で記述され、又は説明された、一以上の処理についての、一以上のステップを実行することができる。その処理は、メモリ３３０内に、記憶のための、一以上のデータ構造を定義する段階と、必要に応じて、そのソフトウェアの一以上の部品によって指示される通りに、一以上のデータ構造を修正する段階とを含む。追加で、あるいは代替として、コンピュータシステム３００は、本明細書で記述され、又は説明された、特定の機能を、ハードウェアに組み込まれたロジックか、あるいは回路内に具体化されたロジックの結果として、提供することができる。そのロジックは、ソフトウェアの代わりに、あるいはソフトウェアとともに動作し、本明細書で記述され、又は説明された、一以上の処理についての、一以上のステップを実行する。本明細書は、必要に応じて、ハードウェアとソフトウェアの適切な組み合わせを含む。
【００５６】
本明細書は、特定の順序で生ずる特定の演算について記述し、あるいは説明したが、あらゆる適切な順序で行われる、適切な演算を意図している。さらに、本明細書は、適切な順序で、一回以上、繰り返される、適切な演算を意図している。本明細書は、順番に生ずる特定の演算について記述し、あるいは説明したが、必要に応じて、略同時に行われる、適切な演算を意図している。本明細書で記述され、あるいは説明される、あらゆる適切な演算又は演算の連続は、中断され、一時停止され、あるいは、必要に応じて、オペレーティングシステム又はカーネルのような、他の処理によって制御され得る。かかる動作は、オペレーティングシステム環境において動作し得る。あるいは、システム処理の全て又は本質的な部分を占める独立した手順として動作し得る。
【００５７】
本明細書は、当業者が理解するであろう、例示的な本実施形態への全ての変更、置換、バリエーション、代替又は改良を包含する。同様に、必要に応じて、添付されたクレームは、当業者が理解するであろう、例示的な本実施形態への全ての変更、置換、バリエーション、代替又は改良を包含する。
【図１】
0005459743.tif 000002
【図２】
0005459743.tif 000003
【図３】
0005459743.tif 000004