(57)【特許請求の範囲】
【請求項１】
第１のコンピューティングデバイスによって第１の仮想メモリを割り当てる段階と、
前記第１のコンピューティングデバイスによって、他のコンピューティングシステムから通信ネットワークを介してスタブの実行可能なコードを受信する段階と、
前記第１のコンピューティングデバイスによって、前記スタブの前記実行可能なコードを前記第１の仮想メモリから直接実行する段階と、
前記第１のコンピューティングデバイスによって、前記スタブの前記実行可能なコードが促したソフトウェアの第１の部分（first piece of software）の実行可能なコードをダウンロードする段階と、
前記第１のコンピューティングデバイスによって、ソフトウェアの前記第１の部分の前記実行可能なコードを実行する段階と、
前記第１のコンピューティングデバイスによって、ソフトウェアの前記第１の部分の前記実行可能なコードが促したソフトウェアの第２の部分（second piece of software）の実行可能なコードをダウンロードする段階と、
前記第１のコンピューティングデバイスによって、ソフトウェアの前記第２の部分の前記実行可能なコードを実行する段階と、
を備える方法。
【請求項２】
前記第１のコンピューティングデバイスによって、ソフトウェアの前記第２の部分の前記実行可能なコードを、ソフトウェアの前記第１の部分の前記実行可能なコードの子プロセスとして起動する段階を更に備える請求項１に記載の方法。
【請求項３】
ソフトウェアの前記第２の部分の前記実行可能なコードは、ソフトウェアの前記第１の部分の前記実行可能なコードにより生成されたサンドボックス・ファイルシステムを共有する請求項２に記載の方法。
【請求項４】
ソフトウェアの前記第１の部分は、仮想マシンである請求項２に記載の方法。
【請求項５】
前記第１のコンピューティングデバイスによって、前記ソフトウェアの第２の部分の前記実行可能なコードを、前記仮想マシンのコードオブジェクトによってサンドボックス化されたメモリ内で実行することを許可する段階を更に備える請求項４に記載の方法。
【請求項６】
前記第１のコンピューティングデバイスによって、ソフトウェアの前記第２の部分により行われるデータストレージシステムへの書き込みを、メモリへと書き込み、
前記第１のコンピューティングデバイスによって、ソフトウェアの前記第２の部分により行われる前記データストレージシステムへの書き込みを、周辺デバイスへと書き込まない、
請求項４に記載の方法。
【請求項７】
ソフトウェアの前記第２の部分は、デモンストレーションバージョンである請求項４に記載の方法。
【請求項８】
前記第１のコンピューティングデバイスによって、ソフトウェアの前記第１の部分の前記実行可能なコードの実行が終了した後に、ソフトウェアの前記第１の部分およびソフトウェアの前記第２の部分をメモリから除去する段階を更に備える請求項１に記載の方法。
【請求項９】
１または複数のプロセッサにより実行可能な複数の命令を格納するメモリと、
前記メモリに接続された１または複数のプロセッサと、
を備え、
前記メモリに格納された前記複数の命令は、前記１または複数のプロセッサに、
第１の仮想メモリを割り当てる段階と、
他のコンピューティングシステムから通信ネットワークを介してスタブの実行可能なコードを受信する段階と、
前記スタブの前記実行可能なコードを前記第１の仮想メモリから直接実行する段階と、
前記スタブの前記実行可能なコードが促したソフトウェアの第１の部分（first piece of software）の実行可能なコードをダウンロードする段階と、
ソフトウェアの前記第１の部分の前記実行可能なコードを実行する段階と、
ソフトウェアの前記第１の部分の前記実行可能なコードが促したソフトウェアの第２の部分（second piece of software）の実行可能なコードをダウンロードする段階と、
ソフトウェアの前記第２の部分の前記実行可能なコードを実行する段階と、
を実行させるためのものである
システム。
【請求項１０】
前記メモリは、前記１または複数のプロセッサに、ソフトウェアの前記第２の部分の前記実行可能なコードを、ソフトウェアの前記第１の部分の前記実行可能なコードの子プロセスとして起動する段階を更に実行させる複数の命令を更に格納する請求項９に記載のシステム。
【請求項１１】
ソフトウェアの前記第１の部分は、仮想マシンであり、
前記メモリは、前記１または複数のプロセッサに、前記ソフトウェアの第２の部分の前記実行可能なコードを、第１の仮想マシンのコードオブジェクトによってサンドボックス化されたメモリ内で実行することを許可する段階を実行させる複数の命令を更に格納する請求項１０に記載のシステム。
【請求項１２】
前記メモリは、前記１または複数のプロセッサに、ソフトウェアの前記第２の部分により行われるデータストレージシステムへの書き込みを、メモリへと書き込み、ソフトウェアの前記第２の部分により行われるデータストレージシステムへの前記書き込みを、周辺デバイスへと書き込まないことを実行させる複数の命令を更に格納する請求項１１に記載のシステム。
【請求項１３】
仮想メモリから直接実行されるコンピュータプログラムであって、
前記コンピュータプログラムの実行可能なコードが促したソフトウェアの第１の部分（first piece of software）の実行可能なコードをダウンロードする段階と、
ソフトウェアの前記第１の部分の前記実行可能なコードを実行する段階と、
ソフトウェアの前記第１の部分の前記実行可能なコードが促したソフトウェアの第２の部分（second piece of software）の実行可能なコードをダウンロードする段階と、
ソフトウェアの前記第２の部分の前記実行可能なコードを実行する段階と、
をコンピュータに実行させる複数の命令を備えるコンピュータプログラム。
【請求項１４】
ソフトウェアの前記第２の部分の前記実行可能なコードを、ソフトウェアの前記第１の部分の前記実行可能なコードの子プロセスとして起動する段階を前記コンピュータに実行させる複数の命令を更に備える請求項１３に記載のコンピュータプログラム。
【請求項１５】
ソフトウェアの前記第２の部分の前記実行可能なコードは、ソフトウェアの前記第１の部分により生成されたサンドボックス・ファイルシステムを共有する請求項１４に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、コンピュータネットワーク経由のコンピュータソフトウェアの配信に関しており、より詳しくは、クライアントにソフトウェアのどの部分もインストールせずに、サーバからクライアントにコンピュータネットワーク経由で、クライアントで実行するためのコンピュータソフトウェアを配置することに関する。
【背景技術】
【０００２】
コンピュータソフトウェアは、様々な方法で個々のコンピュータシステムに配信されてよい。たとえば、ソフトウェアの一部分（a piece of software）がコンパクトディスク（ＣＤ）またはデジタルバーサタイルディスク（ＤＶＤ）に格納されていてよい。ある人はこのディスクをコンピュータシステムのディスクドライブに配置して、ディスクに格納されているこのソフトウェアの一部分をコンピュータシステムに設置することができる。より最近には、コンピュータネットワークは、ソフトウェア配信用に別のチャネルを提供するようになっている。ある人は、コンピュータネットワーク（たとえばインターネット）経由で遠隔コンピュータシステム（たとえばサーバ）から、ソフトウェアの一部分を自身のコンピュータシステム（たとえばクライアント）にダウンロードすることができる。ネットワーク経由でダウンロードされたファイルは、ソフトウェアの一部分が埋め込まれている一体型のインストーラ（installation suite）、スクリプト、実行可能命令である場合も多い。この人は、ダウンロードされたファイルを自身のコンピュータシステムのハードドライブ（永久的な位置または一時的なディレクトリ）に保存して、保存したファイルを実行して、ソフトウェアの一部分を自身のコンピュータシステムにインストールすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本開示は、概して、コンピュータネットワーク経由のコンピュータソフトウェアの配信に関しており、より詳しくは、クライアントにソフトウェアのどの部分もインストールせずに、サーバからクライアントにコンピュータネットワーク経由で、クライアントで実行するためのコンピュータソフトウェアを配置することに関する。
【課題を解決するための手段】
【０００４】
特定の実施形態では、第１のコンピューティングデバイスによって第１の仮想メモリを割り当てる段階と、第１のコンピューティングデバイスによって、他のコンピューティングシステムから通信ネットワークを介してスタブの実行可能なコードを受信する段階と、第１のコンピューティングデバイスによって、スタブの実行可能なコードを第１の仮想メモリから直接実行する段階と、第１のコンピューティングデバイスによって、スタブの実行可能なコードが促したソフトウェアの第１の部分（first piece of software）の実行可能なコードをダウンロードする段階と、第１のコンピューティングデバイスによって、ソフトウェアの第１の部分の実行可能なコードを実行する段階と、第１のコンピューティングデバイスによって、ソフトウェアの第１の部分の実行可能なコードが促したソフトウェアの第２の部分（second piece of software）の実行可能なコードをダウンロードする段階と、第１のコンピューティングデバイスによって、ソフトウェアの第２の部分の実行可能なコードを実行する段階と、を備える方法が提供される。
【０００５】
本開示のこれらまたはその他の特徴、側面、および利点を、以下の詳細な説明で、以下の図面を参照しながら詳述する。
【図面の簡単な説明】
【０００６】
【図１】クライアントのソフトウェアのどの部分もインストールせずに、サーバからクライアントに、クライアントで実行されるべき１つのコンピュータソフトウェアを配置する方法の一例を示す。
【図２】サーバからクライアントに、クライアントで実行されるべき１つのコンピュータソフトウェアをストリーミングする方法の一例を示す。
【図３】ネットワーク環境の一例を示す。
【図４】コンピュータシステムの一例を示す。
【発明を実施するための形態】
【０００７】
本開示を、添付図面に示す本開示のいくつかの実施形態を参照して説明する。以下の記載では、本開示の完全な理解を促すために複数の詳細を示している。しかし、当業者には、本開示を、これら詳細の一部または全てがなくても実行することができることは明らかである。また場合によっては、公知の処理段階および構造の両方または片方を詳述しないことで、本開示を不当にあいまいにしないようにしている箇所もある。加えて、開示は特定の実施形態との関連で記載しているが、この記載は記載されている実施形態の開示を制限する意図はない点を理解されたい。記載は、添付請求項が定義する開示の範囲および精神を逸脱しない代替例、変形例、および均等物を含むことを意図している。
【０００８】
コンピュータソフトウェアは、１つのコンピュータシステム（たとえばサーバ）から別のコンピュータシステム（たとえばクライアント）に、コンピュータネットワーク（たとえばインターネット）経由で配信されてよい。実際、ますます多くの数のソフトウェア開発業者、製造業者、および配信業者が、ソフトウェア配信においてコンピュータネットワークを、便利で、早く、コスト効率のよいチャネルとして重宝している。たとえば、ある会社が開発した１つのコンピュータソフトウェアの最終バージョンを、その会社のウェブサイトからダウンロードすることができる場合がある。通常のシナリオでは、この人は、コンピュータシステムで実行されるウェブブラウザのソフトウェアの一部分へのダウンロードリンクを含むウェブページをロードして、ウェブページに提供されているダウンロードリンクをクリックすることを含み、ウェブページをロードすることができる。これにより、通常、ファイルはその人のコンピュータシステムにダウンロードされる。このファイルは、ソフトウェア自身のインストールスクリプト、実行可能命令、または、実行可能なコードであってよい。この人は、この人のコンピュータシステムのハードドライブにファイルを保存することができる。このファイルがインストールスクリプトまたは実行可能命令である場合、この人は、ダウンロードしたファイルを実行して、ソフトウェアを自身のコンピュータシステムにインストールしてよい。他方で、もしもファイルがソフトウェアの実行可能なコードである場合には、この人は、ソフトウェアを直接実行することができる（たとえば、実行可能ファイルをダブルクリックすることなどで）。
【０００９】
ときとして、コンピュータネットワーク経由でコンピュータシステムのハードドライブにダウンロードされたソフトウェアプログラムを保存またはインストールして、プログラムを実行することは、不便であり手間がかかる。たとえば第一に、ダウンロードしたファイルをハードドライブに保存してからソフトウェアをコンピュータシステムにインストールすると時間がかかる場合が多い。さらに、ソフトウェアの一部分のサイズが大きい場合（たとえばＡｄｏｂｅ（登録商標）ＰＤＦ  Ｒｅａｄｅｒ（登録商標）の場合）、インストールプロセスは、実質的に多くの時間がかかる場合がある。コンピュータシステムのユーザは、ダウンロードされたソフトウェアを実行することができるようになる前にいくつもの段階（たとえばインストール、セットアップ等）を踏む必要がある場合がある。第二に、ハードドライブにファイルを保存して、ソフトウェアをコンピュータシステムにインストールすると、コンピュータシステムの記憶容量（たとえばハードドライブのスペース）が使い切られる。コンピュータシステム（たとえばネットブックまたはノートブックコンピュータ）は、ユーザがコンピュータシステムにインストールしたいとおもっているソフトウェアの全てに対して十分な記憶スペースを有さない場合がある。第三に、ソフトウェアの開発業者は、ソフトウェアを更新して、ソフトウェアの新しいバージョンをリリースする場合がある。ソフトウェアの一部分のより新しいバージョンは、通常、古いバージョンよりも品質がよい。したがって人々は、自身のソフトウェアを比較的最新のものに維持したいとおもう。しかし、ソフトウェアの一部分を更新するためには、現在その人のコンピュータシステムにインストールされているソフトウェアの古いバージョンをアンインストールしてから、新しいバージョンをダウンロードしてインストールする必要がある。加えて、一部のソフトウェア開発業者は、このようなインストールを望まないユーザに対しては、ソフトウェアベースのアプリケーションサービスを配信して、永久的なデータ記憶デバイスに最初の利用または後での利用の後でダウンロードしたコードが残存することがないようにしたいと思っている。
【００１０】
これら課題のいくつかを解決するために、特定の実施形態では、コンピュータシステム（クライアント）のユーザが、コンピュータネットワーク（たとえばインターネット）経由で別のコンピュータシステム（たとえばサーバ）から、コンピュータソフトウェアプログラムをダウンロードして、ユーザのコンピュータシステムのいずれかの永久的なストレージ（たとえばハードドライブ）にソフトウェアプログラムまたはその他のいずれかの種類のソフトウェアを格納またはインストールする必要なく、ユーザのコンピュータシステムで実行することができるようにする。言い換えると、ユーザは、ソフトウェアの一部分を自身のコンピュータシステムにダウンロードして、そのソフトウェアの一部分を自身のコンピュータシステムで実行してよい。ソフトウェアの実行が完了した後には（たとえばユーザがソフトウェアを退出した後には）、ユーザのコンピュータシステムにはソフトウェアその他の関連するソフトウェアの痕跡が残らない。
【００１１】
今後、明瞭性を期すために、ソフトウェアのダウンロード先の、ソフトウェアを実行するコンピュータシステムは、「クライアント」と称し、ソフトウェアのダウンロード元のコンピュータシステムは、「サーバ」と称することにする。しかし当業者であれば、詳述される実施形態が、いずれの２つのコンピュータシステム（たとえば２つのサーバ、２つのクライアント、またはサーバとクライアント）に対しても適用可能であることを理解する。加えて、サーバからクライアントにダウンロードされ、クライアントで実行されるソフトウェアの一部分（つまり、ある人が利用を望むソフトウェア）は、対象ソフトウェアと称される。
【００１２】
特定の実施形態では、今後は「スタブソフトウェア」または単に「スタブ」と称される別のソフトウェアの一部分が、対象ソフトウェアのダウンロードおよび実行を助けてもよい。特定の実施形態では、スタブは、いずれかの適切なプログラミング言語で実装され、コンピュータ実行可能なコードとしてコンパイルされてよい。特定の実施形態では、スタブの実行可能なコードは、サーバに格納され、クライアントにダウンロードされて、ウェブブラウザで実行可能な任意の適切なプログラミング言語（たとえば、Ｊａｖａ（登録商標）、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｐｙｔｈｏｎなど）で記述されたクライアント側のスクリプトを利用して実行されてよい。たとえばクライアント側のスクリプトは、クリック可能なリンクとしてウェブページに含まれていてよい。クライアント側のスクリプトにアクセスするためには、ユーザは、クライアント側のスクリプトを含むウェブページを、クライアントに存在しているウェブブラウザ（たとえばＭｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘ、またはＧｏｏｇｌｅ  Ｃｈｒｏｍｅ）を利用してロードすればよい。こうすることで、クライアント側のスクリプトコードがウェブブラウザに送信され、ウェブブラウザにより実行される。
【００１３】
図１は、スタブを利用してクライアントで実行される対象ソフトウェアをサーバからクライアントに配置する方法の一例を示す。特定の実施形態では、ひとたびクライアント側のスクリプトがウェブブラウザで実行されると、スクリプトは、クライアントに存在している外部関数ライブラリにアクセスする（ステップ１００に示されているように）。多くのプログラミング言語が外部関数インタフェースを提供している。外部関数インタフェースは、１つのプログラミング言語に書かれているソフトウェアプログラムがルーチンを起動して、または、別のプログラミング言語で書かれたサービスを利用することができるメカニズムである（たとえば、オペレーティングシステムまたはソフトウェアライブラリが提供する関数）。通常は、プログラミング言語の外部関数インタフェースを実装する関数が、プログラミング言語が提供する外部関数ライブラリに含まれている。たとえば、Ｐｙｔｈｏｎは、「ｃｔｙｐｅｓパッケージ」と称される外部関数ライブラリを提供しており、Ｊａｖａ（登録商標）は、Ｊａｖａ（登録商標）プログラムがネイティブ共有ライブラリにアクセスできるよう、Ｊａｖａ（登録商標）  Ｎａｔｉｖｅ  Ｎａｔｉｖｅ  ＩｎｔｅｒｆａｃｅおよびＪａｖａ（登録商標）  Ｎａｔｉｖｅ  Ａｃｃｅｓｓを提供しており、ＪａｖａＳｃｒｉｐｔ（登録商標）は、ＪａｖａＳｃｒｉｐｔ（登録商標）  Ｎａｔｉｖｅ  Ｉｎｔｅｒｆａｃｅ（ＪＳＮＩ）（ＪａｖａＳｃｒｉｐｔ（登録商標）  Ｆｏｒｅｉｇｎ  Ｆｕｎｃｔｉｏｎ  Ｉｎｔｅｒｆａｃｅ（ＪＳＦＦＩ）とも称される）を提供している。一部のウェブブラウザ（たとえばＭｏｚｉｌｌａ  Ｆｉｒｅｆｏｘ）も、これらウェブブラウザで実行されるネイティブのまたは外部の関数アクセスをサポートしている。
【００１４】
スクリプトコードを書き込む具体的なプログラミング言語に応じて、スクリプトは、そのプログラミング言語の対応する外部関数ライブラリを起動することができる。たとえば、Ｐｙｔｈｏｎであれば、特定のライブラリをロードするために利用可能な「load_library」と称される関数がある。Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）は、指定されたモジュールを呼び出す側のプロセスのアドレススペースにロードするために「LoadLibrary」という関数を提供している。
【００１５】
特定の実施形態では、適切な外部関数インタフェースを通じて、スクリプトが、クライアントに存在しているメモリ割り当て関数へのポインタを取得してよい（ステップ１０２に示されている）。クライアント上で利用可能な具体的なメモリ割り当て関数は、クライアントのオペレーティングシステムまたはクライアント上で利用可能なソフトウェアライブラリによって決定されてよい。たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）は、呼び出す側のプロセスの仮想アドレススペースの１つのページ領域をリザーブまたはコミットするための「VirtualAlloc」という関数を提供している。ＣおよびＣ＋＋プログラミング言語は、両方とも、指定されたサイズのダイナミックメモリ割り当てをするために「malloc」と称されるライブラリ関数を提供している。
【００１６】
特定の実施形態では、メモリ割り当て関数（たとえば「VirtualAlloc」）を利用して、スクリプトが、特定の量のメモリを割り当てる（ステップ１０４参照）。割り当てられるメモリは、スタブの実行可能なコードに対して十分である必要がある。特定の実施形態では、スタブの実行可能なコードは、サーバからダウンロードされて、割り当てられたメモリに書き込まれてよい（ステップ１０６参照）。特定の実施形態では、スタブは、様々な共有ライブラリに含まれているいくつかのライブラリ関数を要求してよい。たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）であれば、共有ライブラリはダイナミックリンクライブラリ（ＤＬＬ）と称される。スタブが必要とする関数を含む共有ライブラリは、適切なライブラリロード関数（たとえば「LoadLibrary」または「Load_library」）を利用してロードされてよい。
【００１７】
特定の実施形態では、スタブの実行可能なコードが書き込まれているメモリが、実行可能メモリとしてマークされる。たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）は、データ実行防止（ＤＥＰ）と称されるメカニズムを提供している（ハードウェアおよびソフトウェア技術の組み合わせであり、悪意のあるコードによる利用からの保護するためにメモリに追加的なチェックを行う）。簡単に言うと、あるプロセス内のすべてのメモリ位置が、明示的に実行可能なコードを含んでいない限り、実行不可能としてマークされる。したがい、スタブの実行可能なコードが書き込まれるメモリ位置を、実行可能としてマークして、スタブコードを実行する必要がある。Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）では、適切なフラグまたは属性を設定することで（たとえば、割り当てられたメモリを、「PAGE_EXECUTE」「PAGE_EXECUTE_READ」「PAGE_EXECUTE_READWRITE」または「PAGE_EXECUTE_WRITECOPY」としてマークすることで）、特定のメモリ位置を実行可能としてマークすることができる。
【００１８】
特定の実施形態では、スクリプトが、割り当てられているメモリのスタブの実行可能なコードへのポインタを取得してよい（ステップ１１０参照）。特定の実施形態では、スタブの実行可能なコードが、メモリから直接起動されてよい（ステップ１１２参照）。特定の実施形態では、スタブは、クライアントにおける対象ソフトウェアのダウンロードおよび実行を促してよい（ステップ１１４参照）。このプロセスは、図２を参照しながら後で詳述する。
【００１９】
特定の実施形態では、スタブがそのタスクを完了した後で（クライアントにおいて対象ソフトウェアのダウンロードおよび実行を促した後で）、スクリプトが、これもまた適切な外部関数インタフェースによって、クライアント上に存在しているメモリ割り当て解除関数へのポインタを取得してよい（ステップ１１６参照）。クライアント上で利用可能な特定のメモリ割り当て解除関数は、クライアントのオペレーティングシステムまたはクライアントで利用可能なソフトウェアライブラリに応じたものであってよい。たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）は、呼び出す側のプロセスの仮想アドレススペースの解放およびコミット解除、または、そのページ領域の解放およびコミット解除を行うために「VirtualFree」と称される関数を提供している。ＣおよびＣ＋＋プログラミング言語は、両方とも、割り当てられたダイナミックメモリを解放するために（たとえば割り当て解除するために）「dealloc」および「free」等のライブラリ関数を提供する。
【００２０】
特定の実施形態では、メモリ割り当て解除関数（たとえば「VirtualFree」）を利用して、スクリプトが、スタブの実行可能なコードが書き込まれたメモリの割り当て解除を実行してよい（ステップ１１８参照）。その後で、このメモリスペースは、他の目的に利用してよく、他のデータを同じメモリスペースにロードして、スタブの実行可能なコードを上書きしてよい。したがってスタブの実行可能なコードが書き込まれているメモリ位置が解放されると（つまり、割り当て解除された後には）、クライアントには、スタブの実行可能なコードがなくなる（たとえば置き換え、除去が行われる）。スタブはクライアントのどの永久的なストレージ（たとえばハードドライブ）にも保存されたりインストールされたりしないので、クライアントにはスタブの実行可能なコードの痕跡がなくなる。
【００２１】
特定の実施形態では、スタブの実行可能なコードが書き込まれているメモリ位置を明示的に割り当て解除する代わりに、メモリ位置を暗示的に解放することができる。たとえばユーザがウェブブラウザを退出する場合、または、クライアント側のスクリプトを含むウェブページを去る場合、スクリプトに関するすべてのメモリ位置を解放するが、これは、スタブの実行可能なコードが書き込まれているメモリ位置も解放することを意味している。
【００２２】
特定の実施形態では、クライアント上の割り当てられているメモリから直接実行されると、スタブは、対象ソフトウェアのダウンロードおよび実行を促す。特定の実施形態では、スタブは、対象ソフトウェアが格納されているサーバとクライアントとの間でネットワーク接続を構築して、ネットワーク接続で、サーバからクライアントに対象ソフトウェアの実行可能なコードをダウンロードしてよい。特定の実施形態では、対象ソフトウェアの実行可能なコードが、ネットワーク接続でサーバからクライアントに送信されるデータストリームに埋め込まれてよい。データストリームを受信すると、スタブは、対象ソフトウェアの実行可能なコードを抽出して、クライアントのランダムアクセスメモリ（ＲＡＭ）に直接ロードして、クライアント上での実行に備えさせてよい。対象ソフトウェアは、スタブ同様に、クライアントのどの永久的なストレージ（たとえばハードドライブ）にも保存またはインストールされない。ひとたび対象ソフトウェアがクライアント上での実行を完了すると、対象ソフトウェアの実行可能なコードがロードされているＲＡＭスペースは解放されてよく、対象ソフトウェアがクライアントのどこにも存在しなくなる。
【００２３】
対象ソフトウェアは、クライアントに保存またはインストールされる必要なく、クライアントにダウンロードまたは起動されてよいので、これにより、クライアントの記憶容量の利用率が減る。さらに、対象ソフトウェアは、クライアントでの実行の直前にダウンロードされるので、対象ソフトウェアの最新またはいずれか所望のバージョンは、対象ソフトウェアがダウンロードまたは起動されるたびに取得されることになる。
【００２４】
図２は、スタブがクライアント上に対象ソフトウェアをダウンロードして実行するための方法の一例を示す。特定の実施形態では、ダウンロードされる対象ソフトウェアはアプリケーションプログラムである。対象ソフトウェアの実行可能なコードは、サーバ上に格納されていてよく、サーバは、スタブの実行可能なコードが格納されているサーバであっても、別のサーバであってもよい。
【００２５】
特定の実施形態では、スタブは、対象ソフトウェアの実行可能なコードが格納されているサーバとクライアントとの間にネットワーク接続を確立することができる（ステップ２００参照）。スタブは、サーバとクライアントとの間に既に構築されている既存の接続（たとえば、ウェブブラウザが構築した接続）にとって代わること、または、新たな接続を構築することができる。スタブが新たなネットワーク接続を構築する場合には、新たな接続は、コンピュータネットワークに連結されている２つのコンピュータシステムの間に任意の適切なハンドシェーク方法を利用して構築されてよい。たとえば、クライアントで実行されているスタブは、サーバに接続要求を送信することができ、サーバは、接続要求を受けると、接続要求を受け付けたか拒絶したかを示す応答を送り返してよい。サーバが接続要求を受け付けた場合には、クライアントとサーバとの間でネットワーク接続が構築されてよい。特定の実施形態では、サーバとクライアントとの間の通信で、限定ではなく例示であるが、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、ユーザデータグラムプロトコル（ＵＤＰ）、またはトランスポート制御プロトコル（ＴＣＰ）等の任意の適切な通信プロトコルが利用されてよい。
【００２６】
特定の実施形態では、サーバに複数のソフトウェアプログラムが格納されている場合があり、または、サーバに特定のソフトウェアプログラムの複数のバージョンが格納されている場合があり、個々のクライアントに対してダウンロードされてよい。特定の実施形態では、クライアントで実行されているスタブによってサーバからクライアントにダウンロードされてよい各ソフトウェアの各バージョンが、固有の識別子により識別されてよい。固有の識別子は、クライアントのスタブがダウンロードを希望する特定のソフトウェアをサーバに通知するために利用されてよい。特定の実施形態では、各ダウンロード可能なソフトウェアが、ネットワークリソースとして捉えられてよい。したがって、特定のダウンロード可能なソフトウェアは、その固有ネットワーク経路またはＵＲＩ（Uniform Resource Identifier）で特定されてよい。スタブは、自身のＵＲＩを利用して対象ソフトウェアを参照してよい。
【００２７】
ソフトウェアの一部分が複数のバージョンを有する場合がある。特定の実施形態では、スタブは、クライアントの対象ソフトウェアの殆どの適切なバージョンを決定することができる。たとえば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムの複数のバージョン（たとえばＷｉｎｄｏｗｓ（登録商標）  ＸＰ、Ｗｉｎｄｏｗｓ（登録商標）  ＭＥ、またはＷｉｎｄｏｗｓ（登録商標）7など）および３２ビットのオペレーティングシステムまたは６４ビットのオペレーティングシステムがある。スタブは、クライアントのオペレーティングシステムを調査して、クライアントのオペレーティングシステムに最もよく適合する、対象ソフトウェアの特定のバージョンを決定する。クライアントのオペレーティングシステムが３２ビットのオペレーティングシステムである場合には、スタブは、対象ソフトウェアの３２ビットのバージョンを特定する。他方、もしクライアントのオペレーティングシステムが６４ビットのオペレーティングシステムである場合には、スタブは、対象ソフトウェアの６４ビットのバージョンを特定する。
【００２８】
特定の実施形態では、対象ソフトウェアを格納している特定のサーバとのネットワーク接続を要求するときに、スタブは、サーバに対して、対象ソフトウェアの固有識別子を、接続要求とともに、または、接続要求の一部として送信してよい。この代わりに、特定の実施形態では、スタブは、サーバとクライアントとの間の接続が構築された後で、別個の要求として、サーバに対象ソフトウェアの識別子を送ってもよい。次いでサーバは、要求を発しているクライアントに対して送るべき特定のソフトウェアを決定する。このプロセスは、ウェブブラウザ経由でデータストリームを起動するプロセスに類似したものであってよい（たとえば、ウェブページに含まれているダウンロード可能なファイルへのＵＲＬまたはＵＲＩリンクをクリックして）。
【００２９】
特定の実施形態では、サーバは、データストリームを、要求を発しているクライアントに（より詳しくは、要求を発しているクライアント上で実行されているスタブに対して）、ネットワーク接続により送信してよい（ステップ２０２参照）。ネットワーク接続は、ＴＣＰ接続、ＵＤＰ接続、ＨＴＴＰ接続、または任意のその他の適切な接続であってよい。特定の実施形態では、データストリームが、ビデオストリームまたはオーディオストリームであってよい。特定の実施形態では、スタブが要求する対象ソフトウェアの実行可能なコードが、データストリームに、１以上のデータパケットとして埋め込まれていてもよい。たとえば、対象ソフトウェアは、ビデオコーデックがエンコードしたビデオストリームを受信して、データをデコードして、ビデオデータをクライアントのディスプレイ上に表示させるビデオデコーダであってもよい。別の例では、対象ソフトウェアがコンピュータゲームであってもよい。
【００３０】
特定の実施形態では、対象ソフトウェアの実行可能なコードが、データストリームに埋め込まれていてもよい。特定の実施形態では、対象ソフトウェアの実行可能なコードが、機械コードまたはネーティブコードであってよく、プラットフォームに依存したものであってよい。特定の実施形態では、対象ソフトウェアの実行可能なコードが、対象ソフトウェアを要求している特定のクライアントのプラットフォーム上で実行されるようにコンパイルされていてもよい（たとえばクライアントのハードウェアアーキテクチャおよびオペレーティングシステムに基づいて）。
【００３１】
特定の実施形態では、データストリームが２つの部分を含んでいてよい。特定の実施形態では、データストリームの第１の部分（つまりデータストリームの最初の部分）が、対象ソフトウェアの実行可能なコードを含んでいてよい。特定の実施形態では、必須ではないが、対象ソフトウェアの実行可能なコードが、任意の適切な圧縮方法を利用して圧縮されてもよい。たとえば、対象ソフトウェアの実行可能なコードの圧縮に、ロスの少ない圧縮方法（たとえばｚｉｐまたはｇｚｉｐなど）を利用することができる。特定の実施形態では、対象ソフトウェアの実行可能なコードが、ビデオストリームに埋め込まれていてもよい。殆どの種類のビデオストリームは、一般的なコンテナフォーマットであり、より詳しくは、対象ソフトウェアの実行可能なコードが、ビデオストリーム等に埋め込まれていてよい。特定の実施形態では、データストリームの第１の部分にも、操作変数およびパラメータ（たとえば、ソフトウェアの実行可能なコードをロード、実行するために必要なメモリスペース（たとえばＲＡＭメモリスペース）のサイズを示すパラメータ等）が含まれていてよい。
【００３２】
特定の実施形態では、データストリームの第２の部分が、随意で、実行中に対象ソフトウェアが消費してよい追加データを含んでもよい。特定の実施形態では、追加データは、必須ではないが、任意の適切なエンコードまたは圧縮法によって暗号化または圧縮され、１以上のデータパケットとして送信されてもよい。ここでも、データストリームがビデオストリームである場合、追加データを、ＭＰＥＧエンコード等のビデオエンコード法によってエンコードしてよい。
【００３３】
特定の実施形態では、データストリームを受信すると、スタブは、データストリームの第１の部分にアクセスして、そこに埋め込まれている対象ソフトウェアの実行可能なコードを抽出することができる。必要な場合には、スタブは、対象ソフトウェアから抽出された実行可能なコードをデコードまたは伸張してよい。スタブが利用するデコードまたは伸張法は、対象ソフトウェアの実行可能なコードをエンコードまたは圧縮したときに利用したエンコードまたは圧縮法に対応するものであってよい。たとえば、対象ソフトウェアの実行可能なコードが、適切な圧縮アルゴリズム（たとえばロスの少ない圧縮アルゴリズム）を利用して圧縮された場合、スタブは、これを対応する伸張アルゴリズムを利用して伸張してよい。同様に、対象ソフトウェアの実行可能なコードが、適切なエンコードアルゴリズムを利用してエンコードされている場合には、スタブは、これを対応するデコードアルゴリズムを利用してデコードすることができる。加えて、特定の実施形態では、スタブは、ここでもデータストリームの第１の部分にアクセスして、対象ソフトウェアの実行可能なコードをロード、実行するために必要なメモリスペースのサイズを示すパラメータを抽出してよい。
【００３４】
特定の実施形態では、無認可のまたは悪意のあるソフトウェアがクライアントにダウンロードされたりクライアント上で実行されたりしないように、スタブは、任意の認証方法を利用してデータストリームの第１の部分から抽出した対象ソフトウェアの実行可能なコードを認証する（ステップ２０４）。特定の実施形態では、信頼できる頒布元（たとえば信頼できるサーバのドメイン名またはＩＰアドレス）のホワイトリストに、スタブを加えてもよい。ソフトウェアの一部分が受信されると、スタブは、そのソフトウェアを送信している頒布元（たとえばサーバまたはウェブサイト）を、ホワイトリストと照合してよい。ホワイトリストにおいて、信頼できる頒布元が送信したソフトウェアのみがクライアント上で実行されてよい。ホワイトリストにない頒布元から受信したソフトウェアは破棄、または、隔離されてよい。特定の実施形態では、データストリームの第１の部分に埋め込まれている対象ソフトウェアの実行可能なコードには署名がされていたり、デジタル証書を関連づけられていたりしてもよい。スタブは、関連づけられているデジタル証書を利用して対象ソフトウェアの実行可能なコードを認証してよい。
【００３５】
対象ソフトウェアの実行可能なコードが無効な場合（ステップ２０６で「ｎｏ」）、対象ソフトウェアの実行可能なコードは、クライアント上で起動されず、破棄されなくてよい。他方で、対象ソフトウェアの実行可能なコードが有効な場合には（ステップ２０６で「ｙｅｓ」）、特定の実施形態では、スタブが、対象ソフトウェアの実行可能なコードをロード、および実行するのに十分な量のメモリをクライアント上に割り当ててよい（ステップ２０８参照）。特定の実施形態では、割り当てられるメモリ量は、対象ソフトウェアの実行可能なコードをロード、および実行するのに必要なサイズ未満ではならない（データストリームの第１の部分に含まれている変数に示されているように）。特定の実施形態では、割り当てられているメモリは、クライアントのダイナミックメモリ、仮想メモリ、またはＲＡＭであってよい。
【００３６】
ほとんどのオペレーティングシステムは、アプリケーションプログラムに対する、仮想またはダイナミックメモリの、および、割り当て解除のアプリケーションプログラムの実行を可能とするライブラリ関数を提供し、ラインタイム中に他の種類のメモリ関連の関数を行わせる。特定の実施形態では、スタブは、適切な外部関数ライブラリによって、クライアントのオペレーティングシステムが提供する適切なライブラリ関数を起動して、対象ソフトウェアの実行可能なコードに必要なメモリスペースを割り当ててよい。たとえば上述したように、「malloc」は、プログラミング言語ＣおよびＣ＋＋両方の、ダイナミックメモリスペースを割り当てるための標準的なライブラリ関数である。Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）プラットフォームについては、「VirtualAlloc」が、仮想アドレススペースのページの１つの領域をリザーブするためのＷｉｎ３２ライブラリ関数である。メモリが割り当てられると、スタブは、適切なライブラリ関数を起動して、割り当てられたメモリスペースのフラグを「実行可能」にする（これは、オペレーティングシステムに対して、割り当てられたメモリに格納されているデータが実行可能なコードであることを示す）。例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）では、属性「PAGE_EXECUTE」、「PAGE_EXECUTE_READ」、「PAGE_EXECUTE_READWRITE」、または「PAGE_EXECUTE_WRITECOPY」が、メモリ割り当てとの関連で特定され（たとえば「VirtualAlloc」を用いて）、オペレーティングシステムに、コードを実行するための権利とともに、動作においてはコードを読み書きする権利を有する十分な量の仮想メモリを要求する。
【００３７】
特定の実施形態では、スタブは、対象ソフトウェアの実行可能なコードをクライアントのハードドライブに保存またはインストールすることなく、割り当てられたメモリ（たとえば割り当てられたダイナミックメモリ）に直接、対象ソフトウェアの実行可能なコードをロードすることができる（ステップ２１０）。特定の実施形態では、スタブは、クライアントのオペレーティングシステムまたはクライアント上のソフトウェアライブラリが提供する適切なライブラリ関数を起動して、対象ソフトウェアの実行可能なコードを表すバイナリデータを、仮想またはダイナミックメモリスペースに直接コピーすることができる。例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）では、「CopyMemory」が、ある位置から別の位置へとメモリブロックをコピーする関数であり、「memcpy」が、プログラミング言語ＣおよびＣ＋＋両方の、あるメモリ位置から別のメモリ位置にデータをコピーするための標準的なライブラリ関数である。
【００３８】
特定の実施形態では、対象ソフトウェアが特定のライブラリ関数を必要とする場合がある。もしも必要とされているライブラリ関数が既にクライアント上に存在している場合、スタブは、対象ソフトウェアの必要とされているライブラリ関数を含む共有ライブラリをロードしてよい。たとえば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）では、共有ライブラリ（たとえばＤＬＬ）が、「LoadLibrary」関数を利用してロードされてよい。他方で、必要なライブラリ関数がクライアント上に存在しない場合には、スタブが、必要なライブラリ関数を含む共有ライブラリまたは必要なライブラリ関数自身を、適切なサーバからダウンロードしてよく、共有ライブラリまたは必要なライブラリ関数のために仮想メモリを割り当て、共有ライブラリまたは必要なライブラリ関数を、割り当てられた仮想メモリに書き込み、対象ソフトウェアが必要なときにライブラリ関数を利用することができるようにしてよい。他方で、実行中に対象ソフトウェアが必要とするリソースについては（ライブラリ関数）、クライアント上に既にリソースが存在している場合には、クライアント上のリソースを利用することができ、もしもクライアント上にリソースが存在していない場合には、スタブは、対象ソフトウェアのためにリソースをダウンロードする。
【００３９】
特定の実施形態では、スタブはさらに分岐テーブル（ジャンプテーブルとも称される）を調節して、割り当てられたメモリにロードされる対象ソフトウェアの実行可能なコードに関する情報を含ませる。このプロセスは、「調整（fix-up）」プロセスと称される場合がある。分岐テーブルは、プログラムの部分間で、またはプログラム間で、プログラム制御を転送するための効率のよい方法である。分岐テーブルの適切なエントリを調節することで、オペレーティングシステムは、割り当てられたメモリにロードされるソフトウェアの実行可能なコードを知ることができる。
【００４０】
調整プロセスで実行される実際のステップは、クライアントのオペレーティングシステムのプラットフォームに応じて変化してよい。たとえば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）プラットフォームでは、実行可能なフォーマットは、通常、再配置テーブルまたはインポートテーブルを有している。一般的には、実行可能なコードは、固定アドレスにロードされることを想定してリンクづけされる。実行可能なコードを異なるアドレスにロードするために、実行可能なコードが利用する絶対アドレスを見つけて、ベースアドレスの変化を考慮して「調整」される。これは、再配置テーブルを利用して行われる。特定の実施形態では、再配置テーブルが、実行可能なコードをロードするときに調整されるように、実行可能なコード内のすべての絶対アドレスリストをコンパイルする。インポートテーブルは、実行可能なコードが呼び出すすべてのルーチンの絶対アドレスをリストにしたものである。これは、ＡＰＩルーチンおよび他のダイナミックリンクライブラリ（ＤＬＬ）のルーチンを両方とも含んでよい。これらインポートアドレスは、現在のプロセスのアドレススペース内のルーチンの実際のアドレスに置き換えられる。インポートテーブルは、実行可能なコード内のこれらアドレスの位置のリストである（アドレスは、ジャンプテーブルまたはトランポリン領域にあってもよいが、間接呼び出しのためのデータリストであってもよい）。
【００４１】
特定の実施形態では、Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ（ＰＥ）フォーマット（Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムで利用される実行可能命令、オブジェクトコード、および、ＤＬＬのファイルフォーマットである）を利用することができる。ＰＥフォーマットは、オペレーティングシステムソフトウェアアーキテクチャの様々な環境で多目的に利用することができる。一般的には、ＰＥフォーマットは、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムローダがラップされた実行可能なコード（wrapped executable code）を管理するために必要な情報を含有するためのデータ構造である。特定の実施形態では、ＰＥフォーマットを利用してソフトウェアの実行可能なコードをコンパイルして保存してよい。他のプラットフォームについては、調整を必要とせずに１つのエントリポイントを必要とする、未加工の実行可能なコードによって本発明の実装が行われてよい。一部の実装例では、未加工の実行可能なコードが調整を行うよう構成することができ、ＥＬＦおよびＭＡＣＨ−Ｏ等のコードをカバーすることができる。
【００４２】
特定の実施形態では、対象ソフトウェアがクライアント上で実行されてよい（ステップ２１２参照）。特定の実施形態では、対象ソフトウェアの実行可能なコードが、格納されている割り当てられたダイナミックメモリから直接起動されてよい。特定の実施形態では、スタブは、割り当てられたメモリにロードされている対象ソフトウェアの実行可能なコードに、実行を開始させてよい。この結果、スタブは、対象ソフトウェアに実行を移すことができる。
【００４３】
特定の実施形態では、スタブがソケット（より正確には、クライアントとサーバとの間のネットワーク接続に関するインターネットソケットまたはネットワークソケット）およびデータストリームを、クライアントで現在実行中の対象ソフトウェアに渡してよい（２１４参照）。ネットワークソケットは、適切なアプリケーションプロセスまたはスレッドに、入ってくるデータパケットを配信するメカニズムを構成する。データストリームに関連づけられているネットワークソケットを対象ソフトウェアに渡すことで、対象ソフトウェアは、データストリームの第２の部分に追加データを含む追加データパケットを受け取ることができるようになる。対象ソフトウェアは、次に、データストリームの第２の部分に含まれている追加データを消費することができる（たとえば処理）。特定の実施形態では、スタブは、クライアントのオペレーティングシステムが提供する適切なライブラリ関数を起動して、ネットワークソケットを現在実行中の対象ソフトウェアに渡してよい。たとえば、Ｗｉｎｄｏｗｓ（登録商標）ソケットアプリケーションプログラミングインタフェース（ＡＰＩ）（Ｗｉｎｓｏｃｋとも称される）は、ネットワークソケットを、１つのプロセスから別のプロセスへと、「WSADuplicateSocket」を利用して渡すことができる。
【００４４】
対象ソフトウェアは、完了するまで実行を続けてよい。特定の実施形態では、対象ソフトウェアが実行を完了すると（つまり、退出すると）、対象ソフトウェアプログラムの実行可能なコードをロードするために利用されるダイナミックメモリスペースが、割り当てを解除されてよい（たとえばクライアントのオペレーティングシステムにより）。たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）では、「VirtualFree」関数を起動して、対象ソフトウェアの実行可能なコードが格納されている割り当てられたメモリを解放する。次いで、このメモリスペースを他の用途に利用することができ、他のデータを同じメモリスペースにロードして、対象ソフトウェアの実行可能なコードを上書きしてよい。この時点では、対象ソフトウェアが、スタブによりメモリに直接インストールされており、一部の実施形態ではブラウザキャッシュまたはその他の一時的なデータ記憶メカニズムを含むクライアントの永久媒体には格納されないので、対象ソフトウェアは、クライアントの状態を変更することなくクライアント上に存在しなくなる（たとえば、ドライブにファイルがなければ、システムレジストリに変更は行われないといったことである）。
【００４５】
一部の実施形態では、ストリームに埋め込まれており、スタブにより起動される第１の起動可能コードオブジェクトが、別のプロセスを、これも第２の実行可能なコードブジェクトを含んでいる別のデータストリームを要求することで、生成することができる。第２の実行可能なコードブジェクトは、第１の実行可能なコードブジェクトの子供のプロセスとして起動され、第１の実行可能なコードブジェクトが生成するものと同じサンドボックスされた（sand-boxed）ファイルシステムを共有することができる。たとえば、第１の実行可能なコードブジェクトは、１以上の第２の実行可能なコードオブジェクト全体をメモリで実行させる仮想マシンであってよく、第１の仮想マシンがオブジェクトによりサンドボックスされてよい。例えば特定の実装例では、第２のコードオブジェクトによるデータ格納サブシステムに対する書き込みが、仮想マシンによりメモリに書き込まれる（ユーザがクライアントからログオフするときに分析することができる周辺デバイスにではなくて）。たとえばこの実施形態は、ソフトウェアのデモンストレーションバージョンを可能とするために利用可能である。当該実施形態において、第１の実行可能なコードブジェクトは、第２のプログラムを、デモンストレーションしたりテストしたりする際にサンドボックス実装する仮想マシンであってよい。上述したように、第１および第２の実行可能なコードブジェクトが終了するときには、そのすべての痕跡がメモリからなくなる。前述した実施形態は、通常はアプリケーションの実行中にキャッシュされるデータへの無認可アクセスを防ぐために利用することもできる。
【００４６】
特定の実施形態は、ネットワーク環境で実装されてもよい。図３は、ネットワーク環境３００の一例を示す。ネットワーク環境３００は、１以上のサーバ３２０および１以上のクライアント３３０を互いに連結させているネットワーク３１０を含む。特定の実施形態では、ネットワーク３１０は、イントラネット、エクストラネット、仮想プライベートネットワーク（ＶＰＮ）、ローカルエリアネットワーク（ＬＡＮ）、無線ＬＡＮ（ＷＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、インターネットの一部、別のネットワーク３１０、または、２以上のこのようなネットワーク３１０の組み合わせである。本開示は、任意の適切なネットワーク３１０を含むことを想定する。
【００４７】
１以上のリンク３５０は、サーバ３２０またはクライアント３３０をネットワーク３１０に連結する。特定の実施形態では、１以上のリンク３５０のそれぞれが１以上の有線、無線、または光リンク３５０を含む。特定の実施形態では、１以上のリンク３５０のそれぞれが、イントラネット、エクストラネット、ＶＰＮ、ＬＡＮ、ＷＬＡＮ、ＷＡＮ、ＭＡＮ、インターネットの一部、別のリンク３５０、または、２以上のこのようなネリンク３５０の組み合わせである。本開示は、ネットワーク３１０にサーバ３２０とクライアント３３０とを連結するのに適した任意の適切なリンク３５０を含むことを想定する。
【００４８】
特定の実施形態では、各サーバ３２０が、ユニタリサーバであっても、複数のコンピュータまたは複数のデータセンタを含む分散型サーバであってもよい。サーバ３２０は、様々なタイプであってよい（例であり限定ではないが、ウェブサーバ、ニュースサーバ、メールサーバ、メッセージサーバ、広告サーバ、ファイルサーバ、アプリケーションサーバ、エクスチェンジ・サーバ、データベースサーバ、またはプロキシサーバを含む）。特定の実施形態では、各サーバ３２０は、サーバ３２０が実装するまたはサポートする適切な関数を実行するための、ハードウェア、ソフトウェア、またはエンベデッド論理コンポーネント、または、２以上のこれらコンポーネントの組み合わせを含んでよい。たとえば、ウェブサーバは、一般的に、ウェブページまたはウェブページの特定のエレメントを含むウェブサイトをホストすることができる。より詳しくは、ウェブサーバは、ＨＴＭＬファイルその他のファイルタイプをホストすることができ、または、要求に応じてファイルをダイナミックに作成したり構成したりすることができてよく、クライアント３３０からのＨＴＴＰその他の要求に応じてクライアント３３０にこれらを通信することができる。メールサーバは一般的に、様々なクライアント３３０に電子メールサービスを提供することができる。データサーバは一般的に、１以上のデータストアに格納されているデータを管理するためにインタフェースを提供することができる。
【００４９】
特定の実施形態では、スタブ３２２の実行可能なコードおよびソフトウェアの一部分３２４の実行可能なコードは、サーバ３２０に存在していてよい。これらは、クライアント３３０に保存またはインストールされずに実行されるように、クライアント３３０にダウンロードされてよい。これらは、クライアント３３０で実行されている間、クライアント３３０の仮想メモリに存在する。これらの実行が完了すると、仮想メモリを解放にするときにクライアント３３０からこれらを取り除き、クライアント３３０に痕跡が残らないようにする。
【００５０】
特定の実施形態では、１以上のデータストレージ３４０が、１以上のリンク３５０を介して１以上のサーバ３２０に通信可能にリンクされてよい。特定の実施形態では、データストレージ３４０を利用して、様々なタイプの情報を格納してよい。特定の実施形態では、データストレージ３４０に格納されている情報は、特定のデータ構造に従って体系化されてよい。特定の実施形態では、各データストレージ３４０が、関連データベースであってよい。特定の実施形態では、サーバ３２０またはクライアント３３０が、データストレージ３４０に格納されている情報を管理（たとえば取得、修正、追加、削除）できるインタフェースを提供してよい。
【００５１】
特定の実施形態では、各クライアント３３０は、クライアント３３０が実装するまたはサポートする適切な機能を実行するための、ハードウェア、ソフトウェア、またはエンベデッド論理コンポーネント、または、２以上のこれらコンポーネントの組み合わせを含んでよい。例であって限定ではないが、クライアント３３０は、デスクトップコンピュータシステム、ノートブックコンピュータシステム、ネットブックコンピュータシステム、ハンドヘルド電子デバイス、または移動電話器であってよい。本開示は、任意の適切なクライアント３３０を含むことを想定する。クライアント３３０は、クライアント３３０のネットワークユーザに、ネットワーク３３０へのアクセスを許可することができる。クライアント３３０は、ユーザに、他のクライアント３３０の他のユーザと通信することを許可してよい。
【００５２】
クライアント３３０は、ウェブブラウザ３３２（たとえば、MICROSOFT INTERNET EXPLORER, GOOGLE CHROME または MOZILLA FIREFOX）を有してよく、１以上のアドオン、プラグイン、その他のエクステンション（たとえばTOOLBARまたはYAHOO TOOLBAR）を有してよい。クライアント３３０のユーザは、ウェブブラウザ３３２をサーバ３２０に送るためのＵＲＬ（Uniform Resource Locator）その他のアドレスを入力してよく、ウェブブラウザ３３２は、ハイパーテキスト転送プロトコル（ＨＴＴＰ）要求を生成して、ＨＴＴＰ要求をサーバ３２０に伝達してよい。サーバ３２０は、ＨＴＴＰ要求を受け取り、クライアント３３０に、ＨＴＴＰ要求に呼応して１以上のハイパーテキストマークアップ言語（ＨＴＭＬ）ファイルを通信してよい。クライアント３３０は、ユーザに提示するために、サーバ３２０からのＨＴＭＬファイルに基づいてウェブページを表示することができる。本開示は、任意の適切なウェブページファイルを含むことを想定する。例であって限定ではないが、ウェブページは、各要求に応じて、ＨＴＭＬファイル、拡張可能ハイパーテキストマークアップ言語（ＸＨＴＭＬ）ファイル、または、拡張可能マークアップ言語（ＸＭＬ）ファイルを元にして表示される。これらページは、さらに、例であり限定ではないが、ＪＡＶＡＳＣＲＩＰＴ（登録商標）、ＪＡＶＡ（登録商標）、MICROSOFT SILVERLIGHT、マークアップ言語およびスクリプト（たとえばAJAX (非同期 ＪＡＶＡＳＣＲＩＰＴ（登録商標）およびXML)等）で描かれたものを実行することができる。ここでは、ウェブページに対する参照が、必要に応じて、１以上の対応するウェブページファイル（ブラウザが、ウェブページを表示するために利用するもののこと）を含んでも、その逆であってもよい。
【００５３】
特定の実施形態は、１以上のコンピュータシステムで実装されてよい。図４は、コンピュータシステム４００の例を示す。特定の実施形態では、１以上のコンピュータシステム４００が、ここに記載しているまたは例示している１以上の方法の１以上のステップを実行する。特定の実施形態では、１以上のコンピュータシステム４００が、ここで記載する例示する機能を提供する。特定の実施形態では、１以上のコンピュータシステム４００で実行されるソフトウェアが、ここに記載または例示している１以上の方法の１以上のステップを実行する、または、ここで記載または例示している機能を提供する。特定の実施形態には、１以上のコンピュータシステム４００の１以上の部分が含まれる。
【００５４】
本開示は、コンピュータシステム４００を含む。本開示は、任意の適切な物理的形態のコンピュータシステム４００を含むことを想定する。例であり限定ではないが、コンピュータシステム４００は、エンベデッドコンピュータシステム、システムオンチップ（ＳＯＣ）、シングルボードコンピュータシステム（ＳＢＣ）（たとえば、コンピュータオンモジュール（ＣＯＭ）またはシステムオンモジュール（ＳＯＭ））、デスクトップコンピュータシステム、ラップトップまたはノートブックコンピュータシステム、対話型キオスク、メインフレーム、コンピュータシステムのメッシュ、携帯電話器、携帯情報端末（ＰＤＡ）、サーバ、またはこれらの２以上の組み合わせであってよい。適切な場合には、コンピュータシステム４００は、１以上のコンピュータシステム４００（ユニタリーであっても分散型であっても）を含み、複数の位置を網羅し、複数のマシンを網羅し、またはクラウドに存在しており、これらには、１以上のネットワークに１以上のクラウドコンポーネントが含まれてよい。適切な場合には、１以上のコンピュータシステム４００が、ここに記載するまたは例示する１以上の方法の１以上のステップを空間的または時間的に実質的に限定することなく行うことができてよい。例であり限定ではないが、１以上のコンピュータシステム４００は、リアルタイムでまたはバッチモードで、ここに記載するまたは例示する１以上の方法の１以上のステップを実行することができる。１以上のコンピュータシステム４００は、適切な場合には、ここに記載するまたは例示する１以上の方法の１以上のステップを異なる時点または異なる位置で実行することができる。
【００５５】
特定の実施形態では、コンピュータシステム４００は、プロセッサ４０２、メモリ４０４、ストレージ４０６、入力／出力（Ｉ／Ｏ）インタフェース４０８、通信インタフェース４１０、およびバス４１２を含む。本開示は、特定の数の特定のコンポーネントを特定の構成で有する特定のコンピュータシステムを記載し例示しているが、本開示は、任意の適切な数のコンポーネントを任意の適切な構成で有する任意の適切なコンピュータシステムを含むことを想定する。
【００５６】
特定の実施形態では、プロセッサ４０２は、コンピュータプログラムを構成しているもののような、命令を実行するハードウェアを含む。例であり限定ではないが、命令を実行するためには、プロセッサ４０２が、内部レジスタ、内部キャッシュ、メモリ４０４、またはストレージ４０６から命令を取得（またはフェッチ）することができ、これらをデコード、実行して、次に、１以上の結果を内部レジスタ、内部キャッシュ、メモリ４０４、またはストレージ４０６に書き込むことができる。特定の実施形態では、プロセッサ４０２が、データ、命令、またはアドレス用に１以上の内部キャッシュを含んでよい。本開示は、適宜、任意の適切な数の任意の適切な内部キャッシュを含むプロセッサ４０２を含むことを想定する。例であり限定ではないが、プロセッサ４０２は、１以上の命令キャッシュ、１以上のデータキャッシュ、および、１以上の変換ルックアサイドバッファ（ＴＬＢ）を含んでよい。命令キャッシュの命令は、メモリ４０４またはストレージ４０６の命令のコピーであってよく、命令キャッシュは、プロセッサ４０２によるこれら命令の取得を加速することができる。データキャッシュのデータは、プロセッサ４０２で実行する命令を動作させるメモリ４０４またはストレージ４０６のデータのコピー、プロセッサ４０２で実行される後続する命令がアクセスするために、または、メモリ４０４またはストレージ４０６に書き込むためのプロセッサ４０２で実行された前の命令の結果、またはその他の適切なデータであってよい。データキャッシュは、プロセッサ４０２による読み書き処理を加速することができる。ＴＬＢは、プロセッサ４０２の仮想アドレス変換を加速化することができる。特定の実施形態では、プロセッサ４０２は、データ、命令、またはアドレスのための１以上の内部レジスタを含んでいてよい。本開示は、適宜、任意の適切な数の任意の適切な内部レジスタを含むプロセッサ４０２を含むことを想定する。プロセッサ４０２は適宜、１以上の算術論理演算ユニット（ＡＬＵ）を含んでよく、マルチコアプロセッサであってよく、または、１以上のプロセッサ４０２を含んでよい。本開示は、特定のプロセッサを記載および例示しているが、本開示は任意の適切なプロセッサを含むことを想定する。
【００５７】
特定の実施形態では、メモリ４０４が、プロセッサ４０２が実行する命令、または、プロセッサ４０２が処理するデータを格納するためのメインメモリを含む。例であり限定ではないが、コンピュータシステム４００は、ストレージ４０６または別のソース（たとえば別のコンピュータシステム４００）からメモリ４０４に命令をロードすることができる。次いでプロセッサ４０２は、命令をメモリ４０４から内部レジスタまたは内部キャッシュにロードすることができる。命令を実行するために、プロセッサ４０２は、内部レジスタまたは内部キャッシュから命令を取得して、デコードしてよい。命令の実行中または実行後に、プロセッサ４０２は、１以上の結果（中間物であっても最終結果であってもよい）を、内部レジスタまたは内部キャッシュに書き込んでよい。次に、プロセッサ４０２は、これら結果の１以上をメモリ４０４に書き込んでよい。特定の実施形態では、プロセッサ４０２は、１以上の内部レジスタまたは内部キャッシュに、またはメモリ４０４における（ストレージ４０６またはその他の箇所ではなくて）命令のみを実行して、１以上の内部レジスタまたは内部キャッシュ、またはメモリ４０４の（ストレージ４０６またはその他の箇所ではなくて）データのみに対して動作する。１以上のメモリバス（それぞれが、アドレスバスまたはデータバスを含んでいてよい）が、プロセッサ４０２をメモリ４０４に連結してよい。バス４１２は、後述するように１以上のメモリバスを含んでよい。特定の実施形態では、１以上のメモリ管理ユニット（ＭＭＵ）が、プロセッサ４０２とメモリ４０４との間に存在しており、プロセッサ４０２が要求するアクセスをメモリ４０４に対して行わせる。特定の実施形態では、メモリ４０４がランダムアクセスメモリ（ＲＡＭ）を含んでいる。このＲＡＭは、適切な場合には揮発性メモリであってよい。適切な場合には、このＲＡＭは、ダイナミックＲＡＭ（ＤＲＡＭ）またはスタティックＲＡＭ（ＳＲＡＭ）であってよい。さらに、適切な場合には、このＲＡＭがシングルポートＲＡＭであってもマルチポートＲＡＭであってもよい。本開示は任意の適切なＲＡＭを含むことを想定する。メモリ４０４は、適切な場合に、１以上のメモリ４０４を含んでよい。本開示では特定のメモリが記載および例示されているが、本開示は、任意の適切なメモリを含むことを想定する。
【００５８】
特定の実施形態では、ストレージ４０６が、データまたは命令用の大容量記憶装置を含む。例であり限定ではないが、ストレージ４０６はＨＤＤ、フロッピー（登録商標）ディスクドライブ、フラッシュメモリ、光ディスク、光磁気ディスク、磁気テープ、ユニバーサルシリアルバス（ＵＳＢ）ドライブ、または、これらの２以上の組み合わせを含んでよい。ストレージ４０６は、取り外し可能または取り外し不可能（または固定）媒体を含んでよい。ストレージ４０６は、適宜、コンピュータシステム４００の内部にあっても外部にあってもよい。特定の実施形態では、ストレージ４０６が不揮発の固体メモリである。特定の実施形態では、ストレージ４０６が、読み出し専用メモリ（ＲＯＭ）を含む。適切な場合には、このＲＯＭが、マスクプログラミングされたＲＯＭ，プログラム可能ＲＯＭ（ＰＲＯＭ）、ＥＰＲＯＭ，ＥＥＰＲＯＭ、ＥＡＲＯＭ、またはフラッシュメモリまたはこれらの２以上の組み合わせであってよい。本開示は、任意の適切な物理的形態の大容量記憶装置４０６を含むことを想定する。ストレージ４０６は、適宜、プロセッサ４０２とストレージ４０６との間の通信を促進するための１以上の記憶制御ユニットを含んでよい。適切な場合には、ストレージ４０６は、１以上のストレージ４０６を含んでよい。本開示は、特定のストレージを記載および例示しているが、本開示は任意の適切なストレージを含むことを想定する。
【００５９】
特定の実施形態では、Ｉ／Ｏインタフェース４０８が、コンピュータシステム４００および１以上のＩ／Ｏデバイスの間の通信のために１以上のインタフェースを提供するハードウェア、ソフトウェア、または両方を含む。コンピュータシステム４００は、適切な場合に、これらＩ／Ｏデバイスを１以上含んでよい。これらＩ／Ｏデバイスの１以上は、ある人とコンピュータシステム４００との間の通信を可能としてよい。例であって限定ではないが、Ｉ／Ｏデバイスは、キーボード、キーパッド、マイクロフォン、モニタ、マウス、プリンタ、スキャナ、スピーカ、スティルカメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオカメラ、別の適切なＩ／Ｏデバイスまたはこれらの２以上の組み合わせを含んでよい。Ｉ／Ｏデバイスは１以上のセンサを含んでよい。本開示は、任意の適切なＩ／Ｏデバイスおよびそのための任意の適切なＩ／Ｏインタフェース４０８を含むことを想定する。適切な場合には、Ｉ／Ｏインタフェース４０８が、プロセッサ４０２にこれらＩ／Ｏデバイスの１以上を駆動させる１以上のデバイスまたはソフトウェアドライバを含んでよい。Ｉ／Ｏインタフェース４０８は、適宜、１以上のＩ／Ｏインタフェース４０８を含んでよい。本開示は、特定のＩ／Ｏインタフェースを記載および例示しているが、本開示は任意の適切なＩ／Ｏインタフェースを含むことを想定する。
【００６０】
特定の実施形態では、通信インタフェース４１０が、コンピュータシステム４００および１以上の他のコンピュータシステム４００または１以上のネットワークの通信のために１以上のインタフェースを提供するハードウェア、ソフトウェア、または両方を含む。例であり限定ではないが、通信インタフェース４１０は、イーサネット（登録商標）その他の有線ネットワークと通信するためのネットワークインタフェースコントローラ（ＮＩＣ）またはネットワークアダプタ、または、無線ネットワーク（たとえばＷｉ−Ｆｉネットワーク）と通信するための無線ＮＩＣ（ＷＮＩＣ）または無線アダプタを含んでよい。本開示は、そのために任意の適切なネットワークおよび任意の適切な通信インタフェース４１０を含むことを想定する。例であり限定ではないが、コンピュータシステム４００が、暫定ネットワーク、パーソナルエリアネットワーク（ＰＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、またはインターネットの１以上の部分、またはこれらの２以上の組み合わせと通信してよい。これらネットワークの１以上の１以上の部分が有線または無線であってよい。一例としては、コンピュータシステム４００が、無線ＰＡＮ（ＷＰＡＮ）（たとえば、ＢＬＵＥＴＯＯＴＨ（登録商標）ＷＰＡＮ）、Ｗｉ−Ｆｉネットワーク、Ｗｉ−ＭＡＸネットワーク、携帯電話ネットワーク（たとえばＧＳＭ（登録商標）（Global System for Mobile Communications）ネットワーク）、その他の適切な無線ネットワークまたはこれらの２以上の組み合わせと通信してよい。コンピュータシステム４００は、適宜、これらネットワークのいずれかについての任意の適切な通信インタフェース４１０を含んでよい。通信インタフェース４１０は、適宜、１以上の通信インタフェース４１０を含んでよい。本開示は特定の通信インタフェースを記載および例示しているが、本記載は、任意の適切な通信インタフェースを含むことを想定する。
【００６１】
特定の実施形態では、バス４１２が、コンピュータシステム４００のコンポーネント同士を連結するハードウェア、ソフトウェア、または両方を含む。例であり限定ではないが、バス４１２は、アクセラレーテッドグラフィックポート（ＡＧＰ）その他のグラフィックバス、ＥＩＳＡ（Enhanced Industry Standard Architecture）バス、フロントサイドバス（ＦＢＳ）、ハイパートランスポート（ＨＴ）インターコネクト、ＩＳＡ（Industry Standard Architecture）バス、INFINIBANDインターコネクト、ＬＰＣ（low-pin-count）バス、メモリバス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、ＰＣＩ（Peripheral Component Interconnect）バス、ＰＣＩ−Ｅｘｐｒｅｓｓ（PCI-X）バス、シリアルＡＴＡ（SATA）バス、ＶＬＢ（Video Electronics Standards Association local）バス、または別の適切なバスまたはこれらの２以上の組み合わせを含んでよい。バス４１２は、適宜、１以上のバス４１２を含んでよい。本開示は、特定のバスを記載および例示しているが、本開示は、任意の適切なバスまたはインターコネクトを含むことを想定してよい。
【００６２】
ここで、コンピュータ可読記憶媒体について言及している場合、１以上の持続性、有形のコンピュータ可読記憶媒体を持つ構造を含んでよい。例であり限定ではないが、コンピュータ可読記憶媒体は、適宜、半導体ベースその他の集積回路（ＩＣ）（たとえばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）または特定用途向けＩＣ（ＡＳＩＣ）、ハードディスク、ＨＤＤ，ハイブリッドハードドライブ（ＨＨＤ）、光ディスク、光ディスクドライブ（ＯＤＤ）、光磁気ディスク、光磁気ドライブ、フロッピー（登録商標）ディスク、フロッピー（登録商標）ディスクドライブ（ＦＤＤ）、磁気テープ、ホログラフィック記憶媒体、固体ドライブ（ＳＳＤ）、ＲＡＭドライブ、セキュアデジタルカード、セキュアデジタルドライブ、その他の適切なコンピュータ可読記憶媒体またはこれらの２以上の組み合わせ）を含んでよい。ここで、コンピュータ可読記憶媒体という言及から、米国特許法１０１条における特許要件に含まれない媒体は含まないことに留意されたい。ここで、コンピュータ可読記憶媒体という言及から、米国特許法１０１条における特許要件に含まれない、一時的な形態の信号送信は含まれない（たとえば電気または電磁信号自体の伝播）。コンピュータ可読持続性記憶媒体は、適宜、揮発性であっても不揮発性であってもよく、また、揮発性および不揮発性の組み合わせであってもよい。
【００６３】
本開示は、任意の適切なストレージを実装する１以上のコンピュータ可読記憶媒体を含むことを想定する。特定の実施形態では、コンピュータ可読記憶媒体が、プロセッサ４０２の１以上の部分（たとえば、１以上の内部レジスタまたはキャッシュ）、メモリ４０４の１以上の部分、ストレージ４０６の１以上の部分、またはこれらの組み合わせを適宜実装する。特定の実施形態では、コンピュータ可読記憶媒体がＲＡＭまたはＲＯＭを実装する。特定の実施形態では、コンピュータ可読記憶媒体は、揮発性または永久的なメモリを実装する。特定の実施形態では、１以上のコンピュータ可読記憶媒体はソフトウェアを具現化する。ここでは、ソフトウェアという言及は、適宜、１以上のアプリケーション、バイトコード、１以上のコンピュータプログラム、１以上の実行可能命令、１以上の命令、論理、マシンコード、１以上のスクリプト、またはソースコードを含んでもよいし、含まなくてもよい。特定の実施形態では、ソフトウェアが１以上のアプリケーションプログラミングインタフェース（ＡＰＩ）を含む。本開示は、任意の適切なプログラミング言語またはプログラミング言語間の組み合わせで書き込まれたり、表現されたりしている任意の適切なソフトウェアを含むことを想定する。特定の実施形態では、ソフトウェアはソースコードまたはオブジェクトコードとして表されている。特定の実施形態では、ソフトウェアは、高レベルプログラミング言語（たとえばＣ、Ｐｅｒｌ、またはこれらの適切な発展形）で表される。特定の実施形態では、ソフトウェアは、低レベルプログラミング言語（たとえばアセンブリ言語（またはマシンコード））で表される。特定の実施形態では、ソフトウェアがＪＡＶＡ（登録商標）で表される。特定の実施形態では、ソフトウェアがハイパーテキストマークアップ言語（ＨＴＭＬ）、拡張マークアップ言語（ＸＭＬ）、またはその他の適切なマークアップ言語で表される。
【００６４】
ここで「または（もしくは）（or）」は、文脈からそうではないことが示唆されている場合以外は、包括的であり、排他的ではない。したがって、ここで「ＡまたはＢ」といった場合には、文脈からそうではないことが示唆されている場合以外は、「Ａ、Ｂ、または両方」という意味である。さらに、「および（ならびに）（and）」は、文脈からそうではないことが示唆されている場合以外は、まとめて（joint）および個別に（several）を表す。したがって、ここで「ＡおよびＢ」というと、文脈からそうではないことが示唆されている場合以外は、「ＡおよびＢをまとめてまたは個別に」という意味になる。
【００６５】
本開示は、当業者が想到するだろう、ここに記載した実施形態に対する変更例、代替例、変形例をすべて含む。同様に、適切な場合には、添付請求項も、当業者が想到するだろう、ここに記載した実施形態に対する変更例、代替例、変形例をすべて含む。さらに、添付請求項で、特定の機能を実行するよう適合されている、配置されている、その機能をもつ、そのように構成されている、その能力をもつ、そのように動作可能である、または作動可能である装置、システム、装置またはシステムのコンポーネントが言及されているとき、これらは、特定の機能が起動されたり、動作させられていたり、解除されていたりしてもいなくても、それらが適合されていたり、配置されていたり、その能力をもっていたり、構成されていたり、それができたり、そのように動作可能であったり、または作動可能である限り、そのような装置、システム、およびコンポーネントを含む。
本開示に基づけば、以下の各項目もまた開示される。
［項目１］
第１のコンピューティングデバイスによって第１の仮想メモリを割り当てる段階と、
前記第１のコンピューティングデバイスによって、ソフトウェアの第１の部分（first piece of software）の実行可能なコードを受信する段階と、
前記第１のコンピューティングデバイスによって、前記ソフトウェアの第１の部分の前記実行可能なコードを前記第１の仮想メモリに直接書き込む段階と、
前記第１のコンピューティングデバイスによって、前記第１の仮想メモリを実行可能としてマークする段階と、
前記第１のコンピューティングデバイスによって、前記ソフトウェアの第１の部分の前記実行可能なコードを、前記第１の仮想メモリから直接実行する段階と、
前記第１のコンピューティングデバイスによって、前記ソフトウェアの第１の部分の前記実行可能なコードが促したソフトウェアの第２の部分（second piece of software）の実行可能なコードをダウンロードして実行する段階と
を備える方法。
［項目２］
前記ソフトウェアの第１の部分の前記実行可能なコードが必要とする１以上の共有ライブラリをロードする段階をさらに備える、項目１に記載の方法。
［項目３］
前記ソフトウェアの第１の部分の前記実行可能なコードは、前記第１のコンピューティングデバイスで実行されているブラウザで実行されているクライアント側のスクリプトである、項目２に記載の方法。
［項目４］
前記クライアント側のスクリプトは、前記ブラウザがサポートしている外部関数インタフェースにアクセスする、項目３に記載の方法。
［項目５］
前記ブラウザは、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘであり、前記クライアント側のスクリプトは、ＪａｖａＳｃｒｉｐｔ（登録商標）である、項目４に記載の方法。
［項目６］
前記クライアント側のスクリプトは、前記第１のコンピューティングデバイスに存在している外部関数ライブラリにアクセスする、項目３から５のいずれか一項に記載の方法。
［項目７］
前記外部関数ライブラリは、ｃｔｙｐｅｓライブラリである、項目６に記載の方法。
［項目８］
前記ソフトウェアの第１の部分の前記実行可能なコードの実行が完了した後で、前記第１の仮想メモリの割り当て解除を行って、前記第１のコンピューティングデバイスに前記ソフトウェアの第１の部分の前記実行可能なコードの痕跡が残らないようにする段階をさらに備える、項目１から７のいずれか一項に記載の方法。
［項目９］
前記ソフトウェアの第１の部分の前記実行可能なコードが促した前記ソフトウェアの第２の部分の前記実行可能なコードをダウンロードして実行する段階は、
前記ソフトウェアの第２の部分の前記実行可能なコードを受信する段階と、
データストリームから前記ソフトウェアの第２の部分の前記実行可能なコードを抽出する段階と、
第２の仮想メモリを割り当てる段階と、
前記ソフトウェアの第２の部分の前記実行可能なコードを、前記第２の仮想メモリに直接書き込む段階と、
前記第２の仮想メモリを実行可能としてマークする段階と、
前記ソフトウェアの第２の部分の前記実行可能なコードを、前記第２の仮想メモリから直接実行する段階と
を有する、項目１から８のいずれか一項に記載の方法。
［項目１０］
前記ソフトウェアの第２の部分の前記実行可能なコードを検証する段階と、
前記第１のコンピューティングデバイスに存在している前記ソフトウェアの第２の部分の前記実行可能なコードが必要とする１以上の第１の共有ライブラリをロードする段階と、
第２のコンピューティングデバイスから前記ソフトウェアの第２の部分の前記実行可能なコードが必要とする１以上の第２の共有ライブラリをダウンロードする段階と
をさらに備える、項目９に記載の方法。
［項目１１］
前記ソフトウェアの第２の部分の前記実行可能なコードの実行が完了した後で、前記第２の仮想メモリの割り当て解除を行って、前記第１のコンピューティングデバイスに前記ソフトウェアの第２の部分の前記実行可能なコードの痕跡が残らないようにする段階をさらに備える、項目９または１０に記載の方法。
［項目１２］
前記第１のコンピューティングデバイスのオペレーティングシステムに基づいて前記ソフトウェアの第２の部分を決定する段階をさらに備える、項目９から１１のいずれか一項に記載の方法。
［項目１３］
前記ソフトウェアの第１の部分の前記実行可能なコードは、第２のコンピューティングデバイスから受信され、
前記ソフトウェアの第２の部分の前記実行可能なコードは、第３のコンピューティングデバイスから受信される、項目９から１２のいずれか一項に記載の方法。
［項目１４］
前記ソフトウェアの第１の部分の前記実行可能なコード、および、前記ソフトウェアの第２の部分の前記実行可能なコードは、両方とも、第２のコンピューティングデバイスから受信される、項目９から１２のいずれか一項に記載の方法。
［項目１５］
前記ソフトウェアの第２の部分の前記実行可能なコードは、データストリームに埋め込まれている、項目９から１４のいずれか一項に記載の方法。
［項目１６］
１以上のプロセッサが実行可能な命令を有するメモリを備える第１のシステムであって、前記１以上のプロセッサは、前記メモリに連結されており、前記命令を実行することができ、前記１以上のプロセッサは、前記命令が実行されると、
第１の仮想メモリを割り当てる段階と、
ソフトウェアの第１の部分の実行可能なコードを受信する段階と、
前記ソフトウェアの第１の部分の前記実行可能なコードを前記第１の仮想メモリに直接書き込む段階と、
前記第１の仮想メモリを実行可能としてマークする段階と、
前記ソフトウェアの第１の部分の前記実行可能なコードを、前記１の仮想メモリから直接実行する段階と、
前記ソフトウェアの第１の部分の前記実行可能なコードが促したソフトウェアの第２の部分の実行可能なコードをダウンロードして実行する段階と
を実行する、第１のシステム。
［項目１７］
前記１以上のプロセッサは、前記命令が実行されると、前記ソフトウェアの第１の部分の前記実行可能なコードが必要とする１以上の共有ライブラリをロードする段階をさらに実行する、項目１６に記載の第１のシステム。
［項目１８］
前記ソフトウェアの第１の部分の前記実行可能なコードは、第１のコンピューティングデバイスで実行されているブラウザで実行されているクライアント側のスクリプトである、項目１６または１７に記載の第１のシステム。
［項目１９］
前記クライアント側のスクリプトは、前記ブラウザがサポートしている外部関数インタフェースにアクセスする、項目１８に記載の第１のシステム。
［項目２０］
前記ブラウザは、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘであり、前記クライアント側のスクリプトは、ＪａｖａＳｃｒｉｐｔ（登録商標）である、項目１９に記載の第１のシステム。
［項目２１］
前記クライアント側のスクリプトは、前記第１のコンピューティングデバイスに存在している外部関数ライブラリにアクセスする、項目１８から２０のいずれか一項に記載の第１のシステム。
［項目２２］
前記外部関数ライブラリは、ｃｔｙｐｅｓライブラリである、項目２１に記載の第１のシステム。
［項目２３］
前記１以上のプロセッサはさらに、前記命令が実行されると、前記ソフトウェアの第１の部分の前記実行可能なコードの実行が完了した後で、前記第１の仮想メモリの割り当て解除を行って、第１のコンピューティングデバイスに前記ソフトウェアの第１の部分の前記実行可能なコードの痕跡が残らないようにする、項目１６から２２のいずれか一項に記載の第１のシステム。
［項目２４］
前記ソフトウェアの第１の部分の前記実行可能なコードが促した前記ソフトウェアの第２の部分の前記実行可能なコードをダウンロードして実行する段階は、
前記ソフトウェアの第２の部分の前記実行可能なコードを受信する段階と、
データストリームから前記ソフトウェアの第２の部分の前記実行可能なコードを抽出する段階と、
第２の仮想メモリを割り当てる段階と、
前記ソフトウェアの第２の部分の前記実行可能なコードを、前記第２の仮想メモリに直接書き込む段階と、
前記第２の仮想メモリを実行可能としてマークする段階と、
前記ソフトウェアの第２の部分の前記実行可能なコードを、前記第２の仮想メモリから直接実行する段階と
を有する、項目１６から２３のいずれか一項に記載の第１のシステム。
［項目２５］
前記１以上のプロセッサは、さらに、前記命令が実行されると、
前記ソフトウェアの第２の部分の前記実行可能なコードを検証する段階と、
第１のコンピューティングデバイスに存在している前記ソフトウェアの第２の部分の前記実行可能なコードが必要とする１以上の第１の共有ライブラリをロードする段階と、
第２のコンピューティングデバイスから前記ソフトウェアの第２の部分の前記実行可能なコードが必要とする１以上の第２の共有ライブラリをダウンロードする段階と
を実行する、項目２４に記載の第１のシステム。
［項目２６］
前記１以上のプロセッサはさらに、前記命令が実行されると、前記ソフトウェアの第２の部分の前記実行可能なコードの実行が完了した後で、前記第２の仮想メモリの割り当て解除を行って、第１のコンピューティングデバイスに前記ソフトウェアの第２の部分の前記実行可能なコードの痕跡が残らないようにする、項目２４または２５に記載の第１のシステム。
［項目２７］
前記１以上のプロセッサはさらに、前記命令を実行するときに、第１のコンピューティングデバイスのオペレーティングシステムに基づいて前記ソフトウェアの第２の部分を決定する段階を実行する、項目２４から２６のいずれか一項に記載の第１のシステム。
［項目２８］
前記ソフトウェアの第１の部分の前記実行可能なコードは、第２のコンピューティングデバイスから受信され、
前記ソフトウェアの第２の部分の前記実行可能なコードは、第３のコンピューティングデバイスから受信される、項目２４から２７のいずれか一項に記載の第１のシステム。
［項目２９］
前記ソフトウェアの第１の部分の前記実行可能なコード、および、前記ソフトウェアの第２の部分の前記実行可能なコードは、両方とも、第２のコンピューティングデバイスから受信される、項目２４から２７のいずれか一項に記載の第１のシステム。
［項目３０］
前記ソフトウェアの第２の部分の前記実行可能なコードは、データストリームに埋め込まれている、項目２４から２９のいずれか一項に記載の第１のシステム。
［項目３１］
第１のコンピュータシステムに実行されると、
第１の仮想メモリを割り当てる手順と、
ソフトウェアの第１の部分の実行可能なコードを受信する手順と、
前記ソフトウェアの第１の部分の前記実行可能なコードを前記第１の仮想メモリに直接書き込む手順と、
前記第１の仮想メモリを実行可能としてマークする手順と、
前記ソフトウェアの第１の部分の前記実行可能なコードを前記第１の仮想メモリから直接実行する手順と、
前記ソフトウェアの第１の部分の前記実行可能なコードが促したソフトウェアの第２の部分の実行可能なコードをダウンロードして実行する手順と
を実行する、プログラム。
［項目３２］
前記第１のコンピュータシステムにより実行されると、前記ソフトウェアは、前記ソフトウェアの第１の部分の前記実行可能なコードが必要とする１以上の共有ライブラリをロードする手順を実行する、項目３１に記載のプログラム。
［項目３３］
前記ソフトウェアの第１の部分の前記実行可能なコードは、第１のコンピューティングデバイスで実行されているブラウザで実行されているクライアント側のスクリプトである、項目３１または３２に記載のプログラム。
［項目３４］
前記クライアント側のスクリプトは、前記ブラウザがサポートしている外部関数インタフェースにアクセスする、項目３３に記載のプログラム。
［項目３５］
前記ブラウザは、Ｍｏｚｉｌｌａ  Ｆｉｒｅｆｏｘであり、前記クライアント側のスクリプトは、ＪａｖａＳｃｒｉｐｔ（登録商標）である、項目３４に記載のプログラム。
［項目３６］
前記クライアント側のスクリプトは、前記第１のコンピューティングデバイスに存在している外部関数ライブラリにアクセスする、項目３３から３５のいずれか一項に記載のプログラム。
［項目３７］
前記外部関数ライブラリは、ｃｔｙｐｅｓライブラリである、項目３６に記載のプログラム。
［項目３８］
さらに、前記ソフトウェアは、前記第１のコンピュータシステムに実行されると、前記ソフトウェアの第１の部分の前記実行可能なコードの実行が完了した後で、前記第１の仮想メモリの割り当て解除を行って、第１のコンピューティングデバイスに前記ソフトウェアの第１の部分の前記実行可能なコードの痕跡が残らないようにする、項目３１から３７のいずれか一項に記載のプログラム。
［項目３９］
前記ソフトウェアの第１の部分の前記実行可能なコードが促した前記ソフトウェアの第２の部分の前記実行可能なコードをダウンロードして実行する手順は、
前記ソフトウェアの第２の部分の前記実行可能なコードを受信する手順と、
データストリームから前記ソフトウェアの第２の部分の前記実行可能なコードを抽出する手順と、
第２の仮想メモリを割り当てる手順と、
前記ソフトウェアの第２の部分の前記実行可能なコードを、前記第２の仮想メモリに直接書き込む手順と、
前記第２の仮想メモリを実行可能としてマークする手順と、
前記ソフトウェアの第２の部分の前記実行可能なコードを、前記第２の仮想メモリから直接実行する手順と
を有する、項目３１から３８のいずれか一項に記載のプログラム。
［項目４０］
さらに、前記第１のコンピュータシステムにより実行されるときに、
前記ソフトウェアの第２の部分の前記実行可能なコードを検証する手順と、
第１のコンピューティングデバイスに存在している前記ソフトウェアの第２の部分の前記実行可能なコードが必要とする１以上の第１の共有ライブラリをロードする手順と、
第２のコンピューティングデバイスから前記ソフトウェアの第２の部分の前記実行可能なコードが必要とする１以上の第２の共有ライブラリをダウンロードする手順と
を実行する、項目３９に記載のプログラム。
［項目４１］
さらに、前記第１のコンピュータシステムにより実行されると、
前記ソフトウェアの第２の部分の前記実行可能なコードの実行が完了した後で、前記第２の仮想メモリの割り当て解除を行って、第１のコンピューティングデバイスに前記ソフトウェアの第２の部分の前記実行可能なコードの痕跡が残らないようにする、項目３９または４０に記載のプログラム。
［項目４２］
さらに、前記第１のコンピュータシステムにより実行されると、第１のコンピューティングデバイスのオペレーティングシステムに基づいて前記ソフトウェアの第２の部分を決定する手順を実行する、項目３９から４１のいずれか一項に記載のプログラム。
［項目４３］
前記ソフトウェアの第１の部分の前記実行可能なコードは、第２のコンピューティングデバイスから受信され、
前記ソフトウェアの第２の部分の前記実行可能なコードは、第３のコンピューティングデバイスから受信される、項目３９から４２のいずれか一項に記載のプログラム。
［項目４４］
前記ソフトウェアの第１の部分の前記実行可能なコード、および、前記ソフトウェアの第２の部分の前記実行可能なコードは、両方とも、第２のコンピューティングデバイスから受信される、項目３９から４２のいずれか一項に記載のプログラム。
［項目４５］
前記ソフトウェアの第２の部分の前記実行可能なコードは、データストリームに埋め込まれている、項目３９から４４のいずれか一項に記載のプログラム。
【図１】
0005916002.tif 000002
【図２】
0005916002.tif 000003
【図３】
0005916002.tif 000004
【図４】
0005916002.tif 000005