(57)【特許請求の範囲】
【請求項１】
ホスト・プラットフォームにおいて、前記ホスト・プラットフォームとは異なる特定のゲスト・プラットフォーム用に作成されたソフトウェア・プログラムを受信する工程であって、前記ソフトウェア・プログラムは一組の共有オブジェクトまたは動的ロード・ライブラリを使用し、前記ソフトウェア・プログラムは前記ホスト・プラットフォームとは互換性がない工程と、
前記ホスト・プラットフォーム内で前記特定のゲスト・プラットフォームをエミュレートする工程と、
前記ホスト・プラットフォームが対応する共有オブジェクトまたは動的ロード・ライブラリを有するか否かを判定する工程であって、前記対応する共有オブジェクトまたは動的ロード・ライブラリは、前記一組の共有オブジェクトまたは動的ロード・ライブラリの中からの特定の共有オブジェクトまたは動的ロード・ライブラリとの共通の外部インターフェースを実装する工程と、
前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有する場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリを使用する使用工程と、
前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有さない場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリのバイナリ変換を実行する実行工程と、
エミュレートされた前記ゲスト・プラットフォームの状態に対するまたは前記ホスト・プラットフォームの状態に対するアクセスを必要とする呼出を受信する工程と、
前記呼出に応じて、エミュレートされた前記ゲスト・プラットフォームの前記状態を前記ホスト・プラットフォームの前記状態に同期させる工程と、
を備える方法。
【請求項２】
前記実行工程は、第１のバイナリ変換されたオブジェクトを生成する工程であって、前記第１のバイナリ変換されたオブジェクトの外部インターフェースは、前記ホスト・プラットフォーム用の第２のバイナリ変換されたオブジェクトまたは元々前記ホスト・プラットフォーム用のオブジェクトに対する機能呼出を含む工程を含む、
請求項１に記載の方法。
【請求項３】
前記一組の共有オブジェクトまたは動的ロード・ライブラリは、前記ホスト・プラットフォームにおける前記対応する共有オブジェクトまたは動的ロード・ライブラリに関連付けられている少なくとも１つのシステム・ライブラリと、前記ホスト・プラットフォームにおける前記対応する共有オブジェクトまたは動的ロード・ライブラリに関連付けられていない少なくとも１つのベンダ・ライブラリと、を含む、
請求項１に記載の方法。
【請求項４】
前記特定のゲスト・プラットフォームはＡＲＭハードウェアを含み、前記ホスト・プラットフォームはｘ８６ハードウェアを含む、
請求項１に記載の方法。
【請求項５】
前記使用工程は、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリに対してリンクするように、前記ソフトウェア・プログラム内のリンクを動的に修正する工程を含む、
請求項１に記載の方法。
【請求項６】
前記使用工程は、前記特定の共有オブジェクトまたは動的ロード・ライブラリに対する呼出が前記対応する共有オブジェクトまたは動的ロード・ライブラリに対する呼出に変換されるよう、ブリッジを提供する工程を含む、
請求項１に記載の方法。
【請求項７】
命令を含む非一時的なコンピュータ可読媒体であって、前記命令が１以上のコンピュータによって実行されるときに前記１以上のコンピュータは、
ホスト・プラットフォームにおいて、前記ホスト・プラットフォームとは異なる特定のゲスト・プラットフォーム用に作成されたソフトウェア・プログラムを受信する工程であって、前記ソフトウェア・プログラムは一組の共有オブジェクトまたは動的ロード・ライブラリを使用し、前記ソフトウェア・プログラムは前記ホスト・プラットフォームとは互換性がない工程と、
前記ホスト・プラットフォームが対応する共有オブジェクトまたは動的ロード・ライブラリを有するか否かを判定する工程であって、前記対応する共有オブジェクトまたは動的ロード・ライブラリは、前記一組の共有オブジェクトまたは動的ロード・ライブラリの中からの特定の共有オブジェクトまたは動的ロード・ライブラリとの共通の外部インターフェースを実装する工程と、
前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有する場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリを使用する使用工程と、
前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有さない場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリのバイナリ変換を実行する実行工程と、
前記ホスト・プラットフォーム内で前記特定のゲスト・プラットフォームをエミュレートする工程と、
エミュレートされた前記ゲスト・プラットフォームの状態に対するまたは前記ホスト・プラットフォームの状態に対するアクセスを必要とする呼出を受信する工程と、
前記呼出に応じて、エミュレートされた前記ゲスト・プラットフォームの前記状態を前記ホスト・プラットフォームの前記状態に同期させる工程と、
を備える方法を実施する、非一時的なコンピュータ可読媒体。
【請求項８】
前記実行工程は、第１のバイナリ変換されたオブジェクトを生成する工程であって、前記第１のバイナリ変換されたオブジェクトの外部インターフェースは、前記ホスト・プラットフォーム用の第２のバイナリ変換されたオブジェクトまたは元々前記ホスト・プラットフォーム用のオブジェクトに対する機能呼出を含む工程を含む、
請求項７に記載の非一時的なコンピュータ可読媒体。
【請求項９】
前記一組の共有オブジェクトまたは動的ロード・ライブラリは、前記ホスト・プラットフォームにおける前記対応する共有オブジェクトまたは動的ロード・ライブラリに関連付けられている少なくとも１つのシステム・ライブラリと、前記ホスト・プラットフォームにおける前記対応する共有オブジェクトまたは動的ロード・ライブラリに関連付けられていない少なくとも１つのベンダ・ライブラリと、を含む、
請求項７に記載の非一時的なコンピュータ可読媒体。
【請求項１０】
前記特定のゲスト・プラットフォームはＡＲＭハードウェアを含み、前記ホスト・プラットフォームはｘ８６ハードウェアを含む、
請求項７に記載の非一時的なコンピュータ可読媒体。
【請求項１１】
前記使用工程は、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリに対してリンクするように、前記ソフトウェア・プログラム内のリンクを動的に修正する工程を含む、
請求項７に記載の非一時的なコンピュータ可読媒体。
【請求項１２】
前記使用工程は、前記特定の共有オブジェクトまたは動的ロード・ライブラリに対する呼出が前記対応する共有オブジェクトまたは動的ロード・ライブラリに対する呼出に変換されるよう、ブリッジを提供する工程を含む、
請求項７に記載の非一時的なコンピュータ可読媒体。
【請求項１３】
１以上のプロセッサと、
命令を含むメモリと、を備えるシステムであって、前記命令は前記１以上のプロセッサによって実行されるときに前記１以上のプロセッサに、
ホスト・プラットフォームにおいて、前記ホスト・プラットフォームとは異なる特定のゲスト・プラットフォーム用に作成されたソフトウェア・プログラムを受信する工程であって、前記ソフトウェア・プログラムは一組の共有オブジェクトまたは動的ロード・ライブラリを使用し、前記ソフトウェア・プログラムは前記ホスト・プラットフォームとは互換性がない工程と、
前記ホスト・プラットフォーム内で前記特定のゲスト・プラットフォームをエミュレートする工程と、
前記ホスト・プラットフォームが対応する共有オブジェクトまたは動的ロード・ライブラリを有するか否かを判定する工程であって、前記対応する共有オブジェクトまたは動的ロード・ライブラリは、前記一組の共有オブジェクトまたは動的ロード・ライブラリの中からの特定の共有オブジェクトまたは動的ロード・ライブラリとの共通の外部インターフェースを実装する工程と、
前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有する場合、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリに対してリンクするように、前記ソフトウェア・プログラム内のリンクを動的に修正することによって、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリを使用する使用工程と、
前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有さない場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリのバイナリ変換を実行する工程と、
エミュレートされた前記ゲスト・プラットフォームの状態に対するまたは前記ホスト・プラットフォームの状態に対するアクセスを必要とする呼出を受信する工程と、
前記呼出に応じて、エミュレートされた前記ゲスト・プラットフォームの前記状態を前記ホスト・プラットフォームの前記状態に同期させる工程と、
を備える方法を実装させる、システム。
【請求項１４】
前記一組の共有オブジェクトまたは動的ロード・ライブラリは、前記ホスト・プラットフォームにおける前記対応する共有オブジェクトまたは動的ロード・ライブラリに関連付けられている少なくとも１つのシステム・ライブラリと、前記ホスト・プラットフォームにおける前記対応する共有オブジェクトまたは動的ロード・ライブラリに関連付けられていない少なくとも１つのベンダ・ライブラリと、を含む、
請求項１３に記載のシステム。
【請求項１５】
前記特定のゲスト・プラットフォームはＡＲＭハードウェアを含み、前記ホスト・プラットフォームはｘ８６ハードウェアを含む、
請求項１３に記載のシステム。
【請求項１６】
前記使用工程は、前記特定の共有オブジェクトまたは動的ロード・ライブラリに対する呼出が前記対応する共有オブジェクトまたは動的ロード・ライブラリに対する呼出に変換されるよう、ブリッジを提供する工程を含む、
請求項１３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有オブジェクト・レベルにおけるバイナリ変換に関する。
【背景技術】
【０００２】
本願の技術は、概してバイナリ変換技術を対象とする。ソフトウェア・プログラムは通常、特定のハードウェア・アーキテクチャ、特定のオペレーティング・システム、および／または複数の特定のライブラリを含み得る特定のプラットフォーム用にコンパイルされる。ユーザはこのソフトウェア・プログラムを、該特定のプラットフォームとは異なっており、異なるハードウェア・アーキテクチャ、異なるオペレーティング・システム、または複数の異なるライブラリを有する他のプラットフォーム上で動作させることを望み得る。そのような場合、プログラムがコンパイルされるプラットフォームはゲストと称され、コードが実行されるプラットフォームはホストと称される。ホスト・プラットフォーム上で実行されるようプログラムを調整するべく、ホスト・プラットフォームは該特定のゲスト・プラットフォームを（ソフトウェアにより）エミュレートするようプログラミングされ、ソフトウェア・プログラムを元の形式から、エミュレートされた特定のゲスト・プラットフォームによりホスト・プラットフォーム上で動作可能な新しいソフトウェア・プログラムに変換するためにバイナリ変換が実行され得る。バイナリ変換において、この特定のゲスト・プラットフォーム用のバイナリ・コードが、ホスト・プラットフォーム用のバイナリ・コードに変換される。
【図面の簡単な説明】
【０００３】
【図１Ａ】共有オブジェクト・レベルにおけるバイナリ変換に関わり得る例示的ゲスト・マシンを示す図。
【図１Ｂ】共有オブジェクト・レベルにおけるバイナリ変換に関わり得る例示的ホスト・マシンを示す図。
【図２】共有オブジェクト・レベルにおけるバイナリ変換が完了し得る例示的プロセスを示す図。
【図３】本願の技術のいくつかの実施形態が実装される電子システムを概念的に示す図。
【発明を実施するための形態】
【０００４】
いくつかの態様によると、本願の技術は方法に関する。前記方法は、ホスト・プラットフォームにおいて、前記ホスト・プラットフォームとは異なる特定のゲスト・プラットフォーム用に作成されたソフトウェア・プログラムを受信する工程であって、前記ソフトウェア・プログラムは一組の共有オブジェクトまたは動的ロード・ライブラリを使用し、前記ソフトウェア・プログラムは前記ホスト・プラットフォームとは互換性がない工程を含む。前記方法は、前記ホスト・プラットフォーム内で前記特定のゲスト・プラットフォームをエミュレートする工程を含む。前記方法は、前記ホスト・プラットフォームが対応する共有オブジェクトまたは動的ロード・ライブラリを有するか否かを判定する工程であって、前記対応する共有オブジェクトまたは動的ロード・ライブラリは、前記一組の共有オブジェクトまたは動的ロード・ライブラリの中からの特定の共有オブジェクトまたは動的ロード・ライブラリとの共通の外部インターフェースを実装する工程を含む。前記方法は、前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有する場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリを使用する工程を含む。前記方法は、前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有さない場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリのバイナリ変換を実行する工程を含む。
【０００５】
いくつかの態様によると、本願の技術は命令とデータとを記憶している非一時的なコンピュータ可読媒体に関する。前記命令は、ホスト・プラットフォームにおいて、前記ホスト・プラットフォームとは異なる特定のゲスト・プラットフォーム用に作成されたソフトウェア・プログラムを受信するためのコードであって、前記ソフトウェア・プログラムは一組の共有オブジェクトまたは動的ロード・ライブラリを使用し、前記ソフトウェア・プログラムは前記ホスト・プラットフォームとは互換性がないコードを含む。前記命令は、前記ホスト・プラットフォームが対応する共有オブジェクトまたは動的ロード・ライブラリを有するか否かを判定するためのコードであって、前記対応する共有オブジェクトまたは動的ロード・ライブラリは、前記一組の共有オブジェクトまたは動的ロード・ライブラリの中からの特定の共有オブジェクトまたは動的ロード・ライブラリとの共通の外部インターフェースを実装するコードを含む。前記命令は、前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有する場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリを使用するためのコードを含む。前記命令は、前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有さない場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリのバイナリ変換を実行するためのコードを含む。
【０００６】
いくつかの態様によると、本願の技術はシステムに関する。前記システムは、１以上のプロセッサと、命令とデータとを記憶しているメモリと、を備える。前記命令は、ホスト・プラットフォームにおいて、前記ホスト・プラットフォームとは異なる特定のゲスト・プラットフォーム用に作成されたソフトウェア・プログラムを受信するためのコードであって、前記ソフトウェア・プログラムは一組の共有オブジェクトまたは動的ロード・ライブラリを使用し、前記ソフトウェア・プログラムは前記ホスト・プラットフォームとは互換性がないコードを含む。前記命令は、前記ホスト・プラットフォーム内で前記特定のゲスト・プラットフォームをエミュレートするためのコードを含む。前記命令は、前記ホスト・プラットフォームが対応する共有オブジェクトまたは動的ロード・ライブラリを有するか否かを判定するためのコードであって、前記対応する共有オブジェクトまたは動的ロード・ライブラリは、前記一組の共有オブジェクトまたは動的ロード・ライブラリの中からの特定の共有オブジェクトまたは動的ロード・ライブラリとの共通の外部インターフェースを実装するコードを含む。前記命令は、前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有する場合、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリに対してリンクするように、前記ソフトウェア・プログラム内のリンクを動的に修正することによって、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに前記対応する共有オブジェクトまたは動的ロード・ライブラリを使用するためのコードを含む。前記命令は、前記ホスト・プラットフォームが前記対応する共有オブジェクトまたは動的ロード・ライブラリを有さない場合、前記ホスト・プラットフォーム内での前記ソフトウェア・プログラムの実行のために、前記特定の共有オブジェクトまたは動的ロード・ライブラリのバイナリ変換を実行するためのコードを含む。
【０００７】
本願の技術の様々な構成が例示のために図示および説明される以下の詳細な説明から、本願の技術の他の構成が容易に識別されると理解される。以下から分かるように、本願の技術の範囲を逸脱することなく、本願の技術は他の異なる構成が可能であり、そのいくつかの詳細は他の様々な点において変形が可能である。したがって、図面および詳細な説明は、本質的に例示として考えられるべきものであって、限定として考えられるものではない。
【０００８】
本願の技術の特徴は、添付される請求項に示される。しかしながら、説明の便宜上、本願の技術のいくつかの実施形態は、図１Ａ〜図３に示されている。
以下に示す詳細な説明は、本願の技術の様々な構成の説明を意図し、本願の技術が実施される唯一の構成だけを表すことを意図しない。添付される図面は、本明細書に組み込まれ、詳細な説明の一部を構成する。詳細な説明は、本願の技術の十分な理解を提供するための具体的詳細を含む。しかしながら、本願の技術は本明細書に示される具体的詳細には限定されず、これら具体的詳細なしに実施されることは明白である。いくつかの事例においては、本願の技術の概念を曖昧にすることを避けるために、一定の構造および要素はブロック図で示される。
【０００９】
本明細書で用いられるように、「プラットフォーム」は、１つのソフトウェアが動作するために必要な環境を指し得る。その環境は、ハードウェア・アーキテクチャ、オペレーティング・システム、および／または１以上のライブラリを含み得る。例示的なプラットフォームは、ＡＲＭ（登録商標）ハードウェア上のＡｎｄｒｏｉｄ（登録商標）オペレーティング・システム、ｘ８６（登録商標）ハードウェア上のＬｉｎｕｘ（登録商標）オペレーティング・システム、およびｘ８６（登録商標）ハードウェア上のＣｈｒｏｍｅ  ＯＳ（登録商標）において動作しているネイティブ・クライアントを含む。「バイナリ変換」は、１つのプラットフォームからバイナリ・コードを取り出し、そのバイナリ・コードを別のプラットフォーム用のバイナリ・コードに変換するプロセスを指し得る。「共有オブジェクト」、「共有ライブラリ」、または「動的ライブラリ」は、１以上の実行可能ファイルによって共有またはアクセスされることを意図したファイルであり得る。該「共有オブジェクト」、「共有ライブラリ」、または「動的ライブラリ」は、ロード時または実行時における実行可能ファイルまたは他のオブジェクト／ライブラリにリンクしている。「マーシャリング」は、オブジェクトのメモリ表現を１つのプラットフォーム上で用いられるデータ・フォーマットから別のプラットフォーム上で用いられるデータ・フォーマットに変換するプロセスを指し得る。さらに、上記用語の各々は、その平易で通常の意味を包含する。
【００１０】
アプリケーションはプラットフォーム上で動作し得る。アプリケーションは、主な実行可能ファイルと０以上の動的ライブラリを有し得る。動的ライブラリは、アプリケーション特有のもの、または、共通のものであり得る。アプリケーション特有の動的ライブラリはアプリケーション特有のビヘイビアを実装し、アプリケーション・ベンダによるアプリケーションとともにディストリビュートされ得る。共通の動的ライブラリは、様々なアプリケーション（たとえば、ディスプレイ・ユニットに画像を表示する）によって必要とされ得るビヘイビアを実装する。そのようなライブラリは通常、それら自身の独自のベンダ（たとえば、オペレーティング・システムのデベロッパまたはハードウェアのデベロッパ）によって別々にディストリビュートされる。いくつかの場合、共通の動的ライブラリは様々なオペレーティング・システムについて複数のバージョンを有し得る。
【００１１】
特定のオペレーティング・システム上に共存する主な実行可能ファイルおよび動的ライブラリは、関数呼出を行うことによって互いに通信し得る。実行可能ファイルおよび動的ライブラリは、システム呼出を行うことによって、オペレーティング・システムと通信し得る。
【００１２】
実行可能ファイル、動的ライブラリ、およびオペレーティング・システムは、特定のハードウェア上で動作する。実行可能ファイル、動的ライブラリ、およびオペレーティング・システムは、この特定のハードウェア用にコンパイルされた複数のソフトウェアであり、該特定のハードウェアの命令セットを用いてバイナリ・コードで表現される。
【００１３】
バイナリ変換は、１つのプラットフォーム（ゲスト・プラットフォーム）からバイナリ・コードを取り出し、そのバイナリ・コードを別のプラットフォーム（ホスト・プラットフォームまたはターゲット・プラットフォーム）用のバイナリ・コードに変換するプロセスを指し得る。バイナリ変換の１つの目的は、元々ゲスト・プラットフォーム用にコンパイルされていたアプリケーションを、アプリケーションのソース・コードにアクセスしてソース・コードをリコンパイルせずに、ホスト・プラットフォーム上で動作させることである。
【００１４】
いくつかの場合、バイナリ変換はフル・マシン・エミュレーションと称され、元の実行可能ファイル、動的ライブラリ、およびオペレーティング・システムのイメージを取り出し、上記全てをホスト・ハードウェア上で動作させることによって遂行される。これらの場合、バイナリ変換は、ホスト・ハードウェア上でゲスト・ハードウェアの命令セットをエミュレートするために用いられる。この方法の利点は、ゲスト・エミュレーションが非常に正確であることである。欠点は、ゲスト・オペレーティング・システムおよびライブラリを含めて多くのゲスト・コードをバイナリ変換しなくてはならないため、動作が低速であることである。
【００１５】
いくつかの場合、バイナリ変換はシステム呼出エミュレーションと称され、元の実行可能ファイルおよび動的ライブラリをゲストから取り出し、それらをホストに関連付けられている異なるオペレーティング・システムまたは異なるハードウェア上で動作させることによって遂行される。これらの場合、元のゲスト・プログラムおよびその動的ライブラリはゲスト・システム呼出までバイナリ変換され、そのゲスト・システム呼出はホスト・システム呼出を通じてエミュレートされる。この方法では、前述の方法ほど正確にはゲスト・システム呼出がエミュレートされないが、元のゲスト・オペレーティング・システムがバイナリ変換されないため、より効率が良い可能性がある。また、アプリケーションによって必要とされるシステム呼出のみがホスト内でエミュレートされ得る。これにより、複雑性を大幅に低下させられる。
【００１６】
本願の技術は、さらに先に進み得る。具体的には、本願の技術は、元の主な実行可能ファイルおよびアプリケーション特有の動的ライブラリをゲストから取り出し、それらを、ホストに由来する共通の動的ライブラリにより動作させることを含み得る。バイナリ変換は、（ゲストに由来する）アプリケーション特有の動的ライブラリの関数呼出、ゲストのオペレーティング・システムのシステム呼出、およびゲストのハードウェアの命令セットをエミュレートするために用いられる。この方法の利点は、ゲストの共通の動的ライブラリをバイナリ変換する必要がないことである。代わりに、元の主な実行可能ファイルおよびアプリケーション特有の動的ライブラリによって必要とされる関数呼出のみが、ホストにおいてエミュレートされる。この方法は結果として、フル・マシン・エミュレーションまたはシステム呼出エミュレーションよりも効率性が高くなる。
【００１７】
本願の技術の１つの複雑性は、関数呼出のエミュレーションである。関数呼出インターフェースは、異なるプラットフォームにおいて非常に異なり得る。具体的には、異なるプラットフォームは、異なった呼出規約を有し得る。用語「呼出規約」は、どのように異なるプラットフォームが引数を関数に渡し、該関数から戻り値を得るかを指し得る。異なるプラットフォームは、データ・モデルにおける相違を含むデータ・オブジェクトに関して異なるバイナリ表現、ならびに、異なるデータ・タイプのサイズおよびアライメントを有し得る。さらに、同一の意味および関数のデータ・オブジェクトは、異なるプラットフォーム上で異なる内部表現を有し得る。たとえば、ＧＮＵ  Ｃ  Ｌｉｂｒａｒｙ（ｇｌｉｂｃ）およびＢｉｏｎｉｃ  Ｃ  Ｌｉｂｒａｒｙにおいて、データ・モデルがｇｌｉｂｃおよびｂｉｏｎｉｃの両方で同一であっても、ＦＩＬＥオブジェクトが異なる。
【００１８】
この複雑性は、呼出規約の変換およびデータ・オブジェクトのマーシャリングによって、対処され得る。これは、関連する関数の既知のプロトタイプと、関連するデータ・オブジェクトのバイナリ・レイアウトと、に基づいて完了し得る。しかしながら、いくつかの場合、呼出規約の変換およびデータ・オブジェクトのマーシャリングは実用的ではない可能性がある。下記のいくつかの解決策は、そういった場合において用いられ得る。１つの解決策は、ゲストおよびホストに関して同一のアドレス空間および１：１のポインタ・マッピングを用いることを含む。これによって、データ・オブジェクトに対するポインタのマーシャリングを避ける。別の解決策は、呼出規約をゲストからホストに（たとえば、ホスト関数ラッパ）、および、ホストからゲストに（たとえば、ゲスト関数ラッパ）変換するためプロキシ関数を提供することを含む。同一アドレスが、ホスト関数と、それに対応するホスト関数ラッパとに用いられ得る。これによって、ホスト関数に対するポインタのマーシャリングを避ける。
【００１９】
現行のバイナリ変換スキームは、フル・マシン・エミュレーションまたはユーザランド・エミュレーションを含む。本明細書で用いられるように、用語「ユーザランド」は、たとえば、カーネル内には属さない可能性があるユーザ空間のオペレーティング・システム・ソフトウェアを指し得る。フル・マシン・エミュレーションでは、ゲスト・システム用のオペレーティング・システムと併せて、ゲスト・プラットフォーム用のソフトウェア・プログラムを含め、ゲスト・マシン・ハードウェアの全体がエミュレートされる。それに代えて、ゲスト・ハードウェアと、特定のゲスト・プラットフォームに関連付けられているオペレーティング・システムとは、ホスト・プラットフォームおよびホスト・オペレーティング・システムを用いてエミュレートされ得る。そして、ソフトウェア・プログラムは、このエミュレーションのフレームワークの上部において動作し得る。上記のバイナリ変換スキームは、プロセッサ・タイムおよびメモリなど多くのリソースを消費する。前述の通り、バイナリ変換に関する新たな技術が望まれ得る。
【００２０】
本願の技術は、特定のゲスト・プラットフォームからホスト・プラットフォームに移行されているソフトウェア・プログラムの共有オブジェクト・レベルにおけるバイナリ変換に関する。ソフトウェア・プログラムは元々、ホスト・プラットフォームとは異なる特定のゲスト・プラットフォーム用にコンパイルされる。ソフトウェア・プログラムは、ホスト・プラットフォームとは互換性がない。ソフトウェア・プログラムは、一組の共有オブジェクトまたはライブラリを使用する。一組の共有オブジェクトまたはライブラリは、特定のゲスト・ハードウェア・システムのシステム・ライブラリと、ベンダによって生成されソフトウェア・プログラムに特有であるベンダ・ライブラリとに対する依存関係を含む。
【００２１】
バイナリ変換中、特定のゲスト・プラットフォームはホスト・プラットフォーム内でエミュレートされる。一組の共有オブジェクト内の各オブジェクトまたは動的ロード・ライブラリ、もしくは、ソフトウェア・プログラムに用いられる複数の動的ロード・ライブラリに関して、バイナリ変換器は、ホスト・プラットフォームが、一組内のオブジェクトまたは動的ロード・ライブラリとの共通の外部インターフェースを実装する、対応する共有オブジェクトまたは動的ロード・ライブラリを有するか否かを判定する。オブジェクトがライブラリである場合、そのライブラリは、システム・ライブラリ（ホスト・ハードウェアにおいて対応するシステム・ライブラリ／オブジェクトに関連付けられており、その対応するシステム・ライブラリ／オブジェクトはライブラリとの共通の外部インターフェースを有する）またはベンダ・ライブラリ（ホスト・ハードウェアにおいて対応するシステム・ライブラリ／オブジェクトに関連付けられていない可能性がある）であり得る。システム・ライブラリの一例は、ほとんど全てのプラットフォームに存在するディスプレイ・ユニット上にプリミティブ・グラフィックスを提示するためのライブラリであり得る。ベンダ・ライブラリの一例は、ソフトウェア・プログラムのみに用いられるための、ソフトウェア・プログラムのベンダによって生成されたライブラリであり得る。ベンダ・ライブラリは、ユーザが、特定のゲスト・ハードウェア・システムを実装するマシンにおけるダウンロードのためにソフトウェア・プログラムを購入または要求する際、ダウンロードのために（たとえば、インターネットを通じて、または、ＣＤやＵＳＢディスクなどのリムーバブル・ディスクを通じて）ユーザに提供され得る。
【００２２】
本明細書で用いられるように、「対応する共有オブジェクトまたは動的ロード・ライブラリ」がゲスト・プラットフォームの元のオブジェクトまたは動的ロード・ライブラリ用のホスト・プラットフォーム内に存在するのは、該対応する共有オブジェクトまたは動的ロード・ライブラリが該元のオブジェクトまたは動的ロード・ライブラリとの共通の外部インターフェースを実装する場合である。元のオブジェクトまたは動的ロード・ライブラリおよび対応する共有オブジェクトまたは動的ロード・ライブラリが「共通の外部インターフェース」を有するのは、該元のオブジェクトおよび該対応する共有オブジェクトまたは動的ロード・ライブラリが類似またはほとんど同一の関数呼出を実装し、関数呼出に応じる類似またはほとんど同一のビヘイビアを実装する場合である。
【００２３】
オブジェクトまたは動的ロード・ライブラリ（たとえば、システム・ライブラリ）がホスト・ハードウェアにおいて対応する共有オブジェクトまたは動的ロード・ライブラリに対応し、該対応する共有オブジェクトまたは動的ロード・ライブラリが該オブジェクトと同一のビヘイビアを有する場合、バイナリ変換器は、ホスト・ハードウェア内でのソフトウェア・プログラムの実行のために、該オブジェクトの代わりに該対応する共有オブジェクトまたは動的ロード・ライブラリを用いる。バイナリ変換器は、特定の共有オブジェクトまたは動的ロード・ライブラリをバイナリ変換しない。バイナリ変換器は、特定のゲスト・プラットフォームのオブジェクトの代わりにホスト・プラットフォームの該対応する共有オブジェクトまたは動的ロード・ライブラリに対してリンクするように、第１プログラム内での依存関係を解決する。
【００２４】
具体的には、バイナリ変換器は、遅延束縛を実装する動的リンカ・メカニズムと協働し、特化トランポリンを通じてホスト・ライブラリ内の関数に対するエントリを解決する。トランポリンは、たとえば、アプリケーション・バイナリ・インターフェース（ＡＢＩ）変換を実行する可能性があり、セマンティック変換を行うこともある。トランポリンは、ＡＰＩのゲスト・バージョンに対する呼出を、ＡＰＩのホスト・バージョンに対する呼出に置換し得る。トランポリンは、旧来の実行可能でリンク可能なフォーマット（ＥＬＦ：Ｅｘｅｃｕｔａｂｌｅ  ａｎｄ  ｌｉｎｋａｂｌｅ  ｆｏｒｍａｔ）リンカを用いて実装され得る。ロード中、ＥＬＦリンカは適切なトランポリンを、ゲストからホストに転送されるオブジェクトのインポート・テーブルに挿入し得る。セマンティック変換は、たとえば、ゲストおよびホスト・プラットフォーム上でのアライメントまたはシステム・ライブラリの異なる実装が原因でホストとゲストとが異なる要件を有する場合、関数ポインタＡＰＩをホストによる呼出と変換オブジェクト・バイナリ・レイアウトとに適するようにすることによって、関数ポインタＡＰＩの変換を含み得る。
【００２５】
一例として、ゲスト・コードがｑｓｏｒｔ（）標準ライブラリ関数を呼び出す場合、ゲスト・コードはライブラリのインポート・テーブル内の未解決エントリとして、「ｑｓｏｒｔ」に言及する。遅延束縛中、そのようなエントリは、次の２つ、すなわち、（１）エミュレートされたゲスト・レジスタおよびスタックから引数を読み取り、その引数がホスト関数に可視化されるようにすること、および、（２）「ｑｓｏｒｔ」関数の既知署名に応じて引数を変換することを行うマシン・コードに対するポインタで満たされる。言い換えると、ゲスト・ポインタがホスト・ポインタに変換され、整数型がそのまま渡され、関数ポインタ引数が動的に生成されたホスト・コードにラッピングされる。そうすることで、関数ポインタ引数は、必要に応じてホスト「ｑｓｏｒｔ」エミュレーションによって呼び出される可能性がある。ゲスト関数ポインタのラッピングは、ホストＡＢＩからゲストＡＢＩへの逆の変換を含み得る。
【００２６】
結果として、ゲスト・プログラムは、関数の最適化ホスト・バージョンを用いて所望の操作を行いつつ、予定通りに同一のビヘイビアを獲得する。ホストにおいて、コンパレータ関数はバイナリ変換を用いて動作させられていて、一方で、分類アルゴリズム自体はネイティブ速度で動作する。
【００２７】
ゲスト共有オブジェクト内の外部共有オブジェクト・リファレンスは、上記の通りホスト共有オブジェクトを用いても、他のゲスト共有オブジェクトを用いても、解決され得る。後者の場合、呼出側と被呼出側とは同一のＡＢＩに従うので、トランポリンは必要とならない。したがって、旧来のローダは、標準のローダと同様に振る舞う。
【００２８】
本願の技術によるいくつかの方法によって、ネイティブ実行よりも遅くてリソースを消費し得るバイナリ変換が、ネイティブ・ホスト実装の存在しないベンダ提供の共有オブジェクトのみに適用されることが確実になる。これらの方法は、ベンダ提供ライブラリおよびシステム・ライブラリの両方のバイナリ変換を提供することに関わる他のスキームに比べて改良されたものである。
【００２９】
上記の技術は、直接的にホスト・プラットフォームのハードウェア上でホスト・プラットフォームのシステム・ライブラリを実行することと、ホスト・プラットフォーム上で特定のゲスト・プラットフォームのエミュレーションについてのベンダ・ライブラリを実行することと、を必要とする。結果として、ホスト・プラットフォームの（たとえば、レジスタ、スタックなどの）状態は、エミュレートされた特定のゲスト・プラットフォームの状態に同期され得る。ゲストからホスト関数に対しての呼出が生じるとき、エミュレーション層は、エミュレートされたゲスト状態からレジスタおよびスタックまたはホスト・ハードウェアにパラメータを移動させることを含み得る、全ての必要な引数変換を実行する。その結果、ホスト・コードは、あたかも正常に呼び出されているかのように働き得る。
【００３０】
図１Ａは、共有オブジェクト・レベルにおけるバイナリ変換に関わり得る例示的ゲスト・マシン１００Ａを示す。ゲスト・マシン１００Ａは、任意のコンピューティング・デバイス（たとえば、ラップトップ・コンピュータ、デスクトップ・コンピュータ、タブレット・コンピュータ、モバイル・フォン、携帯情報端末（ＰＤＡ）、電子音楽プレイヤ、スマート・ウォッチ、１以上のプロセッサおよびメモリと組み合わせられたテレビなど）であり得る。いくつかの例において、ゲスト・マシン１００Ａは、ＡＲＭハードウェアを有する。
【００３１】
図示するように、ゲスト・マシン１００Ａは、処理ユニット１０２Ａ、ネットワーク・インターフェース１０４Ａ、およびメモリ１０６Ａを含む。処理ユニット１０２Ａは、１以上のプロセッサを含む。処理ユニット１０２Ａは、中央処理装置（ＣＰＵ）、グラフィックス・プロセッシング・ユニット（ＧＰＵ）、または任意の他の処理ユニットを含み得る。処理ユニット１０２Ａは、コンピュータ可読媒体（たとえば、メモリ１０６Ａ）に記憶されているコンピュータの命令を実行する。ネットワーク・インターフェース１０４Ａは、ゲスト・マシン１００Ａがネットワーク（たとえば、インターネット、イントラネット、セルラ・ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、有線ネットワーク、無線ネットワーク、バーチャル・プライベート・ネットワーク（ＶＰＮ）など）においてデータを送受信することを許可する。メモリ１０６Ａは、データおよび／または命令を記憶する。メモリ１０６Ａは、１以上のキャッシュ・ユニット、ストレージ・ユニット、内部メモリ・ユニット、または外部メモリ・ユニットであり得る。図示するように、メモリ１０６Ａは、ゲスト・ハードウェア・アーキテクチャ１０８Ａ、ソフトウェア・プログラム１１０Ａ、ゲスト・システム・オブジェクト１２２Ａおよび１２４Ａ、ならびにベンダ・オブジェクト１２６Ａおよび１２８Ａを含む。
【００３２】
ゲスト・ハードウェア・アーキテクチャ１０８Ａは、ゲスト・マシン１００Ａによって使用される任意のプラットフォーム（たとえば、レジスタまたはシステム・スタック）を含み得る。ソフトウェア・プログラム１１０Ａは、実行中のゲスト・ハードウェア・アーキテクチャ１０８Ａを使用する。ソフトウェア・プログラム１１０Ａは、ゲスト・マシン１００Ａ用に作成され、ゲスト・マシン１００Ａ内に存在するゲスト・ハードウェア・アーキテクチャ１０８Ａにより機能するように設計されている。ソフトウェア・プログラム１１０Ａは、任意のソフトウェア・プログラム（たとえば、ワード・プロセッサ、メッセージングまたは電子メール・プログラム、オーディオまたはビデオ・プレイヤ、オンラインまたはオフライン・ゲーミング・プログラムなど）であり得る。
【００３３】
図示するように、ソフトウェア・プログラム１１０Ａは、リンク１１２Ａ、１１４Ａ、１１６Ａおよび１１８Ａを有する。リンク１１２Ａおよび１１４Ａは、ゲスト・システム・オブジェクト１２２Ａおよび１２４Ａとのインターフェースをそれぞれ有する。ゲスト・システム・オブジェクト１２２Ａおよび１２４Ａは、対応する共有オブジェクトまたは動的ロード・ライブラリがホスト・マシン（たとえば、図１Ｂに関連して以下で説明されるホスト・マシン１００Ｂ）内に存在するオブジェクトである。ホスト・マシンにおいて、該対応する共有オブジェクトまたは動的ロード・ライブラリは、ゲスト・システム・オブジェクト１２２Ａまたは１２４Ａとの共通の外部デバイスおよび共通のビヘイビアを実装する。たとえば、ゲスト・システム・オブジェクト１２２Ａまたは１２４Ａは、任意の全てまたはほとんどのプラットフォーム内に実装されるシステム・ライブラリに対応し得る。システム・ライブラリの例は、ディスプレイ・ユニットにおいてプリミティブ・グラフィックスを提示するためのグラフィック・ライブラリ、または、オーディオ出力ユニットにおいて音声ファイルを再生するための音声ライブラリを含む。リンク１１６Ａおよび１１８Ａは、ベンダ・オブジェクト１２６Ａおよび１２８Ａとのインターフェースをそれぞれ有する。
【００３４】
ベンダ・オブジェクト１２６Ａおよび１２８Ａは、対応する共有オブジェクトまたは動的ロード・ライブラリがホスト・マシン（たとえば、図１Ｂに関連して以下で説明されるホスト・マシン１００Ｂ）内に存在するオブジェクトである。ホスト・マシンにおいて、該対応する共有オブジェクトまたは動的ロード・ライブラリは、ベンダ・オブジェクト１２６Ａまたは１２８Ａとの共通の外部デバイスおよび共通のビヘイビアを実装する。たとえば、ベンダ・オブジェクト１２６Ａおよび１２８Ａは、ユーザがゲスト・マシン１００Ａにおいてソフトウェア・プログラムを購入または要求する際、（たとえば、ネットワークを通じて、あるいは、ＣＤまたはＵＳＢディスクなどのリムーバブル・ディスクを通じて）ダウンロードのためにゲスト・マシン１００Ａのユーザに対して提供され得る。
【００３５】
上述の通り、ソフトウェア・プログラム１１０Ａはゲスト・マシン１００Ａ（または、同一のプラットフォームを伴う別のマシン）上で動作するよう設計されている。ソフトウェア・プログラム１１０Ａは、ゲスト・ハードウェア・アーキテクチャ１０８Ａとのインターフェースを有するように、ならびに、ゲスト・システム・オブジェクト１２２Ａおよび１２４Ａとのインターフェースを有するように設計されている。しかしながら、いくつかの場合、ゲストのソフトウェア・プログラム１１０Ａを、ホスト・マシン（たとえば、図１Ｂに関連して以下で説明されるホスト・マシン１００Ｂ）上で、ゲスト・マシン１００Ａのプラットフォームとは異なるプラットフォームによって実行することが望ましい場合がある。いくつかの実施形態において、本願の技術は、ソフトウェア・プログラム１１０Ａのそのようなホスト・マシン上での実行を許可する手法を提供する。
【００３６】
図１Ｂは、共有オブジェクト・レベルにおけるバイナリ変換に関わり得る例示的ホスト・マシン１００Ｂを示す。ホスト・マシン１００Ｂは、任意のコンピューティング・デバイス（たとえば、ラップトップ・コンピュータ、デスクトップ・コンピュータ、タブレット・コンピュータ、モバイル・フォン、携帯情報端末（ＰＤＡ）、電子音楽プレイヤ、スマート・ウォッチ、１以上のプロセッサおよびメモリ組み合わせられたテレビなど）であり得る。ホスト・マシン１００Ｂは、ゲスト・マシン１００Ａとは異なるプラットフォームを有する。たとえば、ゲスト・マシン１００ＡのプラットフォームがＡＲＭハードウェアである場合、ホスト・マシン１００ＢのプラットフォームはＡＲＭハードウェアではなく、たとえば、ｘ８６ハードウェアであり得る。
【００３７】
図示するように、ホスト・マシン１００Ｂは、処理ユニット１０２Ｂ、ネットワーク・インターフェース１０４Ｂ、およびメモリ１０６Ｂを含む。処理ユニット１０２Ｂは、１以上のプロセッサを含む。処理ユニット１０２Ｂは、中央処理装置（ＣＰＵ）、グラフィックス・プロセッシング・ユニット（ＧＰＵ）、または任意の他の処理ユニットを含み得る。処理ユニット１０２Ｂは、コンピュータ可読媒体（たとえば、メモリ１０６Ｂ）に記憶されているコンピュータの命令を実行する。ネットワーク・インターフェース１０４Ｂは、ホスト・マシン１００Ｂがネットワーク（たとえば、インターネット、イントラネット、セルラ・ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、有線ネットワーク、無線ネットワーク、バーチャル・プライベート・ネットワーク（ＶＰＮ）など）内のデータを送受信することを許可する。メモリ１０６Ｂは、データおよび／または命令を記憶する。メモリ１０６Ｂは、１以上のキャッシュ・ユニット、ストレージ・ユニット、内部メモリ・ユニット、または外部メモリ・ユニットであり得る。図示するように、メモリ１０６Ｂは、ホスト・ハードウェア・アーキテクチャ１０７Ｂ、ソフトウェア・プログラム１１０Ｂ、ホスト・システム・オブジェクト１２２Ｂおよび１２４Ｂ、ならびにエミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂとベンダ・オブジェクト１２６Ｂおよび１２８Ｂのバイナリ変換（ＢＴｓ）とを含むバイナリ変換器１３０Ｂを含む。
【００３８】
ホスト・ハードウェア・アーキテクチャ１０７Ｂは、ホスト・マシン１００Ｂによって使用される任意のプラットフォーム（たとえば、レジスタまたはシステム・スタック）を含み得る。ホスト・マシン１００Ｂ用に作成されたソフトウェアは、実行中のホスト・ハードウェア・アーキテクチャ１０７Ｂを使用し得る。ホスト・ハードウェア・アーキテクチャ１０７Ｂは、バイナリ変換器１３０Ｂのコンテンツ（すなわち、エミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂならびにベンダ・オブジェクト１２６Ｂおよび１２８Ｂのバイナリ変換）の存在を認識しない可能性がある。したがって、ホスト・プラットフォームは、ホスト・ハードウェア・アーキテクチャ１０７Ｂにアクセスするためのエミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂとベンダ・オブジェクト１２６Ｂおよび１２８Ｂのバイナリ変換とに関するインターフェースを提供しない可能性があり、通常通りに動作する可能性がある。
【００３９】
バイナリ変換器１３０Ｂは、ソフトウェアに実装され、ゲスト・マシン１００Ａ内のゲスト・ハードウェア・アーキテクチャ１０８Ａに対応するエミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂを生成および記憶する。ホスト・マシン１００Ｂのエミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂは、ゲスト・マシン１００Ａのゲスト・ハードウェア・アーキテクチャ１０８Ａと同一の機能およびビヘイビアを有する。たとえば、ゲスト・マシン１００Ａのゲスト・ハードウェア・アーキテクチャ１０８Ａがハードウェアに実装されたレジスタおよびスタックを含む場合、エミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂは、ホスト・マシン１００Ｂの上部においてソフトウェアに実装される機能およびビヘイビアとともにレジスタおよびスタックを含み得る。
【００４０】
ソフトウェア・プログラム１１０Ｂは、ゲスト・マシン１００Ａのソフトウェア・プログラム１１０Ａに対応する。しかしながら、ソフトウェア・プログラム１１０Ｂは、ホスト・マシン１００Ｂにおける実行用に構成されている。ソフトウェア・プログラム１１０Ｂは、ホスト・マシン１００Ｂのエミュレートされたホスト・ハードウェア・アーキテクチャ１０８Ａとのインターフェースを有する代わりに、ホスト・マシン１００Ｂのエミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂとのインターフェースを有する。図示するように、ソフトウェア・プログラムは、それぞれホスト・システム・オブジェクト１２２Ｂおよび１２４Ｂに対するリンク１１２Ｂおよび１１４Ｂを含む。ホスト・システム・オブジェクト１２２Ｂおよび１２４Ｂに対するリンク１１２Ｂおよび１１４Ｂは、図１Ａのゲスト・システム・オブジェクト１１２Ａおよび１１４Ｂに対するリンク１１２Ａおよび１１４Ａに置き換えられる。ソフトウェア・プログラムは、それぞれベンダ・オブジェクト１２６Ａおよび１２６Ｂのバイナリ変換に対するリンク１１６Ｂおよび１１８Ｂを含む。以下、図２に関連してより詳細に説明されるように、ベンダ・オブジェクト１２６Ａおよび１２８Ａは、ベンダ・オブジェクト１２６Ｂおよび１２８Ｂのバイナリ変換を得るために実行されるバイナリ変換を有する。これは、ベンダ・オブジェクト１２６Ａおよび１２８Ａと同一の外部インターフェース、機能、およびビヘイビアを有する対応する共有オブジェクトまたは動的ロード・ライブラリが、ホスト・マシン１００Ｂ上に存在しないためである。ホスト・システム・オブジェクト１２２Ｂおよび１２４Ｂは、元々はホスト・マシン１００Ｂのアーキテクチャのために開発されたものである。ゲスト・システム・オブジェクト１２２Ａおよび１２４Ａは、元々はゲスト・マシン１００Ａのアーキテクチャのために開発されたものである。
【００４１】
リンク１１２Ｂはリンク１１２Ａに対応し、ホスト・システム・オブジェクト１２２Ｂはゲスト・システム・オブジェクト１２２Ａに対応する。言い換えると、ホスト・システム・オブジェクト１２２Ｂは、ゲスト・システム・オブジェクト１２２Ａとの共通の外部インターフェースを実装し、ゲスト・システム・オブジェクト１２２Ａとの共通の機能およびビヘイビアを有する。結果として、ソフトウェア・プログラム１１０Ｂ／１１０Ａは、ゲスト・マシン１００Ａからホスト・マシン１００Ｂに移植するプロセスにおいて、ゲスト・システム・オブジェクト１２２Ａの代わりにホスト・システム・オブジェクト１２２Ｂと（リンク１１２Ｂ／１１２Ａを介して）リンクするよう調整され得る。
【００４２】
リンク１１４Ｂはリンク１１４Ａに対応し、ホスト・システム・オブジェクト１２４Ｂはゲスト・システム・オブジェクト１２４Ａに対応する。言い換えると、ホスト・システム・オブジェクト１２４Ｂは、ゲスト・システム・オブジェクト１２４Ａとの共通の外部インターフェースを実装し、ゲスト・システム・オブジェクト１２４Ａとの共通の機能およびビヘイビアを有する。結果として、ソフトウェア・プログラム１１０Ｂ／１１０Ａは、ゲスト・マシン１００Ａからホスト・マシン１００Ｂに移植するプロセスにおいて、ゲスト・システム・オブジェクト１２４Ａの代わりにホスト・システム・オブジェクト１２４Ｂと（リンク１１４Ｂ／１１４Ａを介して）リンクするよう調整され得る。
【００４３】
リンク１１６Ｂはリンク１１６Ａに対応する。バイナリ変換器１３０Ｂによって生成されるオブジェクト１２６Ｂは、ゲスト・マシン１００Ａのベンダ・オブジェクト１２６Ａのバイナリ変換である。バイナリ変換の結果として、オブジェクト１２６Ｂはホスト・マシン１００Ｂ上で実行され、ベンダ・オブジェクト１２６Ａの外部インターフェース、機能、およびビヘイビアに類似した外部インターフェース、機能、およびビヘイビアを実装する。したがって、ソフトウェア・プログラム１１０Ｂは、バイナリ変換器１３０Ｂ内でベンダ・オブジェクト１２６Ａの代わりにオブジェクト１２６Ｂに対してリンクし得る。
【００４４】
リンク１１８Ｂはリンク１１８Ａに対応する。バイナリ変換器１３０Ｂによって生成されるオブジェクト１２８Ｂは、ゲスト・マシン１００Ａのベンダ・オブジェクト１２８Ａのバイナリ変換である。バイナリ変換の結果として、オブジェクト１２８Ｂはホスト・マシン１００Ｂ上で実行され、ベンダ・オブジェクト１２８Ａの外部インターフェース、機能、およびビヘイビアに類似した外部インターフェース、機能、およびビヘイビアを実装する。したがって、ソフトウェア・プログラム１１０Ｂは、バイナリ変換器１３０Ｂ内でベンダ・オブジェクト１２８Ａの代わりにオブジェクト１２８Ｂに対してリンクし得る。
【００４５】
重要なことに、ホスト・ハードウェア・アーキテクチャ１０７Ｂは、エミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂについて把握していない可能性があり、エミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂに対するインターフェースを提供せずに通常通りに機能し得る。バイナリ変換器１３０Ｂはエミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂを隠蔽する。バイナリ変換器１３０Ｂはエミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂをそれ自身の中に隠蔽し、ベンダ・オブジェクト１２６Ａおよび１２６Ｂのバイナリ変換にホスト・マシン１００ＢのＡＢＩなどホスト・マシン１００Ｂの期待される点との互換性をもたせる。
【００４６】
図１Ａと図１Ｂとにおいて、本願の技術は２つのシステム・オブジェクト１２２Ａ／１２２Ｂおよび１２４Ａ／１２４Ｂならびに２つのベンダ・オブジェクト１２６Ａおよび１２８Ａに関連して説明されている。しかしながら、本願の技術は任意の数（たとえば、０，１，２、または２より多く）のシステム・オブジェクトおよび任意の数（たとえば、０，１，２、または２より多く）のベンダ・オブジェクトにより実装され得る。
【００４７】
図２は、共有オブジェクト・レベルにおけるバイナリ変換が完了し得る例示的プロセス２００を示す。
プロセス２００は工程２１０において開始する。工程２１０において、ホスト・プラットフォーム（たとえば、ホスト・マシン１００Ｂ）は、ホスト・プラットフォームとは異なる特定のゲスト・プラットフォーム（たとえば、ゲスト・マシン１００Ａ）用に作成されたソフトウェア・プログラム（たとえば、ソフトウェア・プログラム１１０Ａ）を受信する。ソフトウェア・プログラムは、一組の共有オブジェクトまたは動的ロード・ライブラリ（たとえば、オブジェクト１２２Ａ、１２４Ａ、１２６Ａおよび１２８Ａ）を使用する。ソフトウェア・プログラムは、ホスト・プラットフォームとは互換性がない。
【００４８】
工程２２０において、ホスト・プラットフォームは、ホスト・プラットフォーム内で該特定のゲスト・プラットフォームをエミュレートする。たとえば、ゲスト・プラットフォームがレジスタおよびシステム・スタックを含む場合、ホスト・プラットフォームは、ゲスト・ハードウェアのレジスタおよびシステム・スタックのソフトウェア・エミュレーションを生成し得る。ソフトウェア・プログラムは、元のゲスト・プラットフォームの代わりにエミュレートされたゲスト・プラットフォーム上で動作し得る。
【００４９】
工程２３０において、ホスト・プラットフォームは、ホスト・プラットフォームが対応する共有オブジェクトまたは動的ロード・ライブラリを有するか否かを判定する。該対応する共有オブジェクトまたは動的ロード・ライブラリは、該一組の共有オブジェクトまたは動的ロード・ライブラリの中からの特定の共有オブジェクトまたは動的ロード・ライブラリとの共通の外部インターフェースを実装する。該特定の共有オブジェクトまたは動的ロード・ライブラリは、ゲスト・システム・オブジェクトとの共通の外部インターフェースを実装する対応するホスト・システム・オブジェクト（たとえば、ホスト・システム・オブジェクト１２２Ｂまたは１２４Ｂ）を有するゲスト・システム・オブジェクト（たとえば、ゲスト・システム・オブジェクト１２２Ａまたは１２４Ａ）であり得る。それに代わり、該特定の共有オブジェクトまたは動的ロード・ライブラリは、そのような対応するホスト・システム・オブジェクトに関連付けられていない可能性のあるベンダ・オブジェクト（たとえば、ベンダ・オブジェクト１２６Ａまたは１２８Ａ）であり得る。ホスト・プラットフォームが該対応する共有オブジェクトまたは動的ロード・ライブラリを有する場合、プロセス２００は工程２４０へと進む。ホスト・プラットフォームが該対応する共有オブジェクトまたは動的ロード・ライブラリを有さない場合、プロセス２００は工程２５０へ進む。
【００５０】
該一組の共有オブジェクトまたは動的ロード・ライブラリは、一組のライブラリを有し得る。該一組のライブラリは、ホスト・プラットフォームについての該対応する共有オブジェクトまたは動的ロード・ライブラリに関連付けられている少なくとも１つのシステム・ライブラリと、ホスト・プラットフォームについての該対応する共有オブジェクトまたは動的ロード・ライブラリに関連付けられていない可能性のある少なくとも１つのベンダ・ライブラリとを有し得る。
【００５１】
工程２４０において、ホスト・プラットフォームは、ホスト・プラットフォームが該対応する共有オブジェクトまたは動的ロード・ライブラリを有すると判定すると、ホスト・プラットフォーム内でのソフトウェア・プログラムの実行のために、該特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに該対応する共有オブジェクトまたは動的ロード・ライブラリを使用する。ホスト・プラットフォームは、該特定の共有オブジェクトまたは動的ロード・ライブラリの代わりに該対応する共有オブジェクトまたは動的ロード・ライブラリに対してリンクするように、ソフトウェア・プログラム内のリンクを動的に（たとえば、コンパイル時よりもむしろ実行時）修正し得る。（たとえば、図１Ａおよび図１Ｂを参照して、リンク１１２Ｂ／１１２Ａは、ゲスト・システム・オブジェクト１２２Ａの代わりにホスト・システム・オブジェクト１２２Ｂとリンクするよう動的に修正され得る。）ホスト・プラットフォームは、該特定の共有オブジェクトまたは動的ロード・ライブラリに対する呼出が該対応する共有オブジェクトまたは動的ロード・ライブラリに対する呼出に変換されるよう、ブリッジを提供し得る。工程２４０の後、プロセス２００は終了する。
【００５２】
工程２５０において、ホスト・プラットフォームは、ホスト・プラットフォームが該対応する共有オブジェクトまたは動的ロード・ライブラリを有さないと判定すると、ホスト・プラットフォーム内でのソフトウェア・プログラムの実行のために、該特定の共有オブジェクトまたは動的ロード・ライブラリのバイナリ変換を実行する。バイナリ変換を実行することは、バイナリ変換されたオブジェクトを生成することを含み得る。該バイナリ変換されたオブジェクトの外部インターフェースは、ホスト・プラットフォームの他のバイナリ変換されたベンダ・オブジェクトまたはシステム・オブジェクトに対する機能呼出を含む。いくつかの場合、特定のゲスト・プラットフォーム内では実行可能であるがホスト・プラットフォームにおいては実行不可能であるオブジェクト内の任意の命令は、ホスト・プラットフォームにおいて実行可能である命令に変換され得る。たとえば、ホスト・プラットフォームが、レジスタ３２を横断する命令が提供されないことを必要としている（ｘ８６アーキテクチャのいくつかの実施形態にも当てはまる）６４レジスタ・アーキテクチャである場合、レジスタ３０〜３５にアクセスするための命令は、レジスタ３０〜３１にアクセスするための命令およびレジスタ３２〜３５にアクセスするための命令に修正され得る。コードの変換は、「時間通り」になされる。言い換えると、変換が生じ得るのは、コントロールがシステム・オブジェクトに関連付けられているコードからベンダ・オブジェクトに関連付けられているコードに渡されるときである（その逆も同様である）。言い換えると、変換が生じ得るのは、システム・オブジェクトの実行が終了してベンダ・オブジェクトの実行が開始するときである（その逆も同様である）。該「時間通り」の方法の１つの利点は、ホスト・プラットフォーム上で実行されないソフトウェア・プログラム内のコードが変換されずに、バイナリ変換に費やされる時間と処理リソースが低減される。工程２５０の後、プロセス２００は終了する。
【００５３】
いくつかの例において、ホスト・プラットフォームにおいて実行中であるソフトウェア・プログラムは、エミュレートされたゲスト・プラットフォーム（たとえば、エミュレートされたゲスト・ハードウェア・アーキテクチャ１０８Ｂ）の状態に対するまたはホスト・プラットフォーム（たとえば、ホスト・ハードウェア・アーキテクチャ１０７Ｂ）の状態に対するアクセスを必要とする呼出を受信し得る。ホスト・プラットフォームは、呼出に応じて、エミュレートされたゲスト・プラットフォームの状態を該ホスト・プラットフォームの状態に同期させ得る。たとえば、ホスト・プラットフォームは、エミュレートされたゲスト・プラットフォームのスタックまたはレジスタに対して加えた変化を、ホスト・プラットフォームのスタックまたはレジスタに対して伝播し得る。その逆も同様である。この同期の結果として、エミュレートされたゲスト・プラットフォームおよびホスト・プラットフォームの同期された状態に従って呼出が処理され得る。同期中、エミュレーション層は、エミュレートされたゲスト状態からレジスタおよびスタックまたはホスト・ハードウェアにパラメータを移動させることを含み得る、全ての必要な引数変換を実行し得る。その結果、ホスト・コードは、あたかも正常に呼び出されているかのように働き得る。
【００５４】
上述の通り、プロセス２００の工程２１０〜２５０は、一定の順番に従って且つ連続して実行される。しかしながら、工程２１０〜２５０は任意の順番で実行され得る。いくつかの例において、工程２１０〜２５０のうち２つ以上が並行して実行され得る。
【００５５】
図３は、本願の技術のいくつかの実施形態が実装される電子システムを概念的に示す。たとえば、１以上のゲスト・マシン１００Ａまたはホスト・マシン１００Ｂが、電子システム３００の配置を用いて実装されてもよい。電子システム３００は、コンピュータ（たとえば、モバイル・フォン、ＰＤＡ）であってもよいし、他の任意の電子デバイスであってもよい。このような電子システムは、様々な種類のコンピュータ可読媒体と、他の様々な種類のコンピュータ可読媒体に関するインターフェースとを含む。電子システム３００は、バス３０５、１または複数のプロセッサ３１０、システム・メモリ３１５、読出専用メモリ３２０、パーマネント・ストレージ・デバイス３２５、入力デバイス・インターフェース３３０、出力デバイス・インターフェース３３５、およびネットワーク・インターフェース３４０を含む。
【００５６】
バス３０５は、電子システム３００の多数の内部デバイスを通信可能に接続する全てのシステムと、周辺機器と、チップセットバスとを集合的に表す。たとえば、バス３０５は、１または複数のプロセッサ３１０を、読出専用メモリ３２０と、システム・メモリ３１５と、パーマネント・ストレージ・デバイス３２５とに通信可能に接続する。
【００５７】
１または複数のプロセッサ３１０は、本願の技術のプロセスを実行するために、これらの様々なメモリ・ユニットから実行対象の命令と処理対象のデータとを取り出す。１または複数のプロセッサは、異なる実施形態において、単一のプロセッサを含んでもよいし、マルチコア・プロセッサを含んでもよい。
【００５８】
読出専用メモリ（ＲＯＭ）３２０は、１または複数のプロセッサ３１０と電子システムの他のモジュールとによって必要とされる静的データと命令とを記憶する。一方、パーマネント・ストレージ・デバイス３２５は、読出／書込メモリデバイスである。このデバイスは、電子システム３００がオフであるときでも命令とデータとを記憶する不揮発性メモリ・ユニットである。本願の技術のいくつかの実施形態では、パーマネント・ストレージ・デバイス３２５としてマス・ストレージ・デバイス（たとえば、磁気または光ディスク、および、対応するディスク・ドライブ）が用いられる。
【００５９】
他の実施形態では、パーマネント・ストレージ・デバイス３２５としてリムーバブル・ストレージ・デバイス（たとえば、フロッピー（登録商標）・ディスク、フラッシュ・ドライブ、対応するディスク・ドライブ）が用いられる。システム・メモリ３１５は、パーマネント・ストレージ・デバイス３２５と同様に、読出／書込メモリデバイスである。しかしながら、システム・メモリ３１５は、ストレージ・デバイス３２５とは異なり、揮発性読出／書込メモリ（たとえば、ランダムアクセスメモリ）である。システム・メモリ３１５は、実行時においてプロセッサが必要とする命令とデータとのいくつかを記憶する。いくつかの実施形態においては、本願の技術のプロセスは、システム・メモリ３１５、パーマネント・ストレージ・デバイス３２５、または読出専用メモリ３２０に記憶される。たとえば、様々なメモリ・ユニットは、いくつかの実施形態に従って共有オブジェクト・レベルにおけるバイナリ変換に関する命令を含む。１または複数のプロセッサ３１０は、いくつかの実施形態のプロセスを実行するために、これらの様々なメモリ・ユニットから実行予定の命令と処理予定のデータとを取り出す。
【００６０】
さらにバス３０５は、入力デバイス・インターフェース３３０と出力デバイス・インターフェース３３５とに接続する。入力デバイス・インターフェース３３０によって、ユーザが情報を通信し、電子システムに対するコマンドを選択することが可能になる。入力デバイス・インターフェース３３０とともに用いられる入力デバイスは、たとえば、英数字キーボード、ポインティング・デバイス（「カーソル・コントロール・デバイス」とも称される）を含む。出力デバイス・インターフェース３３５によって、たとえば、電子システム３００によって生成された画像の表示が可能になる。出力デバイス・インターフェース３３５とともに用いられる出力デバイスは、たとえば、プリンタ、ディスプレイ・デバイス（ブラウン管（ＣＲＴ）または液晶ディスプレイ（ＬＣＤ）など）を含む。いくつかの実施形態は、入力および出力デバイスの両方として機能するタッチ・スクリーンなどのデバイスを含む。
【００６１】
最後に、図３に示すように、バス３０５はさらに電子システム３００を、ネットワーク・インターフェース３４０を介して図示しないネットワークに接続する。このように、コンピュータは、コンピュータのネットワーク（たとえば、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、イントラネット）の一部、または、複数のネットワークのうちの１つのネットワーク（たとえば、インターネット）であってもよい。任意の、または、すべての電子システム３００の要素が、本願の技術とともに用いられる。
【００６２】
上述のフィーチャおよびアプリケーションは、コンピュータ可読記憶媒体（コンピュータ可読媒体とも称される）上に記録される一組の命令として記述されるソフトウェアプロセスとして実装される。これらの命令が１以上のプロセッサ（たとえば、１以上のプロセッサ、プロセッサ・コア、他の処理ユニットを含み得る）によって実行されるとき、これらの命令によって、プロセッサは当該命令に示されるアクションを行う。コンピュータ可読媒体の例として、ＣＤ−ＲＯＭ、フラッシュ・ドライブ、ＲＡＭチップ、ハード・ドライブ、ＥＰＲＯＭが含まれるが、コンピュータ可読媒体の例はこれらに限定されない。コンピュータ可読媒体は、無線または有線接続で送出される搬送波および電子信号を含まない。
【００６３】
本明細書においては、用語「ソフトウェア」は、読出専用メモリ内のファームウェア、または、プロセッサによって処理を行うためのメモリに読み込まれる磁気ストレージまたはフラッシュ・ストレージ（たとえば、ソリッド・ステート・ドライブ）を含むことが意図されている。また、いくつかの実施形態では、本願の技術の複数のソフトウェア技術は、区別がなされる本願の技術のソフトウェア態様でありつつ、より大きなプログラムの下位区分として実装される。いくつかの実施形態では、複数のソフトウェア技術は別個のプログラムとして実装される。そして、本明細書に記載されるソフトウェア態様を同時に実装する別個のプログラムは、いずれも本願の技術の範囲内にある。いくつかの実施形態では、ソフトウェア・プログラムは、インストールされて１以上の電子システムを操作する際、該ソフトウェア・プログラムの操作を実行する１以上の特定の機械の実装を規定する。
【００６４】
コンピュータ・プログラム（プログラム、ソフトウェア、ソフトウェア・アプリケーション、スクリプト、またはコードとも称される）は、任意の形式のプログラミング言語（たとえば、コンパイル済みまたはインタプリット済み言語、宣言型言語または手続型言語）で書かれてもよく、どのような形式で配置されてもよい（たとえば、スタンドアロン・プログラム、モジュール、コンポーネント、サブルーチン、オブジェクト、コンピューティング環境においての使用が相応しい他のユニットを含む）。コンピュータ・プログラムは、ファイルシステム内のファイルに対応してもよいが、これに限定されない。プログラムは、他のプログラムやデータを保持するファイルの一部分（マークアップ言語ドキュメントに記憶される１以上のスクリプト）、対象プログラム専用の１つのファイル、または複数の調整ファイル（たとえば、１以上のモジュール、サブプログラム、コードを部分的に記憶するファイル）に記憶される。コンピュータ・プログラムは、１つのサイトに位置するか、もしくは複数のサイトに広がり、通信ネットワークによって相互接続される１つのコンピュータまたは複数のコンピュータ上で実行されるように配置される。
【００６５】
これら上述の機能は、デジタル電子回路、コンピュータソフトウェア、ファームウェア、またはハードウェアにより実装されることができる。上述の技術は、１以上のコンピュータ・プログラム製品を用いて実装される。プログラマブル・プロセッサおよびコンピュータは、モバイルデバイスに含まれてもよいし、モバイルデバイスとしてパッケージされてもよい。プロセスおよびロジックフローは、１以上のプログラマブル・プロセッサと１以上のプログラマブル論理回路とによって行われる。汎用および専用のデバイスと、ストレージ・デバイスとは、通信ネットワークを通じて相互接続される。
【００６６】
いくつかの実施形態は電子部品（たとえば、機械可読またはコンピュータ可読媒体（あるいは、コンピュータ可読記憶媒体、機械可読媒体、機械可読記憶媒体とも称される）におけるコンピュータ・プログラムの命令を記憶するマイクロプロセッサ、ストレージ、メモリ）を含む。このようなコンピュータ可読媒体のいくつかの例には、ＲＡＭ、ＲＯＭ、読出専用コンパクト・ディスク（ＣＤ−ＲＯＭ）、記録可能コンパクト・ディスク（ＣＤ−Ｒ）、書換可能コンパクト・ディスク（ＣＤ−ＲＷ）、読出専用デジタル多用途ディスク（たとえば、ＤＶＤ−ＲＯＭ、２層ＤＶＤ−ＲＯＭ）、種々の記録可能／書換可能ＤＶＤ（たとえば、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ）、フラッシュ・メモリ（たとえば、ＳＤカード、ミニＳＤカード、マイクロＳＤカード）、磁気またはソリッド・ステート・ハード・ドライブ、読出専用および記録可能Ｂｌｕ−ｒａｙ（登録商標）ディスク、超高密度光ディスク、他の任意の光または磁気メディア、フロッピー・ディスクが含まれる。コンピュータ可読媒体は、少なくとも１つのプロセッサにより実行可能であって、様々な操作を行うための複数組の命令を含むコンピュータ・プログラムを記憶できる。コンピュータ・プログラムまたはコンピュータ・コードの例には、たとえばコンパイラによって生成される機械コードと、インタプリタを用いてコンピュータ、電子部品、またはマイクロプロセッサによって実行される、より高レベルのコードを含むファイルと、が含まれる。
【００６７】
上記議論はソフトウェアを実行するマイクロプロセッサまたはマルチコア・プロセッサを指しているが、いくつかの実施形態は１以上の集積回路（たとえば、特定用途向け集積回路（ＡＳＩＣ）またはフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ））によって実行される。いくつかの実施形態では、このような集積回路は回路上自体に記憶される命令を実行する。
【００６８】
本明細書および本願の任意の請求項で用いられる通り、用語「コンピュータ」、「サーバ」、「プロセッサ」および「メモリ」はすべて、電子または他の技術分野のデバイスのことを指す。これらの用語から、人または人の集団は除外される。本明細書上では、用語「表示」または「表示する」は、電子デバイス上での表示を意味する。本明細書および本願の任意の請求項で用いられる通り、用語「コンピュータ可読媒体」「複数のコンピュータ可読媒体」は全体として、コンピュータによって読み込まれる形式の情報を記憶する有形の物理的な物体に限定される。これらの用語から、無線信号、有線ダウンロード信号、および他の任意の一時的な信号は除外される。
【００６９】
ユーザとの対話を提供するため、本明細書に記載される主題の実施形態は、ユーザに対して情報を表示するためのディスプレイ・デバイス（たとえば、ＣＲＴ（ブラウン管）またはＬＣＤ（液晶ディスプレイ）モニタ）と、キーボードと、ユーザがコンピュータに対して入力を提供できるポインティング・デバイス（たとえば、マウスまたはトラックボール）と、を有するコンピュータ上で実施可能である。他の種類のデバイスも同様に、ユーザとの対話を提供するために用いられる。たとえば、ユーザに対して提供されるフィードバックは、任意の形式の感覚フィードバック（たとえば、視覚フィードバック、聴覚フィードバック、触覚フィードバックなど）であってよいし、ユーザからの入力は任意の形式（音響、音声または触覚入力を含む）で受信されてよい。さらに、ユーザによって用いられるデバイスに対してドキュメントを送信し、該デバイスからドキュメントを受信することによって（たとえば、ユーザのクライアント・デバイス上でウェブブラウザに対して、該ウェブブラウザから受信したリクエストに応じてウェブページを送信することによって）、コンピュータはユーザとの対話が可能になる。
【００７０】
本明細書に記載される主題は、バックエンドコンポーネント（たとえば、データサーバ）、ミドルウェアコンポーネント（たとえば、アプリケーションサーバ）、フロントエンドコンポーネント（たとえば、ユーザの本明細書に記載される主題の実施形態との対話を可能にするグラフィカルユーザインターフェースまたはウェブブラウザを有するクライアントコンピュータ）、または、このようなバックエンド、ミドルウェア、およびフロントエンドコンポーネントのうち１以上の任意の組み合わせを含むコンピューティング・システムにおいて実施可能である。該システムのコンポーネントは、デジタルデータ通信の任意の形式または媒体（たとえば、通信ネットワーク）によって相互接続される。通信ネットワークの例には、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネットワーク（たとえば、インターネット）、および、ピアツーピアネットワーク（たとえば、アドホックピアツーピアネットワーク）が含まれる。
【００７１】
コンピューティング・システムには、クライアントおよびサーバが含まれる。クライアントおよびサーバは一般的には互いにリモートであり、典型的には通信ネットワークを介して対話する。クライアントおよびサーバの関係が生じるのは、各コンピュータ上で動作しており、互いにクライアント／サーバ関係を有するコンピュータ・プログラムを介してである。いくつかの開示される主題の態様においては、サーバがデータ（たとえば、ＨＴＭＬページ）をクライアント・デバイスに対して（たとえば、該クライアント・デバイスとの対話を行うユーザに対してデータを表示する目的、および、該ユーザからユーザ入力を受信する目的で）送信する。クライアント・デバイスにおいて生成されたデータ（たとえば、ユーザ対話の結果）は、サーバにおいてクライアント・デバイスから受信される。
【００７２】
開示されるプロセスにおける工程の任意の特定の順番または階層は例示的アプローチの実例である、と理解される。デザインの嗜好に基づいて、プロセスにおける工程の特定の順番または階層は再配置されてもよい、図示される全ての工程が実行されてもよい、と理解される。いくつかの工程は同時に実行されてもよい。たとえば、ある状況においては、マルチタスキングおよびパラレル・プロセッシングは効果的である。さらに、上述の様々なシステム・コンポーネントの分離については、そのような分離が必須であるとして理解されるべきではない。上述のプログラム・コンポーネントおよびシステムは一般的に１つのソフトウェア製品に統合される、または、複数のソフトウェア製品にパッケージされる、と理解されるべきである。
【００７３】
これらの態様に対する様々な修正形態は容易に識別され、本明細書に規定される包括的な原則は他の態様にも適用される。従って、本請求項は、本明細書に示される態様に限定される意図はなく、請求項の文言と一致する全ての範囲が付与され、単数である要素への参照は「１および１のみ」であることを（そのように特定的に記述されている場合を除いて）意味するのではなく、「１以上」を意味する。用語「いくつか」は、（特定的に記述する場合を除いて）１以上を指す。男性の指示代名詞（たとえば、「彼の」）は、女性および中性（たとえば、「彼女の」「その」）を含み、その逆も同様である。見出しおよび小見出しは、それらがある場合にしても、便宜上用いられているだけであって、本願の技術を限定するものではない。
【００７４】
たとえば「態様」という語句は、その態様が本願の技術に必要不可欠であること、その態様が本願の技術の全ての構成に適用されること、を暗示しない。態様に関する開示は、全ての構成または１以上の構成に適用される。たとえば態様という語句は、１以上の態様を指してもよいし、その逆も同様である。たとえば「構成」という語句は、そのような構成が本願の技術に必要不可欠であること、その態様が本願の技術の全ての構成に適用されること、を暗示しない。態様に関する開示は、全ての構成または１以上の構成に適用される。たとえば構成という語句は、１以上の構成を指してもよいし、その逆も同様である。
【図１Ａ】
0006559793.tif 000002
【図１Ｂ】
0006559793.tif 000003
【図２】
0006559793.tif 000004
【図３】
0006559793.tif 000005