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

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

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許6587613ソフトウェア・アプリケーションを動作させるための方法、コンピュータ・プログラム、およびシステム(動的なアクション委譲によるソフトウェア・アプリケーションの動作)
<>
  • 特許6587613-ソフトウェア・アプリケーションを動作させるための方法、コンピュータ・プログラム、およびシステム(動的なアクション委譲によるソフトウェア・アプリケーションの動作) 図000002
  • 特許6587613-ソフトウェア・アプリケーションを動作させるための方法、コンピュータ・プログラム、およびシステム(動的なアクション委譲によるソフトウェア・アプリケーションの動作) 図000003
  • 特許6587613-ソフトウェア・アプリケーションを動作させるための方法、コンピュータ・プログラム、およびシステム(動的なアクション委譲によるソフトウェア・アプリケーションの動作) 図000004
  • 特許6587613-ソフトウェア・アプリケーションを動作させるための方法、コンピュータ・プログラム、およびシステム(動的なアクション委譲によるソフトウェア・アプリケーションの動作) 図000005
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6587613
(24)【登録日】2019年9月20日
(45)【発行日】2019年10月9日
(54)【発明の名称】ソフトウェア・アプリケーションを動作させるための方法、コンピュータ・プログラム、およびシステム(動的なアクション委譲によるソフトウェア・アプリケーションの動作)
(51)【国際特許分類】
   G06F 9/50 20060101AFI20191001BHJP
【FI】
   G06F9/50 150B
【請求項の数】14
【全頁数】21
(21)【出願番号】特願2016-530403(P2016-530403)
(86)(22)【出願日】2014年7月7日
(65)【公表番号】特表2016-528624(P2016-528624A)
(43)【公表日】2016年9月15日
(86)【国際出願番号】EP2014064439
(87)【国際公開番号】WO2015014570
(87)【国際公開日】20150205
【審査請求日】2017年6月9日
(31)【優先権主張番号】1313660.1
(32)【優先日】2013年7月31日
(33)【優先権主張国】GB
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】マリネッリ、クラウディオ
(72)【発明者】
【氏名】ピチェッティ、ルイージ
(72)【発明者】
【氏名】ドナテッリ、アレックス
(72)【発明者】
【氏名】ランフランキ、ジョヴァンニ
【審査官】 清木 泰
(56)【参考文献】
【文献】 特表2013−513295(JP,A)
【文献】 特表2006−502457(JP,A)
【文献】 特表2010−527057(JP,A)
【文献】 特開2013−061845(JP,A)
【文献】 特表2012−523038(JP,A)
【文献】 特開2006−252218(JP,A)
【文献】 特開2014−102837(JP,A)
【文献】 米国特許出願公開第2013/0073600(US,A1)
【文献】 米国特許出願公開第2013/0174174(US,A1)
【文献】 米国特許出願公開第2009/0023452(US,A1)
【文献】 米国特許出願公開第2009/0022118(US,A1)
【文献】 米国特許出願公開第2012/0265884(US,A1)
【文献】 米国特許出願公開第2010/0131590(US,A1)
【文献】 米国特許出願公開第2003/0046396(US,A1)
【文献】 特開平05−274399(JP,A)
【文献】 特開2002−041309(JP,A)
【文献】 特表2002−505776(JP,A)
【文献】 Dave Smith, Jeff Friesen, 吉川邦夫訳,Android プログラミングレシピ増補改訂版 アーキテクチャ/UI/ネットワーク編,株式会社インプレスジャパン,2013年 9月21日,初版第1刷,Pages:016〜039,047〜050
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455− 9/54
(57)【特許請求の範囲】
【請求項1】
コンピューティング・マシンにおいてソフトウェア・アプリケーションを動作させるための方法であって、
前記コンピューティング・マシンにおいて委譲コンポーネントの能力を登録するステップであって、当該登録により、前記委譲コンポーネントに基づいて、あたかも、1つまたは複数のアクションの組が実行できるかのように見せるものであり、各アクションが、この能力の少なくとも1つの特性によって定義される、前記登録するステップと、
前記ソフトウェア・アプリケーションから、前記アクションのうちの1つを実行することへの要求を受け取るステップであって、前記要求が、前記能力の前記登録に従ってランタイム時に前記委譲コンポーネントにバインドされる、前記受け取るステップと、
前記委譲コンポーネントに基づいて実行できるかのように見せた前記アクションの前記実行を、前記コンピューティング・マシンの少なくとも1つのローカル・コンポーネントと、少なくとも1つのリモート・コンピューティング・マシンの少なくとも1つのリモート・コンポーネントのうちの、一方あるいはその両方に、前記少なくとも1つのローカル・コンポーネントの利用可能性に従って、委譲するステップであって、委譲される先の前記ローカル・コンポーネントに基づいて、前記アクションの少なくとも一部を実行することができるものであり、委譲される先の前記リモート・コンポーネントに基づいて、前記アクションの少なくとも一部を実行することができるものである、前記委譲するステップと
を含む方法。
【請求項2】
前記委譲コンポーネントに基づいて、前記ローカル・コンポーネントまたは前記リモート・コンポーネントから、前記アクションの前記実行の結果を受け取るステップと、
前記委譲コンポーネントに基づいて、前記結果を前記ソフトウェア・アプリケーションに返すステップと
を含む、請求項1に記載の方法。
【請求項3】
前記アクションの前記実行を前記委譲するステップは、ローカル・コンポーネントが前記コンピューティング・マシンにおいて全く存在しないとき、
前記アクションの前記実行を前記リモート・コンポーネントに委譲するステップ
を含む、請求項1または2に記載の方法。
【請求項4】
前記アクションの前記実行を前記委譲するステップは、前記ローカル・コンポーネントが前記コンピューティング・マシンにおいて存在するとき
前記コンピューティング・マシンの少なくとも1つのメトリックを測定するステップと、
前記アクションの前記実行を、前記少なくとも1つのメトリックに従って、前記ローカル・コンポーネントまたは前記リモート・コンポーネントに委譲するステップと
を含む、請求項1または3に記載の方法。
【請求項5】
前記アクションは、サービスのバックグランドでの実行を含む、請求項1ないし4のいずれかに記載の方法。
【請求項6】
前記アクションは、物理量の感知を含む、請求項5に記載の方法。
【請求項7】
前記アクションの前記実行を前記委譲するステップは、
前記物理量の前記感知を第1のリモート・コンピューティング・マシンの第1のリモート・コンポーネントに委譲するステップと、
前記第1のリモート・コンポーネントから受け取った前記物理量の測定値に基づく値をパスすることによって、前記アクションの前記実行を、前記ローカル・コンポーネントに、または第2のリモート・コンピューティング・マシンの第2のリモート・コンポーネントに、委譲するステップと
を含む、請求項6に記載の方法。
【請求項8】
前記コンピューティング・マシンは、モバイル機器であり、前記第1のリモート・コンピューティング・マシンは、前記モバイル機器の付近の別のモバイル機器であり、前記第2のリモート・コンピューティング・マシンは、ネットワーク・サービスによって提供される、請求項7に記載の方法。
【請求項9】
前記アクションの前記実行を前記委譲するステップは、
前記アクションの少なくとも一部を実行する、前記コンピューティング・マシンの付近の各リモート・コンピューティング・マシンの利用可能性を発見するステップ
を含む、請求項1ないし8のいずれかに記載の方法。
【請求項10】
前記アクションの前記実行を前記委譲するステップは、
前記アクションの前記実行を、前記コンピューティング・マシンをエミュレートする仮想コンピューティング・マシンの前記リモート・コンポーネントに委譲するステップ
を含む、請求項1ないし9のいずれかに記載の方法。
【請求項11】
前記アクションの前記実行を前記委譲するステップは、
前記リモート・コンピューティング・マシンに、記ローカル・コンポーネントのクローンをこのローカル・コンポーネントのイメージから作成させるステップ
を含む、請求項1ないし10のいずれかに記載の方法。
【請求項12】
委譲コンポーネントの能力を前記登録するステップは、
前記アクションの1つごとのインテント・フィルタを含むマニフェスト・ファイルを前記委譲コンポーネントに与えるステップであって、前記インテント・フィルタにより、前記委譲コンポーネントに基づいて、あたかも、前記アクションが実行できるかのようにみせるものである、前記与えるステップ
を含む、請求項1ないし11のいずれかに記載の方法。
【請求項13】
前記コンピューティング・マシンに、請求項1ないし12のいずれかに記載の方法のステップを行わせるためのコンピュータ・プログラム。
【請求項14】
請求項1ないし12のいずれかに記載の方法を行うための手段を備えるシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理分野に関する。より詳細には、本開示は、ソフトウェア・アプリケーションの動作に関する。
【背景技術】
【0002】
ソフトウェア・アプリケーションは、有用なタスクであれば何でも行うようにコンピューティング・マシンにおいて定期的に実行される。通常の例は、モバイルアプリ(または単にアプリ)であり、これは、モバイル機器(例えば、スマートフォン、およびタブレット)において動作するように特に設計されているソフトウェア・アプリケーションである。アプリは、それらの数および種類の爆発的な増加を伴って、近年、ますますポピュラーになってきている。
【0003】
具体的には、アプリは、(例えば、位置特定、環境、拡張現実のサービスを実施する)広範なリッチ機能を提供する。これには、モバイル機器の(ハードウェア、またはソフトウェア、あるいはその両方の)リソースの要求の増加が伴う。例えば、アプリは、高い電力消費を伴うことがあり、その上、アプリには、対応する物理量を測定する(気圧を測定するための気圧計などの)種々のセンサが必要になることもある。
【0004】
しかしながら、モバイル機器の能力は、アプリの進歩についていくことができない。そのため、一部のアプリは、特定のモバイル機器において、その固有的限界か、一時的限界かのいずれかの理由で動作しないことがある。具体的には、モバイル機器は、固有的に、一部のアプリを動作させることができないことがあり、それは、(例えば、モバイル機器が、感度レベルの低いセンサを有している、または古いモデルであるという理由で)この一部のアプリに必要なリソースが欠けているときであり、通常の例は、アプリが、モバイル機器において存在していないセンサを必要とするときである。その上、モバイル機器は、一時的に、一部のアプリを動作させることができないことがあり、それは、この一部のアプリに必要なリソースが当面、利用できないときであり、通常の例は、アプリが、高い電力消費を必要とし、バッテリ・レベルが低いときである。
【0005】
そのため、モバイル機器の固有的限界の場合、これには、モデルがより新しく、よりパワフルになるのにつれて、対応する費用を伴うモバイル機器の変更が必要になるが、モバイル機器の変更は、(例えば、予算制約の理由で)実現可能でない場合も、または(例えば、所要のリソースの必要性が、ほんのまれにしかないとき)適切でない場合もある。代わりに、一時的限界の場合には、これには、所要のリソースが利用可能に戻る(例えば、バッテリが再充電される)まで待機が必要になるが、対応する遅延は、多くの実際の状況では(例えば、1つの情報がすぐに必要なとき)、耐え難い場合がある。
【0006】
代替として、米国特許出願公開第2012/0265884号には、モバイル機器および1つまたは複数のクラウド・プロバイダに対する/の間のコードの実行割当ての費用を割り出すための技法が提案されている。実行割当て費用は、モバイル機器およびクラウド・プロバイダに関する実行割当てデータに基づいて査定(または割出し)可能であり、例えば、モバイル機器の電力消費は、アプリケーション・プログラムのウェブレットをどのように割り当てるべきであるかを割り出す際の因子として使用され得る。
【0007】
具体的には、「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」には、リソースに制約のあるモバイル機器の能力を拡張するクラウド・リソースの使用を可能にする柔軟なアプリケーション・モデルが記載されている。このモデルは、(その実行場所がトランスペアレントな)ウェブレットと呼ばれる複数のコンポーネント内への単一のアプリケーションのパーティション、およびウェブレット実行コンフィギュレーションの動的な適合を含む。
【0008】
その上、「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」には、精密な粒度で自動的にアプリケーションをパーティション分割するとともに、ターゲットのコンピュータ計算および通信環境についての実行時間およびエネルギー使用を最適化する静的解析と動的プロファイリングとの組合せが提案されている。ランタイム時に、アプリケーション・パーティション分割は、選択された時点でモバイル機器からのスレッドをクラウド内のクローンに移動させ、そこでパーティションの残りについて実行し、移動したスレッドをモバイル機器に戻して再統合することによって達成される。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】米国特許出願公開第2012/0265884号
【非特許文献】
【0010】
【非特許文献1】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
【非特許文献2】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
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、これには、プログラミング・モデル、またはアプリがその中で動作する環境、あるいはその両方に対するかなりの変更が必要になる。
【課題を解決するための手段】
【0012】
本開示の簡略化した概要が、その基本的な理解を与えるために本明細書に提示されるが、この概要の唯一の目的は、その以下のより詳細な説明に対する前置きとして簡略化された形態で本開示のいくつかの概念を紹介することであり、その主要な要素を特定するものとして解釈すべきでも、またはその範囲を描写するものとして解釈すべきでもない。
【0013】
概括的に言えば、本開示は、動的にアクションの実行を委譲するアイディアに基づいている。
【0014】
具体的には、本開示の1つまたは複数の態様は、(あらゆる他の態様に準用する特定の態様に関して与えられる何らかの有利な特徴とともに)参照によって原文通りに本明細書に組み込まれている請求項すべての文言により、独立請求項において示され、その有利な特徴は、従属請求項において示される。
【0015】
より具体的には、態様が、コンピューティング・マシンにおいてソフトウェア・アプリケーションを動作させるための方法を提供し、ここで、アクションの実行は、ランタイム時に委譲コンポーネントにバインドされる対応する要求に応答して、少なくとも1つのローカル・コンポーネントに、または前記少なくとも1つのローカル・コンポーネントの利用可能性に従って(アクションの少なくとも一部を実行することができる)少なくとも1つのリモート・コンポーネントに、あるいはその両方に、委譲コンポーネントによって委譲される。
【0016】
さらなる態様が、対応するコンピュータ・プログラム(および対応するコンピュータ・プログラム製品)を提供する。
【0017】
さらなる態様が、対応するシステムを提供する。
【0018】
本開示の解決策、ならびにそのさらなる特徴および利点は、添付の図面とともに読まれることになる、非制限的な指示として純粋に与えられる以下の詳細な説明に関して最良に理解されよう(ただし、簡単にするために、対応する要素は、等しいまたは類似の参照記号により示され、それらの説明は繰り返されず、各実体の名前は、全体的に、そのタイプとその属性(値、コンテンツ、表現など)をともに示すために使用される。)
【図面の簡単な説明】
【0019】
図1】本開示の実施形態による解決策がこの中で適用可能なコンピューティング・マシンのブロック図である。
図2】本開示の実施形態による解決策の例示的な適用例の図的表現である。
図3】本開示の実施形態の例示的なアプリケーション・シナリオを実施するのに使用可能なメイン・ソフトウェア・ユニットの役割を表すコラボレーション図である。
図4】本開示の実施形態の別の例示的なアプリケーション・シナリオを実施するのに使用可能なメイン・ソフトウェア・ユニットの役割を表すコラボレーション図である。
【発明を実施するための形態】
【0020】
図1を具体的に参照すると、本開示の実施形態による解決策がこの中で適用可能なコンピューティング・マシン100のブロック図が示されている。
【0021】
具体的には、コンピューティング・マシン100は、モバイル機器、例えば、スマートフォン、またはタブレットである。モバイル機器100は、バス構造105と並列に接続されているいくつかのユニットを備える。詳細には、マイクロプロセッサ(μP)110(複数可)が、モバイル機器100の動作を制御し、RAM115が、マイクロプロセッサ110によって作業メモリとして使用され、ROM120が、モバイル機器100のブートストラップのための基本コードを記憶する。モバイル機器100はまた、マス・メモリ125も備え、このマス・メモリ125は、内部フラッシュ・メモリおよび(SDタイプなどの)可能な外部フラッシュ・メモリ・カードを含む。その上、モバイル機器100は、入力/出力(I/O)ユニット130、例えば、モバイル電話トランシーバ(TX/RX)、Wi−Fiタイプのワイヤレス・ネットワーク・インターフェース・カード(WNIC:Wireless Network Interface Card)、タッチ画面、コマンド・ボタン、ラウドスピーカ、およびマイクロホンを有する。
【0022】
次に、図2を参照すると、本開示の実施形態による解決策の例示的な適用例を図的に表現したものを示している。
【0023】
一般的なモバイル機器は、1つまたは複数の(モバイル)アプリを動作させる。各アプリには、1つまたは複数のアクション(例えば、対応するセンサを用いて物理量を測定すること)の実行が必要である。各アクションは、ランタイム時にそれを実行することになる、実際のコンポーネントへの後の、または動的なアクションのバインディングについて、その1つまたは複数の特性(例えば、それの名前)を用いて定義される。こうして、アプリは、(必要なときにのみ、それらを実行するのに最も適しているコンポーネントに解決されるアクションを)他のどのアプリがそれらに提供することになるのかを正確に知らなくても他のアプリの機能を使用することができる。
【0024】
本開示の実施形態による解決策では、モバイル機器はまた、委譲コンポーネントを備え、委譲コンポーネントは、アプリの上述したアクションから成る(対応する特性によって定義される)1つまたは複数のアクションの組を実行することができるようにそれ自体を登録する。
【0025】
そのため、アプリがアクションを実行する必要があるとき、対応する要求が、(その登録に従ってランタイム時にその対応する要求にバインドされる)委譲コンポーネントによって受け取られる。
【0026】
委譲コンポーネントは、(アクション、もしくは少なくともその一部を実行することができる)モバイル機器のローカル・コンポーネント(複数可)、または例えば、別のモバイル機器もしくはクラウド環境における(アクション、もしくは少なくともその一部を実行することができる)リモート・コンピューティング・マシン(複数可)のリモート・コンポーネント(複数可)、あるいはその両方にアクションの実行を委譲する。アクションの実行をどのように委譲するかについての決定は、ローカル・コンポーネントの利用可能性に基づく。例えば、アクションは、モバイル機器が、対応するセンサを有するときはローカルに実行され、逆に、別のモバイル機器においては全体的にリモートに、または(対応するセンサを共有する)別のモバイル機器においては部分的にリモートに、かつ(共有センサによって測定されている値を利用する)クラウド環境においてはリモートに実行される。
【0027】
こうして、アプリ(またはより概括的には、任意のソフトウェア・アプリケーション)は、モバイル機器(またはより概括的には、任意のコンピューティング・マシン)が、(その固有的限界か、一時的限界かのいずれかの理由で)アプリをサポートすることができなくなるときですら動作することができ、具体的には、これは、ソフトウェア・アプリケーションによって求められるリソースが、コンピューティング・マシンにおいて不足しているか(例えば、コンピューティング・マシンが、感度レベルの低いセンサを有している、または古いモデルであるという理由)、あるいは当面、利用できないか(例えば、コンピューティング・マシンのバッテリ・レベルが低いという理由)のいずれかのときに起こり得る。
【0028】
そのため、コンピューティング・マシンの固有的限界の場合には、(モデルがより新しく、よりパワフルになるにつれて)、対応する費用削減とともにコンピューティング・マシンの変更の回避が可能であり、その場合、ソフトウェア・アプリケーションは、コンピューティング・マシンの変更が実現可能でない、または適切でないときですら(利用可能なコンピューティング・マシンにおいて)動作することができる。代わりに、コンピューティング・マシンの一時的限界の場合には、ソフトウェア・アプリケーションは、(所要のリソースが利用可能に戻るまで、待機の必要なく)実際に必要なときに動作することができる。
【0029】
次に、図3を参照すると、本開示の実施形態の例示的なアプリケーション・シナリオを実施するのに使用可能なメイン・ソフトウェア・ユニットの役割を表すコラボレーション図を示している。
【0030】
具体的には、ソフトウェア・ユニットは、典型的には、プログラムが動作しているときに、モバイル機器のマス・メモリに記憶され、作業メモリ内に(少なくとも部分的に)ロードされる。プログラムは、最初、例えば、リムーバブル・ストレージ機器から、または(Internetなどの)ネットワークからマス・メモリ上にインストールされる。この点において、各ソフトウェア・ユニットは、指定された論理機能を実施するための1つまたは複数の実行可能な命令を含む、コード・モジュール、コード・セグメント、またはコードの一部分を表すことができる。具体的には、図は、(各メッセージが、符号「O」によって始まる連続番号により示される対応する動作を表す、一連の交換メッセージを用いて)ソフトウェア・ユニットの静的な構造とソフトウェア・ユニットの動的な振舞いとをともに説明している。
【0031】
モバイル機器100は、それのハードウェアにおいて直接、動作する(モバイル)オペレーティング・システム305を有し、このオペレーティング・システム305は、任意の他のプログラムが動作することが可能なその最上位におけるソフトウェア・プラットフォームを定義し(例えば、Google Inc.によるAndroid(商標))、オペレーティング・システム305は、可能な触覚フィードバックによるジェスチャ(すなわち、現実の行動に対応する入力)を使用する直接操作に基づいたタッチ画面用に主に設計されているユーザ・インターフェースを有する。
【0032】
種々のアプリが、モバイル機器100にインストール可能であり、(例えば、Java(R)プログラミング言語で書かれる)各アプリは、サンドボックス(すなわち、モバイル機器100の厳重に管理されたリソースへのアクセスを提供する隔離された環境)で動作するように意図される。アプリは、各コンポーネントが、特定のタスクを行うように個々にアクティブ化可能な1つまたは複数のコンポーネントを含む。各コンポーネントは、(ユーザ・インターフェースの単一の画面を表示する)アクティビティ、(バックグランドで動作する)サービス、(ブロードキャストされた告知に応答する)ブロードキャスト・レシーバ、または(データ・ストレージを管理する)コンテンツ・プロバイダとすることができる。アプリはまた、マニフェスト・ファイルを含む。マニフェスト・ファイルは、オペレーティング・システム305に可視であるアプリのコンポーネントを宣言し、各コンポーネントは、それの能力を示す1つまたは複数のインテント・フィルタ(すなわち、各インテント・フィルタは、コンポーネントが行うことのできるタスクを示す)により宣言され得る。マニフェスト・ファイルは、各フィーチャが、アプリによって使用される(ハードウェア、またはソフトウェア、あるいはその両方の)リソース(例えば、オペレーティング・システム・レベル、VoIP、センサ、Wi−Fi、ブルートゥース、カメラ、GPS、USB)を示す、可能なフィーチャを宣言し、各フィーチャは、そのフィーチャが、それなしでは動作することができないアプリに必要とされているかどうか、またはそのフィーチャが、それなしでも動作することができるアプリに単に好まれているだけかどうかを示す属性を有することができる。フィーチャは、情報提供にすぎず、その場合、オペレーティング・システム305は、アプリがインストールされるとき、モバイル機器100におけるフィーチャの利用可能性を検証しない(しかし、フィーチャは、例えば、それを動作させることができないことになるモバイル機器へのアプリのダウンロードを防ぐために、他のアプリケーションによって使用されることもある)。マニフェスト・ファイルはまた、(アプリのインストール時に、モバイル機器100のユーザによって許可されるべき)アプリのサンドボックスの外部にあるリソースにアクセスする任意の許可を宣言する。
【0033】
各コンテンツ・プロバイダは、対応する要求をオペレーティング・システム305のコンテンツ・リゾルバに提示することによってアクティブ化される。アクティビティ、サービス、およびブロードキャスト・レシーバはそれぞれ、(インテントと呼ばれる)対応するメッセージをオペレーティング・システム305に提示することによってアクティブ化される。インテントは、明示的か、暗黙的かのいずれかとすることができる。明示的インテントは、(同じアプリで、または異なるアプリで)アクティブ化すべき特定のコンポーネントを示し、この特定のコンポーネントは、この場合、静的に(または、先に)この明示的インテントにバインドされる。代わりに、暗黙的インテントは、(アクティビティおよびサービスについて)実行すべきアクション、または(ブロードキャスト・レシーバについて)告知されるアクションを単に示すだけであり、それにより、アクションをそれぞれ実行する、または受け取る実際のコンポーネントは、ランタイム時に動的に(または、後に)この暗黙的インテントにバインドされる。アクションは、1つまたは複数のその特性を用いて抽象的レベルで(暗黙的)インテントで定義される。具体的には、インテントは、(対応する定数を用いて)アクションのタイプを定義し、インテントはまた、作用すべきデータ(例えば、それの場所およびタイプ)、アクティブ化されるべきであるコンポーネントの1つまたは複数のカテゴリ、アクティブ化されたコンポーネントに引き渡すべき追加の情報、およびアクティブ化されたコンポーネントをどのように管理するかを命令するフラグも定義することができる。オペレーティング・システム305は、それのアクションを実行する、または受け取ることができるコンポーネントを見つけることによって、ランタイム時に各インテントを解決する。これを目的として、オペレーティング・システム305は、インテントで定義されるアクションを、インストールされたアプリすべてのインテント・フィルタと比較する。同様に、各インテント・フィルタは、コンポーネントが抽象的レベルで(アクティビティおよびサービスについて)実行する、または(ブロードキャスト・レシーバについて)受け取ることのできるアクションを示し、具体的には、インテント・フィルタは、1つまたは複数のアクション・タイプを定義し、また、作用すべきデータ、およびその1つまたは複数のカテゴリも定義することができる。各インテント・フィルタは、インテントに対してテストされ、インテント・フィルタは、それのアクション・タイプのうちの1つにインテントのアクション・タイプが一致するとき、それのカテゴリのうちの1つにインテントのあらゆるカテゴリが一致するとき、およびそれのデータにインテントのデータが一致するとき、テストをパスすると見なされる。次いで、インテント・フィルタがテストをパスしたコンポーネントは、オペレーティング・システム305によってアクティブ化され(一方、コンポーネントが全く見つけられなかったときは、例外が引き起こされる)、複数のコンポーネントがテストをパスしたときには、それらのうちの1つが、ユーザによる手動で、または自動的に(例えば、優先度に従って、もしくはデフォルトによって)のいずれかで選択される。
【0034】
議論されている例では、非常に単純なアプリ310が、モバイル機器100にインストールされる。アプリ310は、(アプリ310に含まれているか、含まれていないかのいずれかの)サービスS0を利用するアクティビティA0と、(破線の対応する矢印によって示されるようにランタイム時に暗黙的にバインドされる)別のアクティビティA1とを含む。アプリ310は、とりわけ、各インテント・フィルタを有するアクティビティA0、A1、および場合によりサービスS0を定義するマニフェスト・ファイル315を有し、具体的には、アクティビティA0は、2つのインテント・フィルタIFA0a、IFA0bを有し、(存在しているならば)サービスS0は、(任意の対応する所要のフィーチャの指示を伴う)インテント・フィルタIFS0を有する。例えば、アプリ310は、短期天気予報を実施し、アクティビティA0は、(それのインテント・フィルタIFA0aおよびIFA0bに対応する2つの異なるレイアウトを含む)アプリ310の開始画面を提供し、サービスS0は、(対応するアクションおよび気圧計の必要性を示すそれのインテント・フィルタIFS0により)地域の気圧を測定し、経時的なそれの変化に従って天気予報を確定し、アクティビティA1は、天気予報を表示する。
【0035】
本開示の実施形態による解決策では、委譲アプリ320もまた、モバイル機器100にインストールされる。委譲アプリ320は、プロキシ・サービスSpを含み、このプロキシ・サービスSpは、(モバイル機器100にインストールされるアプリの)1つまたは複数のサービスのアクションを実行することができるようにそれ自体を登録し、具体的には、議論されている例では、プロキシ・サービスSpは、サービスS0の同じアクションを実行することができるようにそれ自体を登録する。プロキシ・サービスSpは、評価サービスSeを利用し、この評価サービスSeは、プロキシ・サービスSpに要求される各アクションの委譲を評価する。評価サービスSeは、測定サービスSmを利用し、この測定サービスSmは、モバイル機器100の1つまたは複数のメトリック(例えば、バッテリ・レベル、利用可能なワイヤレス接続、対応する帯域幅)を測定する。評価サービスSeもやはり、発見サービスSdを利用し、この発見サービスSdは、プロキシ・サービスSpに要求されるアクションを実行するために利用可能な他のコンピューティング・マシン(例えば、本明細書では以降、リモート・モバイル機器と呼ばれる他のモバイル機器)を発見する。発見サービスSdはまた、他のモバイル機器からの対応する要求に応答し、これを目的として、発見サービスSdも同様に、測定サービスSmを利用する。委譲アプリ320は、とりわけ、各インテント・フィルタを有するサービスSp、Se、Sm、Sdを定義するマニフェスト・ファイル325を有し、具体的には、プロキシ・サービスSpは、サービスS0と同じインテント・フィルタIFS0を有し、評価サービスSeは、アクションの委譲を評価するためのインテント・フィルタIFeを有し、測定サービスSmは、モバイル機器100のメトリックを測定するためのインテント・フィルタIFmを有し、発見サービスSdは、リモート・モバイル機器の利用可能性を発見するためのインテント・フィルタIFdaと、対応する要求に応答するためのインテント・フィルタIFdrとを有する。
【0036】
アプリ310および委譲アプリ320の(それらのマニフェスト・ファイル315および325にそれぞれ示される)インテント・フィルタは、オペレーティング・システム305に登録される。この動作は、各アプリ310、320がモバイル機器100にインストールされるとき、およびそのマニフェスト・ファイル315、325が更新されるときはいつでも行われ、具体的には、委譲アプリ320を参照すると、マニフェスト・ファイル325は、モバイル機器の技術的な進歩についていくその新規バージョンをダウンロードすることによって、またはインストール済み/削除済みのアプリのサービスについてインテント・フィルタを追加/除外することによって、更新可能である(01.Register(登録する))。
【0037】
アプリ310が動作しているときはいつでも、アプリ310のアクティビティA0は、それがアクティブ化される必要があり次第、サービスS0の(appインテントおよびappアクションとそれぞれ呼ばれる)アクションについてのインテントをオペレーティング・システム305に提示する。具体的には、議論されている例では、appインテントは、地域の気圧を監視し、経時的なそれの変化に従って天気予報を確定するアクションと、これを目的とする気圧計の必要性を示す(O2.Intent(インテントする))。オペレーティング・システム305は、appアクションを実行することができるコンポーネントを見つけることによって、appインテントを解決することを試みる。この状況においては、オペレーティング・システム305は常に、プロキシ・サービスSpが(同じappアクションのインテント・フィルタに登録されるので)appインテントに対するテストをパスすることを見つける。その上、オペレーティング・システム305はまた、appインテントに対するテストをパスするモバイル機器100上のローカル・サービスも見つけることができる(すなわち、議論されている例では、そのとき、サービスS0は、モバイル機器100において存在している)が、プロキシ・サービスSpのインテント・フィルタは、いずれの場合でもプロキシ・サービスSpをオペレーティング・システム305に選択させるようにデフォルトとして登録される。そのため、appインテントは常に、プロキシ・サービスSpに動的にバインドされ、それにより、プロキシ・サービスSpは、その中に示されるアクションを実行するようにアクティブ化される(O3.Bind(バインドする))。
【0038】
それに応答して、プロキシ・サービスSpは、評価サービスSeによるappインテントの評価のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム305によって評価サービスSeに直接、バインドされる(04.Evaluate(評価する))。評価サービスSeは、appアクションが、(例えば、図示されていない対応するコンテンツ・プロバイダから読み出される)1つまたは複数のポリシーの組に従って、ローカルに実行されなくてはならないのか、またはリモートに実行されなくてはならないのかを決定する。これを目的として、種々のポリシーが実施可能である。まず初めに、評価サービスSeは、appアクションを実行することができるローカル・サービスが、モバイル機器100において存在しているかどうかを判断し、これを目的として、評価サービスSeは、appインテントに対するテストをパスする何らかのローカル・サービス(すなわち、議論されている例では、サービスS0)が存在するかどうか、およびモバイル機器100がappインテントによって要求されるフィーチャ(すなわち、議論されている例では、気圧計)をすべて有しているかどうかを検証する。所要のフィーチャによるローカル・サービスが何も見つからない場合、appアクションの実行は常に、リモートに委譲される。逆に、appアクションの実行をローカルに委譲するか、またはリモートに委譲するかの決定は、モバイル機器100の1つまたは複数の選択されたメトリックに基づくことができる。この場合、評価サービスSeは、測定サービスSmによるメトリックの測定のために明示的インテントを提示し、この明示的インテントは、オペレーティング・システム305によって測定サービスSmに直接、バインドされる。測定すべきメトリックは、(例えば、図示されていない対応するコンテンツ・プロバイダから読み出される)測定サービスSmのレベルにおいて定義され得、対応するインテントにおける評価サービスSeによってパスされ得、またはハードコード化され得る。測定サービスSmは、メトリックを測定し、その指示を評価サービスSeに返す(O5.Measure(測定する))。次いで、評価サービスSeは、種々のポリシーに従って、appアクションの実行をローカルに委譲すること、またはリモートに委譲することに決定することができる。例えば、appアクションの実行は、バッテリ・レベルが閾値を下回るときは、リモートに委譲され、一方、任意の利用可能なワイヤレス接続の帯域幅が閾値を下回るときは、ローカルに委譲される。
【0039】
評価サービスSeがappアクションの実行をリモートに委譲することに決定するとき、評価サービスSeは、任意のリモート・モバイル機器の対応する利用可能性を発見するための明示的インテントを発見サービスSdに提示し、この明示的インテントは、オペレーティング・システム305によって発見サービスSdに直接、バインドされる(06.Discover(発見する))。それに応答して、発見サービスSdは、(例えば、同じWi−Fiスポットまたは同じ通信セルに接続される)モバイル機器の付近で、図には1つしか示されていない任意のリモート・モバイル機器に対してappアクションを実行する利用可能性を要求するためのインテントをブロードキャストする。プライム表記法100’により区別される各リモート・モバイル機器は、オペレーティング・システム305’、および(320’により示される)類似の委譲アプリを有し、この類似の委譲アプリは、同様に、(Sp’により示される)プロキシ・サービス、(Se’により示される)評価サービス、(Sm’により示される)測定サービス、および(Sd’により示される)発見サービスを含み、委譲アプリ320’は、(そのアプリのアクションについて、図示されていない異なるインテント・フィルタを含む)類似のマニフェスト・ファイル325’を有する。appアクションを実行する利用可能性を要求するためのインテントは、発見サービスSd’に対して明示的であり、それにより、このインテントは、オペレーティング・システム305’によって発見サービスSd’に直接、バインドされる(O7.Request(要求する))。
【0040】
発見サービスSd’は、リモート・モバイル機器100’が(例えば、図示されていない対応するコンテンツ・プロバイダから読み出される)1つまたは複数のポリシーの組に従って、appアクションを実行するために利用可能であるかどうかを決定する。これを目的として、種々のポリシーが実施可能である。まず初めに、発見サービスSd’は、リモート・モバイル機器100’がappインテントによって要求されるフィーチャ(すなわち、議論されている例では、気圧計)をすべて有するかどうかを判断する。所要のフィーチャが見つからない場合、リモート・モバイル機器100’は常に、利用できなくされる。逆に、リモート・モバイル機器100’の利用可能性についての決定は、その1つまたは複数の選択されたメトリックに基づくことができる。この場合、発見サービスSd’は、測定サービスSm’によるメトリックの測定のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム305’によって測定サービスSm’に直接、バインドされる(上記のように、メトリックは、発見サービスSd’のレベルにおいて定義され、対応するインテントにおける評価サービスSe’によってパスされ、またはハードコード化される)。測定サービスSm’は、メトリックを測定し、その指示を発見サービスSd’に返す(O8.Measure(測定する))。次いで、発見サービスSd’は、リモート・モバイル機器100’を利用可能にするように、または種々のポリシーに従わないように、決定することができる。例えば、リモート・モバイル機器100’は、(例えば、同じ機構の)他の予め許可されたモバイル機器に対してのみ利用可能にすることができる。その上、リモート・モバイル機器100’は、バッテリ・レベルが第1の閾値を上回るときのみ、appインテントによって要求されるフィーチャを共有するために(しかし、appアクションを実行しないように)利用可能にすることができ、一方、リモート・モバイル機器100’は、バッテリ・レベルが(第1の閾値より高い)第2の閾値を上回るときには、appアクションを実行するために利用可能にすることができる。発見サービスSd’は、モバイル機器100の発見サービスSdに、リモート・モバイル機器100’の利用可能性(すなわち、完全に、部分的に、または全く)を示す応答を、その可能な特性、例えば、それの処理パワー、作業メモリ・サイズ、センサ特性と一緒に返す(O9.Response(応答))。
【0041】
発見サービスSdがappアクションを(完全にまたは部分的に)実行するために利用可能な1つまたは複数のリモート・モバイル機器100’を見つけたと仮定すると、発見サービスSdは、(例えば、図示されていない対応するコンテンツ・プロバイダから読み出される)1つまたは複数のポリシーの組に従って、それらのうちの1つを選択する。これを目的として、種々のポリシーが実施可能である。まず初めに、発見サービスSdは、appアクションを完全に実行するために利用可能なリモート・モバイル機器100’に優先権を与え、複数のリモート・モバイル機器100’が残っている場合、選択は、(対応する応答で返される)リモート・モバイル機器100’の特性に、または対応する接続(例えば、タイプおよび帯域幅)に、あるいはその両方に基づくことができる。次いで、発見サービスSdは、appアクションを(もしあるとすれば)完全にまたは部分的にだけ実行するために利用可能なリモート・モバイル機器100’の指示を評価サービスSeに返す(O10.Availability(利用可能性))。
【0042】
いずれの場合でも、評価サービスSeは、appインテントの評価の結果をプロキシ・サービスSpに返し、この結果は、appアクションがローカルに実行されなくてはならないのか、またはリモートに実行されなくてはならないのかを示し、後者の場合、この結果はまた、完全にまたは部分的にappアクションを行うために利用可能なリモート・モバイル機器100’を示す(アクションO11.Decision(決定))。
【0043】
appアクションの実行がローカルに実行されなくてはならないとき、プロキシ・サービスSpは、サービスS0によるappアクションの実行のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム305によってサービスS0に直接、バインドされる。次いで、サービスS0は、appアクション(すなわち、議論されている例では、地域の気圧を測定し、経時的なそれの変化に従って天気予報を確定する)を実行するようにアクティブ化され、サービスS0は、appアクションの実行の何らかの結果(すなわち、議論されている例では、地域の気圧および天気予報)をプロキシ・サービスSpに返す(O12.Local(ローカル))。
【0044】
逆に、appアクションを完全に実行するために利用可能なリモート・モバイル機器100’が見つけられたと仮定すると、プロキシ・サービスSpは、appアクションの実行をもたらすためのインテントをリモート・モバイル機器100’に送信し、このインテントはまた、アプリ310の(または少なくともサービスS0の)イメージを含む。appアクションの実行をもたらすためのインテントは、プロキシ・サービスSp’に対して明示的であり、それにより、このインテントは、オペレーティング・システム305’によってプロキシ・サービスSp’に直接、バインドされる(O13.Remote(リモート))。それに応答して、プロキシ・サービスSp’は、モバイル機器100をエミュレートする仮想マシン330を(例えば、Quick EMUlator、すなわちQEMUを用いて)インスタンス化する。次いで、プロキシ・サービスSp’は、(クローンのアプリ310’と呼ばれる)アプリ310のクローンを対応するイメージから作成し、その場合、このアプリ310のクローンは、(A0’、A1’により示される)同じアクティビティ、および(S0’により示される)同じサービスを含む(O14.Clone(クローン))。こうして、クローンのアプリ310’は、リモート・モバイル機器100’をクローンのアプリ310’から保護する隔離レイヤとして機能する仮想マシン330を含む任意のオペレーティング・システム305’において(モバイル機器100のオペレーティング・システム305とは異なっている場合ですら)動作することができる。この時点で、プロキシ・サービスSp’は、サービスS0’によるappアクションの実行のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム305’によってサービスS0’に直接、バインドされる。次いで、サービスS0’は、appアクション(すなわち、議論されている例では、地域の気圧を測定し、経時的なそれの変化に従って天気予報を確定する)を実行するようにアクティブ化され、サービスS0’は、appアクションの実行の何らかの結果(すなわち、議論されている例では、地域の気圧および天気予報)をプロキシ・サービスSp’に返す(O15.Execute(実行する))。こうして、リモート・モバイル機器100’によって実行されるアクションは、モバイル機器100の付近で測定される値に基づく。この文脈では、用語「付近で(in proximity)」は、測定された値を消費するアクションを基準にして意図すべきである。換言すれば、リモート・モバイル機器100’は、許容できる程度の正確さを伴って、モバイル機器100の場所でその値を示す(それの場所に関係する)物理量(すなわち、同じWi−Fiエリアまたは通信セル内の地域の気圧)を測定するべきである。プロキシ・サービスSp’は、ひいては、この結果をプロキシ・サービスSpに返す(O16.Return.(返す))。
【0045】
いずれの場合でも、プロキシ・サービスSpは、サービスS0からのappアクションの実行の結果(O12)、またはプロキシ・サービスSp’を経由するサービスS0’からのappアクションの実行の結果(O16)を受け取り次第、それをアクティビティA0に返す(O17.Result(結果))。次いで、アプリ310の動作は、通常通り継続する。こうして、appアクションがローカルに実行された、またはリモートに実行されたことは、アプリ310には(わずかな性能差については別として)不透明であり、その場合、アプリ310は、それを実行するモバイル機器100の能力について全く問わない。
【0046】
上述の技法では、アクションの実行の委譲は、アプリケーション・レベルにおいて(委譲アプリ320によって)実施される。そのため、所望の結果は、オペレーティング・システム305に対する何らかの変更も(またはせいぜい最小限のコンフィギュレーション変更)、特別なプログラミング・モデルも必要とせずに達成可能である。実際、アプリ310は、変更されず、すなわち、何ら特別な再モデリングまたは計装に直面することなしにローカルに動作するためになおも書かれ、その上、バインディングは、それのネイティブ/内蔵の機構を使用して(最大でも、アプリの分散ポリシーを変更して、アプリを、それらの所要のフィーチャを欠いたモバイル機器にすらインストールできるようにする必要性を伴って)、オペレーティング・システム305によって通常通り管理される。
【0047】
次に、図4を参照すると、本開示の実施形態の別の例示的なアプリケーション・シナリオを実施するのに使用可能なメイン・ソフトウェア・ユニットの役割を表すコラボレーション図が示されている。
【0048】
このシナリオは、appインテントによって要求されるフィーチャを共有するためにだけ(しかし、それを完全に実行しないように)利用可能なリモート・モバイル機器100’が見つけられているという点で、上述のシナリオとは異なり、典型的な例が、インテントアプリによって要求されるが、モバイル機器100には存在していないセンサである。この場合、プロキシ・サービスSpが評価サービスSeからappインテントの評価の結果を受け取るとき(O11)、プロキシ・サービスSpは、センサの共有化をもたらすためのインテントをリモート・モバイル機器100’に送信し、上記のように、センサの共有化をもたらすためのインテントは、プロキシ・サービスSp’に対して明示的であり、それにより、このインテントは、オペレーティング・システム305’によってプロキシ・サービスSp’に直接、バインドされる(O13.1.Share(共有する))。それに応答して、プロキシ・サービスSp’は、センサ(すなわち、議論されている例では、気圧計)をアクティブ化し、次いで、プロキシ・サービスSp’は、対応する物理量の測定された値(すなわち、議論されている例では、地域の気圧)をプロキシ・サービスSp’に返す(O15.1.Sense(感知する))。プロキシ・サービスSp’は、ひいては、この測定された値をプロキシ・サービスSpに返す(O16.1.Return(返す))。
【0049】
この時点で、プロキシ・サービスSpは、appアクションの実行をもたらすためのインテントをクラウド環境405に送信し、このインテントはまた、アプリ310の(または少なくともサービスS0の)イメージ、および測定された値を含む。クラウド環境405は、サービスとしてオンデマンドの(例えば、利用回数制料金での)コンピューティング・リソースを提供し、クラウド・サービスは、クラウド・プロバイダによって利用可能にされ、このクラウド・プロバイダは、クラウド・リソースを、(それらが、概して、それらの実際の実施がユーザには完全に不透明な仮想タイプであるように)要求と同時にプロビジョニングし、構成し、リリースする。この特別な場合では、クラウド環境405は、モバイル機器(本明細書では以降、仮想モバイル機器100’’と呼ばれる)をエミュレートする仮想マシンを含み、これを目的として、仮想モバイル機器100’’は、(305’’により示される)同じオペレーティング・システムと、(Sp’’により示される)プロキシ・サービスしか含まない、(325’’により示される)それのマニフェスト・ファイル付きの(320’’により示される)簡略化された委譲アプリとを有する。アプリアクションの実行をもたらすためのインテントは、プロキシ・サービスSp’’に対して明示的であり、それにより、このインテントは、オペレーティング・システム305’’によってプロキシ・サービスSp’’に直接、バインドされる(O13.2.Virtual(仮想))。次いで、プロキシ・サービスSp’’は、対応するイメージから(クローンのアプリ310’’と呼ばれる)アプリ310のクローンを作成し、その場合、このアプリ310のクローンは、(A0’’、A1’’により示される)同じアクティビティ、および(S0’’により示される)同じサービスを含む(O14.2.Clone(クローン))。この時点で、プロキシ・サービスSp’’は、サービスS0’’によるappアクションの実行のための明示的インテントを提示し、この明示的インテントは、オペレーティング・システム305’’によってサービスS0’’に直接、バインドされ、このインテントはまた、受け取り済みの測定された値を含む。次いで、サービスS0’’は、appアクションを実行するようにアクティブ化されるが、この場合、サービスS0’’は、それを感知する必要性は何ら持たずに(すなわち、議論されている例では、経時的な測定された地域の気圧の変化に従って、天気予報を確定することによって)、測定された値に直接、作用し、サービスS0’’は、appアクションの実行の何らかの結果(すなわち、議論されている例では、地域の気圧および天気予報)をプロキシ・サービスSp’’に返す(O15.2.Execute(実行する))。プロキシ・サービスSp’’は、ひいては、この結果をプロキシ・サービスSpに返す(O16.2.Return(返す))。
【0050】
ここで、動作の流れは、上記のように進み、プロキシ・サービスSpは、appアクションの実行の結果をアクティビティA0に返し(O17)、次いで、アプリ310の動作は、通常通り継続する。
【0051】
これにより、モバイル機器100は、例えば、それらの複雑さの理由により実現可能にならないアクションを実行することが可能になり、実際に、クラウド環境405は、無限大のコンピューティング・リソースの幻想を提供する。そのため、これは、リソース需要が高いアクション(例えば、画像認識サービス)の場合に特に有利である。同時に、これらのアクションは、モバイル機器100の付近で(リモート・モバイル機器100’によって)測定される値に基づくことができる。
【0052】
当然ながら、ローカルで特別な要件を満たすために、当業者は、多数の論理的、または物理的、あるいはその両方の修正形態および変更形態を上述の解決策に適用することができる。より具体的には、この解決策は、その1つまたは複数の実施形態に関してある程度の具体性を伴って説明されてきたが、形態および詳細における様々な省略、置換、および変形、ならびに他の実施形態が可能であることを理解されたい。具体的には、本開示の種々の実施形態は、そのより完全な理解を与えるように前述の説明に示された(数値などの)具体的な詳細がない場合ですら実施可能であり、逆に、よく知られている特徴は、不必要な詳細を伴って説明を曖昧にしないようにするために、省略されている場合も、または簡略化されている場合もある。その上、本開示の任意の実施形態に関連して説明される具体的な要素、または方法ステップ、あるいはその両方が、概括的設計選択の問題として任意の他の実施形態に組み込まれ得ることは明らかに意図される。いずれの場合でも、順序修飾子または他の修飾子は、単に、同じ名前を有する要素を区別するラベルとして使用されるにすぎず、それら自体だけで、優先度、優先権、または順序を何ら含意していない。その上、用語含める(include)、備える(comprise)、有する(have)、収容する(contain)、および含む(involve)(ならびにそれらの任意の形態)は、オープンの、包括的でない意味を伴って意図すべきであり(すなわち、列挙された項目に限定すべきでなく)、用語基づく(based on)、に依存する(dependent on)、に従う(according to)、の機能(function of)(およびそれらの任意の形態)は、包括的でない関係性(すなわち、さらなる可能な可変形態が含まれている)として意図すべきであり、用語1つ(a/an)は、(特段の明白な指示がない限り)1つまたは複数の項目として意図すべきである。
【0053】
例えば、一実施形態が、コンピューティング・マシンにおいてソフトウェア・アプリケーションを動作させるための方法を提供する。この方法は、以下のステップを含む。コンピューティング・マシンにおいて1つまたは複数のアクションの組を実行する委譲コンポーネントの能力が登録される(各アクションは、この能力の少なくとも1つの特性によって定義される)。委譲コンポーネントによって、ソフトウェア・アプリケーションから、アクションのうちの1つを実行することへの要求が受け取られ、要求は、その能力の登録に従ってランタイム時に委譲コンポーネントにバインドされる。アクションの実行は、(アクションの少なくとも一部を実行することができる)コンピューティング・マシンの少なくとも1つのローカル・コンポーネントに、または前記少なくとも1つのローカル・コンポーネントの利用可能性に従って(アクションの少なくとも一部を実行することができる)少なくとも1つのリモート・コンピューティング・マシンの少なくとも1つのリモート・コンポーネントに、あるいはその両方に、委譲コンポーネントによって委譲される。
【0054】
しかしながら、ソフトウェア・アプリケーションは、任意のタイプ(例えば、自動更新コンテンツを表示するウィジェット)であってよく、モバイル・タイプ(例えば、ネットブック)ですらない任意のコンピューティング・マシンにおいて動作することができる。委譲コンポーネントは、任意のタイプ(例えば、ブロードキャスト・レシーバ、ライブラリ、アプリケーション)であってよく、その能力は、任意のやり方で登録され得る(以下を参照のこと)。各アクションは、任意の数およびタイプの特性によって(例えば、Uniform Resource Identifier、すなわちURIを参照して)定義され得る。各要求は、任意のやり方で(例えば、フッキング技法によりそれを傍受することによって、またはオペレーティング・システム内であっても)委譲コンポーネントにバインドされ得る。アクションの実行は、ローカル・コンポーネントの利用可能性を定義する任意の特性(固有的、または一時的のいずれかの、例えば、センサ存在、メモリ空間、マイクロプロセッサ・タイプ、オペレーティング・システム・レベル、バッテリ・レベル、GPSカバレッジ、Wi−Fiもしくは3G接続)に従って、任意の数およびタイプのローカル・コンポーネント、またはリモート・コンポーネント、あるいはその両方に委譲され得る。
【0055】
一実施形態では、アクションの実行を前記委譲することは、ローカル・コンポーネントまたはリモート・コンポーネントから、アクションの実行の結果を受け取ること、およびその結果をソフトウェア・アプリケーションに返すことを含む。
【0056】
しかしながら、アクションの結果は、任意のやり方で(例えば、異なるローカル・コンポーネント/リモート・コンポーネントから部分的に)収集され得、(単純なリターン・コードに至るまで)任意のタイプであってよい。いずれの場合でも、アクションの実行はまた、ソフトウェア・アプリケーションに返すべき結果を全く有していなくてもよい。
【0057】
一実施形態では、アクションの実行を前記委譲することは、ローカル・コンポーネントがコンピューティング・マシンにおいて全く存在しないとき、アクションの実行をリモート・コンポーネントに委譲することを含む。
【0058】
しかしながら、アクションの実行をリモートに委譲することの決定はまた、ユーザによる手動承認に条件付けられ得る。
【0059】
一実施形態では、アクションの実行を前記委譲することは、ローカル・コンポーネントがコンピューティング・マシンにおいて存在するとき、コンピューティング・マシンの少なくとも1つのメトリックを測定すること、および前記少なくとも1つのメトリックに従って、アクションの実行を、ローカル・コンポーネントに、またはリモート・コンポーネントに、委譲することを含む。
【0060】
しかしながら、メトリックは、任意の数であっても、および任意のタイプ(例えば、マイクロプロセッサ使用、作業メモリ占有)であってもよい。メトリックは、任意のやり方(例えば、要求と同時に、または定期的に)測定され得る。その上、アクションの実行をローカルに委譲する、またはリモートに委譲することの決定は、他のポリシーに基づくこと(例えば、接続費用、サービスの所要の品質に従って)ができる。いずれの場合でも、可能であるときは、アクションの実行を常にローカルに委譲することを妨げるものは何もない。
【0061】
一実施形態では、アクションは、サービスのバックグランドでの実行を含む。
【0062】
しかしながら、アクションは、任意のタイプ(例えば、単純な動作から全アプリケーションまで)であってよい。
【0063】
一実施形態では、アクションは、物理量の感知を含む。
【0064】
しかしながら、物理量は、任意のタイプであってよく、任意の数またはタイプのセンサ(例えば、加速度計、光センサ、コンパス、ジャイロスコープ、近接センサ)によって感知され得る。
【0065】
一実施形態では、アクションの実行を前記委譲することは、物理量の感知を第1のリモート・コンピューティング・マシンの第1のリモート・コンポーネントに委譲すること、第1のリモート・コンポーネントから物理量の測定値を受け取ること、物理量の測定値をパスすることによって、サービスの実行を、ローカル・コンポーネントに、または第2のリモート・コンピューティング・マシンの第2のリモート・コンポーネントに、委譲することを含む。
【0066】
しかしながら、アクションは、任意の数およびタイプのリモート・コンピューティング・マシンにおける任意の数の物理量の感知を必要とする場合があり(以下を参照のこと)、次いで、サービスの実行は、物理量の測定値に基づく任意の値(例えば、単純な測定値、あるいは1つまたは複数の測定値から計算される値)をパスすることによって、任意の数およびタイプのコンピューティング・マシンの任意の数のローカル・コンポーネント、またはリモート・コンポーネント、あるいはその両方に委譲され得る(以下を参照のこと)。
【0067】
一実施形態では、コンピューティング・マシンは、モバイル機器であり、第1のリモート・コンピューティング・マシンは、モバイル機器の付近の別のモバイル機器であり、第2のリモート・コンピューティング・マシンは、ネットワーク・サービスによって提供される。
【0068】
しかしながら、他のモバイル機器が、モバイル機器と任意の場所関係性に(例えば、ブルートゥース・カバレッジ内に)あってよく、ネットワーク・サービスは、任意のタイプ(例えば、ウェブ・サービス)であってよい。いずれの場合でも、コンピューティング・マシン、第1のリモート・コンピューティング・マシン、および第2のコンピューティング・マシンは、任意の他のタイプであってよい。
【0069】
一実施形態では、アクションの実行を前記委譲することは、アクションの少なくとも一部を実行する、コンピューティング・マシンの付近の各リモート・コンピューティング・マシンの利用可能性を発見することを含む。
【0070】
リモート・コンピューティング・マシンの利用可能性は、任意のやり方で(例えば、特定のアクションの要求と同時に、または定期的にあらゆるアクションの要求を収集し、要求と同時に収集された情報から特定のアクションの要求を抽出することによって)発見され得る。その上、各リモート・コンピューティング・マシンの利用可能性は、任意のやり方で(例えば、ロード条件、またはユーザによる手動承認に従って)決定され得、いずれの場合でも、一部のリモート・コンピューティング・マシンは、(例えば、公共事業を実施するときは)常に、利用可能とすることができる。発見すべきリモート・コンピューティング・マシンは、任意のやり方で(無作為にすら)選択され得る。
【0071】
一実施形態では、アクションの実行を前記委譲することは、アクションの実行を、コンピューティング・マシンをエミュレートする仮想コンピューティング・マシンに委譲することを含む。
【0072】
しかしながら、仮想マシンは、任意のやり方で(要求と同時にか、または事前にかのいずれかで、コンピューティング・マシンと同期されるように維持されて)インスタンス化され得る。いずれの場合でも、アクションは、(仮想化レイヤを何ら含まない)リモート・コンピューティング・マシンにおいて直接、実行され得る
【0073】
一実施形態では、アクションの実行を前記委譲することは、リモート・コンピューティング・マシンに、ソフトウェア・アプリケーションのクローンをそのイメージから作成させることを含む。
【0074】
しかしながら、クローン作成は、ローカル・コンポーネントのみ、または全ソフトウェア・アプリケーションに関係し得る。いずれの場合でも、リモート・コンピューティング・マシンにおいて所要のコンポーネントまたは全ソフトウェア・アプリケーションを一時的に(それらのオペレーティング・システムは互換性があると仮定して)、(任意の場所から)ダウンロードする、およびインストールすることを妨げるものは何もない。
【0075】
一実施形態では、委譲コンポーネントの能力を前記登録することは、アクションを実行する委譲コンポーネントの能力を示す、アクションの1つごとのインテント・フィルタを含むマニフェスト・ファイルを委譲コンポーネントに与えることを含む。
【0076】
しかしながら、マニフェスト・ファイルは、任意の形式を有することができ、任意の他のストレージ構造(例えば、データベース)によって置き換えられ得る。いずれの場合でも、任意の他のやり方で(例えば、それのインストール時に実行される特定の命令によって)委譲コンポーネントの能力を登録することを妨げるものは何もない。
【0077】
概して、同じ解決策が等価的方法により(そのより多くのステップまたは部分の同じ機能を有する類似のステップを使用すること、本質的でないいくつかのステップを除外すること、またはさらなる任意選択のステップを追加することによって)実施される場合、類似の考慮すべき点が与えられ、その上、各ステップは、異なる順序で、同時に、または交互的なやり方で(少なくとも一部)、行われてもよい。
【0078】
さらなる実施形態が、コンピュータ・プログラムを提供し、このコンピュータ・プログラムは、コンピュータ・プログラムがコンピューティング・マシンにおいて実行されると、コンピューティング・マシンに上述の方法のステップを行わせる。
【0079】
さらなる実施形態が、コンピュータ・プログラムを実装する非一時的コンピュータ可読媒体を含むコンピュータ・プログラム製品を提供し、コンピュータ・プログラムは、コンピューティング・マシンの作業メモリに直接ロードすることができるコードを含み、それによって、同じ方法を行うようにコンピューティング・マシンを構成する。
【0080】
しかしながら、上述の解決策は、スタンドアロン・ソフトウェア・アプリケーションとして、オペレーティング・システムのためのプラグインとして、またはオペレーティング・システムそれ自体の中で直接にすら実施され得る。当業者には理解されるように、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として実装され得る。したがって、本発明の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、または本明細書で「回路(circuit)」、「モジュール(module)」、または「システム(system)」とすべて大まかに呼ばれることがあるソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形態を取ることができる。さらには、本発明の態様は、コンピュータ可読プログラム・コードをその上に実装した1つまたは複数のコンピュータ可読媒体(複数可)で実装されるコンピュータ・プログラム製品の形態を取ることもできる。1つまたは複数のコンピュータ可読媒体(複数可)の任意の組合せが利用され得る。コンピュータ可読媒体は、コンピュータ可読信号媒体であっても、コンピュータ可読ストレージ媒体であってもよい。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光学、電磁気、赤外線、もしくは半導体のシステム、装置、またはデバイス、あるいは前述の任意の適した組合せとすることができるが、これらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例(非包括的なリスト)には、1つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、消去可能なプログラマブル読取り専用メモリ(EPROMもしくはFlashメモリ)、光ファイバ、ポータブル・コンパクト・ディスク読取り専用メモリ(CD−ROM)、光ストレージ・デバイス、磁気ストレージ・デバイス、または前述の任意の適した組合せが含まれる。本文献の文脈では、コンピュータ可読ストレージ媒体は、命令実行のシステム、装置、またはデバイスによって、あるいは命令実行のシステム、装置、またはデバイスに関連して使用するためのプログラムを収容する、または記憶することが可能な任意の有形媒体とすることができる。コンピュータ可読信号媒体は、例えば、ベースバンドで、または搬送波の一部として、コンピュータ可読プログラム・コードがその中に実装された伝播データ信号を含むことができる。そのような伝播信号は、電磁気、光学、またはそれらの任意の適した組合せを含むが、これらに限定されない任意の多様な形態を取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなくて、かつ命令実行のシステム、装置、またはデバイスによって、あるいは命令実行のシステム、装置、またはデバイスに関連して使用するためのプログラムを伝え、伝播し、または輸送することが可能な、任意のコンピュータ可読媒体とすることができる。コンピュータ可読媒体において実装されるプログラム・コードは、ワイヤレス、ワイヤライン、光ファイバ・ケーブル、RFなど、またはそれらの任意の適した組合せを含むが、これらに限定されない任意の適切な媒体を使用して伝送され得る。本発明の態様の動作を遂行するためのコンピュータ・プログラム・コードは、Java(R)、Smalltalk(R)、またはC++などのオブジェクト指向のプログラミング言語、および「C」プログラミング言語など、従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語、あるいは類似のプログラミング言語の任意の組合せで書かれ得る。プログラム・コードは、スタンドアロン・ソフトウェア・パッケージとして関連コンピュータにおいて全体的に、このコンピュータにおいて部分的に、およびリモート・コンピュータにおいて部分的に、またはリモート・コンピュータにおいて全体的に実行することが可能である。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを通じてコンピュータに接続可能であり、あるいは接続は、(例えば、Internet Service Providerを使用してInternetを通じて)外部コンピュータになされてもよい。本発明の態様は、本発明の実施形態により、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図、またはブロック図、あるいはその両方を参照して、説明されている。フローチャート図、またはブロック図、あるいはその両方の各ブロック、およびフローチャート図、またはブロック図、あるいはその両方におけるブロックの組合せが、コンピュータ・プログラム命令によって実施可能であることは理解されよう。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、フローチャート、またはブロック図、あるいはその両方のブロックまたは複数のブロックにおいて指定される機能/行為を実施するための手段を生み出すように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを創出することができる。また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に記憶される命令が、フローチャート、またはブロック図、あるいはその両方のブロックまたは複数のブロックにおいて指定される機能/行為を実施する命令を含む製造品を創出するように、コンピュータ可読媒体に記憶され、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスを特定の形で機能するように指図することができる。また、コンピュータ・プログラム命令は、コンピュータ、または他のプログラマブル装置において実行される命令が、フローチャート、またはブロック図、あるいはその両方のブロックまたは複数のブロックにおいて指定される機能/行為を実施するためのプロセスを提供するように、コンピュータ実施プロセスを創出するべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイスにおいて一連の動作ステップを行わせることができる。
【0081】
さらなる実施形態が、上述の方法のステップを行うための手段を含むシステムを提供する。
【0082】
しかしながら、この方法はまた、異なるアーキテクチャ(例えば、ローカル、広域、グローバル、セルラ、または衛星のネットワーク)に基づく、かつ任意のタイプの(ワイヤード、またはワイヤレス、あるいはその両方の)接続を利用する、システムにおいて遂行され得る。
【0083】
概して、システムが異なる構造を有し、または等価的コンポーネントを含み、あるいはシステムが他の動作可能な特性を有する場合、類似の考慮すべき点が与えられる。いずれの場合でも、そのあらゆるコンポーネントが、より多くのエレメントに分けられても、または2つ以上のコンポーネントが、単一のエレメントへと一緒に組み合わせられてもよく、その上、各コンポーネントが、対応する動作の実行を並行してサポートするために反復されてもよい。その上、特段の指示がない限り、概して、種々のコンポーネント間の相互作用は何ら、連続的である必要はなく、直接的であっても、または1つまたは複数の媒介を通じて間接的であってもよい。
図1
図2
図3
図4