特許第5916002号(P5916002)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アルバッハ、ジュリアン、マイケルの特許一覧

特許5916002ソフトウェアアプリケーション配信および起動システム
<>
  • 特許5916002-ソフトウェアアプリケーション配信および起動システム 図000002
  • 特許5916002-ソフトウェアアプリケーション配信および起動システム 図000003
  • 特許5916002-ソフトウェアアプリケーション配信および起動システム 図000004
  • 特許5916002-ソフトウェアアプリケーション配信および起動システム 図000005
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5916002
(24)【登録日】2016年4月15日
(45)【発行日】2016年5月11日
(54)【発明の名称】ソフトウェアアプリケーション配信および起動システム
(51)【国際特許分類】
   G06F 9/445 20060101AFI20160422BHJP
【FI】
   G06F9/06 640A
   G06F9/06 610L
【請求項の数】15
【全頁数】27
(21)【出願番号】特願2015-43323(P2015-43323)
(22)【出願日】2015年3月5日
(62)【分割の表示】特願2013-554688(P2013-554688)の分割
【原出願日】2012年2月22日
(65)【公開番号】特開2015-122115(P2015-122115A)
(43)【公開日】2015年7月2日
【審査請求日】2015年3月6日
(31)【優先権主張番号】13/031,747
(32)【優先日】2011年2月22日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】513207079
【氏名又は名称】アルバッハ、ジュリアン、マイケル
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】アルバッハ、ジュリアン、マイケル
【審査官】 多胡 滋
(56)【参考文献】
【文献】 米国特許出願公開第2009/0183182(US,A1)
【文献】 米国特許出願公開第2009/0172637(US,A1)
【文献】 米国特許出願公開第2010/0037206(US,A1)
【文献】 米国特許出願公開第2009/0271787(US,A1)
【文献】 米国特許第7051315(US,B2)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/445
(57)【特許請求の範囲】
【請求項1】
第1のコンピューティングデバイスによって第1の仮想メモリを割り当てる段階と、
前記第1のコンピューティングデバイスによって、他のコンピューティングシステムから通信ネットワークを介してスタブの実行可能なコードを受信する段階と、
前記第1のコンピューティングデバイスによって、前記スタブの前記実行可能なコードを前記第1の仮想メモリから直接実行する段階と、
前記第1のコンピューティングデバイスによって、前記スタブの前記実行可能なコードが促したソフトウェアの第1の部分(first piece of software)の実行可能なコードをダウンロードする段階と、
前記第1のコンピューティングデバイスによって、ソフトウェアの前記第1の部分の前記実行可能なコードを実行する段階と、
前記第1のコンピューティングデバイスによって、ソフトウェアの前記第1の部分の前記実行可能なコードが促したソフトウェアの第2の部分(second piece of software)の実行可能なコードをダウンロードする段階と、
前記第1のコンピューティングデバイスによって、ソフトウェアの前記第2の部分の前記実行可能なコードを実行する段階と、
を備える方法。
【請求項2】
前記第1のコンピューティングデバイスによって、ソフトウェアの前記第2の部分の前記実行可能なコードを、ソフトウェアの前記第1の部分の前記実行可能なコードの子プロセスとして起動する段階を更に備える請求項1に記載の方法。
【請求項3】
ソフトウェアの前記第2の部分の前記実行可能なコードは、ソフトウェアの前記第1の部分の前記実行可能なコードにより生成されたサンドボックス・ファイルシステムを共有する請求項2に記載の方法。
【請求項4】
ソフトウェアの前記第1の部分は、仮想マシンである請求項2に記載の方法。
【請求項5】
前記第1のコンピューティングデバイスによって、前記ソフトウェアの第2の部分の前記実行可能なコードを、前記仮想マシンのコードオブジェクトによってサンドボックス化されたメモリ内で実行することを許可する段階を更に備える請求項4に記載の方法。
【請求項6】
前記第1のコンピューティングデバイスによって、ソフトウェアの前記第2の部分により行われるデータストレージシステムへの書き込みを、メモリへと書き込み、
前記第1のコンピューティングデバイスによって、ソフトウェアの前記第2の部分により行われる前記データストレージシステムへの書き込みを、周辺デバイスへと書き込まない、
請求項4に記載の方法。
【請求項7】
ソフトウェアの前記第2の部分は、デモンストレーションバージョンである請求項4に記載の方法。
【請求項8】
前記第1のコンピューティングデバイスによって、ソフトウェアの前記第1の部分の前記実行可能なコードの実行が終了した後に、ソフトウェアの前記第1の部分およびソフトウェアの前記第2の部分をメモリから除去する段階を更に備える請求項1に記載の方法。
【請求項9】
1または複数のプロセッサにより実行可能な複数の命令を格納するメモリと、
前記メモリに接続された1または複数のプロセッサと、
を備え、
前記メモリに格納された前記複数の命令は、前記1または複数のプロセッサに、
第1の仮想メモリを割り当てる段階と、
他のコンピューティングシステムから通信ネットワークを介してスタブの実行可能なコードを受信する段階と、
前記スタブの前記実行可能なコードを前記第1の仮想メモリから直接実行する段階と、
前記スタブの前記実行可能なコードが促したソフトウェアの第1の部分(first piece of software)の実行可能なコードをダウンロードする段階と、
ソフトウェアの前記第1の部分の前記実行可能なコードを実行する段階と、
ソフトウェアの前記第1の部分の前記実行可能なコードが促したソフトウェアの第2の部分(second piece of software)の実行可能なコードをダウンロードする段階と、
ソフトウェアの前記第2の部分の前記実行可能なコードを実行する段階と、
を実行させるためのものである
システム。
【請求項10】
前記メモリは、前記1または複数のプロセッサに、ソフトウェアの前記第2の部分の前記実行可能なコードを、ソフトウェアの前記第1の部分の前記実行可能なコードの子プロセスとして起動する段階を更に実行させる複数の命令を更に格納する請求項9に記載のシステム。
【請求項11】
ソフトウェアの前記第1の部分は、仮想マシンであり、
前記メモリは、前記1または複数のプロセッサに、前記ソフトウェアの第2の部分の前記実行可能なコードを、第1の仮想マシンのコードオブジェクトによってサンドボックス化されたメモリ内で実行することを許可する段階を実行させる複数の命令を更に格納する請求項10に記載のシステム。
【請求項12】
前記メモリは、前記1または複数のプロセッサに、ソフトウェアの前記第2の部分により行われるデータストレージシステムへの書き込みを、メモリへと書き込み、ソフトウェアの前記第2の部分により行われるデータストレージシステムへの前記書き込みを、周辺デバイスへと書き込まないことを実行させる複数の命令を更に格納する請求項11に記載のシステム。
【請求項13】
仮想メモリから直接実行されるコンピュータプログラムであって、
前記コンピュータプログラムの実行可能なコードが促したソフトウェアの第1の部分(first piece of software)の実行可能なコードをダウンロードする段階と、
ソフトウェアの前記第1の部分の前記実行可能なコードを実行する段階と、
ソフトウェアの前記第1の部分の前記実行可能なコードが促したソフトウェアの第2の部分(second piece of software)の実行可能なコードをダウンロードする段階と、
ソフトウェアの前記第2の部分の前記実行可能なコードを実行する段階と、
をコンピュータに実行させる複数の命令を備えるコンピュータプログラム。
【請求項14】
ソフトウェアの前記第2の部分の前記実行可能なコードを、ソフトウェアの前記第1の部分の前記実行可能なコードの子プロセスとして起動する段階を前記コンピュータに実行させる複数の命令を更に備える請求項13に記載のコンピュータプログラム。
【請求項15】
ソフトウェアの前記第2の部分の前記実行可能なコードは、ソフトウェアの前記第1の部分により生成されたサンドボックス・ファイルシステムを共有する請求項14に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して、コンピュータネットワーク経由のコンピュータソフトウェアの配信に関しており、より詳しくは、クライアントにソフトウェアのどの部分もインストールせずに、サーバからクライアントにコンピュータネットワーク経由で、クライアントで実行するためのコンピュータソフトウェアを配置することに関する。
【背景技術】
【0002】
コンピュータソフトウェアは、様々な方法で個々のコンピュータシステムに配信されてよい。たとえば、ソフトウェアの一部分(a piece of software)がコンパクトディスク(CD)またはデジタルバーサタイルディスク(DVD)に格納されていてよい。ある人はこのディスクをコンピュータシステムのディスクドライブに配置して、ディスクに格納されているこのソフトウェアの一部分をコンピュータシステムに設置することができる。より最近には、コンピュータネットワークは、ソフトウェア配信用に別のチャネルを提供するようになっている。ある人は、コンピュータネットワーク(たとえばインターネット)経由で遠隔コンピュータシステム(たとえばサーバ)から、ソフトウェアの一部分を自身のコンピュータシステム(たとえばクライアント)にダウンロードすることができる。ネットワーク経由でダウンロードされたファイルは、ソフトウェアの一部分が埋め込まれている一体型のインストーラ(installation suite)、スクリプト、実行可能命令である場合も多い。この人は、ダウンロードされたファイルを自身のコンピュータシステムのハードドライブ(永久的な位置または一時的なディレクトリ)に保存して、保存したファイルを実行して、ソフトウェアの一部分を自身のコンピュータシステムにインストールすることができる。
【発明の概要】
【発明が解決しようとする課題】
【0003】
本開示は、概して、コンピュータネットワーク経由のコンピュータソフトウェアの配信に関しており、より詳しくは、クライアントにソフトウェアのどの部分もインストールせずに、サーバからクライアントにコンピュータネットワーク経由で、クライアントで実行するためのコンピュータソフトウェアを配置することに関する。
【課題を解決するための手段】
【0004】
特定の実施形態では、第1のコンピューティングデバイスによって第1の仮想メモリを割り当てる段階と、第1のコンピューティングデバイスによって、他のコンピューティングシステムから通信ネットワークを介してスタブの実行可能なコードを受信する段階と、第1のコンピューティングデバイスによって、スタブの実行可能なコードを第1の仮想メモリから直接実行する段階と、第1のコンピューティングデバイスによって、スタブの実行可能なコードが促したソフトウェアの第1の部分(first piece of software)の実行可能なコードをダウンロードする段階と、第1のコンピューティングデバイスによって、ソフトウェアの第1の部分の実行可能なコードを実行する段階と、第1のコンピューティングデバイスによって、ソフトウェアの第1の部分の実行可能なコードが促したソフトウェアの第2の部分(second piece of software)の実行可能なコードをダウンロードする段階と、第1のコンピューティングデバイスによって、ソフトウェアの第2の部分の実行可能なコードを実行する段階と、を備える方法が提供される。
【0005】
本開示のこれらまたはその他の特徴、側面、および利点を、以下の詳細な説明で、以下の図面を参照しながら詳述する。
【図面の簡単な説明】
【0006】
図1】クライアントのソフトウェアのどの部分もインストールせずに、サーバからクライアントに、クライアントで実行されるべき1つのコンピュータソフトウェアを配置する方法の一例を示す。
図2】サーバからクライアントに、クライアントで実行されるべき1つのコンピュータソフトウェアをストリーミングする方法の一例を示す。
図3】ネットワーク環境の一例を示す。
図4】コンピュータシステムの一例を示す。
【発明を実施するための形態】
【0007】
本開示を、添付図面に示す本開示のいくつかの実施形態を参照して説明する。以下の記載では、本開示の完全な理解を促すために複数の詳細を示している。しかし、当業者には、本開示を、これら詳細の一部または全てがなくても実行することができることは明らかである。また場合によっては、公知の処理段階および構造の両方または片方を詳述しないことで、本開示を不当にあいまいにしないようにしている箇所もある。加えて、開示は特定の実施形態との関連で記載しているが、この記載は記載されている実施形態の開示を制限する意図はない点を理解されたい。記載は、添付請求項が定義する開示の範囲および精神を逸脱しない代替例、変形例、および均等物を含むことを意図している。
【0008】
コンピュータソフトウェアは、1つのコンピュータシステム(たとえばサーバ)から別のコンピュータシステム(たとえばクライアント)に、コンピュータネットワーク(たとえばインターネット)経由で配信されてよい。実際、ますます多くの数のソフトウェア開発業者、製造業者、および配信業者が、ソフトウェア配信においてコンピュータネットワークを、便利で、早く、コスト効率のよいチャネルとして重宝している。たとえば、ある会社が開発した1つのコンピュータソフトウェアの最終バージョンを、その会社のウェブサイトからダウンロードすることができる場合がある。通常のシナリオでは、この人は、コンピュータシステムで実行されるウェブブラウザのソフトウェアの一部分へのダウンロードリンクを含むウェブページをロードして、ウェブページに提供されているダウンロードリンクをクリックすることを含み、ウェブページをロードすることができる。これにより、通常、ファイルはその人のコンピュータシステムにダウンロードされる。このファイルは、ソフトウェア自身のインストールスクリプト、実行可能命令、または、実行可能なコードであってよい。この人は、この人のコンピュータシステムのハードドライブにファイルを保存することができる。このファイルがインストールスクリプトまたは実行可能命令である場合、この人は、ダウンロードしたファイルを実行して、ソフトウェアを自身のコンピュータシステムにインストールしてよい。他方で、もしもファイルがソフトウェアの実行可能なコードである場合には、この人は、ソフトウェアを直接実行することができる(たとえば、実行可能ファイルをダブルクリックすることなどで)。
【0009】
ときとして、コンピュータネットワーク経由でコンピュータシステムのハードドライブにダウンロードされたソフトウェアプログラムを保存またはインストールして、プログラムを実行することは、不便であり手間がかかる。たとえば第一に、ダウンロードしたファイルをハードドライブに保存してからソフトウェアをコンピュータシステムにインストールすると時間がかかる場合が多い。さらに、ソフトウェアの一部分のサイズが大きい場合(たとえばAdobe(登録商標)PDF Reader(登録商標)の場合)、インストールプロセスは、実質的に多くの時間がかかる場合がある。コンピュータシステムのユーザは、ダウンロードされたソフトウェアを実行することができるようになる前にいくつもの段階(たとえばインストール、セットアップ等)を踏む必要がある場合がある。第二に、ハードドライブにファイルを保存して、ソフトウェアをコンピュータシステムにインストールすると、コンピュータシステムの記憶容量(たとえばハードドライブのスペース)が使い切られる。コンピュータシステム(たとえばネットブックまたはノートブックコンピュータ)は、ユーザがコンピュータシステムにインストールしたいとおもっているソフトウェアの全てに対して十分な記憶スペースを有さない場合がある。第三に、ソフトウェアの開発業者は、ソフトウェアを更新して、ソフトウェアの新しいバージョンをリリースする場合がある。ソフトウェアの一部分のより新しいバージョンは、通常、古いバージョンよりも品質がよい。したがって人々は、自身のソフトウェアを比較的最新のものに維持したいとおもう。しかし、ソフトウェアの一部分を更新するためには、現在その人のコンピュータシステムにインストールされているソフトウェアの古いバージョンをアンインストールしてから、新しいバージョンをダウンロードしてインストールする必要がある。加えて、一部のソフトウェア開発業者は、このようなインストールを望まないユーザに対しては、ソフトウェアベースのアプリケーションサービスを配信して、永久的なデータ記憶デバイスに最初の利用または後での利用の後でダウンロードしたコードが残存することがないようにしたいと思っている。
【0010】
これら課題のいくつかを解決するために、特定の実施形態では、コンピュータシステム(クライアント)のユーザが、コンピュータネットワーク(たとえばインターネット)経由で別のコンピュータシステム(たとえばサーバ)から、コンピュータソフトウェアプログラムをダウンロードして、ユーザのコンピュータシステムのいずれかの永久的なストレージ(たとえばハードドライブ)にソフトウェアプログラムまたはその他のいずれかの種類のソフトウェアを格納またはインストールする必要なく、ユーザのコンピュータシステムで実行することができるようにする。言い換えると、ユーザは、ソフトウェアの一部分を自身のコンピュータシステムにダウンロードして、そのソフトウェアの一部分を自身のコンピュータシステムで実行してよい。ソフトウェアの実行が完了した後には(たとえばユーザがソフトウェアを退出した後には)、ユーザのコンピュータシステムにはソフトウェアその他の関連するソフトウェアの痕跡が残らない。
【0011】
今後、明瞭性を期すために、ソフトウェアのダウンロード先の、ソフトウェアを実行するコンピュータシステムは、「クライアント」と称し、ソフトウェアのダウンロード元のコンピュータシステムは、「サーバ」と称することにする。しかし当業者であれば、詳述される実施形態が、いずれの2つのコンピュータシステム(たとえば2つのサーバ、2つのクライアント、またはサーバとクライアント)に対しても適用可能であることを理解する。加えて、サーバからクライアントにダウンロードされ、クライアントで実行されるソフトウェアの一部分(つまり、ある人が利用を望むソフトウェア)は、対象ソフトウェアと称される。
【0012】
特定の実施形態では、今後は「スタブソフトウェア」または単に「スタブ」と称される別のソフトウェアの一部分が、対象ソフトウェアのダウンロードおよび実行を助けてもよい。特定の実施形態では、スタブは、いずれかの適切なプログラミング言語で実装され、コンピュータ実行可能なコードとしてコンパイルされてよい。特定の実施形態では、スタブの実行可能なコードは、サーバに格納され、クライアントにダウンロードされて、ウェブブラウザで実行可能な任意の適切なプログラミング言語(たとえば、Java(登録商標)、JavaScript(登録商標)、Pythonなど)で記述されたクライアント側のスクリプトを利用して実行されてよい。たとえばクライアント側のスクリプトは、クリック可能なリンクとしてウェブページに含まれていてよい。クライアント側のスクリプトにアクセスするためには、ユーザは、クライアント側のスクリプトを含むウェブページを、クライアントに存在しているウェブブラウザ(たとえばMicrosoft Internet Explorer、Mozilla Firefox、またはGoogle Chrome)を利用してロードすればよい。こうすることで、クライアント側のスクリプトコードがウェブブラウザに送信され、ウェブブラウザにより実行される。
【0013】
図1は、スタブを利用してクライアントで実行される対象ソフトウェアをサーバからクライアントに配置する方法の一例を示す。特定の実施形態では、ひとたびクライアント側のスクリプトがウェブブラウザで実行されると、スクリプトは、クライアントに存在している外部関数ライブラリにアクセスする(ステップ100に示されているように)。多くのプログラミング言語が外部関数インタフェースを提供している。外部関数インタフェースは、1つのプログラミング言語に書かれているソフトウェアプログラムがルーチンを起動して、または、別のプログラミング言語で書かれたサービスを利用することができるメカニズムである(たとえば、オペレーティングシステムまたはソフトウェアライブラリが提供する関数)。通常は、プログラミング言語の外部関数インタフェースを実装する関数が、プログラミング言語が提供する外部関数ライブラリに含まれている。たとえば、Pythonは、「ctypesパッケージ」と称される外部関数ライブラリを提供しており、Java(登録商標)は、Java(登録商標)プログラムがネイティブ共有ライブラリにアクセスできるよう、Java(登録商標) Native Native InterfaceおよびJava(登録商標) Native Accessを提供しており、JavaScript(登録商標)は、JavaScript(登録商標) Native Interface(JSNI)(JavaScript(登録商標) Foreign Function Interface(JSFFI)とも称される)を提供している。一部のウェブブラウザ(たとえばMozilla Firefox)も、これらウェブブラウザで実行されるネイティブのまたは外部の関数アクセスをサポートしている。
【0014】
スクリプトコードを書き込む具体的なプログラミング言語に応じて、スクリプトは、そのプログラミング言語の対応する外部関数ライブラリを起動することができる。たとえば、Pythonであれば、特定のライブラリをロードするために利用可能な「load_library」と称される関数がある。Microsoft Windows(登録商標)は、指定されたモジュールを呼び出す側のプロセスのアドレススペースにロードするために「LoadLibrary」という関数を提供している。
【0015】
特定の実施形態では、適切な外部関数インタフェースを通じて、スクリプトが、クライアントに存在しているメモリ割り当て関数へのポインタを取得してよい(ステップ102に示されている)。クライアント上で利用可能な具体的なメモリ割り当て関数は、クライアントのオペレーティングシステムまたはクライアント上で利用可能なソフトウェアライブラリによって決定されてよい。たとえばMicrosoft Windows(登録商標)は、呼び出す側のプロセスの仮想アドレススペースの1つのページ領域をリザーブまたはコミットするための「VirtualAlloc」という関数を提供している。CおよびC++プログラミング言語は、両方とも、指定されたサイズのダイナミックメモリ割り当てをするために「malloc」と称されるライブラリ関数を提供している。
【0016】
特定の実施形態では、メモリ割り当て関数(たとえば「VirtualAlloc」)を利用して、スクリプトが、特定の量のメモリを割り当てる(ステップ104参照)。割り当てられるメモリは、スタブの実行可能なコードに対して十分である必要がある。特定の実施形態では、スタブの実行可能なコードは、サーバからダウンロードされて、割り当てられたメモリに書き込まれてよい(ステップ106参照)。特定の実施形態では、スタブは、様々な共有ライブラリに含まれているいくつかのライブラリ関数を要求してよい。たとえばMicrosoft Windows(登録商標)であれば、共有ライブラリはダイナミックリンクライブラリ(DLL)と称される。スタブが必要とする関数を含む共有ライブラリは、適切なライブラリロード関数(たとえば「LoadLibrary」または「Load_library」)を利用してロードされてよい。
【0017】
特定の実施形態では、スタブの実行可能なコードが書き込まれているメモリが、実行可能メモリとしてマークされる。たとえばMicrosoft Windows(登録商標)は、データ実行防止(DEP)と称されるメカニズムを提供している(ハードウェアおよびソフトウェア技術の組み合わせであり、悪意のあるコードによる利用からの保護するためにメモリに追加的なチェックを行う)。簡単に言うと、あるプロセス内のすべてのメモリ位置が、明示的に実行可能なコードを含んでいない限り、実行不可能としてマークされる。したがい、スタブの実行可能なコードが書き込まれるメモリ位置を、実行可能としてマークして、スタブコードを実行する必要がある。Microsoft Windows(登録商標)では、適切なフラグまたは属性を設定することで(たとえば、割り当てられたメモリを、「PAGE_EXECUTE」「PAGE_EXECUTE_READ」「PAGE_EXECUTE_READWRITE」または「PAGE_EXECUTE_WRITECOPY」としてマークすることで)、特定のメモリ位置を実行可能としてマークすることができる。
【0018】
特定の実施形態では、スクリプトが、割り当てられているメモリのスタブの実行可能なコードへのポインタを取得してよい(ステップ110参照)。特定の実施形態では、スタブの実行可能なコードが、メモリから直接起動されてよい(ステップ112参照)。特定の実施形態では、スタブは、クライアントにおける対象ソフトウェアのダウンロードおよび実行を促してよい(ステップ114参照)。このプロセスは、図2を参照しながら後で詳述する。
【0019】
特定の実施形態では、スタブがそのタスクを完了した後で(クライアントにおいて対象ソフトウェアのダウンロードおよび実行を促した後で)、スクリプトが、これもまた適切な外部関数インタフェースによって、クライアント上に存在しているメモリ割り当て解除関数へのポインタを取得してよい(ステップ116参照)。クライアント上で利用可能な特定のメモリ割り当て解除関数は、クライアントのオペレーティングシステムまたはクライアントで利用可能なソフトウェアライブラリに応じたものであってよい。たとえばMicrosoft Windows(登録商標)は、呼び出す側のプロセスの仮想アドレススペースの解放およびコミット解除、または、そのページ領域の解放およびコミット解除を行うために「VirtualFree」と称される関数を提供している。CおよびC++プログラミング言語は、両方とも、割り当てられたダイナミックメモリを解放するために(たとえば割り当て解除するために)「dealloc」および「free」等のライブラリ関数を提供する。
【0020】
特定の実施形態では、メモリ割り当て解除関数(たとえば「VirtualFree」)を利用して、スクリプトが、スタブの実行可能なコードが書き込まれたメモリの割り当て解除を実行してよい(ステップ118参照)。その後で、このメモリスペースは、他の目的に利用してよく、他のデータを同じメモリスペースにロードして、スタブの実行可能なコードを上書きしてよい。したがってスタブの実行可能なコードが書き込まれているメモリ位置が解放されると(つまり、割り当て解除された後には)、クライアントには、スタブの実行可能なコードがなくなる(たとえば置き換え、除去が行われる)。スタブはクライアントのどの永久的なストレージ(たとえばハードドライブ)にも保存されたりインストールされたりしないので、クライアントにはスタブの実行可能なコードの痕跡がなくなる。
【0021】
特定の実施形態では、スタブの実行可能なコードが書き込まれているメモリ位置を明示的に割り当て解除する代わりに、メモリ位置を暗示的に解放することができる。たとえばユーザがウェブブラウザを退出する場合、または、クライアント側のスクリプトを含むウェブページを去る場合、スクリプトに関するすべてのメモリ位置を解放するが、これは、スタブの実行可能なコードが書き込まれているメモリ位置も解放することを意味している。
【0022】
特定の実施形態では、クライアント上の割り当てられているメモリから直接実行されると、スタブは、対象ソフトウェアのダウンロードおよび実行を促す。特定の実施形態では、スタブは、対象ソフトウェアが格納されているサーバとクライアントとの間でネットワーク接続を構築して、ネットワーク接続で、サーバからクライアントに対象ソフトウェアの実行可能なコードをダウンロードしてよい。特定の実施形態では、対象ソフトウェアの実行可能なコードが、ネットワーク接続でサーバからクライアントに送信されるデータストリームに埋め込まれてよい。データストリームを受信すると、スタブは、対象ソフトウェアの実行可能なコードを抽出して、クライアントのランダムアクセスメモリ(RAM)に直接ロードして、クライアント上での実行に備えさせてよい。対象ソフトウェアは、スタブ同様に、クライアントのどの永久的なストレージ(たとえばハードドライブ)にも保存またはインストールされない。ひとたび対象ソフトウェアがクライアント上での実行を完了すると、対象ソフトウェアの実行可能なコードがロードされているRAMスペースは解放されてよく、対象ソフトウェアがクライアントのどこにも存在しなくなる。
【0023】
対象ソフトウェアは、クライアントに保存またはインストールされる必要なく、クライアントにダウンロードまたは起動されてよいので、これにより、クライアントの記憶容量の利用率が減る。さらに、対象ソフトウェアは、クライアントでの実行の直前にダウンロードされるので、対象ソフトウェアの最新またはいずれか所望のバージョンは、対象ソフトウェアがダウンロードまたは起動されるたびに取得されることになる。
【0024】
図2は、スタブがクライアント上に対象ソフトウェアをダウンロードして実行するための方法の一例を示す。特定の実施形態では、ダウンロードされる対象ソフトウェアはアプリケーションプログラムである。対象ソフトウェアの実行可能なコードは、サーバ上に格納されていてよく、サーバは、スタブの実行可能なコードが格納されているサーバであっても、別のサーバであってもよい。
【0025】
特定の実施形態では、スタブは、対象ソフトウェアの実行可能なコードが格納されているサーバとクライアントとの間にネットワーク接続を確立することができる(ステップ200参照)。スタブは、サーバとクライアントとの間に既に構築されている既存の接続(たとえば、ウェブブラウザが構築した接続)にとって代わること、または、新たな接続を構築することができる。スタブが新たなネットワーク接続を構築する場合には、新たな接続は、コンピュータネットワークに連結されている2つのコンピュータシステムの間に任意の適切なハンドシェーク方法を利用して構築されてよい。たとえば、クライアントで実行されているスタブは、サーバに接続要求を送信することができ、サーバは、接続要求を受けると、接続要求を受け付けたか拒絶したかを示す応答を送り返してよい。サーバが接続要求を受け付けた場合には、クライアントとサーバとの間でネットワーク接続が構築されてよい。特定の実施形態では、サーバとクライアントとの間の通信で、限定ではなく例示であるが、ハイパーテキスト転送プロトコル(HTTP)、ユーザデータグラムプロトコル(UDP)、またはトランスポート制御プロトコル(TCP)等の任意の適切な通信プロトコルが利用されてよい。
【0026】
特定の実施形態では、サーバに複数のソフトウェアプログラムが格納されている場合があり、または、サーバに特定のソフトウェアプログラムの複数のバージョンが格納されている場合があり、個々のクライアントに対してダウンロードされてよい。特定の実施形態では、クライアントで実行されているスタブによってサーバからクライアントにダウンロードされてよい各ソフトウェアの各バージョンが、固有の識別子により識別されてよい。固有の識別子は、クライアントのスタブがダウンロードを希望する特定のソフトウェアをサーバに通知するために利用されてよい。特定の実施形態では、各ダウンロード可能なソフトウェアが、ネットワークリソースとして捉えられてよい。したがって、特定のダウンロード可能なソフトウェアは、その固有ネットワーク経路またはURI(Uniform Resource Identifier)で特定されてよい。スタブは、自身のURIを利用して対象ソフトウェアを参照してよい。
【0027】
ソフトウェアの一部分が複数のバージョンを有する場合がある。特定の実施形態では、スタブは、クライアントの対象ソフトウェアの殆どの適切なバージョンを決定することができる。たとえば、Microsoft Windows(登録商標)オペレーティングシステムの複数のバージョン(たとえばWindows(登録商標) XP、Windows(登録商標) ME、またはWindows(登録商標)7など)および32ビットのオペレーティングシステムまたは64ビットのオペレーティングシステムがある。スタブは、クライアントのオペレーティングシステムを調査して、クライアントのオペレーティングシステムに最もよく適合する、対象ソフトウェアの特定のバージョンを決定する。クライアントのオペレーティングシステムが32ビットのオペレーティングシステムである場合には、スタブは、対象ソフトウェアの32ビットのバージョンを特定する。他方、もしクライアントのオペレーティングシステムが64ビットのオペレーティングシステムである場合には、スタブは、対象ソフトウェアの64ビットのバージョンを特定する。
【0028】
特定の実施形態では、対象ソフトウェアを格納している特定のサーバとのネットワーク接続を要求するときに、スタブは、サーバに対して、対象ソフトウェアの固有識別子を、接続要求とともに、または、接続要求の一部として送信してよい。この代わりに、特定の実施形態では、スタブは、サーバとクライアントとの間の接続が構築された後で、別個の要求として、サーバに対象ソフトウェアの識別子を送ってもよい。次いでサーバは、要求を発しているクライアントに対して送るべき特定のソフトウェアを決定する。このプロセスは、ウェブブラウザ経由でデータストリームを起動するプロセスに類似したものであってよい(たとえば、ウェブページに含まれているダウンロード可能なファイルへのURLまたはURIリンクをクリックして)。
【0029】
特定の実施形態では、サーバは、データストリームを、要求を発しているクライアントに(より詳しくは、要求を発しているクライアント上で実行されているスタブに対して)、ネットワーク接続により送信してよい(ステップ202参照)。ネットワーク接続は、TCP接続、UDP接続、HTTP接続、または任意のその他の適切な接続であってよい。特定の実施形態では、データストリームが、ビデオストリームまたはオーディオストリームであってよい。特定の実施形態では、スタブが要求する対象ソフトウェアの実行可能なコードが、データストリームに、1以上のデータパケットとして埋め込まれていてもよい。たとえば、対象ソフトウェアは、ビデオコーデックがエンコードしたビデオストリームを受信して、データをデコードして、ビデオデータをクライアントのディスプレイ上に表示させるビデオデコーダであってもよい。別の例では、対象ソフトウェアがコンピュータゲームであってもよい。
【0030】
特定の実施形態では、対象ソフトウェアの実行可能なコードが、データストリームに埋め込まれていてもよい。特定の実施形態では、対象ソフトウェアの実行可能なコードが、機械コードまたはネーティブコードであってよく、プラットフォームに依存したものであってよい。特定の実施形態では、対象ソフトウェアの実行可能なコードが、対象ソフトウェアを要求している特定のクライアントのプラットフォーム上で実行されるようにコンパイルされていてもよい(たとえばクライアントのハードウェアアーキテクチャおよびオペレーティングシステムに基づいて)。
【0031】
特定の実施形態では、データストリームが2つの部分を含んでいてよい。特定の実施形態では、データストリームの第1の部分(つまりデータストリームの最初の部分)が、対象ソフトウェアの実行可能なコードを含んでいてよい。特定の実施形態では、必須ではないが、対象ソフトウェアの実行可能なコードが、任意の適切な圧縮方法を利用して圧縮されてもよい。たとえば、対象ソフトウェアの実行可能なコードの圧縮に、ロスの少ない圧縮方法(たとえばzipまたはgzipなど)を利用することができる。特定の実施形態では、対象ソフトウェアの実行可能なコードが、ビデオストリームに埋め込まれていてもよい。殆どの種類のビデオストリームは、一般的なコンテナフォーマットであり、より詳しくは、対象ソフトウェアの実行可能なコードが、ビデオストリーム等に埋め込まれていてよい。特定の実施形態では、データストリームの第1の部分にも、操作変数およびパラメータ(たとえば、ソフトウェアの実行可能なコードをロード、実行するために必要なメモリスペース(たとえばRAMメモリスペース)のサイズを示すパラメータ等)が含まれていてよい。
【0032】
特定の実施形態では、データストリームの第2の部分が、随意で、実行中に対象ソフトウェアが消費してよい追加データを含んでもよい。特定の実施形態では、追加データは、必須ではないが、任意の適切なエンコードまたは圧縮法によって暗号化または圧縮され、1以上のデータパケットとして送信されてもよい。ここでも、データストリームがビデオストリームである場合、追加データを、MPEGエンコード等のビデオエンコード法によってエンコードしてよい。
【0033】
特定の実施形態では、データストリームを受信すると、スタブは、データストリームの第1の部分にアクセスして、そこに埋め込まれている対象ソフトウェアの実行可能なコードを抽出することができる。必要な場合には、スタブは、対象ソフトウェアから抽出された実行可能なコードをデコードまたは伸張してよい。スタブが利用するデコードまたは伸張法は、対象ソフトウェアの実行可能なコードをエンコードまたは圧縮したときに利用したエンコードまたは圧縮法に対応するものであってよい。たとえば、対象ソフトウェアの実行可能なコードが、適切な圧縮アルゴリズム(たとえばロスの少ない圧縮アルゴリズム)を利用して圧縮された場合、スタブは、これを対応する伸張アルゴリズムを利用して伸張してよい。同様に、対象ソフトウェアの実行可能なコードが、適切なエンコードアルゴリズムを利用してエンコードされている場合には、スタブは、これを対応するデコードアルゴリズムを利用してデコードすることができる。加えて、特定の実施形態では、スタブは、ここでもデータストリームの第1の部分にアクセスして、対象ソフトウェアの実行可能なコードをロード、実行するために必要なメモリスペースのサイズを示すパラメータを抽出してよい。
【0034】
特定の実施形態では、無認可のまたは悪意のあるソフトウェアがクライアントにダウンロードされたりクライアント上で実行されたりしないように、スタブは、任意の認証方法を利用してデータストリームの第1の部分から抽出した対象ソフトウェアの実行可能なコードを認証する(ステップ204)。特定の実施形態では、信頼できる頒布元(たとえば信頼できるサーバのドメイン名またはIPアドレス)のホワイトリストに、スタブを加えてもよい。ソフトウェアの一部分が受信されると、スタブは、そのソフトウェアを送信している頒布元(たとえばサーバまたはウェブサイト)を、ホワイトリストと照合してよい。ホワイトリストにおいて、信頼できる頒布元が送信したソフトウェアのみがクライアント上で実行されてよい。ホワイトリストにない頒布元から受信したソフトウェアは破棄、または、隔離されてよい。特定の実施形態では、データストリームの第1の部分に埋め込まれている対象ソフトウェアの実行可能なコードには署名がされていたり、デジタル証書を関連づけられていたりしてもよい。スタブは、関連づけられているデジタル証書を利用して対象ソフトウェアの実行可能なコードを認証してよい。
【0035】
対象ソフトウェアの実行可能なコードが無効な場合(ステップ206で「no」)、対象ソフトウェアの実行可能なコードは、クライアント上で起動されず、破棄されなくてよい。他方で、対象ソフトウェアの実行可能なコードが有効な場合には(ステップ206で「yes」)、特定の実施形態では、スタブが、対象ソフトウェアの実行可能なコードをロード、および実行するのに十分な量のメモリをクライアント上に割り当ててよい(ステップ208参照)。特定の実施形態では、割り当てられるメモリ量は、対象ソフトウェアの実行可能なコードをロード、および実行するのに必要なサイズ未満ではならない(データストリームの第1の部分に含まれている変数に示されているように)。特定の実施形態では、割り当てられているメモリは、クライアントのダイナミックメモリ、仮想メモリ、またはRAMであってよい。
【0036】
ほとんどのオペレーティングシステムは、アプリケーションプログラムに対する、仮想またはダイナミックメモリの、および、割り当て解除のアプリケーションプログラムの実行を可能とするライブラリ関数を提供し、ラインタイム中に他の種類のメモリ関連の関数を行わせる。特定の実施形態では、スタブは、適切な外部関数ライブラリによって、クライアントのオペレーティングシステムが提供する適切なライブラリ関数を起動して、対象ソフトウェアの実行可能なコードに必要なメモリスペースを割り当ててよい。たとえば上述したように、「malloc」は、プログラミング言語CおよびC++両方の、ダイナミックメモリスペースを割り当てるための標準的なライブラリ関数である。Microsoft Windows(登録商標)プラットフォームについては、「VirtualAlloc」が、仮想アドレススペースのページの1つの領域をリザーブするためのWin32ライブラリ関数である。メモリが割り当てられると、スタブは、適切なライブラリ関数を起動して、割り当てられたメモリスペースのフラグを「実行可能」にする(これは、オペレーティングシステムに対して、割り当てられたメモリに格納されているデータが実行可能なコードであることを示す)。例えば、Microsoft Windows(登録商標)では、属性「PAGE_EXECUTE」、「PAGE_EXECUTE_READ」、「PAGE_EXECUTE_READWRITE」、または「PAGE_EXECUTE_WRITECOPY」が、メモリ割り当てとの関連で特定され(たとえば「VirtualAlloc」を用いて)、オペレーティングシステムに、コードを実行するための権利とともに、動作においてはコードを読み書きする権利を有する十分な量の仮想メモリを要求する。
【0037】
特定の実施形態では、スタブは、対象ソフトウェアの実行可能なコードをクライアントのハードドライブに保存またはインストールすることなく、割り当てられたメモリ(たとえば割り当てられたダイナミックメモリ)に直接、対象ソフトウェアの実行可能なコードをロードすることができる(ステップ210)。特定の実施形態では、スタブは、クライアントのオペレーティングシステムまたはクライアント上のソフトウェアライブラリが提供する適切なライブラリ関数を起動して、対象ソフトウェアの実行可能なコードを表すバイナリデータを、仮想またはダイナミックメモリスペースに直接コピーすることができる。例えば、Microsoft Windows(登録商標)では、「CopyMemory」が、ある位置から別の位置へとメモリブロックをコピーする関数であり、「memcpy」が、プログラミング言語CおよびC++両方の、あるメモリ位置から別のメモリ位置にデータをコピーするための標準的なライブラリ関数である。
【0038】
特定の実施形態では、対象ソフトウェアが特定のライブラリ関数を必要とする場合がある。もしも必要とされているライブラリ関数が既にクライアント上に存在している場合、スタブは、対象ソフトウェアの必要とされているライブラリ関数を含む共有ライブラリをロードしてよい。たとえば、Microsoft Windows(登録商標)では、共有ライブラリ(たとえばDLL)が、「LoadLibrary」関数を利用してロードされてよい。他方で、必要なライブラリ関数がクライアント上に存在しない場合には、スタブが、必要なライブラリ関数を含む共有ライブラリまたは必要なライブラリ関数自身を、適切なサーバからダウンロードしてよく、共有ライブラリまたは必要なライブラリ関数のために仮想メモリを割り当て、共有ライブラリまたは必要なライブラリ関数を、割り当てられた仮想メモリに書き込み、対象ソフトウェアが必要なときにライブラリ関数を利用することができるようにしてよい。他方で、実行中に対象ソフトウェアが必要とするリソースについては(ライブラリ関数)、クライアント上に既にリソースが存在している場合には、クライアント上のリソースを利用することができ、もしもクライアント上にリソースが存在していない場合には、スタブは、対象ソフトウェアのためにリソースをダウンロードする。
【0039】
特定の実施形態では、スタブはさらに分岐テーブル(ジャンプテーブルとも称される)を調節して、割り当てられたメモリにロードされる対象ソフトウェアの実行可能なコードに関する情報を含ませる。このプロセスは、「調整(fix-up)」プロセスと称される場合がある。分岐テーブルは、プログラムの部分間で、またはプログラム間で、プログラム制御を転送するための効率のよい方法である。分岐テーブルの適切なエントリを調節することで、オペレーティングシステムは、割り当てられたメモリにロードされるソフトウェアの実行可能なコードを知ることができる。
【0040】
調整プロセスで実行される実際のステップは、クライアントのオペレーティングシステムのプラットフォームに応じて変化してよい。たとえば、Microsoft Windows(登録商標)プラットフォームでは、実行可能なフォーマットは、通常、再配置テーブルまたはインポートテーブルを有している。一般的には、実行可能なコードは、固定アドレスにロードされることを想定してリンクづけされる。実行可能なコードを異なるアドレスにロードするために、実行可能なコードが利用する絶対アドレスを見つけて、ベースアドレスの変化を考慮して「調整」される。これは、再配置テーブルを利用して行われる。特定の実施形態では、再配置テーブルが、実行可能なコードをロードするときに調整されるように、実行可能なコード内のすべての絶対アドレスリストをコンパイルする。インポートテーブルは、実行可能なコードが呼び出すすべてのルーチンの絶対アドレスをリストにしたものである。これは、APIルーチンおよび他のダイナミックリンクライブラリ(DLL)のルーチンを両方とも含んでよい。これらインポートアドレスは、現在のプロセスのアドレススペース内のルーチンの実際のアドレスに置き換えられる。インポートテーブルは、実行可能なコード内のこれらアドレスの位置のリストである(アドレスは、ジャンプテーブルまたはトランポリン領域にあってもよいが、間接呼び出しのためのデータリストであってもよい)。
【0041】
特定の実施形態では、Portable Executable(PE)フォーマット(Microsoft Windows(登録商標)オペレーティングシステムで利用される実行可能命令、オブジェクトコード、および、DLLのファイルフォーマットである)を利用することができる。PEフォーマットは、オペレーティングシステムソフトウェアアーキテクチャの様々な環境で多目的に利用することができる。一般的には、PEフォーマットは、Microsoft Windows(登録商標)オペレーティングシステムローダがラップされた実行可能なコード(wrapped executable code)を管理するために必要な情報を含有するためのデータ構造である。特定の実施形態では、PEフォーマットを利用してソフトウェアの実行可能なコードをコンパイルして保存してよい。他のプラットフォームについては、調整を必要とせずに1つのエントリポイントを必要とする、未加工の実行可能なコードによって本発明の実装が行われてよい。一部の実装例では、未加工の実行可能なコードが調整を行うよう構成することができ、ELFおよびMACH−O等のコードをカバーすることができる。
【0042】
特定の実施形態では、対象ソフトウェアがクライアント上で実行されてよい(ステップ212参照)。特定の実施形態では、対象ソフトウェアの実行可能なコードが、格納されている割り当てられたダイナミックメモリから直接起動されてよい。特定の実施形態では、スタブは、割り当てられたメモリにロードされている対象ソフトウェアの実行可能なコードに、実行を開始させてよい。この結果、スタブは、対象ソフトウェアに実行を移すことができる。
【0043】
特定の実施形態では、スタブがソケット(より正確には、クライアントとサーバとの間のネットワーク接続に関するインターネットソケットまたはネットワークソケット)およびデータストリームを、クライアントで現在実行中の対象ソフトウェアに渡してよい(214参照)。ネットワークソケットは、適切なアプリケーションプロセスまたはスレッドに、入ってくるデータパケットを配信するメカニズムを構成する。データストリームに関連づけられているネットワークソケットを対象ソフトウェアに渡すことで、対象ソフトウェアは、データストリームの第2の部分に追加データを含む追加データパケットを受け取ることができるようになる。対象ソフトウェアは、次に、データストリームの第2の部分に含まれている追加データを消費することができる(たとえば処理)。特定の実施形態では、スタブは、クライアントのオペレーティングシステムが提供する適切なライブラリ関数を起動して、ネットワークソケットを現在実行中の対象ソフトウェアに渡してよい。たとえば、Windows(登録商標)ソケットアプリケーションプログラミングインタフェース(API)(Winsockとも称される)は、ネットワークソケットを、1つのプロセスから別のプロセスへと、「WSADuplicateSocket」を利用して渡すことができる。
【0044】
対象ソフトウェアは、完了するまで実行を続けてよい。特定の実施形態では、対象ソフトウェアが実行を完了すると(つまり、退出すると)、対象ソフトウェアプログラムの実行可能なコードをロードするために利用されるダイナミックメモリスペースが、割り当てを解除されてよい(たとえばクライアントのオペレーティングシステムにより)。たとえばMicrosoft Windows(登録商標)では、「VirtualFree」関数を起動して、対象ソフトウェアの実行可能なコードが格納されている割り当てられたメモリを解放する。次いで、このメモリスペースを他の用途に利用することができ、他のデータを同じメモリスペースにロードして、対象ソフトウェアの実行可能なコードを上書きしてよい。この時点では、対象ソフトウェアが、スタブによりメモリに直接インストールされており、一部の実施形態ではブラウザキャッシュまたはその他の一時的なデータ記憶メカニズムを含むクライアントの永久媒体には格納されないので、対象ソフトウェアは、クライアントの状態を変更することなくクライアント上に存在しなくなる(たとえば、ドライブにファイルがなければ、システムレジストリに変更は行われないといったことである)。
【0045】
一部の実施形態では、ストリームに埋め込まれており、スタブにより起動される第1の起動可能コードオブジェクトが、別のプロセスを、これも第2の実行可能なコードブジェクトを含んでいる別のデータストリームを要求することで、生成することができる。第2の実行可能なコードブジェクトは、第1の実行可能なコードブジェクトの子供のプロセスとして起動され、第1の実行可能なコードブジェクトが生成するものと同じサンドボックスされた(sand-boxed)ファイルシステムを共有することができる。たとえば、第1の実行可能なコードブジェクトは、1以上の第2の実行可能なコードオブジェクト全体をメモリで実行させる仮想マシンであってよく、第1の仮想マシンがオブジェクトによりサンドボックスされてよい。例えば特定の実装例では、第2のコードオブジェクトによるデータ格納サブシステムに対する書き込みが、仮想マシンによりメモリに書き込まれる(ユーザがクライアントからログオフするときに分析することができる周辺デバイスにではなくて)。たとえばこの実施形態は、ソフトウェアのデモンストレーションバージョンを可能とするために利用可能である。当該実施形態において、第1の実行可能なコードブジェクトは、第2のプログラムを、デモンストレーションしたりテストしたりする際にサンドボックス実装する仮想マシンであってよい。上述したように、第1および第2の実行可能なコードブジェクトが終了するときには、そのすべての痕跡がメモリからなくなる。前述した実施形態は、通常はアプリケーションの実行中にキャッシュされるデータへの無認可アクセスを防ぐために利用することもできる。
【0046】
特定の実施形態は、ネットワーク環境で実装されてもよい。図3は、ネットワーク環境300の一例を示す。ネットワーク環境300は、1以上のサーバ320および1以上のクライアント330を互いに連結させているネットワーク310を含む。特定の実施形態では、ネットワーク310は、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、ローカルエリアネットワーク(LAN)、無線LAN(WLAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、インターネットの一部、別のネットワーク310、または、2以上のこのようなネットワーク310の組み合わせである。本開示は、任意の適切なネットワーク310を含むことを想定する。
【0047】
1以上のリンク350は、サーバ320またはクライアント330をネットワーク310に連結する。特定の実施形態では、1以上のリンク350のそれぞれが1以上の有線、無線、または光リンク350を含む。特定の実施形態では、1以上のリンク350のそれぞれが、イントラネット、エクストラネット、VPN、LAN、WLAN、WAN、MAN、インターネットの一部、別のリンク350、または、2以上のこのようなネリンク350の組み合わせである。本開示は、ネットワーク310にサーバ320とクライアント330とを連結するのに適した任意の適切なリンク350を含むことを想定する。
【0048】
特定の実施形態では、各サーバ320が、ユニタリサーバであっても、複数のコンピュータまたは複数のデータセンタを含む分散型サーバであってもよい。サーバ320は、様々なタイプであってよい(例であり限定ではないが、ウェブサーバ、ニュースサーバ、メールサーバ、メッセージサーバ、広告サーバ、ファイルサーバ、アプリケーションサーバ、エクスチェンジ・サーバ、データベースサーバ、またはプロキシサーバを含む)。特定の実施形態では、各サーバ320は、サーバ320が実装するまたはサポートする適切な関数を実行するための、ハードウェア、ソフトウェア、またはエンベデッド論理コンポーネント、または、2以上のこれらコンポーネントの組み合わせを含んでよい。たとえば、ウェブサーバは、一般的に、ウェブページまたはウェブページの特定のエレメントを含むウェブサイトをホストすることができる。より詳しくは、ウェブサーバは、HTMLファイルその他のファイルタイプをホストすることができ、または、要求に応じてファイルをダイナミックに作成したり構成したりすることができてよく、クライアント330からのHTTPその他の要求に応じてクライアント330にこれらを通信することができる。メールサーバは一般的に、様々なクライアント330に電子メールサービスを提供することができる。データサーバは一般的に、1以上のデータストアに格納されているデータを管理するためにインタフェースを提供することができる。
【0049】
特定の実施形態では、スタブ322の実行可能なコードおよびソフトウェアの一部分324の実行可能なコードは、サーバ320に存在していてよい。これらは、クライアント330に保存またはインストールされずに実行されるように、クライアント330にダウンロードされてよい。これらは、クライアント330で実行されている間、クライアント330の仮想メモリに存在する。これらの実行が完了すると、仮想メモリを解放にするときにクライアント330からこれらを取り除き、クライアント330に痕跡が残らないようにする。
【0050】
特定の実施形態では、1以上のデータストレージ340が、1以上のリンク350を介して1以上のサーバ320に通信可能にリンクされてよい。特定の実施形態では、データストレージ340を利用して、様々なタイプの情報を格納してよい。特定の実施形態では、データストレージ340に格納されている情報は、特定のデータ構造に従って体系化されてよい。特定の実施形態では、各データストレージ340が、関連データベースであってよい。特定の実施形態では、サーバ320またはクライアント330が、データストレージ340に格納されている情報を管理(たとえば取得、修正、追加、削除)できるインタフェースを提供してよい。
【0051】
特定の実施形態では、各クライアント330は、クライアント330が実装するまたはサポートする適切な機能を実行するための、ハードウェア、ソフトウェア、またはエンベデッド論理コンポーネント、または、2以上のこれらコンポーネントの組み合わせを含んでよい。例であって限定ではないが、クライアント330は、デスクトップコンピュータシステム、ノートブックコンピュータシステム、ネットブックコンピュータシステム、ハンドヘルド電子デバイス、または移動電話器であってよい。本開示は、任意の適切なクライアント330を含むことを想定する。クライアント330は、クライアント330のネットワークユーザに、ネットワーク330へのアクセスを許可することができる。クライアント330は、ユーザに、他のクライアント330の他のユーザと通信することを許可してよい。
【0052】
クライアント330は、ウェブブラウザ332(たとえば、MICROSOFT INTERNET EXPLORER, GOOGLE CHROME または MOZILLA FIREFOX)を有してよく、1以上のアドオン、プラグイン、その他のエクステンション(たとえばTOOLBARまたはYAHOO TOOLBAR)を有してよい。クライアント330のユーザは、ウェブブラウザ332をサーバ320に送るためのURL(Uniform Resource Locator)その他のアドレスを入力してよく、ウェブブラウザ332は、ハイパーテキスト転送プロトコル(HTTP)要求を生成して、HTTP要求をサーバ320に伝達してよい。サーバ320は、HTTP要求を受け取り、クライアント330に、HTTP要求に呼応して1以上のハイパーテキストマークアップ言語(HTML)ファイルを通信してよい。クライアント330は、ユーザに提示するために、サーバ320からのHTMLファイルに基づいてウェブページを表示することができる。本開示は、任意の適切なウェブページファイルを含むことを想定する。例であって限定ではないが、ウェブページは、各要求に応じて、HTMLファイル、拡張可能ハイパーテキストマークアップ言語(XHTML)ファイル、または、拡張可能マークアップ言語(XML)ファイルを元にして表示される。これらページは、さらに、例であり限定ではないが、JAVASCRIPT(登録商標)、JAVA(登録商標)、MICROSOFT SILVERLIGHT、マークアップ言語およびスクリプト(たとえばAJAX (非同期 JAVASCRIPT(登録商標)およびXML)等)で描かれたものを実行することができる。ここでは、ウェブページに対する参照が、必要に応じて、1以上の対応するウェブページファイル(ブラウザが、ウェブページを表示するために利用するもののこと)を含んでも、その逆であってもよい。
【0053】
特定の実施形態は、1以上のコンピュータシステムで実装されてよい。図4は、コンピュータシステム400の例を示す。特定の実施形態では、1以上のコンピュータシステム400が、ここに記載しているまたは例示している1以上の方法の1以上のステップを実行する。特定の実施形態では、1以上のコンピュータシステム400が、ここで記載する例示する機能を提供する。特定の実施形態では、1以上のコンピュータシステム400で実行されるソフトウェアが、ここに記載または例示している1以上の方法の1以上のステップを実行する、または、ここで記載または例示している機能を提供する。特定の実施形態には、1以上のコンピュータシステム400の1以上の部分が含まれる。
【0054】
本開示は、コンピュータシステム400を含む。本開示は、任意の適切な物理的形態のコンピュータシステム400を含むことを想定する。例であり限定ではないが、コンピュータシステム400は、エンベデッドコンピュータシステム、システムオンチップ(SOC)、シングルボードコンピュータシステム(SBC)(たとえば、コンピュータオンモジュール(COM)またはシステムオンモジュール(SOM))、デスクトップコンピュータシステム、ラップトップまたはノートブックコンピュータシステム、対話型キオスク、メインフレーム、コンピュータシステムのメッシュ、携帯電話器、携帯情報端末(PDA)、サーバ、またはこれらの2以上の組み合わせであってよい。適切な場合には、コンピュータシステム400は、1以上のコンピュータシステム400(ユニタリーであっても分散型であっても)を含み、複数の位置を網羅し、複数のマシンを網羅し、またはクラウドに存在しており、これらには、1以上のネットワークに1以上のクラウドコンポーネントが含まれてよい。適切な場合には、1以上のコンピュータシステム400が、ここに記載するまたは例示する1以上の方法の1以上のステップを空間的または時間的に実質的に限定することなく行うことができてよい。例であり限定ではないが、1以上のコンピュータシステム400は、リアルタイムでまたはバッチモードで、ここに記載するまたは例示する1以上の方法の1以上のステップを実行することができる。1以上のコンピュータシステム400は、適切な場合には、ここに記載するまたは例示する1以上の方法の1以上のステップを異なる時点または異なる位置で実行することができる。
【0055】
特定の実施形態では、コンピュータシステム400は、プロセッサ402、メモリ404、ストレージ406、入力/出力(I/O)インタフェース408、通信インタフェース410、およびバス412を含む。本開示は、特定の数の特定のコンポーネントを特定の構成で有する特定のコンピュータシステムを記載し例示しているが、本開示は、任意の適切な数のコンポーネントを任意の適切な構成で有する任意の適切なコンピュータシステムを含むことを想定する。
【0056】
特定の実施形態では、プロセッサ402は、コンピュータプログラムを構成しているもののような、命令を実行するハードウェアを含む。例であり限定ではないが、命令を実行するためには、プロセッサ402が、内部レジスタ、内部キャッシュ、メモリ404、またはストレージ406から命令を取得(またはフェッチ)することができ、これらをデコード、実行して、次に、1以上の結果を内部レジスタ、内部キャッシュ、メモリ404、またはストレージ406に書き込むことができる。特定の実施形態では、プロセッサ402が、データ、命令、またはアドレス用に1以上の内部キャッシュを含んでよい。本開示は、適宜、任意の適切な数の任意の適切な内部キャッシュを含むプロセッサ402を含むことを想定する。例であり限定ではないが、プロセッサ402は、1以上の命令キャッシュ、1以上のデータキャッシュ、および、1以上の変換ルックアサイドバッファ(TLB)を含んでよい。命令キャッシュの命令は、メモリ404またはストレージ406の命令のコピーであってよく、命令キャッシュは、プロセッサ402によるこれら命令の取得を加速することができる。データキャッシュのデータは、プロセッサ402で実行する命令を動作させるメモリ404またはストレージ406のデータのコピー、プロセッサ402で実行される後続する命令がアクセスするために、または、メモリ404またはストレージ406に書き込むためのプロセッサ402で実行された前の命令の結果、またはその他の適切なデータであってよい。データキャッシュは、プロセッサ402による読み書き処理を加速することができる。TLBは、プロセッサ402の仮想アドレス変換を加速化することができる。特定の実施形態では、プロセッサ402は、データ、命令、またはアドレスのための1以上の内部レジスタを含んでいてよい。本開示は、適宜、任意の適切な数の任意の適切な内部レジスタを含むプロセッサ402を含むことを想定する。プロセッサ402は適宜、1以上の算術論理演算ユニット(ALU)を含んでよく、マルチコアプロセッサであってよく、または、1以上のプロセッサ402を含んでよい。本開示は、特定のプロセッサを記載および例示しているが、本開示は任意の適切なプロセッサを含むことを想定する。
【0057】
特定の実施形態では、メモリ404が、プロセッサ402が実行する命令、または、プロセッサ402が処理するデータを格納するためのメインメモリを含む。例であり限定ではないが、コンピュータシステム400は、ストレージ406または別のソース(たとえば別のコンピュータシステム400)からメモリ404に命令をロードすることができる。次いでプロセッサ402は、命令をメモリ404から内部レジスタまたは内部キャッシュにロードすることができる。命令を実行するために、プロセッサ402は、内部レジスタまたは内部キャッシュから命令を取得して、デコードしてよい。命令の実行中または実行後に、プロセッサ402は、1以上の結果(中間物であっても最終結果であってもよい)を、内部レジスタまたは内部キャッシュに書き込んでよい。次に、プロセッサ402は、これら結果の1以上をメモリ404に書き込んでよい。特定の実施形態では、プロセッサ402は、1以上の内部レジスタまたは内部キャッシュに、またはメモリ404における(ストレージ406またはその他の箇所ではなくて)命令のみを実行して、1以上の内部レジスタまたは内部キャッシュ、またはメモリ404の(ストレージ406またはその他の箇所ではなくて)データのみに対して動作する。1以上のメモリバス(それぞれが、アドレスバスまたはデータバスを含んでいてよい)が、プロセッサ402をメモリ404に連結してよい。バス412は、後述するように1以上のメモリバスを含んでよい。特定の実施形態では、1以上のメモリ管理ユニット(MMU)が、プロセッサ402とメモリ404との間に存在しており、プロセッサ402が要求するアクセスをメモリ404に対して行わせる。特定の実施形態では、メモリ404がランダムアクセスメモリ(RAM)を含んでいる。このRAMは、適切な場合には揮発性メモリであってよい。適切な場合には、このRAMは、ダイナミックRAM(DRAM)またはスタティックRAM(SRAM)であってよい。さらに、適切な場合には、このRAMがシングルポートRAMであってもマルチポートRAMであってもよい。本開示は任意の適切なRAMを含むことを想定する。メモリ404は、適切な場合に、1以上のメモリ404を含んでよい。本開示では特定のメモリが記載および例示されているが、本開示は、任意の適切なメモリを含むことを想定する。
【0058】
特定の実施形態では、ストレージ406が、データまたは命令用の大容量記憶装置を含む。例であり限定ではないが、ストレージ406はHDD、フロッピー(登録商標)ディスクドライブ、フラッシュメモリ、光ディスク、光磁気ディスク、磁気テープ、ユニバーサルシリアルバス(USB)ドライブ、または、これらの2以上の組み合わせを含んでよい。ストレージ406は、取り外し可能または取り外し不可能(または固定)媒体を含んでよい。ストレージ406は、適宜、コンピュータシステム400の内部にあっても外部にあってもよい。特定の実施形態では、ストレージ406が不揮発の固体メモリである。特定の実施形態では、ストレージ406が、読み出し専用メモリ(ROM)を含む。適切な場合には、このROMが、マスクプログラミングされたROM,プログラム可能ROM(PROM)、EPROM,EEPROM、EAROM、またはフラッシュメモリまたはこれらの2以上の組み合わせであってよい。本開示は、任意の適切な物理的形態の大容量記憶装置406を含むことを想定する。ストレージ406は、適宜、プロセッサ402とストレージ406との間の通信を促進するための1以上の記憶制御ユニットを含んでよい。適切な場合には、ストレージ406は、1以上のストレージ406を含んでよい。本開示は、特定のストレージを記載および例示しているが、本開示は任意の適切なストレージを含むことを想定する。
【0059】
特定の実施形態では、I/Oインタフェース408が、コンピュータシステム400および1以上のI/Oデバイスの間の通信のために1以上のインタフェースを提供するハードウェア、ソフトウェア、または両方を含む。コンピュータシステム400は、適切な場合に、これらI/Oデバイスを1以上含んでよい。これらI/Oデバイスの1以上は、ある人とコンピュータシステム400との間の通信を可能としてよい。例であって限定ではないが、I/Oデバイスは、キーボード、キーパッド、マイクロフォン、モニタ、マウス、プリンタ、スキャナ、スピーカ、スティルカメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオカメラ、別の適切なI/Oデバイスまたはこれらの2以上の組み合わせを含んでよい。I/Oデバイスは1以上のセンサを含んでよい。本開示は、任意の適切なI/Oデバイスおよびそのための任意の適切なI/Oインタフェース408を含むことを想定する。適切な場合には、I/Oインタフェース408が、プロセッサ402にこれらI/Oデバイスの1以上を駆動させる1以上のデバイスまたはソフトウェアドライバを含んでよい。I/Oインタフェース408は、適宜、1以上のI/Oインタフェース408を含んでよい。本開示は、特定のI/Oインタフェースを記載および例示しているが、本開示は任意の適切なI/Oインタフェースを含むことを想定する。
【0060】
特定の実施形態では、通信インタフェース410が、コンピュータシステム400および1以上の他のコンピュータシステム400または1以上のネットワークの通信のために1以上のインタフェースを提供するハードウェア、ソフトウェア、または両方を含む。例であり限定ではないが、通信インタフェース410は、イーサネット(登録商標)その他の有線ネットワークと通信するためのネットワークインタフェースコントローラ(NIC)またはネットワークアダプタ、または、無線ネットワーク(たとえばWi−Fiネットワーク)と通信するための無線NIC(WNIC)または無線アダプタを含んでよい。本開示は、そのために任意の適切なネットワークおよび任意の適切な通信インタフェース410を含むことを想定する。例であり限定ではないが、コンピュータシステム400が、暫定ネットワーク、パーソナルエリアネットワーク(PAN)、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、またはインターネットの1以上の部分、またはこれらの2以上の組み合わせと通信してよい。これらネットワークの1以上の1以上の部分が有線または無線であってよい。一例としては、コンピュータシステム400が、無線PAN(WPAN)(たとえば、BLUETOOTH(登録商標)WPAN)、Wi−Fiネットワーク、Wi−MAXネットワーク、携帯電話ネットワーク(たとえばGSM(登録商標)(Global System for Mobile Communications)ネットワーク)、その他の適切な無線ネットワークまたはこれらの2以上の組み合わせと通信してよい。コンピュータシステム400は、適宜、これらネットワークのいずれかについての任意の適切な通信インタフェース410を含んでよい。通信インタフェース410は、適宜、1以上の通信インタフェース410を含んでよい。本開示は特定の通信インタフェースを記載および例示しているが、本記載は、任意の適切な通信インタフェースを含むことを想定する。
【0061】
特定の実施形態では、バス412が、コンピュータシステム400のコンポーネント同士を連結するハードウェア、ソフトウェア、または両方を含む。例であり限定ではないが、バス412は、アクセラレーテッドグラフィックポート(AGP)その他のグラフィックバス、EISA(Enhanced Industry Standard Architecture)バス、フロントサイドバス(FBS)、ハイパートランスポート(HT)インターコネクト、ISA(Industry Standard Architecture)バス、INFINIBANDインターコネクト、LPC(low-pin-count)バス、メモリバス、マイクロチャネルアーキテクチャ(MCA)バス、PCI(Peripheral Component Interconnect)バス、PCI−Express(PCI-X)バス、シリアルATA(SATA)バス、VLB(Video Electronics Standards Association local)バス、または別の適切なバスまたはこれらの2以上の組み合わせを含んでよい。バス412は、適宜、1以上のバス412を含んでよい。本開示は、特定のバスを記載および例示しているが、本開示は、任意の適切なバスまたはインターコネクトを含むことを想定してよい。
【0062】
ここで、コンピュータ可読記憶媒体について言及している場合、1以上の持続性、有形のコンピュータ可読記憶媒体を持つ構造を含んでよい。例であり限定ではないが、コンピュータ可読記憶媒体は、適宜、半導体ベースその他の集積回路(IC)(たとえばフィールドプログラマブルゲートアレイ(FPGA)または特定用途向けIC(ASIC)、ハードディスク、HDD,ハイブリッドハードドライブ(HHD)、光ディスク、光ディスクドライブ(ODD)、光磁気ディスク、光磁気ドライブ、フロッピー(登録商標)ディスク、フロッピー(登録商標)ディスクドライブ(FDD)、磁気テープ、ホログラフィック記憶媒体、固体ドライブ(SSD)、RAMドライブ、セキュアデジタルカード、セキュアデジタルドライブ、その他の適切なコンピュータ可読記憶媒体またはこれらの2以上の組み合わせ)を含んでよい。ここで、コンピュータ可読記憶媒体という言及から、米国特許法101条における特許要件に含まれない媒体は含まないことに留意されたい。ここで、コンピュータ可読記憶媒体という言及から、米国特許法101条における特許要件に含まれない、一時的な形態の信号送信は含まれない(たとえば電気または電磁信号自体の伝播)。コンピュータ可読持続性記憶媒体は、適宜、揮発性であっても不揮発性であってもよく、また、揮発性および不揮発性の組み合わせであってもよい。
【0063】
本開示は、任意の適切なストレージを実装する1以上のコンピュータ可読記憶媒体を含むことを想定する。特定の実施形態では、コンピュータ可読記憶媒体が、プロセッサ402の1以上の部分(たとえば、1以上の内部レジスタまたはキャッシュ)、メモリ404の1以上の部分、ストレージ406の1以上の部分、またはこれらの組み合わせを適宜実装する。特定の実施形態では、コンピュータ可読記憶媒体がRAMまたはROMを実装する。特定の実施形態では、コンピュータ可読記憶媒体は、揮発性または永久的なメモリを実装する。特定の実施形態では、1以上のコンピュータ可読記憶媒体はソフトウェアを具現化する。ここでは、ソフトウェアという言及は、適宜、1以上のアプリケーション、バイトコード、1以上のコンピュータプログラム、1以上の実行可能命令、1以上の命令、論理、マシンコード、1以上のスクリプト、またはソースコードを含んでもよいし、含まなくてもよい。特定の実施形態では、ソフトウェアが1以上のアプリケーションプログラミングインタフェース(API)を含む。本開示は、任意の適切なプログラミング言語またはプログラミング言語間の組み合わせで書き込まれたり、表現されたりしている任意の適切なソフトウェアを含むことを想定する。特定の実施形態では、ソフトウェアはソースコードまたはオブジェクトコードとして表されている。特定の実施形態では、ソフトウェアは、高レベルプログラミング言語(たとえばC、Perl、またはこれらの適切な発展形)で表される。特定の実施形態では、ソフトウェアは、低レベルプログラミング言語(たとえばアセンブリ言語(またはマシンコード))で表される。特定の実施形態では、ソフトウェアがJAVA(登録商標)で表される。特定の実施形態では、ソフトウェアがハイパーテキストマークアップ言語(HTML)、拡張マークアップ言語(XML)、またはその他の適切なマークアップ言語で表される。
【0064】
ここで「または(もしくは)(or)」は、文脈からそうではないことが示唆されている場合以外は、包括的であり、排他的ではない。したがって、ここで「AまたはB」といった場合には、文脈からそうではないことが示唆されている場合以外は、「A、B、または両方」という意味である。さらに、「および(ならびに)(and)」は、文脈からそうではないことが示唆されている場合以外は、まとめて(joint)および個別に(several)を表す。したがって、ここで「AおよびB」というと、文脈からそうではないことが示唆されている場合以外は、「AおよびBをまとめてまたは個別に」という意味になる。
【0065】
本開示は、当業者が想到するだろう、ここに記載した実施形態に対する変更例、代替例、変形例をすべて含む。同様に、適切な場合には、添付請求項も、当業者が想到するだろう、ここに記載した実施形態に対する変更例、代替例、変形例をすべて含む。さらに、添付請求項で、特定の機能を実行するよう適合されている、配置されている、その機能をもつ、そのように構成されている、その能力をもつ、そのように動作可能である、または作動可能である装置、システム、装置またはシステムのコンポーネントが言及されているとき、これらは、特定の機能が起動されたり、動作させられていたり、解除されていたりしてもいなくても、それらが適合されていたり、配置されていたり、その能力をもっていたり、構成されていたり、それができたり、そのように動作可能であったり、または作動可能である限り、そのような装置、システム、およびコンポーネントを含む。
本開示に基づけば、以下の各項目もまた開示される。
[項目1]
第1のコンピューティングデバイスによって第1の仮想メモリを割り当てる段階と、
前記第1のコンピューティングデバイスによって、ソフトウェアの第1の部分(first piece of software)の実行可能なコードを受信する段階と、
前記第1のコンピューティングデバイスによって、前記ソフトウェアの第1の部分の前記実行可能なコードを前記第1の仮想メモリに直接書き込む段階と、
前記第1のコンピューティングデバイスによって、前記第1の仮想メモリを実行可能としてマークする段階と、
前記第1のコンピューティングデバイスによって、前記ソフトウェアの第1の部分の前記実行可能なコードを、前記第1の仮想メモリから直接実行する段階と、
前記第1のコンピューティングデバイスによって、前記ソフトウェアの第1の部分の前記実行可能なコードが促したソフトウェアの第2の部分(second piece of software)の実行可能なコードをダウンロードして実行する段階と
を備える方法。
[項目2]
前記ソフトウェアの第1の部分の前記実行可能なコードが必要とする1以上の共有ライブラリをロードする段階をさらに備える、項目1に記載の方法。
[項目3]
前記ソフトウェアの第1の部分の前記実行可能なコードは、前記第1のコンピューティングデバイスで実行されているブラウザで実行されているクライアント側のスクリプトである、項目2に記載の方法。
[項目4]
前記クライアント側のスクリプトは、前記ブラウザがサポートしている外部関数インタフェースにアクセスする、項目3に記載の方法。
[項目5]
前記ブラウザは、Mozilla Firefoxであり、前記クライアント側のスクリプトは、JavaScript(登録商標)である、項目4に記載の方法。
[項目6]
前記クライアント側のスクリプトは、前記第1のコンピューティングデバイスに存在している外部関数ライブラリにアクセスする、項目3から5のいずれか一項に記載の方法。
[項目7]
前記外部関数ライブラリは、ctypesライブラリである、項目6に記載の方法。
[項目8]
前記ソフトウェアの第1の部分の前記実行可能なコードの実行が完了した後で、前記第1の仮想メモリの割り当て解除を行って、前記第1のコンピューティングデバイスに前記ソフトウェアの第1の部分の前記実行可能なコードの痕跡が残らないようにする段階をさらに備える、項目1から7のいずれか一項に記載の方法。
[項目9]
前記ソフトウェアの第1の部分の前記実行可能なコードが促した前記ソフトウェアの第2の部分の前記実行可能なコードをダウンロードして実行する段階は、
前記ソフトウェアの第2の部分の前記実行可能なコードを受信する段階と、
データストリームから前記ソフトウェアの第2の部分の前記実行可能なコードを抽出する段階と、
第2の仮想メモリを割り当てる段階と、
前記ソフトウェアの第2の部分の前記実行可能なコードを、前記第2の仮想メモリに直接書き込む段階と、
前記第2の仮想メモリを実行可能としてマークする段階と、
前記ソフトウェアの第2の部分の前記実行可能なコードを、前記第2の仮想メモリから直接実行する段階と
を有する、項目1から8のいずれか一項に記載の方法。
[項目10]
前記ソフトウェアの第2の部分の前記実行可能なコードを検証する段階と、
前記第1のコンピューティングデバイスに存在している前記ソフトウェアの第2の部分の前記実行可能なコードが必要とする1以上の第1の共有ライブラリをロードする段階と、
第2のコンピューティングデバイスから前記ソフトウェアの第2の部分の前記実行可能なコードが必要とする1以上の第2の共有ライブラリをダウンロードする段階と
をさらに備える、項目9に記載の方法。
[項目11]
前記ソフトウェアの第2の部分の前記実行可能なコードの実行が完了した後で、前記第2の仮想メモリの割り当て解除を行って、前記第1のコンピューティングデバイスに前記ソフトウェアの第2の部分の前記実行可能なコードの痕跡が残らないようにする段階をさらに備える、項目9または10に記載の方法。
[項目12]
前記第1のコンピューティングデバイスのオペレーティングシステムに基づいて前記ソフトウェアの第2の部分を決定する段階をさらに備える、項目9から11のいずれか一項に記載の方法。
[項目13]
前記ソフトウェアの第1の部分の前記実行可能なコードは、第2のコンピューティングデバイスから受信され、
前記ソフトウェアの第2の部分の前記実行可能なコードは、第3のコンピューティングデバイスから受信される、項目9から12のいずれか一項に記載の方法。
[項目14]
前記ソフトウェアの第1の部分の前記実行可能なコード、および、前記ソフトウェアの第2の部分の前記実行可能なコードは、両方とも、第2のコンピューティングデバイスから受信される、項目9から12のいずれか一項に記載の方法。
[項目15]
前記ソフトウェアの第2の部分の前記実行可能なコードは、データストリームに埋め込まれている、項目9から14のいずれか一項に記載の方法。
[項目16]
1以上のプロセッサが実行可能な命令を有するメモリを備える第1のシステムであって、前記1以上のプロセッサは、前記メモリに連結されており、前記命令を実行することができ、前記1以上のプロセッサは、前記命令が実行されると、
第1の仮想メモリを割り当てる段階と、
ソフトウェアの第1の部分の実行可能なコードを受信する段階と、
前記ソフトウェアの第1の部分の前記実行可能なコードを前記第1の仮想メモリに直接書き込む段階と、
前記第1の仮想メモリを実行可能としてマークする段階と、
前記ソフトウェアの第1の部分の前記実行可能なコードを、前記1の仮想メモリから直接実行する段階と、
前記ソフトウェアの第1の部分の前記実行可能なコードが促したソフトウェアの第2の部分の実行可能なコードをダウンロードして実行する段階と
を実行する、第1のシステム。
[項目17]
前記1以上のプロセッサは、前記命令が実行されると、前記ソフトウェアの第1の部分の前記実行可能なコードが必要とする1以上の共有ライブラリをロードする段階をさらに実行する、項目16に記載の第1のシステム。
[項目18]
前記ソフトウェアの第1の部分の前記実行可能なコードは、第1のコンピューティングデバイスで実行されているブラウザで実行されているクライアント側のスクリプトである、項目16または17に記載の第1のシステム。
[項目19]
前記クライアント側のスクリプトは、前記ブラウザがサポートしている外部関数インタフェースにアクセスする、項目18に記載の第1のシステム。
[項目20]
前記ブラウザは、Mozilla Firefoxであり、前記クライアント側のスクリプトは、JavaScript(登録商標)である、項目19に記載の第1のシステム。
[項目21]
前記クライアント側のスクリプトは、前記第1のコンピューティングデバイスに存在している外部関数ライブラリにアクセスする、項目18から20のいずれか一項に記載の第1のシステム。
[項目22]
前記外部関数ライブラリは、ctypesライブラリである、項目21に記載の第1のシステム。
[項目23]
前記1以上のプロセッサはさらに、前記命令が実行されると、前記ソフトウェアの第1の部分の前記実行可能なコードの実行が完了した後で、前記第1の仮想メモリの割り当て解除を行って、第1のコンピューティングデバイスに前記ソフトウェアの第1の部分の前記実行可能なコードの痕跡が残らないようにする、項目16から22のいずれか一項に記載の第1のシステム。
[項目24]
前記ソフトウェアの第1の部分の前記実行可能なコードが促した前記ソフトウェアの第2の部分の前記実行可能なコードをダウンロードして実行する段階は、
前記ソフトウェアの第2の部分の前記実行可能なコードを受信する段階と、
データストリームから前記ソフトウェアの第2の部分の前記実行可能なコードを抽出する段階と、
第2の仮想メモリを割り当てる段階と、
前記ソフトウェアの第2の部分の前記実行可能なコードを、前記第2の仮想メモリに直接書き込む段階と、
前記第2の仮想メモリを実行可能としてマークする段階と、
前記ソフトウェアの第2の部分の前記実行可能なコードを、前記第2の仮想メモリから直接実行する段階と
を有する、項目16から23のいずれか一項に記載の第1のシステム。
[項目25]
前記1以上のプロセッサは、さらに、前記命令が実行されると、
前記ソフトウェアの第2の部分の前記実行可能なコードを検証する段階と、
第1のコンピューティングデバイスに存在している前記ソフトウェアの第2の部分の前記実行可能なコードが必要とする1以上の第1の共有ライブラリをロードする段階と、
第2のコンピューティングデバイスから前記ソフトウェアの第2の部分の前記実行可能なコードが必要とする1以上の第2の共有ライブラリをダウンロードする段階と
を実行する、項目24に記載の第1のシステム。
[項目26]
前記1以上のプロセッサはさらに、前記命令が実行されると、前記ソフトウェアの第2の部分の前記実行可能なコードの実行が完了した後で、前記第2の仮想メモリの割り当て解除を行って、第1のコンピューティングデバイスに前記ソフトウェアの第2の部分の前記実行可能なコードの痕跡が残らないようにする、項目24または25に記載の第1のシステム。
[項目27]
前記1以上のプロセッサはさらに、前記命令を実行するときに、第1のコンピューティングデバイスのオペレーティングシステムに基づいて前記ソフトウェアの第2の部分を決定する段階を実行する、項目24から26のいずれか一項に記載の第1のシステム。
[項目28]
前記ソフトウェアの第1の部分の前記実行可能なコードは、第2のコンピューティングデバイスから受信され、
前記ソフトウェアの第2の部分の前記実行可能なコードは、第3のコンピューティングデバイスから受信される、項目24から27のいずれか一項に記載の第1のシステム。
[項目29]
前記ソフトウェアの第1の部分の前記実行可能なコード、および、前記ソフトウェアの第2の部分の前記実行可能なコードは、両方とも、第2のコンピューティングデバイスから受信される、項目24から27のいずれか一項に記載の第1のシステム。
[項目30]
前記ソフトウェアの第2の部分の前記実行可能なコードは、データストリームに埋め込まれている、項目24から29のいずれか一項に記載の第1のシステム。
[項目31]
第1のコンピュータシステムに実行されると、
第1の仮想メモリを割り当てる手順と、
ソフトウェアの第1の部分の実行可能なコードを受信する手順と、
前記ソフトウェアの第1の部分の前記実行可能なコードを前記第1の仮想メモリに直接書き込む手順と、
前記第1の仮想メモリを実行可能としてマークする手順と、
前記ソフトウェアの第1の部分の前記実行可能なコードを前記第1の仮想メモリから直接実行する手順と、
前記ソフトウェアの第1の部分の前記実行可能なコードが促したソフトウェアの第2の部分の実行可能なコードをダウンロードして実行する手順と
を実行する、プログラム。
[項目32]
前記第1のコンピュータシステムにより実行されると、前記ソフトウェアは、前記ソフトウェアの第1の部分の前記実行可能なコードが必要とする1以上の共有ライブラリをロードする手順を実行する、項目31に記載のプログラム。
[項目33]
前記ソフトウェアの第1の部分の前記実行可能なコードは、第1のコンピューティングデバイスで実行されているブラウザで実行されているクライアント側のスクリプトである、項目31または32に記載のプログラム。
[項目34]
前記クライアント側のスクリプトは、前記ブラウザがサポートしている外部関数インタフェースにアクセスする、項目33に記載のプログラム。
[項目35]
前記ブラウザは、Mozilla Firefoxであり、前記クライアント側のスクリプトは、JavaScript(登録商標)である、項目34に記載のプログラム。
[項目36]
前記クライアント側のスクリプトは、前記第1のコンピューティングデバイスに存在している外部関数ライブラリにアクセスする、項目33から35のいずれか一項に記載のプログラム。
[項目37]
前記外部関数ライブラリは、ctypesライブラリである、項目36に記載のプログラム。
[項目38]
さらに、前記ソフトウェアは、前記第1のコンピュータシステムに実行されると、前記ソフトウェアの第1の部分の前記実行可能なコードの実行が完了した後で、前記第1の仮想メモリの割り当て解除を行って、第1のコンピューティングデバイスに前記ソフトウェアの第1の部分の前記実行可能なコードの痕跡が残らないようにする、項目31から37のいずれか一項に記載のプログラム。
[項目39]
前記ソフトウェアの第1の部分の前記実行可能なコードが促した前記ソフトウェアの第2の部分の前記実行可能なコードをダウンロードして実行する手順は、
前記ソフトウェアの第2の部分の前記実行可能なコードを受信する手順と、
データストリームから前記ソフトウェアの第2の部分の前記実行可能なコードを抽出する手順と、
第2の仮想メモリを割り当てる手順と、
前記ソフトウェアの第2の部分の前記実行可能なコードを、前記第2の仮想メモリに直接書き込む手順と、
前記第2の仮想メモリを実行可能としてマークする手順と、
前記ソフトウェアの第2の部分の前記実行可能なコードを、前記第2の仮想メモリから直接実行する手順と
を有する、項目31から38のいずれか一項に記載のプログラム。
[項目40]
さらに、前記第1のコンピュータシステムにより実行されるときに、
前記ソフトウェアの第2の部分の前記実行可能なコードを検証する手順と、
第1のコンピューティングデバイスに存在している前記ソフトウェアの第2の部分の前記実行可能なコードが必要とする1以上の第1の共有ライブラリをロードする手順と、
第2のコンピューティングデバイスから前記ソフトウェアの第2の部分の前記実行可能なコードが必要とする1以上の第2の共有ライブラリをダウンロードする手順と
を実行する、項目39に記載のプログラム。
[項目41]
さらに、前記第1のコンピュータシステムにより実行されると、
前記ソフトウェアの第2の部分の前記実行可能なコードの実行が完了した後で、前記第2の仮想メモリの割り当て解除を行って、第1のコンピューティングデバイスに前記ソフトウェアの第2の部分の前記実行可能なコードの痕跡が残らないようにする、項目39または40に記載のプログラム。
[項目42]
さらに、前記第1のコンピュータシステムにより実行されると、第1のコンピューティングデバイスのオペレーティングシステムに基づいて前記ソフトウェアの第2の部分を決定する手順を実行する、項目39から41のいずれか一項に記載のプログラム。
[項目43]
前記ソフトウェアの第1の部分の前記実行可能なコードは、第2のコンピューティングデバイスから受信され、
前記ソフトウェアの第2の部分の前記実行可能なコードは、第3のコンピューティングデバイスから受信される、項目39から42のいずれか一項に記載のプログラム。
[項目44]
前記ソフトウェアの第1の部分の前記実行可能なコード、および、前記ソフトウェアの第2の部分の前記実行可能なコードは、両方とも、第2のコンピューティングデバイスから受信される、項目39から42のいずれか一項に記載のプログラム。
[項目45]
前記ソフトウェアの第2の部分の前記実行可能なコードは、データストリームに埋め込まれている、項目39から44のいずれか一項に記載のプログラム。
図1
図2
図3
図4