(57)【特許請求の範囲】
【請求項１】
コンピューティングデバイスにおいて、オンラインプロバイダから、アプリケーション用の少なくとも１つのデバイスタイプ固有のインストレーションパッケージを受信するステップであって、前記少なくとも１つのデバイスタイプ固有のインストレーションパッケージが、前記オンラインプロバイダによってアプリケーション用に生成された非実行可能なマシン依存中間言語（MDIL）コードを伴うファイルと、前記アプリケーションの実行時に前記アプリケーションが使用することのできる１つまたは複数のリソースファイルと、前記少なくとも１つのデバイスタイプ固有のインストレーションパッケージに含まれるＭＤＩＬファイルのセットのうちの少なくとも１つを示すファイルのリストと、示されたそれぞれのＭＤＩＬファイルの前記コードにバインドされることとなる１つまたは複数のライブラリのリストと、を含む、ステップと、
前記コンピューティングデバイスにおいて、前記非実行可能なＭＤＩＬコードをバインドすることによって前記アプリケーション用のネイティブイメージを生成することで、前記コンピューティングデバイス上に前記アプリケーションをインストールするステップであって、前記ネイティブイメージを前記生成することが、
前記非実行可能なＭＤＩＬコードの一部分を前記コンピューティングデバイス上の１つまたは複数のライブラリとバインドすることを含み、疑似命令の中の未解決のシンボリックリファレンスを解決して、前記ネイティブイメージ用の対応するネイティブ命令を生成することを含む、ステップと、
前記ネイティブイメージを、実行用に前記アプリケーションをロードする際に使用するために前記コンピューティングデバイス上に格納するステップと、
前記コンピューティングデバイス上のライブラリのセットを更新するステップであって、前記ライブラリのセットが、前記非実行可能なＭＤＩＬコードの前記一部分にバインドされた前記１つまたは複数のライブラリのうちの少なくとも１つのライブラリを含む、ステップと、
前記コンピューティングデバイス上の前記ライブラリのセットの前記更新の後、前記非実行可能なＭＤＩＬコードの前記一部分を前記１つまたは複数のライブラリのうちの前記少なくとも１つのライブラリとバインドすることで、前記アプリケーション用の更新されたネイティブイメージを生成するステップであって、前記バインドすることにより、前記ライブラリのセットの前記更新に応じて、前記アプリケーション用に前記コンピューティングデバイス上で再コンパイルが行われることが回避される、ステップと
を含み、
前記非実行可能なＭＤＩＬコードは、以前に、前記コンピューティングデバイスからリモートでコンパイルされ、かつ、前記オンラインプロバイダによって送信されたものであり、前記非実行可能なＭＤＩＬコードは、マシン依存命令と、前記アプリケーションのインストール中にネイティブコードに解決されることとなる前記未解決のシンボリックリファレンスを伴う前記疑似命令と、を含み、前記マシン依存命令は、プロセッサ用のプロセッサ命令セットに基づき、
前記少なくとも１つのデバイスタイプ固有のインストレーションパッケージは、以前に、オンラインマーケットプレイスにおいて、さまざまなその他のデバイスタイプ固有のインストレーションパッケージとともに前記コンピューティングデバイスからリモート保存されたものである、
方法。
【請求項２】
前記コンピューティングデバイスの少なくとも１つのランタイムエンジンを更新するステップと、
前記更新されたネイティブイメージを、実行用に前記アプリケーションをロードする際に使用するために前記コンピューティングデバイス上に格納するステップと
をさらに含み、
前記アプリケーション用の前記更新されたネイティブイメージは、前記更新されたネイティブイメージが前記更新された少なくとも１つのランタイムエンジンを使用して実行可能であるように生成される、請求項１に記載の方法。
【請求項３】
前記アプリケーションの実行中に前記ネイティブイメージをロードするステップをさらに含み、前記ネイティブイメージを前記ロードすることが共通言語ランタイムによって実行される、請求項１に記載の方法。
【請求項４】
前記マシン依存命令が、１つまたは複数のマシンコード命令とアセンブリ命令とを含む、請求項１に記載の方法。
【請求項５】
前記非実行可能なＭＤＩＬコードの一部分を前記１つまたは複数のライブラリと前記バインドすることが、
前記非実行可能なＭＤＩＬコードの一部分の前記疑似命令のうちの所与の疑似命令からネイティブ言語命令を生成することを含む、請求項４に記載の方法。
【請求項６】
ネイティブ言語命令を前記生成することが、前記所与の疑似命令に基づいて数値フィールドオフセットを生成することを含む、請求項５に記載の方法。
【請求項７】
前記所与の疑似命令が、フィールドを識別するトークンを含み、前記ネイティブ言語命令が、実行されたときに前記フィールドを参照するための前記数値フィールドオフセットを含む、請求項６に記載の方法。
【請求項８】
前記アプリケーション用の新たなＭＤＩＬコードを受信するステップと、
前記新たなＭＤＩＬコードの新たな部分を前記コンピューティングデバイス上の前記１つまたは複数のライブラリとバインドすることを含む、前記アプリケーション用の更新されたネイティブイメージを生成することによって、前記コンピューティングデバイス上の前記アプリケーションを更新するステップと、
前記更新されたネイティブイメージを、実行用に前記アプリケーションをロードする際に使用するために前記コンピューティングデバイス上に格納するステップと
をさらに含む、請求項１に記載の方法。
【請求項９】
プロセッサとメモリとを含むコンピューティングデバイスであって、前記メモリが、前記コンピューティングデバイスにオペレーションを実行させるためのコンピュータ実行可能命令を格納しており、前記オペレーションが、
前記コンピューティングデバイスにおいて、オンラインプロバイダからアプリケーション用の少なくとも１つのデバイスタイプ固有のインストレーションパッケージを受信するステップであって、前記少なくとも１つのデバイスタイプ固有のインストレーションパッケージが、非実行可能なマシン依存中間言語（MDIL）コードを含む非実行可能なＭＤＩＬファイルのセットと、前記アプリケーションの実行時に前記アプリケーションが使用することのできる１つまたは複数のリソースファイルと、前記少なくとも１つのデバイスタイプ固有のインストレーションパッケージに含まれる前記ＭＤＩＬファイルのセットのうちの少なくとも１つを示すファイルのリストと、示されたそれぞれのＭＤＩＬファイルの前記コードにバインドされることとなる１つまたは複数のライブラリのリストと、を含む、ステップと、
前記ファイルのリストを評価するステップと、
前記ファイルのリストの前記評価に基づいて、前記コンピューティングデバイスのバインダに、前記非実行可能なＭＤＩＬファイルのセットのうちの少なくとも１つの非実行可能なＭＤＩＬファイルと、前記少なくとも１つの非実行可能なＭＤＩＬファイルにバインドされることになる１つまたは複数のライブラリとを提供するステップと、
前記バインダを用いて、前記アプリケーションのインストール中に前記アプリケーション用のネイティブイメージを生成するステップであって、前記生成するステップが、前記１つまたは複数のライブラリを使用して前記少なくとも１つのＭＤＩＬファイルの前記非実行可能なＭＤＩＬコードをバインドすることを含み、疑似命令のシンボリックリファレンスを解決して、前記ネイティブイメージ用の対応するネイティブ命令を生成することを含む、ステップと、
前記コンピューティングデバイス上のライブラリのセットを更新するステップであって、前記ライブラリのセットが、前記非実行可能なＭＤＩＬコードにバインドされた前記１つまたは複数のライブラリのうちの少なくとも１つのライブラリを含む、ステップと、
前記コンピューティングデバイス上の前記ライブラリのセットの前記更新の後、前記非実行可能なＭＤＩＬコードを前記１つまたは複数のライブラリのうちの前記少なくとも１つのライブラリとバインドすることで、前記アプリケーション用の更新されたネイティブイメージを生成するステップと
を含み、
前記非実行可能なＭＤＩＬコードは、以前に、前記コンピューティングデバイスからリモートでコンパイルされたものであり、前記非実行可能なＭＤＩＬコードは、マシン依存命令と、前記アプリケーションのインストール中にネイティブコードに解決されることとなる未解決の前記シンボリックリファレンスを伴う前記疑似命令と、を含み、前記マシン依存命令は、前記プロセッサ用のプロセッサ命令セットに基づき、
前記少なくとも１つのデバイスタイプ固有のインストレーションパッケージは、以前に、オンラインマーケットプレイスにおいて、前記コンピューティングデバイスのデバイスタイプ以外のデバイスタイプに固有の、その他のさまざまなデバイスタイプ固有のインストレーションパッケージとともに前記コンピューティングデバイスからリモート保存されたものであり、
前記１つまたは複数のリソースファイルは、音声情報、音楽情報、グラフィックス情報、ビデオ情報、その他のメディア情報、データベース情報、およびテキスト情報のうちの１つまたは複数を含み、
前記バインダの使用により、前記１つまたは複数のライブラリが変更された場合、および／または、ランタイムエンジンが変更された場合に、前記アプリケーション用に前記コンピューティングデバイス上で再コンパイルが行われることが回避される、
コンピューティングデバイス。
【発明の詳細な説明】
【背景技術】
【０００１】
[001]  さまざまなモバイルデバイスは、直接には実行できないが、ジャストインタイムコンパイル（JITコンパイル）を使用してモバイルデバイス上でコンパイルされた場合には実行できる表現でダウンロードすることができるアプリケーションもサポートする。コードのＪＩＴコンパイルは、コンピュータ上でアプリケーションを実行するために使用されているが、ＪＩＴコンパイルを使用してアプリケーションを実行することは、アプリケーションが実行される際にコンパイルのためにさらなる時間が必要とされること、およびコンパイル中に最適でない決定が行われる可能性があることを含む制限を有している。
【発明の概要】
【０００２】
[002]  本明細書において記載されている数あるイノベーションの中でもとりわけ、本開示は、中間言語のコードからネイティブコードを生成することを通じて、マネージドアプリケーションをインストール、実行、および／または更新するためのツールおよび技術のさまざまな代表的な実施形態を提示する。ある例示的な技術によれば、コンピューティングデバイスが、アプリケーション用にオンラインプロバイダによって生成されたマシン依存中間言語コード（MDILコード）を受信する。コンピューティングデバイスは、ＭＤＩＬコードの一部分をコンピューティングデバイス上の１つまたは複数のライブラリとバインドすることによってなど、アプリケーション用のネイティブイメージを生成することによって、コンピューティングデバイス上にアプリケーションをインストールする。また、ネイティブイメージは、実行用にアプリケーションをロードする際に使用するためにコンピューティングデバイス上に格納される。
【０００３】
[003]  ある例示的なツールによれば、コンピューティングデバイスが、オンラインプロバイダからアプリケーション用のインストレーションパッケージを受信し、インストレーションパッケージは、マシン依存中間言語ファイル（MDILファイル）のセットを含む。加えて、コンピューティングデバイスのバインダが、ＭＤＩＬファイルのそのセットのうちの少なくとも１つのファイルと、その少なくとも１つのファイルにバインドされることになる１つまたは複数のライブラリとを提供される。バインダは、１つまたは複数のライブラリを使用して少なくとも１つのＭＤＩＬファイルのＭＤＩＬコードをバインドすることによって、アプリケーション用のネイティブイメージを生成する。
【０００４】
[004]  別の例示的な技術においては、オンラインプロバイダが、アプリケーション用の仮コードからＭＤＩＬコードを生成する。コンピュータシステムが、アプリケーションの仮コードをＭＤＩＬコードへとコンパイルすることによってアプリケーション用のＭＤＩＬファイルのセットを生成し、次いで、ＭＤＩＬファイルのセットのそれぞれのファイルにサインして、それらのそれぞれのファイルが、オンラインマーケットプレイスからのものであるとして信頼されているということを示す。コンピュータシステムは、ＭＤＩＬファイルのセットのそれぞれのファイルを識別するバインディングリストを生成し、そしてまた、アプリケーション用のＭＤＩＬファイルのセットと、バインディングリストとを含むアプリケーション用のインストレーションパッケージを生成する。次いでコンピュータシステムは、ダウンロードするためのインストレーションパッケージをオンラインマーケットプレイスにおいて提供する。
【０００５】
[005]  コンピューティングデバイスがインストレーションパッケージを受信した場合には、そのコンピューティングデバイスは、ＭＤＩＬコードを受信し、そのコンピューティングデバイス上にアプリケーションをインストールするためにアプリケーション用のネイティブイメージを生成する。加えて、コンピューティングデバイスのランタイムエンジン、および／またはインストールされたアプリケーションによって使用される１つもしくは複数のライブラリを、コンピューティングデバイスに対する更新中にコンピューティングデバイス上で更新することができ、アプリケーションは、それに応じて自動的に更新される。アプリケーションは、更新された１つまたは複数のライブラリを使用してアプリケーション用の更新されたネイティブイメージを生成することによって更新される。更新されたネイティブイメージは、コンピューティングデバイス上で更新されたランタイムエンジンを使用して実行可能となるように生成される。更新されたネイティブイメージが生成された後には、アプリケーションは、以前に生成されたネイティブイメージの代わりに、更新されたネイティブイメージをロードすることによって実行される。
【０００６】
[006]  この概要は、コンセプトのうちの抜粋したものを、簡略化された形式で紹介するために提供されており、それらのコンセプトは、以降でさらに説明されている。この概要は、特許請求される主題の鍵となる特徴または必要不可欠な特徴を特定することを意図されておらず、特許請求される主題の範囲を限定するために使用されることも意図されていない。これらの技術の上述のおよびその他の目的、特徴、および利点は、以降の詳細な説明からさらに明らかになり、以降の詳細な説明は、添付の図を参照しながら進む。
【図面の簡単な説明】
【０００７】
【図１】[007]例示的なオンラインプロバイダ／マーケットプレイスと、マシン依存中間言語コード（MDILコード）をバインドすることによってインストールされるアプリケーションのネイティブイメージをロードする例示的なコンピューティングデバイスとを示す図である。
【図２】[008]コンピューティングデバイス上にアプリケーションをインストールするためにそのアプリケーションのＭＤＩＬコードをバインドする例示的な方法の流れ図である。
【図３】[009]例示的なオンラインプロバイダ／マーケットプレイスと、そのオンラインプロバイダ／マーケットプレイス（またはその他のオンラインプロバイダ／マーケットプレイス）によって提供および生成される中間言語のコードから１つまたは複数のネイティブイメージを生成することによって１つまたは複数のマネージドアプリケーションをインストールすることができる例示的なコンピューティングデバイスとを示す図である。
【図４】[010]ＭＤＩＬのコードを使用したネイティブコード生成を通じてアプリケーションをインストールおよび更新するための例示的な方法の流れ図である。
【図５】[011]アプリケーション用のインストレーションパッケージを生成する例示的な方法の流れ図であり、そのインストレーションパッケージは、ダウンロード用に提供することができる。
【図６】[012]１つまたは複数のインストールされたアプリケーション用の１つまたは複数の更新されたネイティブイメージを生成することができるコンピューティングデバイスの図である。
【図７】[013]ＭＤＩＬのコードからアプリケーション用のネイティブイメージを生成することによってアプリケーションを更新するための例示的な方法の流れ図である。
【図８】[014]開示されている実施形態のうちの少なくともいくつかを実施することができる例示的なモバイルデバイスを示す概略図である。
【図９】[015]開示されている実施形態のうちの少なくともいくつかのための適切な実施環境の一般化された例を示す概略図である。
【図１０】[016]開示されている実施形態のうちの少なくともいくつかのための適切なコンピューティング環境の一般化された例を示す概略図である。
【発明を実施するための形態】
【０００８】
[017]  本開示は、中間言語のコードからネイティブコードを生成することを通じて、マネージドアプリケーションをインストール、実行、および／または更新するためのツールおよび技術のさまざまな代表的な実施形態を提示する。たとえば、コンピューティングデバイスが、アプリケーション用にオンラインプロバイダによって生成されたＭＤＩＬコードを受信する。コンピューティングデバイスは、アプリケーション用のネイティブイメージを生成することによって、アプリケーションをインストールする。ネイティブイメージの生成の一環として、コンピューティングデバイスは、ＭＤＩＬコードの一部分をコンピューティングデバイス上の１つまたは複数のライブラリとバインドする。コンピューティングデバイスは、ネイティブイメージを、実行用にアプリケーションをロードする際に使用するために格納する。この方法においては、アプリケーションのパフォーマンスは、（デバイスにとって適切なMDILコードを生成するための）アプリケーションの少なくとも一部の以前のオフラインコンパイルから恩恵を享受することができる。同時に、このアプローチは、アプリケーションによって使用されるライブラリおよび／またはアプリケーション用のＭＤＩＬコードに変化がある場合のアプリケーションの更新を容易にすることができる。
【０００９】
[018]  本明細書において記載されている技術およびツールのさまざまな特徴は、実施態様に応じて、組み合わせて、または個別に使用することができる。本明細書において記載されている技術およびツールのさまざまな特徴は、インジェスチョン、インストレーション、実行、アプリケーション更新、およびデバイス更新を含む処理のさまざまなステージに影響を与える。インジェスチョンという用語は、一般には、開発者がアプリケーションをオンラインプロバイダにアップロードするプロセスを指し、このプロセスは、そのアプリケーションを１つまたは複数のタイプのコンピューティングデバイス上での効率的な実行のために処理し、そのアプリケーションを検証し、そのアプリケーションをダウンロード用に利用可能にする。インストレーションという用語は、一般には、アプリケーションを、特定のコンピューティングデバイス上で動作するように適合させるプロセスを指し、このプロセスは、アプリケーションを、デバイス上での迅速でセキュアな実行にさらに適した形態に変換する（たとえば、ライブラリおよびその他のリソースへの参照を解決することによって、バインディング中にＭＤＩＬコードをネイティブ命令に変換し、実行のためにロードすることができるネイティブイメージを格納し、アプリケーションを、信頼されているものとしてマークを付ける、といった具合である）。実行中に、アプリケーション用の信頼されているネイティブイメージを迅速にロードして実行することができる。アプリケーション更新という用語は、一般には、アプリケーションが更新されるプロセス（たとえば、アプリケーション用のMDILコード）を指し、このプロセスは、デバイス上でのアプリケーションの再インストレーションを含むことができる。コンピューティングデバイス更新という用語は、一般には、アプリケーションによって参照されるランタイムエンジン、ライブラリ、またはその他のリソースが更新された後に続くプロセスを指し、このプロセスは、典型的には、変化したライブラリまたはその他のリソースに依存するアプリケーションを再バインドすることを含む。
【００１０】
ＭＤＩＬのコードからネイティブコードを生成することによってアプリケーションをインストールおよびロードするための例示的なシステム
[019]  図１は、例示的なオンラインプロバイダ／マーケットプレイスと、ＭＤＩＬコード１２０をバインドすることによってインストールされるアプリケーションのネイティブイメージ１１０をロードする例示的なコンピューティングデバイス１００とを示す図である。図１においては、アプリケーション用の仮コード１３０が、オンラインプロバイダ１４０によって受信される。たとえば、仮コード１３０は、ソースコード、またはＭｉｃｒｏｓｏｆｔ中間言語（MSIL）などの中間言語のコードであるアプリケーション用のコードであることが可能である。１３５において、その仮コードは、コンパイラ１５０に提供され、コンパイラ１５０は、その仮コード１３０をアプリケーション用のＭＤＩＬコード１２０へとコンパイルする。仮コード１３０は、アプリケーション用のコードの、ＭＤＩＬコード１２０よりも高いレベルの表現であることが可能である。たとえば、仮コード１３０は、マシンコードにさらに近いレベルであるＭＤＩＬコード１２０よりも高いレベルである中間言語（IL）である。ＭＤＩＬコード１２０は、そのＭＤＩＬコード１２０が、プロセッサ命令セットに基づくネイティブコードを含むようにマシン依存であることが可能である。プロセッサ命令セットは、ＡＲＭプロセッサ、ｘ８６プロセッサ、またはその他のプロセッサのための命令セットであることが可能である。ＭＤＩＬコード１２０は、バインディングを通じてネイティブコードを生成するために解決することができる、シンボリックリファレンスを伴う解決されていない疑似命令を含むこともできる。
【００１１】
[020]  アプリケーション用のＭＤＩＬコード１２０が、コンピューティングデバイス１００において受信される。アプリケーションのインストレーションの一環として、ＭＤＩＬコード１２０がバインダ１６０に提供され、バインダ１６０は、ＭＤＩＬコード１２０をデバイス上で１つまたは複数のライブラリ１７０にバインドする。１つまたは複数のライブラリ１７０は、クラス、タイプなどのためのコードライブラリおよび／またはフレームワークライブラリであることが可能である。コンピューティングデバイス１００上でＭＤＩＬコード１２０をバインドすることによって、バインダ１６０は、アプリケーションのネイティブイメージ１１０を生成する。ネイティブイメージ１１０は、アプリケーション用のネイティブコードを含み、デバイスに格納される。１８０において、ネイティブイメージは、アプリケーションを実行するためにロードされる。
【００１２】
コンピューティングデバイス上にアプリケーションをインストールするためにＭＤＩＬコードをバインドするための例示的な方法
[021]  図２は、コンピューティングデバイス上にアプリケーションをインストールするためにアプリケーションのＭＤＩＬコードをバインドする例示的な方法２００の流れ図である。さまざまな実施態様においては、図２の示されている方法ブロックは、マージすること、サブブロックへと分割すること、または省略することが可能である。
【００１３】
[022]  図２においては、コンピューティングデバイスが、２１０においてオンラインプロバイダからアプリケーション用のＭＤＩＬコードを受信する。たとえば、コンピューティングデバイスは、アプリケーション用のコードを含む１つまたは複数のファイルを受信することができ、そのコードは、米国特許出願公開第２０１１／０２５８６１５号明細書において記載されているようなマシン依存中間言語の、または別のマシン依存中間言語のコードなどのマシン依存であるＩＬである。ＭＤＩＬコードは、オンラインプロバイダからコンピューティングデバイスにおいて受信されるため、ＭＤＩＬコードは、オンラインプロバイダまたはクラウド内のほかのどこかによるコンパイルから生成することができる。たとえば、オンラインプロバイダは、アプリケーション用のＭＤＩＬコードを生成するためにアプリケーション用の仮コードをコンパイルする。
【００１４】
[023]  いくつかの実施態様においては、アプリケーション用のインストレーションパッケージが受信され、そのインストレーションパッケージは、アプリケーション用のＭＤＩＬコードを含む。アプリケーション用のインストレーションパッケージは、アプリケーション用のリソースファイルなど、アプリケーション用のその他の情報を含むことができる。アプリケーション用のＭＤＩＬコードは、アプリケーションのインストレーションのために、およびアプリケーションのその後の更新のためにコンピューティングデバイス上に格納することができる。
【００１５】
[024]  ２２０において、アプリケーションは、アプリケーションのＭＤＩＬコードをバインドすることを含む、アプリケーションのネイティブイメージを生成することによって、コンピューティングデバイス上にインストールされる。たとえば、バインダは、実行可能であるアプリケーション用のネイティブイメージを生成するためにコンピューティングデバイス上で利用可能な１つまたは複数のライブラリにＭＤＩＬコードをバインドすることができる。アプリケーションは、．ＮＥＴフレームワークの共通言語ランタイムなどのランタイムもしくは実行エンジン、またはその他のランタイムエンジンを使用して実行されるマネージドアプリケーションであることが可能である。ランタイムエンジンおよび／または実行エンジンは、アプリケーションが最終的に動作するソフトウェアレイヤであることが可能である。いくつかの実施態様においては、マネージドアプリケーションは、１つまたは複数の共有ライブラリと、１つまたは複数のマネージドコードランタイム環境とを含むフレームワークを使用して実行するアプリケーションである。たとえば、ライブラリは、アプリケーションどうしの間において共有されるベースクラスライブラリである。いくつかの実施態様においては、コンピューティングデバイス上のライブラリは、ネイティブコードおよび／またはマシンコードであるライブラリのイメージであることが可能であり、それは、マネージドアプリケーションによる使用のためにメモリ内にロードすることができ、そのマネージドアプリケーションもまた、メモリ内にロードされる。いくつかの実施態様においては、生成されるネイティブイメージは、そのネイティブイメージが、コンピューティングデバイス上でアプリケーションを実行するために使用されるランタイムエンジンまたは実行エンジンによって実行可能であるように、バインダによって生成することができる。たとえば、バインダは、バインディング中に、アプリケーション用のランタイムエンジンを使用した実行にとってそのバインディングが適切であるように、そのランタイムエンジンを使用および／または参照することができる。
【００１６】
[025]  いくつかの実施態様においては、バインダのバインディングは、ＭＤＩＬコードを解決し、アプリケーション用のネイティブイメージ内に含まれるアプリケーション用のネイティブコードを生成する。そのネイティブコードは、特定のプロセッサ上で実行可能である、かつプロセッサ命令セットからの命令を使用するマシンコードであることが可能である。プロセッサ命令セットは、ＡＲＭプロセッサ、ｘ８６プロセッサ、またはその他のプロセッサのための命令セットであることが可能である。いくつかの実施態様においては、アプリケーション用に受信されるファイルのセット内のそれぞれのＭＤＩＬファイルに関してネイティブイメージを生成する際に、それぞれのＭＤＩＬファイルと、そのファイルのＭＤＩＬコードにバインドされることになる１つまたは複数のライブラリとが、バインダに提供される。たとえば、ＭＤＩＬファイルおよび／またはライブラリファイルへの１つまたは複数のファイルパスをバインダに提供することができる。バインダは、そのバインダに提供されたライブラリにそれぞれのＭＤＩＬファイルをバインドして、アプリケーション用のネイティブイメージを生成する。そのネイティブイメージは、コンピューティングデバイスのプロセッサによって実行可能なマシンコードなどのネイティブコードを含むことができる（ネイティブイメージに加えて、アプリケーション用の少なくともいくつかのコードは、アプリケーションが起動される前の、またはアプリケーションが起動されるときのジャストインタイムコンパイルまたはその他のコンパイルのためにＩＬ形式で保持することができる。これは、リソースが頻繁に変わる場合に、または、アプリケーションがインストールされて残っているＭＤＩＬコードがデバイス上のライブラリにバインドされているときにタイプ値またはその他の参照を解決することができない場合に、役に立つことがある）。
【００１７】
[026]  いくつかの実施態様においては、アプリケーションは、パッケージマネージャによってデバイス上にインストールすることができる。たとえば、アプリケーションのインストレーション中に、アプリケーション用の受信されたインストレーションパッケージをパッケージマネージャによってアンパックすることができる。インストレーションパッケージ、および／または、そのインストレーションパッケージ内に含まれているファイルのうちの１つもしくは複数が圧縮されている場合には、パッケージマネージャは、そのようなファイルを解凍することができる。１つまたは複数のファイルが圧縮されていない場合には、パッケージマネージャは、そのようなファイルを解凍しない。パッケージマネージャは、バインドされることになるＭＤＩＬファイルのうちのそれぞれを、それらのそれぞれのＭＤＩＬファイルにバインドされることになるライブラリとともにバインダに提供することができる。いくつかの実施態様においては、パッケージマネージャは、ＭＤＩＬファイルおよび／または１つもしくは複数のライブラリへの参照をバインダに提供することによって、それらのＭＤＩＬファイルおよび／または１つもしくは複数のライブラリを提供する。バインダは、それぞれのＭＤＩＬファイルを、それらのそれぞれのＭＤＩＬファイル用の提供されたライブラリにバインドして、アプリケーション用のネイティブイメージを生成する。そのネイティブイメージは、そのネイティブイメージが、アプリケーションを実行するためのコンピューティングデバイス上で利用可能なランタイムエンジンを使用して実行可能であるように、バインダによって生成することができる。
【００１８】
[027]  ２３０において、アプリケーションのネイティブイメージは、実行用にアプリケーションをロードする際に使用するためにコンピューティングデバイス上に格納される。たとえば、生成されたネイティブイメージは、アプリケーションを実行するためにロードされる（実行可能ではないMDILコードは、アプリケーションを実行するために使用されない）。いくつかの実施態様においては、ネイティブイメージは、実行用にロードされる前に、信頼されているものと判定される。その他の実施態様においては、コンピューティングデバイスは、ネイティブイメージが実行用にロードされる前に、そのネイティブイメージが信頼されているかどうかに関する判定をまったく行わない。
【００１９】
アプリケーションのインストレーションおよび実行のために提供されたＭＤＩＬコードからネイティブコードを生成するための例示的なシステム
[028]  図３は、例示的なオンラインプロバイダ／マーケットプレイスと、そのオンラインプロバイダ（またはその他のオンラインプロバイダ）によって提供および生成されるMDILなどの中間言語のコードから１つまたは複数のネイティブイメージを生成することによって１つまたは複数のマネージドアプリケーションをインストールすることができる例示的なコンピューティングデバイス３５０とを示す図である。図３においては、オンラインプロバイダ３０５が、コンパイラ３１０を使用して、仮コード３１５を１つまたは複数のＭＤＩＬファイル３２０へとコンパイルする。ＭＤＩＬファイル３２０は、ＭＤＩＬのコードを含むファイルである。１つまたは複数のＭＤＩＬファイル３２０のセットは、アプリケーション用のインストレーションパッケージ３２５内にパッケージされる。ＭＤＩＬファイルのうちのそれぞれには、３３０において示されているように、信頼されているものとしてサインすることができる。リソースファイルまたはアプリケーションコンテンツなどのサポート情報を含む１つまたは複数のファイル３３５をインストレーションパッケージ３２５内に含めることができる。インストレーションパッケージ３２５は、３４０において示されているように、オンラインプロバイダ３０５によって格納され、ダウンロード用に提供される。インストレーションパッケージ３２５がオンラインプロバイダ３０５からダウンロードされる前に、３４５において示されているように、インストレーションパッケージ３２５そのものに、信頼されているものとしてサインすることができる。
【００２０】
[029]  したがって、インストレーションパッケージ３２５は、オンラインマーケットプレイスにおいてアプリケーションのカタログの一部として提供される。さまざまなタイプのコンピューティングデバイスのために、さまざまなバージョンのインストレーションパッケージ３２５を提供することができる。たとえば、（さまざまなタイプのプロセッサに適合された）さまざまなタイプのＭＤＩＬコードが、さまざまなタイプのコンピューティングデバイスのためのさまざまなインストレーションパッケージ内に含まれる。さまざまなタイプのコンピューティングデバイスにとって利用可能なインストレーションパッケージは、下位互換性の目的で、ＭＤＩＬではないコード（たとえば、XAPファイルにおけるMSILコード）を伴うバージョンを含むこともできる。
【００２１】
[030]  コンピューティングデバイス３５０は、３５５において、インストレーションパッケージ３２５を含む１つまたは複数のインストレーションパッケージをオンラインプロバイダからダウンロードする。アプリケーションをインストールする一環として、コンピューティングデバイス３５０のパッケージマネージャ３６０は、１つまたは複数のＭＤＩＬファイル３２０と、アプリケーション用のサポート情報を含む１つまたは複数のファイル３３５とをアンパックする。パッケージマネージャはまた、バインダ３６５を呼び出す。１つまたは複数のＭＤＩＬファイル３２０のセットのそれぞれのＭＤＩＬファイルに関して、パッケージマネージャ３６０は、ＭＤＩＬファイル３２２などのそれぞれのＭＤＩＬファイルを、１つまたは複数のライブラリ３７０など、それぞれのＭＤＩＬファイルとバインドされることになる１つまたは複数のライブラリとともに、バインダ３６５に提供する。バインダ３６５は、それぞれのＭＤＩＬファイルを、それらのそれぞれのＭＤＩＬファイル用に提供された１つまたは複数のライブラリにバインドして、ネイティブコードを生成する。ＭＤＩＬファイル用に提供されたライブラリ（１つまたは複数のライブラリ３７０など）は、コンピューティングデバイス３５０上にあるライブラリ３７５のセット内に含まれる。１つまたは複数のＭＤＩＬファイル３２０をバインドすることから生成されたネイティブコードを使用して、バインダは、アプリケーション用のネイティブイメージ３８０を生成する。ネイティブイメージ３８０は、そのネイティブイメージ３８０が、アプリケーションを実行することができるコンピューティングデバイス上のランタイムエンジンを使用して実行可能であるように、バインダ３６５によって生成することができる。ネイティブイメージ３８０は、３８５において示されているように、デバイス上にアプリケーションをインストールすることの一環として格納される。コンピューティングデバイス３５０は、１つまたは複数のその他のアプリケーションをインストールして、それぞれのその他のアプリケーションに対応する生成されたネイティブイメージを格納することもできる。
【００２２】
[031]  ３９０において示されているように、ネイティブイメージ３８０には、信頼されているコードからバインダ３６５によって生成された信頼されているコードとしてサインすることができる。ネイティブイメージ３８０が格納される前に、および／またはアプリケーションを実行する際に使用するためにロードされる前に、ネイティブイメージ３８０にサインすることができる。３９５において、ネイティブイメージ３８０は、アプリケーションを実行するためにロードされる。ロードされると、ネイティブイメージのネイティブコードは、アプリケーションの機能を提供するためにコンピューティングデバイス３０５によって実行される。
【００２３】
ＭＤＩＬのコードを使用したネイティブコード生成を通じてアプリケーションをインストールおよび更新するための例示的な方法
[032]  図４は、ＭＤＩＬのコードを使用したネイティブコード生成を通じてアプリケーションをインストールおよび更新するための例示的な方法４００の流れ図である。図４においては、４１０において示されているように、ＭＤＩＬコードを含むインストレーションパッケージが生成される。いくつかの実施態様においては、ＭＤＩＬコードを１つまたは複数のファイル内に含めることができる。いくつかの実施態様においては、仮コードをコンパイルして、ＭＤＩＬコードを生成することができる。
【００２４】
[033]  いくつかの実施態様においては、アプリケーション用のＭＤＩＬコードは、プロセッサ命令セットに基づくネイティブコードを含むが、疑似命令を含むこともできる。たとえば、疑似命令は、ＭＤＩＬが生成されるときに解決することができないシンボリックリファレンスおよび／またはフィールドキーを含む。したがって、いくつかの実施態様においては、疑似命令は、フィールド、タイプなどへのシンボリックリファレンスを含むことができる。たとえば、シンボリックリファレンスは、フィールドのオフセットまたはタイプのサイズを特に示すことなく使用されるフィールドまたはタイプを識別するトークンであることが可能である。いくつかの実施態様においては、シンボリックリファレンスは、そのシンボリックリファレンスのために生成されるネイティブコードを特定するためにバインダによって解釈することができるトークンであることが可能である。たとえば、オブジェクトのフィールドを参照するフィールドトークンなどのトークンに関しては、特定のコンピューティングデバイス上のバインダは、そのコンピューティングデバイスのための実行可能な命令を生成する際に、（１）オブジェクトを、そのオブジェクトがライブラリを通じてそのコンピューティングデバイス上で利用可能であるようにレイアウトし、（２）そのオブジェクトのそのフィールドに関する適切なオフセットを特定することができる。したがって、いくつかの実施態様においては、ＭＤＩＬコード内のオブジェクトに関するフィールドオフセットは、（対応するネイティブコード内のなど）数値オフセットとしてハードコーディングされる代わりに、シンボリックであることが可能である。
【００２５】
[034]  疑似命令は、その疑似命令がコンピューティングデバイス上の適切なライブラリにバインドされるときに特定および／または解決されることになる実施の詳細を抽象化することができる。いくつかの実施態様においては、ＭＤＩＬコードは、プロセッサによって実行可能であるネイティブ命令を生成するためにバインダによって変換することができるシンボリックリファレンスを含む疑似命令を含む。たとえば、ＭＤＩＬコードは、．ＮＥＴフレームワークの共通言語ランタイム（CLR）などのランタイムエンジンなどによって管理されるオブジェクトのフィールドにアクセスするための機械命令へとバインダによって変換することができる疑似命令を含むことができる。いくつかの実施態様においては、レジスタが既に割り当てられているが、オフセットが１つまたは複数のライブラリおよび／またはクラスに関して含まれていないようになり、ＭＤＩＬコードの疑似命令は、ネイティブ言語のマシンコードに類似し得る。たとえば、疑似命令から変換されたものとしてネイティブ命令内に含まれるフィールドオフセットは、バインダによって特定することができ、利用可能なライブラリのバージョンに、および／またはコンピューティングデバイスに依存することが可能である。いくつかの実施態様においては、ＭＤＩＬコードは、ジェネリックタイプまたはジェネリックメソッドのインスタンス化またはインスタンスをルックアップするための機械命令へとバインダによって変換することができる疑似命令を含むことができる。
【００２６】
[035]  図４を参照すると、４２０において、コンピューティングデバイスが、アプリケーション用のＭＤＩＬコードを受信する。たとえば、コンピューティングデバイスは、アプリケーション用のＭＤＩＬコードを含むＭＤＩＬファイルを含むアプリケーション用のインストレーションパッケージを受信することができる。いくつかの実施態様においては、インストレーションパッケージは、アプリケーション用のネイティブイメージを生成するためにバインドされることになるアプリケーションのＭＤＩＬファイルのリストと、それぞれのＭＤＩＬファイルにバインドされることになる１つまたは複数のライブラリのセットのリストとを含むバインディングリストを含むことができる。いくつかの実施態様においては、アプリケーションのＭＤＩＬコードにバインドされることになるライブラリのうちの１つまたは複数は、そのアプリケーションのソースコードにおいて宣言されているおよび／または含まれているライブラリである。アプリケーションのＭＤＩＬコードにバインドされることになる１つまたは複数のその他のライブラリは、そのアプリケーションのソースコードにおいて宣言されていないおよび／または含まれていないライブラリであることが可能である。
【００２７】
[036]  ４３０において、アプリケーションは、そのアプリケーション用のネイティブイメージを生成することによって、コンピューティングデバイス上にインストールされる。いくつかの実施態様においては、アプリケーションは、パッケージマネージャによってインストールすることができる。たとえば、パッケージマネージャは、コンピューティングデバイス上にアプリケーションをインストールするためにインストレーションパッケージのファイルを使用する前に、そのインストレーションパッケージが信頼されているものとしてサインされていることを判定することができ、インストレーションパッケージが信頼されているものとしてサインされていない場合には、パッケージマネージャは、コンピューティングデバイス上にアプリケーションをインストールするためにそのインストレーションパッケージを使用しない。パッケージマネージャは、バインドされることになるＭＤＩＬファイルのうちのそれぞれを、それらのそれぞれのＭＤＩＬファイルにバインドされることになるライブラリとともにバインダに提供することができる。いくつかの実施態様においては、インストレーションパッケージ全体が信頼されているものとしてサインされているかどうかを判定することの代わりに、またはそれに加えて、ＭＤＩＬファイルは、アプリケーション用のネイティブイメージを生成するために使用される前に信頼されているものとしてサインされていることを判定することが可能であり、信頼されているものとしてサインされていないと判定されるＭＤＩＬファイルは、アプリケーション用のネイティブイメージを生成するために使用されない。いくつかの実施態様においては、パッケージマネージャは、バインドされることになるＭＤＩＬファイル、およびアプリケーション用のそれぞれのＭＤＩＬファイルのコードにバインドされることになるそれぞれのライブラリを自動的に特定および識別するためのバインディングリストを提供されて使用することができる。バインディングリストは、プログラミング言語、スクリプト言語、またはマークアップ言語などのマシン可読フォーマットであることが可能である。たとえば、バインディングリストは、拡張マークアップ言語（XML）を使用して編成されている情報を含むファイル内に含めることができる。
【００２８】
[037]  いくつかの実施態様においては、パッケージマネージャは、ＭＤＩＬファイルおよび／または１つもしくは複数のライブラリへの参照をバインダに提供することによって、それらのＭＤＩＬファイルおよび／または１つもしくは複数のライブラリを提供する。バインダは、それぞれのＭＤＩＬファイルを、それらのそれぞれのＭＤＩＬファイル用の提供されたライブラリにバインドして、アプリケーション用のネイティブイメージを生成する。高いレベルでは、バインダは、ＭＤＩＬ命令内を読み進み、ＩＬ命令をネイティブ命令に変換し、既にネイティブ形式である命令を通り過ぎる。たとえば、バインダは、ＭＤＩＬコードをコンピューティングデバイス上の１つまたは複数のライブラリにバインドして、実行可能であるアプリケーション用のネイティブイメージを生成することができる。ネイティブイメージは、そのネイティブイメージが、アプリケーションを実行するためのものである、バインダにとって利用可能である、コンピューティングデバイス上のランタイムエンジンを使用して実行可能であるように、バインダによって生成することができる。ランタイムエンジンは、コンピューティングデバイス上でアプリケーションを最終的に実行することができるソフトウェアレイヤであることが可能である。いくつかの実施態様においては、バインダは、スクリプトからの情報、ユーザ入力、および／またはその他の情報を使用して実行することができる。コードをバインドすることのいくつかの実施態様においては、ＭＤＩＬコードは、バインダに提供される。バインダは、疑似命令を解決して、対応するネイティブ命令を生成する。たとえば、疑似命令内のシンボリックリファレンス（たとえば、フィールドトークン）から、バインダは、タイプレイアウトに基づいてフィールドに関する数値オフセットを特定して指定することによって、ネイティブコードを生成することができる。いくつかの実施態様においては、ＭＤＩＬ疑似命令は、疑似命令とは長さが異なることが可能であるネイティブ命令を作成するために使用することができる。あるいは、ネイティブ命令は、疑似命令とは長さが異ならないことが可能である。いくつかの実施態様においては、アプリケーション用のＭＤＩＬコードの少なくともいくらかは、そのアプリケーションのネイティブイメージ内に含まれているマシンコードに近いことが可能であるが、ＭＤＩＬコードその他の部分は、ＭＤＩＬコードの一部分が、１つまたは複数のバージョンで利用できることが可能であるライブラリにバインドされることを可能にするあるレベルの抽象化を提供することができる。バインディングを通じて、ＭＤＩＬコードは、ライブラリの特定のバージョンを使用して実行する実行可能コードを生成するために使用することができる。たとえば、ＭＤＩＬコードをライブラリの第１のセットにバインドすることにより、アプリケーション用の実行可能コードを生成することができる。または、ＭＤＩＬコードをライブラリのうちの１つまたは複数が別のバージョンのものであるセットライブラリにバインドすることによっても、アプリケーション用の実行可能コードを生成することができる。それらの１つまたは複数のライブラリのバージョンのセッ��は、ライブラリの重複するバージョンを有することができる。
【００２９】
[038]  いくつかの実施態様においては、ＭＤＩＬコードをバインドすることは、さらなるコンパイルを伴わずにプロセッサによって直接実行することができるコードを生成する。たとえば、ＭＤＩＬコードをライブラリにバインドすることは、ＭＤＩＬコードの命令からネイティブ命令を生成することを含む。いくつかの実施態様においては、ＭＤＩＬコードは、プロセッサによって実行可能であるネイティブ命令を生成するためにバインダによって変換および／またはバインドされるシンボリックリファレンスを含む疑似命令を含む。たとえば、バインダは、疑似命令を、コンピューティングデバイス上のランタイムエンジンによって管理することができるオブジェクトのフィールドにアクセスするためのネイティブコード命令へと変換することができる。いくつかの実施態様においては、レジスタが割り当てられているが、ＭＤＩＬコードにおいては、オフセットが１つまたは複数のライブラリおよび／またはクラスに関して含まれていないようになり、ＭＤＩＬコードの一部分は、生成されたネイティブコードに類似し得る。いくつかの実施態様においては、バインダは、疑似命令を、ジェネリックタイプまたはジェネリックメソッドのインスタンス化またはインスタンスをルックアップするためのネイティブコード命令へと変換することができる。
【００３０】
[039]  いくつかの実施態様においては、ＭＤＩＬコードシンボリック命令および生成された対応するネイティブ命令は、仮想メソッドスロット割り当ておよび／またはオブジェクトフィールドレイアウトに関して整合している。たとえば、ＭＤＩＬコードおよび実行可能なネイティブコードは、オブジェクトフィールドレイアウトに関して整合していることが可能であり、それによって、フィールドトークンを含むオブジェクトにアクセスするためのＭＤＩＬコードの一部分を使用して、数値フィールドオフセットを用いてネイティブ命令（たとえば、機械命令）を生成することができる。いくつかの実施態様においては、バインダは、１つまたは複数の実行可能な機械命令を生成するためにシンボリックリファレンスから数値オフセットを生成することができる。たとえば、ＭＤＩＬコード内のシンボリックリファレンスは、バインダによって特定のフィールドリファレンスへと変換され、それによって、その特定のフィールドリファレンスは、数値サイズおよび／またはオフセットを含む。
【００３１】
[040]  ＭＤＩＬコードをバインドすることのいくつかの実施態様においては、バインダは、シンボリックリファレンスを解釈することができ、そのシンボリックリファレンスは、そのシンボリックリファレンスのために生成されるネイティブコードを特定するためのトークンを含む。たとえば、オブジェクトのフィールドを参照するフィールドトークンに関しては、バインダは、コンピューティングデバイスのための実行可能な命令を生成するために、オブジェクトを、そのオブジェクトがコンピューティングデバイス上で利用可能であることが可能であるようにレイアウトし、そのオブジェクトのそのフィールドに関する適切なオフセットを特定することができる。ＭＤＩＬコードをバインドすることのいくつかの実施態様においては、ＭＤＩＬコードをバインドすることができるバインダは、リンカーよりも複雑である。たとえば、ＭＤＩＬコードをバインドする際には、バインダは、結果として生じるネイティブコード内の１つまたは複数のジャンプを、それらのジャンプがそれらの意図されているターゲットに達するように調整することができる。
【００３２】
[041]  ネイティブイメージ内のネイティブコードに加えて、アプリケーション用の少なくともいくつかのコードをＩＬ形式で保持することができる。ＩＬ形式のコードは、アプリケーションが起動される前の、またはアプリケーションが起動されるときのジャストインタイムコンパイルまたはその他のコンパイル中にさらに処理される。これは、ランタイムエンジン、ライブラリ、またはその他のリソースが頻繁に変わる場合に、役に立つことがある。または、これは、残っているＭＤＩＬコードがコンピューティングデバイス上のライブラリにバインドされているバインディングプロセス中にタイプ値または参照を解決することができない場合に、役に立つことがある。
【００３３】
[042]  ４４０において、ネイティブイメージは、実行用にアプリケーションをロードする際に使用するために格納される。たとえば、ユーザがコンピューティングデバイス上でアプリケーションを起動したときに、そのアプリケーションのネイティブイメージが、．ＮＥＴフレームワークのＣＬＲなどの実行エンジンもしくはランタイムまたはその他のランタイムエンジンによってロードされる。いくつかの実施態様においては、コンピューティングデバイスは、アプリケーションを実行するためにジャストインタイムのコンパイルを使用してコンピューティングデバイス上でコンパイルすることができるアプリケーション用のＭＳＩＬコードを含むことができるが、そのＭＳＩＬコードを使用してアプリケーションを実行する代わりに、アプリケーション用のネイティブイメージがロードされて、アプリケーションを稼働させるために実行される。いくつかの実施態様においては、ネイティブイメージがロードされるときに、アプリケーションのコードによって使用される１つまたは複数のライブラリイメージまたはアセンブリが、そのネイティブイメージ内に含まれているものとしてロードされる。たとえば、ネイティブイメージは、コンピューティングデバイスのランタイムエンジンを使用して実行用にロードすることができる。アプリケーションに関するネイティブイメージは、格納される前に、そのアプリケーションが信頼されているということを示すためにバインダによってサインされ得る。
【００３４】
[043]  ４５０において、コンピューティングデバイスは、少なくともそのコンピューティングデバイス上のライブラリのセットを更新することによって、更新される。たとえば、コンピューティングデバイスのライブラリのセット内のライブラリのうちの１つまたは複数を更新、置換、または変更することができる。これは、ライブラリのセットの以前のバージョンにバインドされていたアプリケーションのオペレーションを妨げることがある。したがって、１つまたは複数のライブラリが更新、置換、または変更された後に、コンピューティングデバイス上のアプリケーションのうちの１つまたは複数を更新することができ、それによって、それぞれのアプリケーション用の更新されたネイティブイメージを生成することができる。アプリケーション用の更新されたネイティブイメージは、アプリケーション用のＭＤＩＬコード（インストレーションの後でさえ、コンピューティングデバイス上にMDIL形式で格納されている）を、更新された１つまたは複数のライブラリのセットのうちの少なくとも１つにバインドすることによって、生成することができる。コンピューティングデバイス上のライブラリが更新された後にアプリケーション用のＭＤＩＬコードをそれらのライブラリのうちの１つまたは複数に再バインドすることは、ネイティブイメージが、それらの１つまたは複数のライブラリを、コンピューティングデバイスを更新した後および／またはそのデバイスのライブラリを更新した後にそのデバイス上で利用可能なものとして適切に参照することを可能にすることができる。同時に、アプリケーション用のコードの完全な再コンパイルは、ライブラリが変わるたびに必要とされない。なぜなら、アプリケーション用のＭＤＩＬコードは、再利用することができるためである。変更されたライブラリが、デバイス上のアプリケーションのうちの多くによって使用される場合には、それぞれのアプリケーション用の以前に格納されたＭＤＩＬコードを使用して再バインドすることは、それぞれのアプリケーション用のネイティブイメージを更新するプロセスを大幅に簡略化することができる。
【００３５】
[044]  たとえば、７つのアプリケーションがそれぞれ、変更されたライブラリに対する依存性を有していると考えてみる。７つのアプリケーションのそれぞれに関して、（たとえば、オンラインプロバイダによる）クラウド内のオフラインコンパイルは、ジャストインタイムコンパイルまたは更新する目的でのデバイス上でのコンパイルよりも精緻なおよび／または時間のかかるコンパイルを使用して、そのアプリケーション用の効率的なＭＤＩＬコードを生成することができる。時間がかかることになり、効率の悪いネイティブイメージにつながる可能性がある、ライブラリが変わった場合に７つのアプリケーションのそれぞれを再コンパイルするのではなく、それぞれのアプリケーションを、コンピューティングデバイス上のライブラリに再バインドする。これは、コンパイル最適化に関する「重労働」が、クラウドですでに行われているので、はるかに速い。
【００３６】
[045]  いくつかの実施態様においては、コンピューティングデバイスの更新は、その更新が、コンピューティングデバイスのランタイムエンジンを更新することを含むように行われる。たとえば、１つまたは複数のインストールされたアプリケーションを、それらのアプリケーション用のネイティブイメージを使用して実行する、コンピューティングデバイスのランタイムエンジンを更新、置換、または変更することができる。ランタイムエンジンは、更新されたアプリケーションを最終的に実行するソフトウェアレイヤであることが可能であり、したがって、ランタイムエンジンが変更された場合には、更新されたアプリケーション用の更新されたネイティブイメージを、バインダによって、そのバインダにとっておよびコンピューティングデバイス上で利用可能であるものとして更新されたランタイムエンジンを使用して実行可能であるように生成することができる。いくつかの実施態様においては、コンピューティングデバイスのランタイムエンジンおよびライブラリの両方が、デバイス更新時に変更され、また、アプリケーションを更新することができ、それによって、そのアプリケーションは、更新されたランタイムエンジンおよび更新されたライブラリとともに適切に実行および／または稼働することができる。
【００３７】
ダウンロード用に提供することができるアプリケーション用のインストレーションパッケージを生成するための例示的な方法
[046]  図５は、ダウンロード用に提供することができるアプリケーション用のインストレーションパッケージを生成する例示的な方法５００である。さまざまな実施態様においては、図５の示されている方法ブロックは、マージすること、サブブロックへと分割すること、または省略することが可能である。図５においては、アプリケーション用の仮コードが受信される。たとえば、アプリケーションの開発者は、そのアプリケーション用のコードを仮の言語および／または状態で送信することができ、そのアプリケーション用の仮コードを、オンラインマーケットプレイスなどのオンラインプロバイダによって受信することができる。いくつかの実施態様においては、アプリケーション用の仮コードは、アプリケーション用のソースコードである。たとえば、ソースコードは、Ｃ＋＋、Ｃ♯、Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）、Ｊ♯、Ｊ＋＋、またはその他の類似のプログラミング言語などの１つまたは複数のプログラミング言語で書かれたコードであることが可能である。いくつかの実施態様においては、アプリケーション用の仮コードは、ＩＬなどの中間表現である。たとえば、アプリケーション用のソースコードは、コンパイラおよび／またはジェネレータによってＩＬの中間表現へとコンパイルすることができる。いくつかの実施態様においては、ＩＬは、Ｍｉｃｒｏｓｏｆｔ中間言語（MSIL）であることが可能である。いくつかの実施態様においては、ＩＬは、マシン依存であるネイティブ命令を含まない。しかしながら、ＩＬのコードは、マシン依存であるネイティブ命令を含むＭＤＩＬのコードへとコンパイルすることができる。
【００３８】
[047]  いくつかの実施態様においては、アプリケーションに関して、ならびにアプリケーション用の仮コードに関して、その他の情報が受信される。たとえば、アプリケーションが実行されるときにアプリケーションによって使用されるアプリケーション用のリソースファイルを受信することができる。アプリケーション用のリソースファイルは、音声情報、音楽情報、グラフィックス情報、ビデオ情報、その他のメディア情報、データベース情報、テキスト情報などを含む１つまたは複数のファイルであることが可能である。いくつかの実施態様においては、仮コードは、ＺＩＰファイルまたはＸＡＰファイルなどの１つまたは複数の圧縮されたファイル内に含めてパッケージおよび／または受信することができる。あるいは、仮コードは、１つまたは複数の圧縮されたファイル内に含めてパッケージおよび／または受信されない。いくつかの実施態様においては、アプリケーション用のＭＤＩＬコードを伴う１つまたは複数のファイルがオンラインプロバイダによって受信されるが、開発者から受信されたＭＤＩＬファイルは、オンラインプロバイダによって生成されなかった信頼されていないファイルとして破棄することができる。あるいは、オンラインプロバイダは、そのオンラインプロバイダによって受信されたいかなるＭＤＩＬファイルも破棄しない。いくつかの実施態様においては、仮コードは、１つまたは複数のアセンブリ内に含めて受信することができる。たとえば、仮コード（アセンブリ内に含まれているMSILのコードなど）は、バイナリレベルでのコードへとコンパイルすることができる。ＭＳＩＬコードを含むアセンブリは、ＭＳＩＬアセンブリであることが可能である。いくつかの実施態様においては、ＭＳＩＬアセンブリは、１つまたは複数のファイルを含むことができる。
【００３９】
[048]  ５２０において、アプリケーションの仮コードをコンパイルして、マシン依存である中間言語であるコードであるＭＤＩＬコードを生成する。一般的なルールとして、ＩＬファイル内の決定または参照は、コンパイルプロセス中に解決されるが、ライブラリ、外部ソース、外部タイプなどへの決定または参照は、解決されないままである。したがってＭＤＩＬファイルは、（ａ）アセンブリ命令、ネイティブコード、またはその他のデバイス依存命令と、（ｂ）後で解決されることになる疑似コード命令またはその他のデバイス独立命令との混合物である。したがって、仮コードからコンパイルされるＭＤＩＬコードは、仮コードの言語よりも低いレベルの言語である中間言語であることが可能である。たとえば、仮コードは、より高いレベルの（マシンコードからさらに離れた）中間言語であり、ＭＤＩＬコードは、マシンコードにさらに近いより低いレベルである。たとえそうでも、ＭＤＩＬコードは、典型的には、バインドせずに直接実行することはできない。なぜなら、ＭＤＩＬコードは、ネイティブコードではないシンボリックリファレンスを含むためである。その代わりに、ＭＤＩＬコードは、バインダによって、実行可能なマシンコードへと変換することができる。いくつかの実施態様においては、アプリケーション用の仮コードは、直接実行することはできないが、ジャストインタイムコンパイラによってコンパイルされたときに実行可能コードへとコンパイルすることができる。たとえば、ＭＳＩＬのアプリケーション用のコードは、ＭＳＩＬコードからアプリケーションを実行するためにジャストインタイムでコンパイルすることができる。いくつかの実施態様においては、ＭＳＩＬのアプリケーション用のコードは、アプリケーション用のＭＤＩＬコードを生成するためにコンパイラに提供することができる。典型的には、ＭＳＩＬコードは、ネイティブ命令を含まず、アプリケーション用のネイティブコードを生成するためにバインダによって解決および／またはバインドされることになるＭＤＩＬコード内に含まれる疑似命令も含まない。
【００４０】
[049]  ＭＤＩＬコードは、１つまたは複数のＭＤＩＬファイル内に含めることができる。いくつかの実施態様においては、ＭＤＩＬファイルは、そのＭＤＩＬファイルの名前および／またはファイル拡張子内に「．ｍｄｉｌ」が含まれるように、名前および／またはファイル拡張子を有することができる。その他の実施態様においては、ＭＤＩＬファイルは、そのＭＤＩＬファイルの名前および／またはファイル拡張子内に「．ｍｄｉｌ」が含まれないような別の命名規則を有することができる。
【００４１】
[050]  いくつかの実施態様においては、疑似命令に加えて、仮コードがコンパイルされる場合には、コンパイラは、ＭＤＩＬコード用の１つまたは複数のアセンブリを生成する。たとえば、アセンブリ内に含まれているＭＤＩＬコードは、バイナリレベルであるコードへとコンパイルすることができる。ＭＤＩＬコードを含むアセンブリは、ＭＤＩＬアセンブリであることが可能である。いくつかの実施態様においては、ＭＤＩＬアセンブリは、１つまたは複数のファイルを含むことができる。
【００４２】
[051]  （アプリケーションが実行されることになる）ターゲットコンピューティングデバイスにおいてアプリケーションコードが受信される前に仮コードをアプリケーション用のＭＤＩＬコードへとコンパイルすることは、さまざまな利点を提供することができる。たとえば、ターゲットコンピューティングデバイス上にアプリケーションをインストールするのにかかる時間からコンパイル時間を取り除くことができる。ターゲットデバイス上へのアプリケーションのインストレーションからコンパイルを取り除くことにより、ターゲットデバイス上にアプリケーションをインストールするのにかかる時間にコンパイル時間を加えることなく、クラウド内で行われるコードのコンパイル時間を最適化できる。とりわけ、これは、ライブラリが変更された場合、および／またはランタイムエンジンが変更された場合は常に、ライブラリに依存する複数のアプリケーションに関するターゲットコンピューティングデバイス上での時間のかかる再コンパイルを回避する上で役立つことができる。
【００４３】
[052]  いくつかの実施態様においては、仮コードのコンパイルは、アプリケーション用のネイティブコードを含んでいてＭＤＩＬコードを含んでいないアプリケーション用の１つまたは複数のネイティブコードファイルを生成することができる。
【００４４】
[053]  いくつかの実施態様においては、アプリケーション用に受信されたそれぞれのＭＳＩＬアセンブリファイルに関して、対応するＭＤＩＬファイルがコンパイラによって生成される。第１のプロセッサ用の（第１のタイプのターゲットコンピューティングデバイス用の）命令セットに依存するＭＤＩＬコードを生成するために、仮コードをコンパイルすることができ、第２のプロセッサ用の（第２のタイプのターゲットコンピューティングデバイス用の）命令セットに依存する別のＭＤＩＬコードを生成することができる。たとえば、アプリケーション用の仮コードをコンパイルすることは、第１のプロセッサを有するデバイス上で実行するためにバインドすることができるＭＤＩＬコードを生成すること、および異なる第２のプロセッサを伴う別のデバイス上で実行するためにバインドすることができるそのアプリケーション用の異なるＭＤＩＬコードを生成することが可能である。たとえば、第１のプロセッサは、ＡＲＭプロセッサであることが可能であり、第２のプロセッサは、ｘ８６プロセッサであることが可能である。
【００４５】
[054]  ５３０において、アプリケーションのＭＤＩＬコードが、信頼されているものとしてサインされる。たとえば、仮コードから生成されたＭＤＩＬコードファイルに、発行者キーを用いてサインして、それらのサインされているファイルが、信頼されているコードを含んでいるということを示すことができる。いくつかの実施態様においては、仮コードをコンパイルすることによって生成されたネイティブコードに、信頼されているものとしてサインすることができる。たとえば、コンパイラによって生成されるネイティブコードファイルに、発行者キーを用いてサインして、それらのサインされているファイルが、信頼されているコードを含んでいるということを示すことができる。
【００４６】
[055]  ５４０において、ＭＤＩＬコードを含むインストレーションパッケージが生成される。たとえば、ＭＤＩＬコードは、アプリケーションをインストールするためにダウンロードすることができる１つまたは複数のファイルなどのコンテナ内にパッケージすることができる。一実施態様においては、１つまたは複数のＭＤＩＬコードファイル内のＭＤＩＬコードは、ＺＩＰファイルまたはＸＡＰファイルなどの１つまたは複数の圧縮されたファイル内にパッケージされる。圧縮されたインストレーションパッケージは、オンラインプロバイダからアプリケーション用にダウンロードされることになるデータの量を低減することができる。あるいは、インストレーションパッケージは、圧縮された形式ではない。（さまざまなタイプのプロセッサに適合された）さまざまなタイプのＭＤＩＬコードを、さまざまなタイプのコンピューティングデバイスのためのさまざまなインストレーションパッケージ内に含めることができる。さまざまなタイプのコンピューティングデバイスにとって利用可能なインストレーションパッケージは、下位互換性の目的で、ＭＤＩＬではないコード（たとえば、XAPファイルにおけるMSILコード）を伴うバージョンを含むこともできる。
【００４７】
[056]  いくつかの実施態様においては、インストレーションパッケージは、アプリケーション用のリソースファイルなど、アプリケーション用のその他の情報を含むことができる。たとえば、アプリケーションが実行されるときにアプリケーションによって使用することができるアプリケーション用のリソースファイルを受信することができる。アプリケーション用のリソースファイルは、音声情報、音楽情報、グラフィックス情報、ビデオ情報、その他のメディア情報、データベース情報、テキスト情報などを含む１つまたは複数のファイルであることが可能である。インストレーションパッケージは、そのインストレーションパッケージ内に含まれているファイルのリストを含むこともできる。ファイルのリストは、インストレーションパッケージ内に含まれているファイルに関する情報を含むことができる。たとえば、インストレーションパッケージは、拡張マークアップ言語（XML）を使用して編成されている情報を含むファイルを含むことができる。ＸＭＬファイルは、インストレーションパッケージ内に含まれているファイルのリストを含むことができる。リストアップされているファイルのうちのそれぞれに関して、ＸＭＬファイルは、そのリストアップされているファイルに関連付けられている情報を含むことができる。たとえば、ＸＭＬファイルは、インストレーションパッケージ内に含まれているＭＤＩＬコードファイルのうちのそれぞれをリストアップし、それらのＭＤＩＬコードファイルのうちのそれぞれはバインドすることが可能であるということを示すことができる。ＸＭＬファイルは、それぞれのリストアップされているＭＤＩＬコードファイルのコードにバインドされることになる１つまたは複数のライブラリを示すこともできる。
【００４８】
[057]  いくつかの実施態様においては、生成されたインストレーションパッケージそのものが、信頼されているものとしてサインされる。たとえば、インストレーションパッケージに、発行者キーを用いてサインして、そのインストレーションパッケージが、信頼されているコードおよび／またはその他の情報を含んでいるということを示すことができる。いくつかの実施態様においては、インストレーションパッケージを暗号化することができる。
【００４９】
[058]  ５５０において、インストレーションパッケージが、ダウンロード用に提供される。たとえば、オンラインプロバイダ、および／またはオンラインプロバイダのパートナーは、ダウンロード用にインストレーションパッケージを格納することができる。オンラインプロバイダは、１つまたは複数のアプリケーションを１つまたは複数のコンピューティングデバイスへのインストレーション用にダウンロードすることができる元になるオンラインマーケットプレイスであることが可能である。アプリケーションは、オンラインマーケットプレイスからダウンロードするために利用可能であるアプリケーションのカタログ内に含めることができる。たとえば、アプリケーションは、インターネットおよび／またはクラウドを使用してコンピューティングデバイスによってダウンロードすることができる。アプリケーションを、そのアプリケーション用のインストレーションパッケージがダウンロードされるようにダウンロードすることができる。いくつかの実施態様においては、アプリケーションは、そのアプリケーションが購入されて、コンピューティングデバイスにダウンロードされることが承認された後に、コンピューティングデバイスにダウンロードすることができる。いくつかの実施態様においては、アプリケーションは、購入されることなくダウンロードすることが可能である。たとえば、アプリケーションは、無料で提供されてダウンロードすることが可能である。
【００５０】
インストールされたアプリケーション用の更新されたネイティブイメージを生成するための例示的なシステム
[059]  図６は、１つまたは複数のインストールされたアプリケーション用の１つまたは複数の更新されたネイティブイメージ６０５を生成することができるコンピューティングデバイス６００の図である。図６においては、コンピューティングデバイスは、そのコンピューティングデバイス上の１つまたは複数のインストールされたアプリケーション用の１つまたは複数の生成されたネイティブイメージ６１０を含む。コンピューティングデバイス６００は、更新されたライブラリ６２０を含み、更新されたライブラリ６２０は、１つまたは複数のネイティブイメージ６１０を生成するためにアプリケーションのそれぞれのＭＤＩＬコードにバインドされた後に更新された、１つまたは複数のライブラリを含む。１つまたは複数のネイティブイメージ６１０にバインドされたライブラリのうちの少なくとも１つが更新されたため、コンピューティングデバイス６００は、自分にインストールされたアプリケーションを、それらのインストールされたアプリケーション用の１つまたは複数の更新されたネイティブイメージ６０５を生成することによって更新する。コンピューティングデバイスはまた、更新されたランタイムエンジン６７０を含む。
【００５１】
[060]  インストールされたアプリケーション用の１つまたは複数の更新されたネイティブイメージ６０５を生成する際に、バインダ６２５は、１つまたは複数のインストールされたアプリケーションのそれぞれのための更新されたネイティブイメージを生成する。図６において示されているように、変更および／または更新された少なくとも１つのライブラリにバインドされたネイティブイメージを有するそれぞれのインストールされたアプリケーション用に、パッケージマネージャ６３０は、更新されたネイティブイメージ６３５など、更新されているアプリケーション用の更新されたネイティブイメージを生成するために再バインドするためのそれぞれのアプリケーションのＭＤＩＬファイルをバインダ６２５に提供する。更新されたネイティブイメージは、それらのネイティブイメージが、更新されたランタイムエンジン６７０を使用して実行可能であるように、バインダ６２５によって生成することができる。
【００５２】
[061]  更新されたネイティブイメージ６３５を生成するために、更新されているアプリケーション用のそれぞれのＭＤＩＬファイルに関して、バインダ６２５は、ＭＤＩＬファイル６４０などのそのアプリケーションのそれぞれのＭＤＩＬファイルと、そのＭＤＩＬファイルにバインドされることになる１つまたは複数のライブラリ６４５などの１つまたは複数のライブラリとを提供される。ＭＤＩＬファイルのコードにバインドするために提供される１つまたは複数のライブラリは、更新されたライブラリ６２０のセット内に含まれている、更新されている少なくとも１つのライブラリを含むことができる。いくつかの実施態様においては、更新されているアプリケーションのＭＤＩＬファイルのコードにバインドされている１つまたは複数のライブラリは、更新されていない。
【００５３】
[062]  更新されたネイティブイメージ６３５など、アプリケーション用の更新されたネイティブイメージは、生成されると、コンピューティングデバイス上のインストールされたアプリケーション用の１つまたは複数の更新されたネイティブイメージ６０５のうちの少なくとも１つとして格納される。更新されたネイティブイメージには、その更新されたネイティブイメージがアプリケーションを実行するために使用される前に、６５０において示されているように、信頼されているコードとしてサインすることもできる。６５５において、コンピューティングデバイスは、アプリケーション用の以前に生成されたネイティブイメージの代わりに、アプリケーションを実行するためのアプリケーション用の生成された更新されたネイティブイメージをロードする。
【００５４】
[063]  デバイス上のライブラリに対する更新を取り扱うことに加えて、デバイスは、アプリケーションが変わった（たとえば、アプリケーションのMDILコードが変わった）場合にアプリケーションを更新することができる。このケースにおいては、デバイスは、ＭＤＩＬコードの新たな部分をデバイス上の（変わっていない）１つまたは複数のライブラリとバインドすることを含めて、アプリケーション用の更新されたネイティブイメージを生成することによって、アプリケーションを更新する。アプリケーション用の更新されたネイティブイメージは、それらのネイティブイメージが、更新されたランタイムエンジンを使用して実行可能であるように、バインダによって生成することができる。
【００５５】
[064]  ６６０において示されているように、更新されたネイティブイメージの生成および／またはコンピューティングデバイス６００の更新中に、アプリケーションおよび／またはコンピューティングデバイス６００の更新が成功したと確認されるまで、以前に生成されたネイティブイメージを一時的に格納することができる。コンピューティングデバイスに対する、および／またはアプリケーションに対する更新が失敗した場合には、以前に生成されたネイティブイメージを一時ストレージから復元して、アプリケーションを実行するためにコンピューティングデバイスによってロードされているネイティブイメージとして再び使用することができる。
【００５６】
ＭＤＩＬのコードを使用したネイティブコード生成を通じてアプリケーションを更新するための例示的な方法
[065]  図７は、ＭＤＩＬのコードからアプリケーション用のネイティブイメージを生成することによってアプリケーションを更新するための例示的な方法７００である。さまざまな実施態様においては、図７の示されている方法ブロックは、マージすること、サブブロックへと分割すること、または省略することが可能である。図７においては、７１０において示されているように、１つまたは複数のライブラリのセットが、コンピューティングデバイス上で更新される。たとえば、コンピューティングデバイス上の１つまたは複数のライブラリの一部またはすべてが、変更、修正、またはその他の形で更新される。いくつかの実施態様においては、コンピューティングデバイス更新の一環として、１つまたは複数のライブラリのセットが更新され、デバイスのランタイムエンジンが更新される。いくつかの実施態様においては、コンピューティングデバイス上の１つまたは複数のアプリケーションに関して、（インストレーション中にそれぞれのアプリケーション用のネイティブイメージを生成するために）それぞれのアプリケーション用のＭＤＩＬコードにバインドされた１つまたは複数のライブラリのうちのライブラリの少なくとも１つが、変更、修正、またはその他の形で更新される。いくつかの実施態様においては、ライブラリは、そのライブラリにバインドされているアプリケーション用のネイティブイメージのコードが、そのライブラリに関する少なくとも１つのオフセットにもはや適切に対応しなくなるように更新および／または更新される。たとえば、オブジェクトの少なくとも１つのフィールドに関するオフセットが、ライブラリ内で変わっている、といった具合である。オペレーティングシステム更新の一環として、コンピューティングデバイス上のライブラリのセットを更新することができる。または、フレームワークに対する更新および／または実行エンジン更新の一環として、コンピューティングデバイス上のライブラリを更新することができる。たとえば、コンピューティングデバイスは、．ＮＥＴフレームワークなど、マネージドアプリケーションを実行するためのフレームワークを使用することができ、そのフレームワークの一部であるライブラリが、変更および／もしくは更新され、ならびに／またはそのフレームワークの一部であるランタイムエンジンが、変更および／もしくは更新される。．ＮＥＴフレームワークにおいては、ベースクラスライブラリを、異なるおよび／またはより新たなバージョンのフレームワークライブラリに変更または更新することができる。いくつかのケースにおいては、コンピューティングデバイス上のすべてのライブラリが更新および／または変更されるとは限らない。その他のケースにおいては、コンピューティングデバイス上のすべてのライブラリが更新および／または変更される。
【００５７】
[066]  ７２０において、コンピューティングデバイスは、アプリケーション用の更新されたネイティブイメージを生成する。たとえば、アプリケーション用のＭＤＩＬコードからネイティブイメージを生成することによってコンピューティングデバイス上にインストールされたアプリケーションを、コンピューティングデバイス上で１つまたは複数のライブラリのうちの少なくとも１つが更新された後に、そのアプリケーション用のＭＤＩＬコードをそれらの１つまたは複数のライブラリにバインドすることによって、そのアプリケーション用に新たなネイティブイメージ（たとえば、更新されたネイティブイメージ）が生成されるように更新することができる。更新されたネイティブイメージの生成は、アプリケーションが最初にインストールされたときのネイティブイメージの生成と同様であることが可能である。たとえば、インストレーションプロセスに関して上述したようなコンピューティングデバイスの更新されたライブラリのうちの少なくとも１つを使用して、更新されたネイティブイメージをアプリケーション用に生成することができる。したがって、更新されたネイティブイメージの生成は、アプリケーション用の第１のネイティブイメージがアプリケーション用に既に生成されて、第１のネイティブイメージの生成中にバインドされたライブラリのうちの１つまたは複数がコンピューティングデバイス上で更新および／または変更された後に、生じる。いくつかの実施態様においては、ランタイムエンジンが、コンピューティングデバイスのライブラリとともに更新された場合には、更新されているアプリケーションのＭＤＩＬコードのバインディングは、生成されたネイティブイメージが、コンピューティングデバイス上で利用可能であるものとして、更新されたランタイムエンジンおよび更新されたライブラリを使用して実行可能であるように行うことができる。
【００５８】
[067]  または、アプリケーション用のＭＤＩＬコードは更新されているがライブラリおよび／またはランタイムエンジンは変わっていない場合に、更新されたネイティブイメージを生成することができる。たとえば、コンピューティングデバイスは、アプリケーション更新の一環として、アプリケーション用の新たなＭＤＩＬコードを受信する。上述の方法２００を使用してなど、本明細書において記載されているように、アプリケーション用の受信された新たなＭＤＩＬコードをインストールすることができる。たとえば、コンピューティングデバイスは、新たなＭＤＩＬコードの一部分をコンピューティングデバイス上の（変わっていない）１つまたは複数のライブラリとバインドすることを含めて、アプリケーション用の更新されたネイティブイメージを生成することによって、アプリケーションを更新する。バインダによってアプリケーション用に生成されたネイティブコードは、そのネイティブコードが、アプリケーションを実行するためのデバイス上で利用可能なランタイムエンジンを使用して実行可能であるように生成することができる。
【００５９】
[068]  いくつかの実施態様においては、更新されているアプリケーションに関して、そのアプリケーション用にコンピューティングデバイス上に格納されているそのアプリケーション用のＭＤＩＬコードを、そのデバイスの１つまたは複数のライブラリにバインドすることができる。たとえば、バインダは、アプリケーション用に更新されている実行可能なネイティブイメージを生成するために、ＭＤＩＬコードを、コンピューティングデバイス上で利用可能な１つまたは複数のライブラリにバインドすることができる。このバインディングは、ＭＤＩＬコードを解決し、アプリケーション用の更新されたネイティブイメージ内に含まれるアプリケーション用のネイティブコードを生成する。いくつかの実施態様においては、更新されたネイティブイメージを生成する際に、アプリケーション用のＭＤＩＬファイルのセット内のそれぞれのＭＤＩＬファイルに関して、それぞれのＭＤＩＬファイルと、そのファイルのＭＤＩＬコードにバインドされることになる１つまたは複数のライブラリとが、バインダに提供される。バインダは、それぞれのＭＤＩＬファイルを、そのバインダに提供されたライブラリにバインドして、アプリケーション用の更新されたネイティブイメージを生成する。更新されたネイティブイメージは、コンピューティングデバイスのプロセッサによって実行可能であるマシンコードなどのネイティブコードを含むことができ、更新されたネイティブイメージは、典型的には、ＭＤＩＬコードにおけるようにバインドされていない疑似命令を含まない。いくつかの実施態様においては、生成された更新されたネイティブイメージに、信頼されているコードとしてサインすることができる。
【００６０】
[069]  いくつかの実施態様においては、更新されたネイティブイメージは、アプリケーションを実行するためにロードされるネイティブイメージとして、アプリケーション用の以前に生成されたネイティブイメージに取って代わる。更新されたネイティブイメージは、アプリケーションを実行するためにロードされる。なぜなら、更新されたネイティブイメージは、コンピューティングデバイスの更新されたライブラリのうちの少なくとも１つを使用して実行可能であるネイティブコードを含むためである。以前に生成されたネイティブイメージは、不安定である、および／または信頼できない場合があり、それによって、以前に生成されたネイティブイメージは、適切にまたは予想どおりに機能しない。なぜなら、以前に生成されたネイティブイメージは、コンピューティングデバイス上で利用可能なライブラリのうちの１つのさらに以前のバージョンを不適切に参照することがあるためである。
【００６１】
[070]  いくつかの実施態様においては、更新されたネイティブイメージが生成されているときに、以前に生成されたネイティブイメージは、アプリケーションおよび／またはコンピューティングデバイスに対する更新が成功したと確認されるまで、一時的に格納および／またはバックアップされる。たとえば、コンピューティングデバイスのライブラリを更新するコンピューティングデバイスに対する更新は、アプリケーション用のネイティブイメージの再生成および／または更新をトリガすることができる。コンピューティングデバイスに対する更新またはアプリケーション用のネイティブイメージの更新が失敗した場合には、その失敗した更新をロールバックすることができ、格納されているそのアプリケーションの以前に生成されたネイティブイメージを、実行される際のアプリケーションのネイティブイメージとして使用することができる。いくつかの実施態様においては、アプリケーションデータも保存される。たとえば、アプリケーションのユーザは、アプリケーションが更新される前に、およびアプリケーションが更新された後に、ユーザデータおよび／またはアプリケーションデータを生成することができ、それらのユーザデータおよび／またはアプリケーションデータは、保存することが可能であり、それによって、更新されたネイティブイメージを生成しても、ユーザデータおよび／またはアプリケーションデータは、アプリケーションの以前のバージョンから変更されない。
【００６２】
[071]  ７３０において、コンピューティングデバイスは、デバイス上にインストールされた１つまたは複数のその他のアプリケーション用の更新されたネイティブイメージを生成する。たとえば、更新されたライブラリのうちの１つまたは複数にＭＤＩＬコードをバインドすることによって生成されたネイティブイメージを有するコンピューティングデバイス上にインストールされたそれぞれのさらなるアプリケーションに関して、それらのそれぞれのアプリケーション用の更新されたネイティブイメージが、更新されたものとして１つまたは複数のライブラリにＭＤＩＬコードをバインドすることによって生成される。７３０において示されている点線は、方法７００のさまざまな実施態様においてはブロック７３０を方法から省略すること、または方法内に含めることが可能であるということを示している。いくつかの実施態様においては、デバイスの１つまたは複数のライブラリが（フレームワーク更新におけるように）更新された後に、そのデバイスのアプリケーションを自動的に更新することができ、それらのアプリケーション用の更新されたネイティブイメージを生成することができ、それによって、それらのアプリケーションは、更新されたライブラリを使用して適切に実行される。インストールされたアプリケーションが、更新および／または変更された共有ライブラリを使用していない場合には、そのアプリケーションを更新する必要はなく、そのアプリケーション用に更新されたネイティブイメージを生成する必要はない。なぜなら、そのアプリケーション用の以前に生成されたネイティブイメージは、デバイス上で利用可能であるものとしてライブラリとともに適切に機能することができるためである。いくつかの実施態様においては、ランタイムエンジンが、コンピューティングデバイスのライブラリとともに更新された場合には、アプリケーション用の更新されたネイティブイメージは、そのアプリケーションが、コンピューティングデバイス上で利用可能であるものとして、更新されたランタイムエンジンおよび更新されたライブラリを使用してコンピューティングデバイス上で実行可能であるように、生成され得る。
【００６３】
[072]  ７４０において、更新されたネイティブイメージは、コンピューティングデバイスにおいてアプリケーションを実行するためにアプリケーションをロードする際に使用するために格納される。たとえば、更新されたネイティブイメージは、その更新されたネイティブイメージの生成の前に生成されたアプリケーションのネイティブイメージの代わりにロードされる。更新されたネイティブイメージは、アプリケーションを実行するためにロードされる。なぜなら、その更新されたネイティブイメージは、自分が使用するライブラリを適切に参照することができるためである。アプリケーション用の既にダウンロードされたＭＤＩＬコードを再バインドすることによって、更新されたネイティブイメージを生成することにより、アプリケーションを実行するためにネイティブイメージを使用するコンピューティングデバイスは、アプリケーションの更新されたバージョンをダウンロードする必要なく、アプリケーション用の新たにダウンロードされた情報からアプリケーションを再インストールすることなく、およびアプリケーションを再コンパイルすることなく、更新することができる。
【００６４】
例示的なモバイルデバイス
[073]  図８は、全体に８０２で示されている、さまざまな任意選択のハードウェアコンポーネントおよびソフトウェアコンポーネントを含む例示的なモバイルデバイス８００を示すシステム図である。一般に、このモバイルデバイス内のコンポーネント８０２は、別のコンポーネントと通信することができるが、例示を簡単にするために、すべての接続が示されているわけではない。このモバイルデバイスは、さまざまなコンピューティングデバイス（たとえば、携帯電話、スマートフォン、タブレットコンピュータ、ハンドヘルドコンピュータ、携帯情報端末（PDA）など）のうちの任意のものであることが可能であり、セルラネットワークまたは衛星ネットワークなどの１つまたは複数のモバイル通信ネットワーク８０４とのワイヤレス双方向通信を可能にすることができる。
【００６５】
[074]  示されているモバイルデバイス８００は、信号コーディング、データ処理、入力／出力処理、電力制御、および／またはその他の機能などのタスクを実行するためのコントローラまたはプロセッサ８１０（たとえば、信号プロセッサ、マイクロプロセッサ、ASIC、またはその他の制御および処理論理回路）を含むことができる。オペレーティングシステム８１２は、コンポーネント８０２の割り当ておよび使用を制御すること、ならびに、１つもしくは複数のアプリケーションプログラム８１４、および／または、アプリケーション用のデバイス上のＩＬコードからネイティブコードを生成するための本明細書において記載されている技術のうちの１つもしくは複数を実施することができるものなどの１つもしくは複数のソフトウェアプログラム８１５のためのサポートを行うことが可能である。それらのアプリケーションプログラムは、一般的なモバイルコンピューティングアプリケーションおよびソフトウェア（たとえば、Ｅメールアプリケーション、カレンダ、コンタクトマネージャ、ウェブブラウザ、メッセージングアプリケーション、ランタイムエンジン）、またはその他の任意のコンピューティングアプリケーションを含むことができる。アプリケーションプログラム８１４用のコードおよび／またはその他の情報を取得および更新するために、アプリケーションストア、オンラインマーケットプレイス、またはオンラインプロバイダにアクセスするための機能８１３を使用することもできる。
【００６６】
[075]  示されているモバイルデバイス８００は、メモリ８２０を含むことができる。メモリ８２０は、非取外し式メモリ８２２および／または取外し式メモリ８２４を含むことができる。非取外し式メモリ８２２は、ＲＡＭ、ＲＯＭ、フラッシュメモリ、ハードディスク、またはその他のよく知られているメモリストレージ技術を含むことができる。取外し式メモリ８２４は、フラッシュメモリもしくはＧＳＭ通信システムにおいてよく知られている加入者識別モジュール（SIM）カード、または「スマートカード」など、その他のよく知られているメモリストレージ技術を含むことができる。メモリ８２０は、オペレーティングシステム８１２ならびにアプリケーション８１４および８１５を実行するためのデータおよび／またはコードを格納するために使用することができる。例示的なデータとしては、１つまたは複数の有線ネットワークまたはワイヤレスネットワークを介して１つもしくは複数のネットワークサーバもしくはその他のデバイスへ送信される、および／または１つもしくは複数のネットワークサーバもしくはその他のデバイスから受信されるウェブページ、テキスト、イメージ、音声ファイル、ビデオデータ、またはその他のデータセットを含むことができる。メモリ８２０は、国際移動体加入者識別番号（IMSI）などの加入者識別子、および国際移動体装置識別番号（IMEI）などの機器識別子を格納するために使用することができる。そのような識別子は、ユーザおよび機器を識別するためにネットワークサーバへ送信することができる。
【００６７】
[076]  モバイルデバイス８００は、タッチスクリーン８３２、マイクロフォン８３４、カメラ８３６、物理キーボード８３８、および／またはトラックボール８４０などの１つまたは複数の入力デバイス８３０、ならびにスピーカ８５２およびディスプレイ８５４などの１つまたは複数の出力デバイス８５０をサポートすることができる。その他の可能な出力デバイス（図示せず）としては、圧電式またはその他の触覚出力デバイスを含むことができる。いくつかのデバイスは、複数の入力／出力機能を提供することができる。たとえば、タッチスクリーン８３２およびディスプレイ８５４は、単一の入力／出力デバイスにおいて結合することができる。入力デバイス８３０は、ナチュラルユーザインターフェース（NUI）を含むことができる。ＮＵＩは、ユーザが、マウス、キーボード、リモコンなどの入力デバイスによって課される人工的な制約から解放されて「自然」にデバイスと対話することを可能にする任意のインターフェース技術である。ＮＵＩの方法の例としては、話声認識、タッチおよびスタイラス認識、スクリーン上およびスクリーン付近の両方でのジェスチャ認識、エアジェスチャ、ヘッドトラッキングおよびアイトラッキング、音声および話声、ビジョン、タッチ、ジェスチャ、ならびにマシンインテリジェンスに依存する方法が含まれる。ＮＵＩのその他の例としては、加速度計／ジャイロスコープを使用するモーションジェスチャ検知、顔認識、３Ｄディスプレイ、ヘッドトラッキング、アイトラッキング、および視線トラッキング、没入型拡張現実および仮想現実システムが含まれ、それらはすべて、より自然なインターフェース、ならびに、電界感知電極（EEGおよび関連した方法）を使用して脳の活動を感知するための技術を提供する。したがって、特定の一例においては、オペレーティングシステム８１２またはアプリケーション８１４は、ユーザが音声コマンドを介してデバイス８００を操作することを可能にする音声ユーザインターフェースの一部としての話声認識ソフトウェアを含むことができる。さらに、デバイス８００は、ゲーミングアプリケーションまたはその他のアプリケーションに入力を提供するためにジェスチャを検知して解釈することなど、ユーザの空間ジェスチャを介したユーザ対話を可能にする入力デバイスおよびソフトウェアを含むことができる。
【００６８】
[077]  ワイヤレスモデム８６０は、当技術分野においてよく理解されているように、アンテナ（図示せず）に結合することができ、プロセッサ８１０と外部デバイスとの間における双方向通信をサポートすることができる。モデム８６０は、一般的に示されており、モバイル通信ネットワーク８０４および／またはその他の無線ベースのモデム（たとえば、ブルートゥース８６４またはWi-Fi  ８６２）と通信するためのセルラモデムを含むことができる。ワイヤレスモデム８６０は、典型的には、単一のセルラネットワーク内における、セルラネットワークどうしの間における、またはモバイルデバイスと公衆交換電話網（PSTN）との間におけるデータ通信および音声通信のために、ＧＳＭネットワークなどの１つまたは複数のセルラネットワークと通信するように構成されている。
【００６９】
[078]  モバイルデバイスは、少なくとも１つの入力／出力ポート８８０、電源８８２、グローバルポジショニングシステム（GPS）受信機などの衛星ナビゲーションシステム受信機８８４、加速度計８８６、ならびに／または、ＵＳＢポート、ＩＥＥＥ  １３９４（ファイヤワイヤ）ポート、および／もしくはＲＳ−２３２ポートであることが可能である物理コネクタ８９０をさらに含むことができる。示されているコンポーネント８０２は、必須のもの、またはすべてを含むものではない。なぜなら、任意のコンポーネントを削除することができ、その他のコンポーネントを付加することができるためである。
【００７０】
例示的な実施環境
[079]  図９は、説明されている実施形態、技術、および技術を実施することができる適切な実施環境９００の一般化された例を示している。
【００７１】
[080]  例示的な環境９００においては、さまざまなタイプのサービス（たとえば、コンピューティングサービス）が、クラウド９１０によって提供される。たとえば、クラウド９１０は、コンピューティングデバイスの集合を含むことができ、それらのコンピューティングデバイスは、中央に配置すること、または分散することが可能であり、インターネットなどのネットワークを介して接続されているさまざまなタイプのユーザおよびデバイスにクラウドベースのサービスを提供する。実施環境９００は、コンピューティングタスクを達成するために、さまざまな方法で使用することができる。たとえば、いくつかのタスク（たとえば、ユーザ入力を処理すること、およびユーザインターフェースを提示すること）は、ローカルコンピューティングデバイス（たとえば、接続されているデバイス９３０、９４０、９５０）上で実行することができ、その一方で、その他のタスク（たとえば、その後の処理において使用されることになるデータの格納）は、クラウド９１０において実行することができる。
【００７２】
[081]  例示的な環境９００においては、クラウド９１０は、さまざまなスクリーン機能を伴う接続されているデバイス９３０、９４０、９５０のためのサービスを提供する。接続されているデバイス９３０は、コンピュータスクリーン９３５（たとえば、中規模スクリーン）を伴うデバイスに相当する。たとえば、接続されているデバイス９３０は、デスクトップコンピュータ、ラップトップ、ノートブック、ネットブックなどのパーソナルコンピュータであることが可能である。接続されているデバイス９４０は、モバイルデバイススクリーン９４５（たとえば、小規模スクリーン）を伴うデバイスに相当する。たとえば、接続されているデバイス９４０は、モバイル電話、スマートフォン、携帯情報端末、タブレットコンピュータなどであることが可能である。接続されているデバイス９５０は、大型スクリーン９５５を伴うデバイスに相当する。たとえば、接続されているデバイス９５０は、テレビジョンスクリーン（たとえば、スマートテレビジョン）、またはテレビジョンに接続されている別のデバイス（たとえば、セットトップボックス、もしくはゲーミングコンソール）などであることが可能である。接続されているデバイス９３０、９４０、および９５０のうちの１つまたは複数は、タッチスクリーン機能を含むことができる。タッチスクリーンは、さまざまな方法で入力を受け入れることができる。たとえば、容量性タッチスクリーンは、表面を横切って流れている電流をオブジェクト（たとえば、指先またはスタイラス）が歪めたまたは遮ったときにタッチ入力を検知する。別の例として、タッチスクリーンは、光センサを使用して、それらの光センサからのビームが遮られたときにタッチ入力を検知する。いくつかのタッチスクリーンによって入力が検知される上で、スクリーンの表面との物理的な接触は必要ではない。スクリーン機能を伴わないデバイスを、例示的な環境９００において使用することもできる。たとえば、クラウド９１０は、ディスプレイを伴わない１つまたは複数のコンピュータ（たとえば、サーバコンピュータ）のためのサービスを提供することができる。
【００７３】
[082]  サービスは、サービスプロバイダ９２０を通じて、またはオンラインサービスのその他のプロバイダ（図示せず）を通じて、クラウド９１０によって提供することができる。たとえば、クラウドサービスは、特定の接続されているデバイス（たとえば、接続されているデバイス９３０、９４０、９５０）のスクリーンサイズ、ディスプレイ機能、および／またはタッチスクリーン機能に合わせてカスタマイズすることができる。
【００７４】
[083]  例示的な環境９００においては、クラウド９１０は、本明細書において説明されている技術およびソリューションを、サービスプロバイダ９２０および１つまたは複数のオンラインプロバイダ９２５を少なくとも部分的に使用して、さまざまな接続されているデバイス９３０、９４０、９５０に提供する。たとえば、サービスプロバイダ９２０は、さまざまなクラウドベースのサービスのための集中型のソリューションを提供することができる。サービスプロバイダ９２０は、ユーザおよび／またはデバイスに関する（たとえば、接続されているデバイス９３０、９４０、９５０、および／またはそれらのそれぞれのユーザに関する）サービスサブスクリプションを管理することができる。クラウド９１０は、本明細書において論じられているような１つまたは複数のアプリケーション用の１つまたは複数の１つのインストレーションパッケージをダウンロード、送信、または受信するためのリソースを提供することができる。たとえば、アプリケーション用の中間言語コードは、オンラインプロバイダ９２５のうちの少なくとも１つによってクラウド９１０においてコンパイルすることができる。９６５において示されているように、クラウド９１０からダウンロードされたＩＬコードから、接続されているデバイス９３０によってアプリケーション用にネイティブイメージが生成される。
【００７５】
例示的なコンピューティング環境
[084]  図１０は、説明されているイノベーションを実施することができる適切なコンピューティング環境１０００の一般化された例を示している。コンピューティング環境１０００は、使用または機能の範囲に関して何らかの限定を提示することを意図されているものではない。なぜなら、これらのイノベーションは、多様な汎用または専用のコンピューティングシステムにおいて実施することができるためである。たとえば、コンピューティング環境１０００は、さまざまなコンピューティングデバイス（たとえば、デスクトップコンピュータ、ラップトップコンピュータ、サーバコンピュータ、タブレットコンピュータ、メディアプレーヤ、ゲーミングシステム、モバイルデバイスなど）のうちの任意のものであることが可能である。
【００７６】
[085]  図１０を参照すると、コンピューティング環境１０００は、１つまたは複数の処理ユニット１０１０、１０１５、およびメモリ１０２０、１０２５を含む。図１０においては、この基本的な構成１０３０は、破線内に含まれている。処理ユニット１０１０、１０１５は、コンピュータ実行可能命令を実行する。処理ユニットは、汎用中央処理装置（CPU）、特定用途向け集積回路（ASIC）内のプロセッサ、またはその他の任意のタイプのプロセッサであることが可能である。マルチプロセッシングシステムにおいては、処理能力を高めるために、複数の処理ユニットが、コンピュータ実行可能命令を実行する。たとえば、図１０は、中央処理装置１０１０ならびにグラフィックスプロセッシングユニットまたはコプロセッシングユニット１０１５を示している。有形のメモリ１０２０、１０２５は、処理ユニットによってアクセス可能な、揮発性メモリ（たとえば、レジスタ、キャッシュ、RAM）、不揮発性メモリ（たとえば、ROM、EEPROM、フラッシュメモリなど）、またはそれら２つの何らかの組合せであることが可能である。メモリ１０２０、１０２５は、処理ユニットによる実行に適したコンピュータ実行可能命令の形態の、本明細書において説明されている１つまたは複数のイノベーションを実施するソフトウェア１０８０を格納する。
【００７７】
[086]  コンピューティングシステムは、さらなる特徴を有することができる。たとえば、コンピューティング環境１０００は、ストレージ１０４０、１つまたは複数の入力デバイス１０５０、１つまたは複数の出力デバイス１０６０、および１つまたは複数の通信接続１０７０を含む。バス、コントローラ、またはネットワークなどの相互接続メカニズム（図示せず）が、コンピューティング環境１０００のコンポーネントどうしを相互接続する。典型的には、オペレーティングシステムソフトウェア（図示せず）が、コンピューティング環境１０００において実行されるその他のソフトウェアのためのオペレーティング環境を提供し、コンピューティング環境１０００のコンポーネントどうしのアクティビティーをコーディネートする。
【００７８】
[087]  有形のストレージ１０４０は、取り外し可能または非取外し式とすることができ、磁気ディスク、磁気テープもしくはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、または、情報を非一時的な方法で格納するために使用することが可能な、およびコンピューティング環境１０００内でアクセスすることが可能なその他の任意のメディアを含む。ストレージ１０４０は、１つまたは複数のアプリケーション用のＩＬコードからネイティブコードを生成することなど、本明細書において説明されている１つまたは複数のイノベーションを実施するソフトウェア１０８０のための命令を格納する。
【００７９】
[088]  入力デバイス１０５０は、キーボード、マウス、ペン、もしくはトラックボールなどのタッチ入力デバイス、音声入力デバイス、スキャニングデバイス、または、コンピューティング環境１０００に入力を提供する別のデバイスであることが可能である。ビデオエンコーディングに関しては、入力デバイス１０５０は、カメラ、ビデオカード、ＴＶチューナカード、または、アナログ形式もしくはデジタル形式のビデオ入力を受け入れる類似のデバイス、または、ビデオサンプルをコンピューティング環境１０００内へ読み込むＣＤ−ＲＯＭもしくはＣＤ−ＲＷであることが可能である。出力デバイス１０６０は、ディスプレイ、プリンタ、スピーカ、ＣＤライタ、または、コンピューティング環境１０００からの出力を提供する別のデバイスであることが可能である。
【００８０】
[089]  通信接続１０７０は、通信メディアを介した別のコンピューティングエンティティへの通信を可能にする。通信メディアは、コンピュータ実行可能命令、オーディオもしくはビデオ入力もしくは出力、またはその他のデータなどの情報を、変調されたデータ信号で搬送する。変調されたデータ信号とは、その信号の特性のうちの１つまたは複数が、その信号内で情報を符号化するように設定または変更されている信号である。限定ではなく、例として、通信メディアは、電気キャリア、光キャリア、ＲＦキャリア、またはその他のキャリアを使用することができる。
【００８１】
[090]  開示されている方法のうちのいくつかのオペレーションは、好都合な提示のために特定の連続した順序で説明されているが、この様式の説明は、以降で示されている特定の言葉によって特定の順序が必要とされない限り、並べ替えを含むということを理解されたい。たとえば、連続して説明されているオペレーションどうしは、いくつかのケースにおいては、並べ替えること、または同時に実行することが可能である。その上、説明を簡潔にするために、添付の図は、開示されている方法をその他の方法と組み合わせて使用することができるさまざまなやり方を示していない場合がある。
【００８２】
[091]  開示されている方法のうちのいずれも、１つまたは複数のコンピュータ可読ストレージメディア（たとえば、１つもしくは複数の光メディアディスク、揮発性メモリコンポーネント（DRAMもしくはSRAM等）、または不揮発性メモリコンポーネント（フラッシュメモリもしくはハードドライブ等）などの非一時的コンピュータ可読メディア）上に格納されている、コンピュータ（たとえばスマートフォン、または、コンピューティングハードウェアを含むその他のモバイルデバイスなど、任意の市販のコンピュータ）上で実行されるコンピュータ実行可能命令として実装することができる。容易に理解できるはずだが、コンピュータ可読ストレージメディアという用語は、変調されたデータ信号などの通信接続を含まない。開示されている技術を実施するためのコンピュータ実行可能命令のうちのいずれも、ならびに開示されている実施形態の実施中に作成および使用されるいかなるデータも、１つまたは複数のコンピュータ可読メディア（たとえば、伝搬される信号を除く非一時的コンピュータ可読メディア）上に格納することができる。コンピュータ実行可能命令は、たとえば、専用ソフトウェアアプリケーション、またはウェブブラウザを介してアクセスもしくはダウンロードされるソフトウェアアプリケーション、またはその他のソフトウェアアプリケーション（リモートコンピューティングアプリケーションなど）の一部であることが可能である。そのようなソフトウェアは、たとえば、単一のローカルコンピュータ（たとえば、任意の適切な市販のコンピュータ）上で、または、１つもしくは複数のネットワークコンピュータを使用してネットワーク環境において（たとえば、インターネット、ワイドエリアネットワーク、ローカルエリアネットワーク、クライアントサーバネットワーク（クラウドコンピューティングネットワークなど）、もしくはその他のそのようなネットワークを介して）実行することができる。
【００８３】
[092]  明確にするために、ソフトウェアベースの実装形態の特定の選択された態様のみが説明されている。当技術分野においてよく知られているその他の詳細は、省略されている。たとえば、開示されている技術は、いかなる特定のコンピュータ言語またはプログラムにも限定されるものではないということを理解されたい。たとえば、開示されている技術は、Ｃ＋＋、Ｃ♯、Ｊ＋＋、Ｊａｖａ、Ｐｅｒｌ、ＪａｖａＳｃｒｉｐｔ、Ａｄｏｂｅ  Ｆｌａｓｈ、またはその他の任意の適切なプログラミング言語で書かれたソフトウェアによって実装することができる。同様に、開示されている技術は、いかなる特定のコンピュータまたは特定のタイプのハードウェアにも限定されるものではない。適切なコンピュータおよびハードウェアの特定の詳細は、よく知られており、本開示において詳細に説明する必要はない。
【００８４】
[093]  本明細書において説明されているいかなる機能も、少なくとも部分的には、ソフトウェアの代わりに、１つまたは複数のハードウェアロジックコンポーネントによって実行することができるということもよく理解できるはずである。限定ではなく、例として、使用することができるハードウェアロジックコンポーネントの例示的なタイプとしては、フィールドプログラマブルゲートアレイ（FPGA）、プログラム固有集積回路（ASIC）、プログラム固有標準製品（ASSP）、システムオンアチップシステム（SOC）、結合プログラム可能論理回路（CPLD）などが含まれる。
【００８５】
[094]  さらに、（たとえば、開示されている方法のうちの任意の方法をコンピュータに実行させるためのコンピュータ実行可能命令を含む）ソフトウェアベースの実施形態のうちのいずれも、適切な通信手段を通じてアップロードすること、ダウンロードすること、またはリモートからアクセスすることが可能である。そのような適切な通信手段は、たとえば、インターネット、ワールドワイドウェブ、イントラネット、ソフトウェアアプリケーション、ケーブル（光ファイバケーブルを含む）、磁気通信、電磁通信（RF通信、マイクロ波通信、および赤外線通信を含む）、電子通信、またはその他のそのような通信手段を含む。
【００８６】
[095]  開示されている方法、装置、およびシステムは、いかなる形であれ限定的なものと解釈されるべきではない。それどころか、本開示は、単独での、および相互のさまざまな組合せおよび下位組合せでの、さまざまな開示されている実施形態のすべての自明ではない新規な特徴および態様を対象としている。開示されている方法、装置、およびシステムは、いかなる特定の態様もしくは特徴またはそれらの組合せにも限定されるものではなく、開示されている実施形態は、いかなる１つもしくは複数の特定の利点が存在することも、またはいかなる１つもしくは複数の特定の問題が解決されることも必要とするものではない。開示されている本発明の原理を適用することができる多くの可能な実施形態を考慮すれば、例示されている実施形態は、本発明の好ましい例にすぎず、本発明の範囲を限定するものと解釈されるべきではないということが認識されるはずである。むしろ、本発明の範囲は、添付の特許請求の範囲によって画定されている。したがって我々は、これらの特許請求の範囲およびそれらの均等物の範疇内に収まるすべてを我々の発明として特許請求している。
【図１】
0006294886.tif 000002
【図２】
0006294886.tif 000003
【図３】
0006294886.tif 000004
【図４】
0006294886.tif 000005
【図５】
0006294886.tif 000006
【図６】
0006294886.tif 000007
【図７】
0006294886.tif 000008
【図８】
0006294886.tif 000009
【図９】
0006294886.tif 000010
【図１０】
0006294886.tif 000011