(57)【特許請求の範囲】
【請求項１】
コンピューティング・マシンにおいてソフトウェア・アプリケーションを動作させるための方法であって、
前記コンピューティング・マシンにおいて委譲コンポーネントの能力を登録するステップであって、当該登録により、前記委譲コンポーネントに基づいて、あたかも、１つまたは複数のアクションの組が実行できるかのように見せるものであり、各アクションが、この能力の少なくとも１つの特性によって定義される、前記登録するステップと、
前記ソフトウェア・アプリケーションから、前記アクションのうちの１つを実行することへの要求を受け取るステップであって、前記要求が、前記能力の前記登録に従ってランタイム時に前記委譲コンポーネントにバインドされる、前記受け取るステップと、
前記委譲コンポーネントに基づいて実行できるかのように見せた前記アクションの前記実行を、前記コンピューティング・マシンの少なくとも１つのローカル・コンポーネントと、少なくとも１つのリモート・コンピューティング・マシンの少なくとも１つのリモート・コンポーネントのうちの、一方あるいはその両方に、前記少なくとも１つのローカル・コンポーネントの利用可能性に従って、委譲するステップであって、委譲される先の前記ローカル・コンポーネントに基づいて、前記アクションの少なくとも一部を実行することができるものであり、委譲される先の前記リモート・コンポーネントに基づいて、前記アクションの少なくとも一部を実行することができるものである、前記委譲するステップと
を含む方法。
【請求項２】
前記委譲コンポーネントに基づいて、前記ローカル・コンポーネントまたは前記リモート・コンポーネントから、前記アクションの前記実行の結果を受け取るステップと、
前記委譲コンポーネントに基づいて、前記結果を前記ソフトウェア・アプリケーションに返すステップと
を含む、請求項１に記載の方法。
【請求項３】
前記アクションの前記実行を前記委譲するステップは、ローカル・コンポーネントが前記コンピューティング・マシンにおいて全く存在しないとき、
前記アクションの前記実行を前記リモート・コンポーネントに委譲するステップ
を含む、請求項１または２に記載の方法。
【請求項４】
前記アクションの前記実行を前記委譲するステップは、前記ローカル・コンポーネントが前記コンピューティング・マシンにおいて存在するとき、
前記コンピューティング・マシンの少なくとも１つのメトリックを測定するステップと、
前記アクションの前記実行を、前記少なくとも１つのメトリックに従って、前記ローカル・コンポーネントまたは前記リモート・コンポーネントに委譲するステップと
を含む、請求項１または３に記載の方法。
【請求項５】
前記アクションは、サービスのバックグランドでの実行を含む、請求項１ないし４のいずれかに記載の方法。
【請求項６】
前記アクションは、物理量の感知を含む、請求項５に記載の方法。
【請求項７】
前記アクションの前記実行を前記委譲するステップは、
前記物理量の前記感知を第１のリモート・コンピューティング・マシンの第１のリモート・コンポーネントに委譲するステップと、
前記第１のリモート・コンポーネントから受け取った前記物理量の測定値に基づく値をパスすることによって、前記アクションの前記実行を、前記ローカル・コンポーネントに、または第２のリモート・コンピューティング・マシンの第２のリモート・コンポーネントに、委譲するステップと
を含む、請求項６に記載の方法。
【請求項８】
前記コンピューティング・マシンは、モバイル機器であり、前記第１のリモート・コンピューティング・マシンは、前記モバイル機器の付近の別のモバイル機器であり、前記第２のリモート・コンピューティング・マシンは、ネットワーク・サービスによって提供される、請求項７に記載の方法。
【請求項９】
前記アクションの前記実行を前記委譲するステップは、
前記アクションの少なくとも一部を実行する、前記コンピューティング・マシンの付近の各リモート・コンピューティング・マシンの利用可能性を発見するステップ
を含む、請求項１ないし８のいずれかに記載の方法。
【請求項１０】
前記アクションの前記実行を前記委譲するステップは、
前記アクションの前記実行を、前記コンピューティング・マシンをエミュレートする仮想コンピューティング・マシンの前記リモート・コンポーネントに委譲するステップ
を含む、請求項１ないし９のいずれかに記載の方法。
【請求項１１】
前記アクションの前記実行を前記委譲するステップは、
前記リモート・コンピューティング・マシンに、前記ローカル・コンポーネントのクローンをこのローカル・コンポーネントのイメージから作成させるステップ
を含む、請求項１ないし１０のいずれかに記載の方法。
【請求項１２】
委譲コンポーネントの能力を前記登録するステップは、
前記アクションの１つごとのインテント・フィルタを含むマニフェスト・ファイルを前記委譲コンポーネントに与えるステップであって、前記インテント・フィルタにより、前記委譲コンポーネントに基づいて、あたかも、前記アクションが実行できるかのようにみせるものである、前記与えるステップ
を含む、請求項１ないし１１のいずれかに記載の方法。
【請求項１３】
前記コンピューティング・マシンに、請求項１ないし１２のいずれかに記載の方法のステップを行わせるためのコンピュータ・プログラム。
【請求項１４】
請求項１ないし１２のいずれかに記載の方法を行うための手段を備えるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理分野に関する。より詳細には、本開示は、ソフトウェア・アプリケーションの動作に関する。
【背景技術】
【０００２】
ソフトウェア・アプリケーションは、有用なタスクであれば何でも行うようにコンピューティング・マシンにおいて定期的に実行される。通常の例は、モバイルアプリ（または単にアプリ）であり、これは、モバイル機器（例えば、スマートフォン、およびタブレット）において動作するように特に設計されているソフトウェア・アプリケーションである。アプリは、それらの数および種類の爆発的な増加を伴って、近年、ますますポピュラーになってきている。
【０００３】
具体的には、アプリは、（例えば、位置特定、環境、拡張現実のサービスを実施する）広範なリッチ機能を提供する。これには、モバイル機器の（ハードウェア、またはソフトウェア、あるいはその両方の）リソースの要求の増加が伴う。例えば、アプリは、高い電力消費を伴うことがあり、その上、アプリには、対応する物理量を測定する（気圧を測定するための気圧計などの）種々のセンサが必要になることもある。
【０００４】
しかしながら、モバイル機器の能力は、アプリの進歩についていくことができない。そのため、一部のアプリは、特定のモバイル機器において、その固有的限界か、一時的限界かのいずれかの理由で動作しないことがある。具体的には、モバイル機器は、固有的に、一部のアプリを動作させることができないことがあり、それは、（例えば、モバイル機器が、感度レベルの低いセンサを有している、または古いモデルであるという理由で）この一部のアプリに必要なリソースが欠けているときであり、通常の例は、アプリが、モバイル機器において存在していないセンサを必要とするときである。その上、モバイル機器は、一時的に、一部のアプリを動作させることができないことがあり、それは、この一部のアプリに必要なリソースが当面、利用できないときであり、通常の例は、アプリが、高い電力消費を必要とし、バッテリ・レベルが低いときである。
【０００５】
そのため、モバイル機器の固有的限界の場合、これには、モデルがより新しく、よりパワフルになるのにつれて、対応する費用を伴うモバイル機器の変更が必要になるが、モバイル機器の変更は、（例えば、予算制約の理由で）実現可能でない場合も、または（例えば、所要のリソースの必要性が、ほんのまれにしかないとき）適切でない場合もある。代わりに、一時的限界の場合には、これには、所要のリソースが利用可能に戻る（例えば、バッテリが再充電される）まで待機が必要になるが、対応する遅延は、多くの実際の状況では（例えば、１つの情報がすぐに必要なとき）、耐え難い場合がある。
【０００６】
代替として、米国特許出願公開第２０１２／０２６５８８４号には、モバイル機器および１つまたは複数のクラウド・プロバイダに対する／の間のコードの実行割当ての費用を割り出すための技法が提案されている。実行割当て費用は、モバイル機器およびクラウド・プロバイダに関する実行割当てデータに基づいて査定（または割出し）可能であり、例えば、モバイル機器の電力消費は、アプリケーション・プログラムのウェブレットをどのように割り当てるべきであるかを割り出す際の因子として使用され得る。
【０００７】
具体的には、「Towards an elastic applicationmodel for augmenting the computing capabilities of mobile devices with cloudcomputing, Xinwen Zhang, Anugeetha Kunjithapatham, Sangoh Jeong, Simon Gibbs,Journal Mobile Networks and Applications archive Volume 16 Issue 3, June 2011Pages 270-284」には、リソースに制約のあるモバイル機器の能力を拡張するクラウド・リソースの使用を可能にする柔軟なアプリケーション・モデルが記載されている。このモデルは、（その実行場所がトランスペアレントな）ウェブレットと呼ばれる複数のコンポーネント内への単一のアプリケーションのパーティション、およびウェブレット実行コンフィギュレーションの動的な適合を含む。
【０００８】
その上、「Clonecloud: elastic execution betweenmobile device and cloud, Yung-Gon Chun, Sunghwan Ihm, Petros Maniatis, MayurNaik, Ashwin Patti, EuroSys '11 Proceedings of the sixth conference on Computersystems, Pages 301-314」には、精密な粒度で自動的にアプリケーションをパーティション分割するとともに、ターゲットのコンピュータ計算および通信環境についての実行時間およびエネルギー使用を最適化する静的解析と動的プロファイリングとの組合せが提案されている。ランタイム時に、アプリケーション・パーティション分割は、選択された時点でモバイル機器からのスレッドをクラウド内のクローンに移動させ、そこでパーティションの残りについて実行し、移動したスレッドをモバイル機器に戻して再統合することによって達成される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】米国特許出願公開第２０１２／０２６５８８４号
【非特許文献】
【００１０】
【非特許文献１】Towards an elastic applicationmodel for augmenting the computing capabilities of mobile devices with cloudcomputing, Xinwen Zhang, Anugeetha Kunjithapatham, Sangoh Jeong, Simon Gibbs,Journal Mobile Networks and Applications archive Volume 16 Issue 3, June 2011Pages 270-284
【非特許文献２】Clonecloud: elastic executionbetween mobile device and cloud, Yung-Gon Chun, Sunghwan Ihm, Petros Maniatis,Mayur Naik, Ashwin Patti, EuroSys '11 Proceedings of the sixth conference onComputer systems, Pages 301-314
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、これには、プログラミング・モデル、またはアプリがその中で動作する環境、あるいはその両方に対するかなりの変更が必要になる。
【課題を解決するための手段】
【００１２】
本開示の簡略化した概要が、その基本的な理解を与えるために本明細書に提示されるが、この概要の唯一の目的は、その以下のより詳細な説明に対する前置きとして簡略化された形態で本開示のいくつかの概念を紹介することであり、その主要な要素を特定するものとして解釈すべきでも、またはその範囲を描写するものとして解釈すべきでもない。
【００１３】
概括的に言えば、本開示は、動的にアクションの実行を委譲するアイディアに基づいている。
【００１４】
具体的には、本開示の１つまたは複数の態様は、（あらゆる他の態様に準用する特定の態様に関して与えられる何らかの有利な特徴とともに）参照によって原文通りに本明細書に組み込まれている請求項すべての文言により、独立請求項において示され、その有利な特徴は、従属請求項において示される。
【００１５】
より具体的には、態様が、コンピューティング・マシンにおいてソフトウェア・アプリケーションを動作させるための方法を提供し、ここで、アクションの実行は、ランタイム時に委譲コンポーネントにバインドされる対応する要求に応答して、少なくとも１つのローカル・コンポーネントに、または前記少なくとも１つのローカル・コンポーネントの利用可能性に従って（アクションの少なくとも一部を実行することができる）少なくとも１つのリモート・コンポーネントに、あるいはその両方に、委譲コンポーネントによって委譲される。
【００１６】
さらなる態様が、対応するコンピュータ・プログラム（および対応するコンピュータ・プログラム製品）を提供する。
【００１７】
さらなる態様が、対応するシステムを提供する。
【００１８】
本開示の解決策、ならびにそのさらなる特徴および利点は、添付の図面とともに読まれることになる、非制限的な指示として純粋に与えられる以下の詳細な説明に関して最良に理解されよう（ただし、簡単にするために、対応する要素は、等しいまたは類似の参照記号により示され、それらの説明は繰り返されず、各実体の名前は、全体的に、そのタイプとその属性（値、コンテンツ、表現など）をともに示すために使用される。）
【図面の簡単な説明】
【００１９】
【図１】本開示の実施形態による解決策がこの中で適用可能なコンピューティング・マシンのブロック図である。
【図２】本開示の実施形態による解決策の例示的な適用例の図的表現である。
【図３】本開示の実施形態の例示的なアプリケーション・シナリオを実施するのに使用可能なメイン・ソフトウェア・ユニットの役割を表すコラボレーション図である。
【図４】本開示の実施形態の別の例示的なアプリケーション・シナリオを実施するのに使用可能なメイン・ソフトウェア・ユニットの役割を表すコラボレーション図である。
【発明を実施するための形態】
【００２０】
図１を具体的に参照すると、本開示の実施形態による解決策がこの中で適用可能なコンピューティング・マシン１００のブロック図が示されている。
【００２１】
具体的には、コンピューティング・マシン１００は、モバイル機器、例えば、スマートフォン、またはタブレットである。モバイル機器１００は、バス構造１０５と並列に接続されているいくつかのユニットを備える。詳細には、マイクロプロセッサ（μＰ）１１０（複数可）が、モバイル機器１００の動作を制御し、ＲＡＭ１１５が、マイクロプロセッサ１１０によって作業メモリとして使用され、ＲＯＭ１２０が、モバイル機器１００のブートストラップのための基本コードを記憶する。モバイル機器１００はまた、マス・メモリ１２５も備え、このマス・メモリ１２５は、内部フラッシュ・メモリおよび（ＳＤタイプなどの）可能な外部フラッシュ・メモリ・カードを含む。その上、モバイル機器１００は、入力／出力（Ｉ／Ｏ）ユニット１３０、例えば、モバイル電話トランシーバ（ＴＸ／ＲＸ）、Ｗｉ−Ｆｉタイプのワイヤレス・ネットワーク・インターフェース・カード（ＷＮＩＣ：Wireless Network Interface Card）、タッチ画面、コマンド・ボタン、ラウドスピーカ、およびマイクロホンを有する。
【００２２】
次に、図２を参照すると、本開示の実施形態による解決策の例示的な適用例を図的に表現したものを示している。
【００２３】
一般的なモバイル機器は、１つまたは複数の（モバイル）アプリを動作させる。各アプリには、１つまたは複数のアクション（例えば、対応するセンサを用いて物理量を測定すること）の実行が必要である。各アクションは、ランタイム時にそれを実行することになる、実際のコンポーネントへの後の、または動的なアクションのバインディングについて、その１つまたは複数の特性（例えば、それの名前）を用いて定義される。こうして、アプリは、（必要なときにのみ、それらを実行するのに最も適しているコンポーネントに解決されるアクションを）他のどのアプリがそれらに提供することになるのかを正確に知らなくても他のアプリの機能を使用することができる。
【００２４】
本開示の実施形態による解決策では、モバイル機器はまた、委譲コンポーネントを備え、委譲コンポーネントは、アプリの上述したアクションから成る（対応する特性によって定義される）１つまたは複数のアクションの組を実行することができるようにそれ自体を登録する。
【００２５】
そのため、アプリがアクションを実行する必要があるとき、対応する要求が、（その登録に従ってランタイム時にその対応する要求にバインドされる）委譲コンポーネントによって受け取られる。
【００２６】
委譲コンポーネントは、（アクション、もしくは少なくともその一部を実行することができる）モバイル機器のローカル・コンポーネント（複数可）、または例えば、別のモバイル機器もしくはクラウド環境における（アクション、もしくは少なくともその一部を実行することができる）リモート・コンピューティング・マシン（複数可）のリモート・コンポーネント（複数可）、あるいはその両方にアクションの実行を委譲する。アクションの実行をどのように委譲するかについての決定は、ローカル・コンポーネントの利用可能性に基づく。例えば、アクションは、モバイル機器が、対応するセンサを有するときはローカルに実行され、逆に、別のモバイル機器においては全体的にリモートに、または（対応するセンサを共有する）別のモバイル機器においては部分的にリモートに、かつ（共有センサによって測定されている値を利用する）クラウド環境においてはリモートに実行される。
【００２７】
こうして、アプリ（またはより概括的には、任意のソフトウェア・アプリケーション）は、モバイル機器（またはより概括的には、任意のコンピューティング・マシン）が、（その固有的限界か、一時的限界かのいずれかの理由で）アプリをサポートすることができなくなるときですら動作することができ、具体的には、これは、ソフトウェア・アプリケーションによって求められるリソースが、コンピューティング・マシンにおいて不足しているか（例えば、コンピューティング・マシンが、感度レベルの低いセンサを有している、または古いモデルであるという理由）、あるいは当面、利用できないか（例えば、コンピューティング・マシンのバッテリ・レベルが低いという理由）のいずれかのときに起こり得る。
【００２８】
そのため、コンピューティング・マシンの固有的限界の場合には、（モデルがより新しく、よりパワフルになるにつれて）、対応する費用削減とともにコンピューティング・マシンの変更の回避が可能であり、その場合、ソフトウェア・アプリケーションは、コンピューティング・マシンの変更が実現可能でない、または適切でないときですら（利用可能なコンピューティング・マシンにおいて）動作することができる。代わりに、コンピューティング・マシンの一時的限界の場合には、ソフトウェア・アプリケーションは、（所要のリソースが利用可能に戻るまで、待機の必要なく）実際に必要なときに動作することができる。
【００２９】
次に、図３を参照すると、本開示の実施形態の例示的なアプリケーション・シナリオを実施するのに使用可能なメイン・ソフトウェア・ユニットの役割を表すコラボレーション図を示している。
【００３０】
具体的には、ソフトウェア・ユニットは、典型的には、プログラムが動作しているときに、モバイル機器のマス・メモリに記憶され、作業メモリ内に（少なくとも部分的に）ロードされる。プログラムは、最初、例えば、リムーバブル・ストレージ機器から、または（Ｉｎｔｅｒｎｅｔなどの）ネットワークからマス・メモリ上にインストールされる。この点において、各ソフトウェア・ユニットは、指定された論理機能を実施するための１つまたは複数の実行可能な命令を含む、コード・モジュール、コード・セグメント、またはコードの一部分を表すことができる。具体的には、図は、（各メッセージが、符号「Ｏ」によって始まる連続番号により示される対応する動作を表す、一連の交換メッセージを用いて）ソフトウェア・ユニットの静的な構造とソフトウェア・ユニットの動的な振舞いとをともに説明している。
【００３１】
モバイル機器１００は、それのハードウェアにおいて直接、動作する（モバイル）オペレーティング・システム３０５を有し、このオペレーティング・システム３０５は、任意の他のプログラムが動作することが可能なその最上位におけるソフトウェア・プラットフォームを定義し（例えば、Ｇｏｏｇｌｅ  Ｉｎｃ．によるＡｎｄｒｏｉｄ（商標））、オペレーティング・システム３０５は、可能な触覚フィードバックによるジェスチャ（すなわち、現実の行動に対応する入力）を使用する直接操作に基づいたタッチ画面用に主に設計されているユーザ・インターフェースを有する。
【００３２】
種々のアプリが、モバイル機器１００にインストール可能であり、（例えば、Ｊａｖａ（Ｒ）プログラミング言語で書かれる）各アプリは、サンドボックス（すなわち、モバイル機器１００の厳重に管理されたリソースへのアクセスを提供する隔離された環境）で動作するように意図される。アプリは、各コンポーネントが、特定のタスクを行うように個々にアクティブ化可能な１つまたは複数のコンポーネントを含む。各コンポーネントは、（ユーザ・インターフェースの単一の画面を表示する）アクティビティ、（バックグランドで動作する）サービス、（ブロードキャストされた告知に応答する）ブロードキャスト・レシーバ、または（データ・ストレージを管理する）コンテンツ・プロバイダとすることができる。アプリはまた、マニフェスト・ファイルを含む。マニフェスト・ファイルは、オペレーティング・システム３０５に可視であるアプリのコンポーネントを宣言し、各コンポーネントは、それの能力を示す１つまたは複数のインテント・フィルタ（すなわち、各インテント・フィルタは、コンポーネントが行うことのできるタスクを示す）により宣言され得る。マニフェスト・ファイルは、各フィーチャが、アプリによって使用される（ハードウェア、またはソフトウェア、あるいはその両方の）リソース（例えば、オペレーティング・システム・レベル、ＶｏＩＰ、センサ、Ｗｉ−Ｆｉ、ブルートゥース、カメラ、ＧＰＳ、ＵＳＢ）を示す、可能なフィーチャを宣言し、各フィーチャは、そのフィーチャが、それなしでは動作することができないアプリに必要とされているかどうか、またはそのフィーチャが、それなしでも動作することができるアプリに単に好まれているだけかどうかを示す属性を有することができる。フィーチャは、情報提供にすぎず、その場合、オペレーティング・システム３０５は、アプリがインストールされるとき、モバイル機器１００におけるフィーチャの利用可能性を検証しない（しかし、フィーチャは、例えば、それを動作させることができないことになるモバイル機器へのアプリのダウンロードを防ぐために、他のアプリケーションによって使用されることもある）。マニフェスト・ファイルはまた、（アプリのインストール時に、モバイル機器１００のユーザによって許可されるべき）アプリのサンドボックスの外部にあるリソースにアクセスする任意の許可を宣言する。
【００３３】
各コンテンツ・プロバイダは、対応する要求をオペレーティング・システム３０５のコンテンツ・リゾルバに提示することによってアクティブ化される。アクティビティ、サービス、およびブロードキャスト・レシーバはそれぞれ、（インテントと呼ばれる）対応するメッセージをオペレーティング・システム３０５に提示することによってアクティブ化される。インテントは、明示的か、暗黙的かのいずれかとすることができる。明示的インテントは、（同じアプリで、または異なるアプリで）アクティブ化すべき特定のコンポーネントを示し、この特定のコンポーネントは、この場合、静的に（または、先に）この明示的インテントにバインドされる。代わりに、暗黙的インテントは、（アクティビティおよびサービスについて）実行すべきアクション、または（ブロードキャスト・レシーバについて）告知されるアクションを単に示すだけであり、それにより、アクションをそれぞれ実行する、または受け取る実際のコンポーネントは、ランタイム時に動的に（または、後に）この暗黙的インテントにバインドされる。アクションは、１つまたは複数のその特性を用いて抽象的レベルで（暗黙的）インテントで定義される。具体的には、インテントは、（対応する定数を用いて）アクションのタイプを定義し、インテントはまた、作用すべきデータ（例えば、それの場所およびタイプ）、アクティブ化されるべきであるコンポーネントの１つまたは複数のカテゴリ、アクティブ化されたコンポーネントに引き渡すべき追加の情報、およびアクティブ化されたコンポーネントをどのように管理するかを命令するフラグも定義することができる。オペレーティング・システム３０５は、それのアクションを実行する、または受け取ることができるコンポーネントを見つけることによって、ランタイム時に各インテントを解決する。これを目的として、オペレーティング・システム３０５は、インテントで定義されるアクションを、インストールされたアプリすべてのインテント・フィルタと比較する。同様に、各インテント・フィルタは、コンポーネントが抽象的レベルで（アクティビティおよびサービスについて）実行する、または（ブロードキャスト・レシーバについて）受け取ることのできるアクションを示し、具体的には、インテント・フィルタは、１つまたは複数のアクション・タイプを定義し、また、作用すべきデータ、およびその１つまたは複数のカテゴリも定義することができる。各インテント・フィルタは、インテントに対してテストされ、インテント・フィルタは、それのアクション・タイプのうちの１つにインテントのアクション・タイプが一致するとき、それのカテゴリのうちの１つにインテントのあらゆるカテゴリが一致するとき、およびそれのデータにインテントのデータが一致するとき、テストをパスすると見なされる。次いで、インテント・フィルタがテストをパスしたコンポーネントは、オペレーティング・システム３０５によってアクティブ化され（一方、コンポーネントが全く見つけられなかったときは、例外が引き起こされる）、複数のコンポーネントがテストをパスしたときには、それらのうちの１つが、ユーザによる手動で、または自動的に（例えば、優先度に従って、もしくはデフォルトによって）のいずれかで選択される。
【００３４】
議論されている例では、非常に単純なアプリ３１０が、モバイル機器１００にインストールされる。アプリ３１０は、（アプリ３１０に含まれているか、含まれていないかのいずれかの）サービスＳ０を利用するアクティビティＡ０と、（破線の対応する矢印によって示されるようにランタイム時に暗黙的にバインドされる）別のアクティビティＡ１とを含む。アプリ３１０は、とりわけ、各インテント・フィルタを有するアクティビティＡ０、Ａ１、および場合によりサービスＳ０を定義するマニフェスト・ファイル３１５を有し、具体的には、アクティビティＡ０は、２つのインテント・フィルタＩＦＡ０ａ、ＩＦＡ０ｂを有し、（存在しているならば）サービスＳ０は、（任意の対応する所要のフィーチャの指示を伴う）インテント・フィルタＩＦＳ０を有する。例えば、アプリ３１０は、短期天気予報を実施し、アクティビティＡ０は、（それのインテント・フィルタＩＦＡ０ａおよびＩＦＡ０ｂに対応する２つの異なるレイアウトを含む）アプリ３１０の開始画面を提供し、サービスＳ０は、（対応するアクションおよび気圧計の必要性を示すそれのインテント・フィルタＩＦＳ０により）地域の気圧を測定し、経時的なそれの変化に従って天気予報を確定し、アクティビティＡ１は、天気予報を表示する。
【００３５】
本開示の実施形態による解決策では、委譲アプリ３２０もまた、モバイル機器１００にインストールされる。委譲アプリ３２０は、プロキシ・サービスＳｐを含み、このプロキシ・サービスＳｐは、（モバイル機器１００にインストールされるアプリの）１つまたは複数のサービスのアクションを実行することができるようにそれ自体を登録し、具体的には、議論されている例では、プロキシ・サービスＳｐは、サービスＳ０の同じアクションを実行することができるようにそれ自体を登録する。プロキシ・サービスＳｐは、評価サービスＳｅを利用し、この評価サービスＳｅは、プロキシ・サービスＳｐに要求される各アクションの委譲を評価する。評価サービスＳｅは、測定サービスＳｍを利用し、この測定サービスＳｍは、モバイル機器１００の１つまたは複数のメトリック（例えば、バッテリ・レベル、利用可能なワイヤレス接続、対応する帯域幅）を測定する。評価サービスＳｅもやはり、発見サービスＳｄを利用し、この発見サービスＳｄは、プロキシ・サービスＳｐに要求されるアクションを実行するために利用可能な他のコンピューティング・マシン（例えば、本明細書では以降、リモート・モバイル機器と呼ばれる他のモバイル機器）を発見する。発見サービスＳｄはまた、他のモバイル機器からの対応する要求に応答し、これを目的として、発見サービスＳｄも同様に、測定サービスＳｍを利用する。委譲アプリ３２０は、とりわけ、各インテント・フィルタを有するサービスＳｐ、Ｓｅ、Ｓｍ、Ｓｄを定義するマニフェスト・ファイル３２５を有し、具体的には、プロキシ・サービスＳｐは、サービスＳ０と同じインテント・フィルタＩＦＳ０を有し、評価サービスＳｅは、アクションの委譲を評価するためのインテント・フィルタＩＦｅを有し、測定サービスＳｍは、モバイル機器１００のメトリックを測定するためのインテント・フィルタＩＦｍを有し、発見サービスＳｄは、リモート・モバイル機器の利用可能性を発見するためのインテント・フィルタＩＦｄａと、対応する要求に応答するためのインテント・フィルタＩＦｄｒとを有する。
【００３６】
アプリ３１０および委譲アプリ３２０の（それらのマニフェスト・ファイル３１５および３２５にそれぞれ示される）インテント・フィルタは、オペレーティング・システム３０５に登録される。この動作は、各アプリ３１０、３２０がモバイル機器１００にインストールされるとき、およびそのマニフェスト・ファイル３１５、３２５が更新されるときはいつでも行われ、具体的には、委譲アプリ３２０を参照すると、マニフェスト・ファイル３２５は、モバイル機器の技術的な進歩についていくその新規バージョンをダウンロードすることによって、またはインストール済み／削除済みのアプリのサービスについてインテント・フィルタを追加／除外することによって、更新可能である（０１．Ｒｅｇｉｓｔｅｒ（登録する））。
【００３７】
アプリ３１０が動作しているときはいつでも、アプリ３１０のアクティビティＡ０は、それがアクティブ化される必要があり次第、サービスＳ０の（ａｐｐインテントおよびａｐｐアクションとそれぞれ呼ばれる）アクションについてのインテントをオペレーティング・システム３０５に提示する。具体的には、議論されている例では、ａｐｐインテントは、地域の気圧を監視し、経時的なそれの変化に従って天気予報を確定するアクションと、これを目的とする気圧計の必要性を示す（Ｏ２．Ｉｎｔｅｎｔ（インテントする））。オペレーティング・システム３０５は、ａｐｐアクションを実行することができるコンポーネントを見つけることによって、ａｐｐインテントを解決することを試みる。この状況においては、オペレーティング・システム３０５は常に、プロキシ・サービスＳｐが（同じａｐｐアクションのインテント・フィルタに登録されるので）ａｐｐインテントに対するテストをパスすることを見つける。その上、オペレーティング・システム３０５はまた、ａｐｐインテントに対するテストをパスするモバイル機器１００上のローカル・サービスも見つけることができる（すなわち、議論されている例では、そのとき、サービスＳ０は、モバイル機器１００において存在している）が、プロキシ・サービスＳｐのインテント・フィルタは、いずれの場合でもプロキシ・サービスＳｐをオペレーティング・システム３０５に選択させるようにデフォルトとして登録される。そのため、ａｐｐインテントは常に、プロキシ・サービスＳｐに動的にバインドされ、それにより、プロキシ・サービスＳｐは、その中に示されるアクションを実行するようにアクティブ化される（Ｏ３．Ｂｉｎｄ（バインドする））。
【００３８】
それに応答して、プロキシ・サービスＳｐは、評価サービスＳｅによるａｐｐインテントの評価のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム３０５によって評価サービスＳｅに直接、バインドされる（０４．Ｅｖａｌｕａｔｅ（評価する））。評価サービスＳｅは、ａｐｐアクションが、（例えば、図示されていない対応するコンテンツ・プロバイダから読み出される）１つまたは複数のポリシーの組に従って、ローカルに実行されなくてはならないのか、またはリモートに実行されなくてはならないのかを決定する。これを目的として、種々のポリシーが実施可能である。まず初めに、評価サービスＳｅは、ａｐｐアクションを実行することができるローカル・サービスが、モバイル機器１００において存在しているかどうかを判断し、これを目的として、評価サービスＳｅは、ａｐｐインテントに対するテストをパスする何らかのローカル・サービス（すなわち、議論されている例では、サービスＳ０）が存在するかどうか、およびモバイル機器１００がａｐｐインテントによって要求されるフィーチャ（すなわち、議論されている例では、気圧計）をすべて有しているかどうかを検証する。所要のフィーチャによるローカル・サービスが何も見つからない場合、ａｐｐアクションの実行は常に、リモートに委譲される。逆に、ａｐｐアクションの実行をローカルに委譲するか、またはリモートに委譲するかの決定は、モバイル機器１００の１つまたは複数の選択されたメトリックに基づくことができる。この場合、評価サービスＳｅは、測定サービスＳｍによるメトリックの測定のために明示的インテントを提示し、この明示的インテントは、オペレーティング・システム３０５によって測定サービスＳｍに直接、バインドされる。測定すべきメトリックは、（例えば、図示されていない対応するコンテンツ・プロバイダから読み出される）測定サービスＳｍのレベルにおいて定義され得、対応するインテントにおける評価サービスＳｅによってパスされ得、またはハードコード化され得る。測定サービスＳｍは、メトリックを測定し、その指示を評価サービスＳｅに返す（Ｏ５．Ｍｅａｓｕｒｅ（測定する））。次いで、評価サービスＳｅは、種々のポリシーに従って、ａｐｐアクションの実行をローカルに委譲すること、またはリモートに委譲することに決定することができる。例えば、ａｐｐアクションの実行は、バッテリ・レベルが閾値を下回るときは、リモートに委譲され、一方、任意の利用可能なワイヤレス接続の帯域幅が閾値を下回るときは、ローカルに委譲される。
【００３９】
評価サービスＳｅがａｐｐアクションの実行をリモートに委譲することに決定するとき、評価サービスＳｅは、任意のリモート・モバイル機器の対応する利用可能性を発見するための明示的インテントを発見サービスＳｄに提示し、この明示的インテントは、オペレーティング・システム３０５によって発見サービスＳｄに直接、バインドされる（０６．Ｄｉｓｃｏｖｅｒ（発見する））。それに応答して、発見サービスＳｄは、（例えば、同じＷｉ−Ｆｉスポットまたは同じ通信セルに接続される）モバイル機器の付近で、図には１つしか示されていない任意のリモート・モバイル機器に対してａｐｐアクションを実行する利用可能性を要求するためのインテントをブロードキャストする。プライム表記法１００’により区別される各リモート・モバイル機器は、オペレーティング・システム３０５’、および（３２０’により示される）類似の委譲アプリを有し、この類似の委譲アプリは、同様に、（Ｓｐ’により示される）プロキシ・サービス、（Ｓｅ’により示される）評価サービス、（Ｓｍ’により示される）測定サービス、および（Ｓｄ’により示される）発見サービスを含み、委譲アプリ３２０’は、（そのアプリのアクションについて、図示されていない異なるインテント・フィルタを含む）類似のマニフェスト・ファイル３２５’を有する。ａｐｐアクションを実行する利用可能性を要求するためのインテントは、発見サービスＳｄ’に対して明示的であり、それにより、このインテントは、オペレーティング・システム３０５’によって発見サービスＳｄ’に直接、バインドされる（Ｏ７．Ｒｅｑｕｅｓｔ（要求する））。
【００４０】
発見サービスＳｄ’は、リモート・モバイル機器１００’が（例えば、図示されていない対応するコンテンツ・プロバイダから読み出される）１つまたは複数のポリシーの組に従って、ａｐｐアクションを実行するために利用可能であるかどうかを決定する。これを目的として、種々のポリシーが実施可能である。まず初めに、発見サービスＳｄ’は、リモート・モバイル機器１００’がａｐｐインテントによって要求されるフィーチャ（すなわち、議論されている例では、気圧計）をすべて有するかどうかを判断する。所要のフィーチャが見つからない場合、リモート・モバイル機器１００’は常に、利用できなくされる。逆に、リモート・モバイル機器１００’の利用可能性についての決定は、その１つまたは複数の選択されたメトリックに基づくことができる。この場合、発見サービスＳｄ’は、測定サービスＳｍ’によるメトリックの測定のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム３０５’によって測定サービスＳｍ’に直接、バインドされる（上記のように、メトリックは、発見サービスＳｄ’のレベルにおいて定義され、対応するインテントにおける評価サービスＳｅ’によってパスされ、またはハードコード化される）。測定サービスＳｍ’は、メトリックを測定し、その指示を発見サービスＳｄ’に返す（Ｏ８．Ｍｅａｓｕｒｅ（測定する））。次いで、発見サービスＳｄ’は、リモート・モバイル機器１００’を利用可能にするように、または種々のポリシーに従わないように、決定することができる。例えば、リモート・モバイル機器１００’は、（例えば、同じ機構の）他の予め許可されたモバイル機器に対してのみ利用可能にすることができる。その上、リモート・モバイル機器１００’は、バッテリ・レベルが第１の閾値を上回るときのみ、ａｐｐインテントによって要求されるフィーチャを共有するために（しかし、ａｐｐアクションを実行しないように）利用可能にすることができ、一方、リモート・モバイル機器１００’は、バッテリ・レベルが（第１の閾値より高い）第２の閾値を上回るときには、ａｐｐアクションを実行するために利用可能にすることができる。発見サービスＳｄ’は、モバイル機器１００の発見サービスＳｄに、リモート・モバイル機器１００’の利用可能性（すなわち、完全に、部分的に、または全く）を示す応答を、その可能な特性、例えば、それの処理パワー、作業メモリ・サイズ、センサ特性と一緒に返す（Ｏ９．Ｒｅｓｐｏｎｓｅ（応答））。
【００４１】
発見サービスＳｄがａｐｐアクションを（完全にまたは部分的に）実行するために利用可能な１つまたは複数のリモート・モバイル機器１００’を見つけたと仮定すると、発見サービスＳｄは、（例えば、図示されていない対応するコンテンツ・プロバイダから読み出される）１つまたは複数のポリシーの組に従って、それらのうちの１つを選択する。これを目的として、種々のポリシーが実施可能である。まず初めに、発見サービスＳｄは、ａｐｐアクションを完全に実行するために利用可能なリモート・モバイル機器１００’に優先権を与え、複数のリモート・モバイル機器１００’が残っている場合、選択は、（対応する応答で返される）リモート・モバイル機器１００’の特性に、または対応する接続（例えば、タイプおよび帯域幅）に、あるいはその両方に基づくことができる。次いで、発見サービスＳｄは、ａｐｐアクションを（もしあるとすれば）完全にまたは部分的にだけ実行するために利用可能なリモート・モバイル機器１００’の指示を評価サービスＳｅに返す（Ｏ１０．Ａｖａｉｌａｂｉｌｉｔｙ（利用可能性））。
【００４２】
いずれの場合でも、評価サービスＳｅは、ａｐｐインテントの評価の結果をプロキシ・サービスＳｐに返し、この結果は、ａｐｐアクションがローカルに実行されなくてはならないのか、またはリモートに実行されなくてはならないのかを示し、後者の場合、この結果はまた、完全にまたは部分的にａｐｐアクションを行うために利用可能なリモート・モバイル機器１００’を示す（アクションＯ１１．Ｄｅｃｉｓｉｏｎ（決定））。
【００４３】
ａｐｐアクションの実行がローカルに実行されなくてはならないとき、プロキシ・サービスＳｐは、サービスＳ０によるａｐｐアクションの実行のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム３０５によってサービスＳ０に直接、バインドされる。次いで、サービスＳ０は、ａｐｐアクション（すなわち、議論されている例では、地域の気圧を測定し、経時的なそれの変化に従って天気予報を確定する）を実行するようにアクティブ化され、サービスＳ０は、ａｐｐアクションの実行の何らかの結果（すなわち、議論されている例では、地域の気圧および天気予報）をプロキシ・サービスＳｐに返す（Ｏ１２．Ｌｏｃａｌ（ローカル））。
【００４４】
逆に、ａｐｐアクションを完全に実行するために利用可能なリモート・モバイル機器１００’が見つけられたと仮定すると、プロキシ・サービスＳｐは、ａｐｐアクションの実行をもたらすためのインテントをリモート・モバイル機器１００’に送信し、このインテントはまた、アプリ３１０の（または少なくともサービスＳ０の）イメージを含む。ａｐｐアクションの実行をもたらすためのインテントは、プロキシ・サービスＳｐ’に対して明示的であり、それにより、このインテントは、オペレーティング・システム３０５’によってプロキシ・サービスＳｐ’に直接、バインドされる（Ｏ１３．Ｒｅｍｏｔｅ（リモート））。それに応答して、プロキシ・サービスＳｐ’は、モバイル機器１００をエミュレートする仮想マシン３３０を（例えば、Ｑｕｉｃｋ  ＥＭＵｌａｔｏｒ、すなわちＱＥＭＵを用いて）インスタンス化する。次いで、プロキシ・サービスＳｐ’は、（クローンのアプリ３１０’と呼ばれる）アプリ３１０のクローンを対応するイメージから作成し、その場合、このアプリ３１０のクローンは、（Ａ０’、Ａ１’により示される）同じアクティビティ、および（Ｓ０’により示される）同じサービスを含む（Ｏ１４．Ｃｌｏｎｅ（クローン））。こうして、クローンのアプリ３１０’は、リモート・モバイル機器１００’をクローンのアプリ３１０’から保護する隔離レイヤとして機能する仮想マシン３３０を含む任意のオペレーティング・システム３０５’において（モバイル機器１００のオペレーティング・システム３０５とは異なっている場合ですら）動作することができる。この時点で、プロキシ・サービスＳｐ’は、サービスＳ０’によるａｐｐアクションの実行のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム３０５’によってサービスＳ０’に直接、バインドされる。次いで、サービスＳ０’は、ａｐｐアクション（すなわち、議論されている例では、地域の気圧を測定し、経時的なそれの変化に従って天気予報を確定する）を実行するようにアクティブ化され、サービスＳ０’は、ａｐｐアクションの実行の何らかの結果（すなわち、議論されている例では、地域の気圧および天気予報）をプロキシ・サービスＳｐ’に返す（Ｏ１５．Ｅｘｅｃｕｔｅ（実行する））。こうして、リモート・モバイル機器１００’によって実行されるアクションは、モバイル機器１００の付近で測定される値に基づく。この文脈では、用語「付近で（in proximity）」は、測定された値を消費するアクションを基準にして意図すべきである。換言すれば、リモート・モバイル機器１００’は、許容できる程度の正確さを伴って、モバイル機器１００の場所でその値を示す（それの場所に関係する）物理量（すなわち、同じＷｉ−Ｆｉエリアまたは通信セル内の地域の気圧）を測定するべきである。プロキシ・サービスＳｐ’は、ひいては、この結果をプロキシ・サービスＳｐに返す（Ｏ１６．Ｒｅｔｕｒｎ．（返す））。
【００４５】
いずれの場合でも、プロキシ・サービスＳｐは、サービスＳ０からのａｐｐアクションの実行の結果（Ｏ１２）、またはプロキシ・サービスＳｐ’を経由するサービスＳ０’からのａｐｐアクションの実行の結果（Ｏ１６）を受け取り次第、それをアクティビティＡ０に返す（Ｏ１７．Ｒｅｓｕｌｔ（結果））。次いで、アプリ３１０の動作は、通常通り継続する。こうして、ａｐｐアクションがローカルに実行された、またはリモートに実行されたことは、アプリ３１０には（わずかな性能差については別として）不透明であり、その場合、アプリ３１０は、それを実行するモバイル機器１００の能力について全く問わない。
【００４６】
上述の技法では、アクションの実行の委譲は、アプリケーション・レベルにおいて（委譲アプリ３２０によって）実施される。そのため、所望の結果は、オペレーティング・システム３０５に対する何らかの変更も（またはせいぜい最小限のコンフィギュレーション変更）、特別なプログラミング・モデルも必要とせずに達成可能である。実際、アプリ３１０は、変更されず、すなわち、何ら特別な再モデリングまたは計装に直面することなしにローカルに動作するためになおも書かれ、その上、バインディングは、それのネイティブ／内蔵の機構を使用して（最大でも、アプリの分散ポリシーを変更して、アプリを、それらの所要のフィーチャを欠いたモバイル機器にすらインストールできるようにする必要性を伴って）、オペレーティング・システム３０５によって通常通り管理される。
【００４７】
次に、図４を参照すると、本開示の実施形態の別の例示的なアプリケーション・シナリオを実施するのに使用可能なメイン・ソフトウェア・ユニットの役割を表すコラボレーション図が示されている。
【００４８】
このシナリオは、ａｐｐインテントによって要求されるフィーチャを共有するためにだけ（しかし、それを完全に実行しないように）利用可能なリモート・モバイル機器１００’が見つけられているという点で、上述のシナリオとは異なり、典型的な例が、インテントアプリによって要求されるが、モバイル機器１００には存在していないセンサである。この場合、プロキシ・サービスＳｐが評価サービスＳｅからａｐｐインテントの評価の結果を受け取るとき（Ｏ１１）、プロキシ・サービスＳｐは、センサの共有化をもたらすためのインテントをリモート・モバイル機器１００’に送信し、上記のように、センサの共有化をもたらすためのインテントは、プロキシ・サービスＳｐ’に対して明示的であり、それにより、このインテントは、オペレーティング・システム３０５’によってプロキシ・サービスＳｐ’に直接、バインドされる（Ｏ１３．１．Ｓｈａｒｅ（共有する））。それに応答して、プロキシ・サービスＳｐ’は、センサ（すなわち、議論されている例では、気圧計）をアクティブ化し、次いで、プロキシ・サービスＳｐ’は、対応する物理量の測定された値（すなわち、議論されている例では、地域の気圧）をプロキシ・サービスＳｐ’に返す（Ｏ１５．１．Ｓｅｎｓｅ（感知する））。プロキシ・サービスＳｐ’は、ひいては、この測定された値をプロキシ・サービスＳｐに返す（Ｏ１６．１．Ｒｅｔｕｒｎ（返す））。
【００４９】
この時点で、プロキシ・サービスＳｐは、ａｐｐアクションの実行をもたらすためのインテントをクラウド環境４０５に送信し、このインテントはまた、アプリ３１０の（または少なくともサービスＳ０の）イメージ、および測定された値を含む。クラウド環境４０５は、サービスとしてオンデマンドの（例えば、利用回数制料金での）コンピューティング・リソースを提供し、クラウド・サービスは、クラウド・プロバイダによって利用可能にされ、このクラウド・プロバイダは、クラウド・リソースを、（それらが、概して、それらの実際の実施がユーザには完全に不透明な仮想タイプであるように）要求と同時にプロビジョニングし、構成し、リリースする。この特別な場合では、クラウド環境４０５は、モバイル機器（本明細書では以降、仮想モバイル機器１００’’と呼ばれる）をエミュレートする仮想マシンを含み、これを目的として、仮想モバイル機器１００’’は、（３０５’’により示される）同じオペレーティング・システムと、（Ｓｐ’’により示される）プロキシ・サービスしか含まない、（３２５’’により示される）それのマニフェスト・ファイル付きの（３２０’’により示される）簡略化された委譲アプリとを有する。アプリアクションの実行をもたらすためのインテントは、プロキシ・サービスＳｐ’’に対して明示的であり、それにより、このインテントは、オペレーティング・システム３０５’’によってプロキシ・サービスＳｐ’’に直接、バインドされる（Ｏ１３．２．Ｖｉｒｔｕａｌ（仮想））。次いで、プロキシ・サービスＳｐ’’は、対応するイメージから（クローンのアプリ３１０’’と呼ばれる）アプリ３１０のクローンを作成し、その場合、このアプリ３１０のクローンは、（Ａ０’’、Ａ１’’により示される）同じアクティビティ、および（Ｓ０’’により示される）同じサービスを含む（Ｏ１４．２．Ｃｌｏｎｅ（クローン））。この時点で、プロキシ・サービスＳｐ’’は、サービスＳ０’’によるａｐｐアクションの実行のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム３０５’’によってサービスＳ０’’に直接、バインドされ、このインテントはまた、受け取り済みの測定された値を含む。次いで、サービスＳ０’’は、ａｐｐアクションを実行するようにアクティブ化されるが、この場合、サービスＳ０’’は、それを感知する必要性は何ら持たずに（すなわち、議論されている例では、経時的な測定された地域の気圧の変化に従って、天気予報を確定することによって）、測定された値に直接、作用し、サービスＳ０’’は、ａｐｐアクションの実行の何らかの結果（すなわち、議論されている例では、地域の気圧および天気予報）をプロキシ・サービスＳｐ’’に返す（Ｏ１５．２．Ｅｘｅｃｕｔｅ（実行する））。プロキシ・サービスＳｐ’’は、ひいては、この結果をプロキシ・サービスＳｐに返す（Ｏ１６．２．Ｒｅｔｕｒｎ（返す））。
【００５０】
ここで、動作の流れは、上記のように進み、プロキシ・サービスＳｐは、ａｐｐアクションの実行の結果をアクティビティＡ０に返し（Ｏ１７）、次いで、アプリ３１０の動作は、通常通り継続する。
【００５１】
これにより、モバイル機器１００は、例えば、それらの複雑さの理由により実現可能にならないアクションを実行することが可能になり、実際に、クラウド環境４０５は、無限大のコンピューティング・リソースの幻想を提供する。そのため、これは、リソース需要が高いアクション（例えば、画像認識サービス）の場合に特に有利である。同時に、これらのアクションは、モバイル機器１００の付近で（リモート・モバイル機器１００’によって）測定される値に基づくことができる。
【００５２】
当然ながら、ローカルで特別な要件を満たすために、当業者は、多数の論理的、または物理的、あるいはその両方の修正形態および変更形態を上述の解決策に適用することができる。より具体的には、この解決策は、その１つまたは複数の実施形態に関してある程度の具体性を伴って説明されてきたが、形態および詳細における様々な省略、置換、および変形、ならびに他の実施形態が可能であることを理解されたい。具体的には、本開示の種々の実施形態は、そのより完全な理解を与えるように前述の説明に示された（数値などの）具体的な詳細がない場合ですら実施可能であり、逆に、よく知られている特徴は、不必要な詳細を伴って説明を曖昧にしないようにするために、省略されている場合も、または簡略化されている場合もある。その上、本開示の任意の実施形態に関連して説明される具体的な要素、または方法ステップ、あるいはその両方が、概括的設計選択の問題として任意の他の実施形態に組み込まれ得ることは明らかに意図される。いずれの場合でも、順序修飾子または他の修飾子は、単に、同じ名前を有する要素を区別するラベルとして使用されるにすぎず、それら自体だけで、優先度、優先権、または順序を何ら含意していない。その上、用語含める（include）、備える（comprise）、有する（have）、収容する（contain）、および含む（involve）（ならびにそれらの任意の形態）は、オープンの、包括的でない意味を伴って意図すべきであり（すなわち、列挙された項目に限定すべきでなく）、用語基づく（based on）、に依存する（dependent on）、に従う（according to）、の機能（function of）（およびそれらの任意の形態）は、包括的でない関係性（すなわち、さらなる可能な可変形態が含まれている）として意図すべきであり、用語１つ（a/an）は、（特段の明白な指示がない限り）１つまたは複数の項目として意図すべきである。
【００５３】
例えば、一実施形態が、コンピューティング・マシンにおいてソフトウェア・アプリケーションを動作させるための方法を提供する。この方法は、以下のステップを含む。コンピューティング・マシンにおいて１つまたは複数のアクションの組を実行する委譲コンポーネントの能力が登録される（各アクションは、この能力の少なくとも１つの特性によって定義される）。委譲コンポーネントによって、ソフトウェア・アプリケーションから、アクションのうちの１つを実行することへの要求が受け取られ、要求は、その能力の登録に従ってランタイム時に委譲コンポーネントにバインドされる。アクションの実行は、（アクションの少なくとも一部を実行することができる）コンピューティング・マシンの少なくとも１つのローカル・コンポーネントに、または前記少なくとも１つのローカル・コンポーネントの利用可能性に従って（アクションの少なくとも一部を実行することができる）少なくとも１つのリモート・コンピューティング・マシンの少なくとも１つのリモート・コンポーネントに、あるいはその両方に、委譲コンポーネントによって委譲される。
【００５４】
しかしながら、ソフトウェア・アプリケーションは、任意のタイプ（例えば、自動更新コンテンツを表示するウィジェット）であってよく、モバイル・タイプ（例えば、ネットブック）ですらない任意のコンピューティング・マシンにおいて動作することができる。委譲コンポーネントは、任意のタイプ（例えば、ブロードキャスト・レシーバ、ライブラリ、アプリケーション）であってよく、その能力は、任意のやり方で登録され得る（以下を参照のこと）。各アクションは、任意の数およびタイプの特性によって（例えば、Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ、すなわちＵＲＩを参照して）定義され得る。各要求は、任意のやり方で（例えば、フッキング技法によりそれを傍受することによって、またはオペレーティング・システム内であっても）委譲コンポーネントにバインドされ得る。アクションの実行は、ローカル・コンポーネントの利用可能性を定義する任意の特性（固有的、または一時的のいずれかの、例えば、センサ存在、メモリ空間、マイクロプロセッサ・タイプ、オペレーティング・システム・レベル、バッテリ・レベル、ＧＰＳカバレッジ、Ｗｉ−Ｆｉもしくは３Ｇ接続）に従って、任意の数およびタイプのローカル・コンポーネント、またはリモート・コンポーネント、あるいはその両方に委譲され得る。
【００５５】
一実施形態では、アクションの実行を前記委譲することは、ローカル・コンポーネントまたはリモート・コンポーネントから、アクションの実行の結果を受け取ること、およびその結果をソフトウェア・アプリケーションに返すことを含む。
【００５６】
しかしながら、アクションの結果は、任意のやり方で（例えば、異なるローカル・コンポーネント／リモート・コンポーネントから部分的に）収集され得、（単純なリターン・コードに至るまで）任意のタイプであってよい。いずれの場合でも、アクションの実行はまた、ソフトウェア・アプリケーションに返すべき結果を全く有していなくてもよい。
【００５７】
一実施形態では、アクションの実行を前記委譲することは、ローカル・コンポーネントがコンピューティング・マシンにおいて全く存在しないとき、アクションの実行をリモート・コンポーネントに委譲することを含む。
【００５８】
しかしながら、アクションの実行をリモートに委譲することの決定はまた、ユーザによる手動承認に条件付けられ得る。
【００５９】
一実施形態では、アクションの実行を前記委譲することは、ローカル・コンポーネントがコンピューティング・マシンにおいて存在するとき、コンピューティング・マシンの少なくとも１つのメトリックを測定すること、および前記少なくとも１つのメトリックに従って、アクションの実行を、ローカル・コンポーネントに、またはリモート・コンポーネントに、委譲することを含む。
【００６０】
しかしながら、メトリックは、任意の数であっても、および任意のタイプ（例えば、マイクロプロセッサ使用、作業メモリ占有）であってもよい。メトリックは、任意のやり方（例えば、要求と同時に、または定期的に）測定され得る。その上、アクションの実行をローカルに委譲する、またはリモートに委譲することの決定は、他のポリシーに基づくこと（例えば、接続費用、サービスの所要の品質に従って）ができる。いずれの場合でも、可能であるときは、アクションの実行を常にローカルに委譲することを妨げるものは何もない。
【００６１】
一実施形態では、アクションは、サービスのバックグランドでの実行を含む。
【００６２】
しかしながら、アクションは、任意のタイプ（例えば、単純な動作から全アプリケーションまで）であってよい。
【００６３】
一実施形態では、アクションは、物理量の感知を含む。
【００６４】
しかしながら、物理量は、任意のタイプであってよく、任意の数またはタイプのセンサ（例えば、加速度計、光センサ、コンパス、ジャイロスコープ、近接センサ）によって感知され得る。
【００６５】
一実施形態では、アクションの実行を前記委譲することは、物理量の感知を第１のリモート・コンピューティング・マシンの第１のリモート・コンポーネントに委譲すること、第１のリモート・コンポーネントから物理量の測定値を受け取ること、物理量の測定値をパスすることによって、サービスの実行を、ローカル・コンポーネントに、または第２のリモート・コンピューティング・マシンの第２のリモート・コンポーネントに、委譲することを含む。
【００６６】
しかしながら、アクションは、任意の数およびタイプのリモート・コンピューティング・マシンにおける任意の数の物理量の感知を必要とする場合があり（以下を参照のこと）、次いで、サービスの実行は、物理量の測定値に基づく任意の値（例えば、単純な測定値、あるいは１つまたは複数の測定値から計算される値）をパスすることによって、任意の数およびタイプのコンピューティング・マシンの任意の数のローカル・コンポーネント、またはリモート・コンポーネント、あるいはその両方に委譲され得る（以下を参照のこと）。
【００６７】
一実施形態では、コンピューティング・マシンは、モバイル機器であり、第１のリモート・コンピューティング・マシンは、モバイル機器の付近の別のモバイル機器であり、第２のリモート・コンピューティング・マシンは、ネットワーク・サービスによって提供される。
【００６８】
しかしながら、他のモバイル機器が、モバイル機器と任意の場所関係性に（例えば、ブルートゥース・カバレッジ内に）あってよく、ネットワーク・サービスは、任意のタイプ（例えば、ウェブ・サービス）であってよい。いずれの場合でも、コンピューティング・マシン、第１のリモート・コンピューティング・マシン、および第２のコンピューティング・マシンは、任意の他のタイプであってよい。
【００６９】
一実施形態では、アクションの実行を前記委譲することは、アクションの少なくとも一部を実行する、コンピューティング・マシンの付近の各リモート・コンピューティング・マシンの利用可能性を発見することを含む。
【００７０】
リモート・コンピューティング・マシンの利用可能性は、任意のやり方で（例えば、特定のアクションの要求と同時に、または定期的にあらゆるアクションの要求を収集し、要求と同時に収集された情報から特定のアクションの要求を抽出することによって）発見され得る。その上、各リモート・コンピューティング・マシンの利用可能性は、任意のやり方で（例えば、ロード条件、またはユーザによる手動承認に従って）決定され得、いずれの場合でも、一部のリモート・コンピューティング・マシンは、（例えば、公共事業を実施するときは）常に、利用可能とすることができる。発見すべきリモート・コンピューティング・マシンは、任意のやり方で（無作為にすら）選択され得る。
【００７１】
一実施形態では、アクションの実行を前記委譲することは、アクションの実行を、コンピューティング・マシンをエミュレートする仮想コンピューティング・マシンに委譲することを含む。
【００７２】
しかしながら、仮想マシンは、任意のやり方で（要求と同時にか、または事前にかのいずれかで、コンピューティング・マシンと同期されるように維持されて）インスタンス化され得る。いずれの場合でも、アクションは、（仮想化レイヤを何ら含まない）リモート・コンピューティング・マシンにおいて直接、実行され得る
【００７３】
一実施形態では、アクションの実行を前記委譲することは、リモート・コンピューティング・マシンに、ソフトウェア・アプリケーションのクローンをそのイメージから作成させることを含む。
【００７４】
しかしながら、クローン作成は、ローカル・コンポーネントのみ、または全ソフトウェア・アプリケーションに関係し得る。いずれの場合でも、リモート・コンピューティング・マシンにおいて所要のコンポーネントまたは全ソフトウェア・アプリケーションを一時的に（それらのオペレーティング・システムは互換性があると仮定して）、（任意の場所から）ダウンロードする、およびインストールすることを妨げるものは何もない。
【００７５】
一実施形態では、委譲コンポーネントの能力を前記登録することは、アクションを実行する委譲コンポーネントの能力を示す、アクションの１つごとのインテント・フィルタを含むマニフェスト・ファイルを委譲コンポーネントに与えることを含む。
【００７６】
しかしながら、マニフェスト・ファイルは、任意の形式を有することができ、任意の他のストレージ構造（例えば、データベース）によって置き換えられ得る。いずれの場合でも、任意の他のやり方で（例えば、それのインストール時に実行される特定の命令によって）委譲コンポーネントの能力を登録することを妨げるものは何もない。
【００７７】
概して、同じ解決策が等価的方法により（そのより多くのステップまたは部分の同じ機能を有する類似のステップを使用すること、本質的でないいくつかのステップを除外すること、またはさらなる任意選択のステップを追加することによって）実施される場合、類似の考慮すべき点が与えられ、その上、各ステップは、異なる順序で、同時に、または交互的なやり方で（少なくとも一部）、行われてもよい。
【００７８】
さらなる実施形態が、コンピュータ・プログラムを提供し、このコンピュータ・プログラムは、コンピュータ・プログラムがコンピューティング・マシンにおいて実行されると、コンピューティング・マシンに上述の方法のステップを行わせる。
【００７９】
さらなる実施形態が、コンピュータ・プログラムを実装する非一時的コンピュータ可読媒体を含むコンピュータ・プログラム製品を提供し、コンピュータ・プログラムは、コンピューティング・マシンの作業メモリに直接ロードすることができるコードを含み、それによって、同じ方法を行うようにコンピューティング・マシンを構成する。
【００８０】
しかしながら、上述の解決策は、スタンドアロン・ソフトウェア・アプリケーションとして、オペレーティング・システムのためのプラグインとして、またはオペレーティング・システムそれ自体の中で直接にすら実施され得る。当業者には理解されるように、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として実装され得る。したがって、本発明の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または本明細書で「回路（circuit）」、「モジュール（module）」、または「システム（system）」とすべて大まかに呼ばれることがあるソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形態を取ることができる。さらには、本発明の態様は、コンピュータ可読プログラム・コードをその上に実装した１つまたは複数のコンピュータ可読媒体（複数可）で実装されるコンピュータ・プログラム製品の形態を取ることもできる。１つまたは複数のコンピュータ可読媒体（複数可）の任意の組合せが利用され得る。コンピュータ可読媒体は、コンピュータ可読信号媒体であっても、コンピュータ可読ストレージ媒体であってもよい。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光学、電磁気、赤外線、もしくは半導体のシステム、装置、またはデバイス、あるいは前述の任意の適した組合せとすることができるが、これらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例（非包括的なリスト）には、１つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能なプログラマブル読取り専用メモリ（ＥＰＲＯＭもしくはＦｌａｓｈメモリ）、光ファイバ、ポータブル・コンパクト・ディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、または前述の任意の適した組合せが含まれる。本文献の文脈では、コンピュータ可読ストレージ媒体は、命令実行のシステム、装置、またはデバイスによって、あるいは命令実行のシステム、装置、またはデバイスに関連して使用するためのプログラムを収容する、または記憶することが可能な任意の有形媒体とすることができる。コンピュータ可読信号媒体は、例えば、ベースバンドで、または搬送波の一部として、コンピュータ可読プログラム・コードがその中に実装された伝播データ信号を含むことができる。そのような伝播信号は、電磁気、光学、またはそれらの任意の適した組合せを含むが、これらに限定されない任意の多様な形態を取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなくて、かつ命令実行のシステム、装置、またはデバイスによって、あるいは命令実行のシステム、装置、またはデバイスに関連して使用するためのプログラムを伝え、伝播し、または輸送することが可能な、任意のコンピュータ可読媒体とすることができる。コンピュータ可読媒体において実装されるプログラム・コードは、ワイヤレス、ワイヤライン、光ファイバ・ケーブル、ＲＦなど、またはそれらの任意の��した組合せを含むが、これらに限定されない任意の適切な媒体を使用して伝送され得る。本発明の態様の動作を遂行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、またはＣ＋＋などのオブジェクト指向のプログラミング言語、および「Ｃ」プログラミング言語など、従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語、あるいは類似のプログラミング言語の任意の組合せで書かれ得る。プログラム・コードは、スタンドアロン・ソフトウェア・パッケージとして関連コンピュータにおいて全体的に、このコンピュータにおいて部分的に、およびリモート・コンピュータにおいて部分的に、またはリモート・コンピュータにおいて全体的に実行することが可能である。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通じてコンピュータに接続可能であり、あるいは接続は、（例えば、Ｉｎｔｅｒｎｅｔ  Ｓｅｒｖｉｃｅ  Ｐｒｏｖｉｄｅｒを使用してＩｎｔｅｒｎｅｔを通じて）外部コンピュータになされてもよい。本発明の態様は、本発明の実施形態により、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図、またはブロック図、あるいはその両方を参照して、説明されている。フローチャート図、またはブロック図、あるいはその両方の各ブロック、およびフローチャート図、またはブロック図、あるいはその両方におけるブロックの組合せが、コンピュータ・プログラム命令によって実施可能であることは理解されよう。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、フローチャート、またはブロック図、あるいはその両方のブロックまたは複数のブロックにおいて指定される機能／行為を実施するための手段を生み出すように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを創出することができる。また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に記憶される命令が、フローチャート、またはブロック図、あるいはその両方のブロックまたは複数のブロックにおいて指定される機能／行為を実施する命令を含む製造品を創出するように、コンピュータ可読媒体に記憶され、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスを特定の形で機能するように指図することができる。また、コンピュータ・プログラム命令は、コンピュータ、または他のプログラマブル装置において実行される命令が、フローチャート、またはブロック図、あるいはその両方のブロックまたは複数のブロックにおいて指定される機能／行為を実施するためのプロセスを提供するように、コンピュータ実施プロセスを創出するべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイスにおいて一連の動作ステップを行わせることができる。
【００８１】
さらなる実施形態が、上述の方法のステップを行うための手段を含むシステムを提供する。
【００８２】
しかしながら、この方法はまた、異なるアーキテクチャ（例えば、ローカル、広域、グローバル、セルラ、または衛星のネットワーク）に基づく、かつ任意のタイプの（ワイヤード、またはワイヤレス、あるいはその両方の）接続を利用する、システムにおいて遂行され得る。
【００８３】
概して、システムが異なる構造を有し、または等価的コンポーネントを含み、あるいはシステムが他の動作可能な特性を有する場合、類似の考慮すべき点が与えられる。いずれの場合でも、そのあらゆるコンポーネントが、より多くのエレメントに分けられても、または２つ以上のコンポーネントが、単一のエレメントへと一緒に組み合わせられてもよく、その上、各コンポーネントが、対応する動作の実行を並行してサポートするために反復されてもよい。その上、特段の指示がない限り、概して、種々のコンポーネント間の相互作用は何ら、連続的である必要はなく、直接的であっても、または１つまたは複数の媒介を通じて間接的であってもよい。
【図１】
0006587613.tif 000002
【図２】
0006587613.tif 000003
【図３】
0006587613.tif 000004
【図４】
0006587613.tif 000005