(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-02-02
(45)【発行日】2022-02-10
(54)【発明の名称】アプリケーションコンテナを使用するコードおよび従属データの送達の管理
(51)【国際特許分類】
G06F 9/445 20180101AFI20220203BHJP
G06F 8/61 20180101ALI20220203BHJP
【FI】
G06F9/445
G06F8/61
【外国語出願】
(21)【出願番号】P 2020001294
(22)【出願日】2020-01-08
(62)【分割の表示】P 2018519369の分割
【原出願日】2017-01-13
【審査請求日】2020-02-06
(32)【優先日】2016-01-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】カークパトリック,フィカス
(72)【発明者】
【氏名】バラダラジャン,バチャスパティ
(72)【発明者】
【氏名】ガナパシー,サブラマニアム
(72)【発明者】
【氏名】バウマン,パトリック
(72)【発明者】
【氏名】エバンス,ジェジー
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2002-358208(JP,A)
【文献】特開2008-090578(JP,A)
【文献】特開2006-259806(JP,A)
【文献】特表2004-529419(JP,A)
【文献】米国特許出願公開第2013/0263139(US,A1)
【文献】Anthony KINNEY,"Getting started with Microsoft Application Virtualization",TechNet Magazine November 2008,英国,Microsoft,2008年11月,pages:34-41,[令和3年4月15日検索]インターネット<URL:http://download.microsoft.com/documents/uk/technet/downl
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/40- 8/54
9/455
(57)【特許請求の範囲】
【請求項1】
コンピューティングデバイスによって、アプリケーションを実行するための要求を受信することに応答して、
前記アプリケーションのためのアプリケーションコンテナによって、前記アプリケーションの
アプリケーションコードを分析することにより当該アプリケーションのデータ従属性を決定することを含み、前記データ従属性は、1つ以上の必要なデータ従属性と1つ以上の随意のデータ従属性とを含んでおり、前記1つ以上の必要なデータ従属性は、前記アプリケーションの実行に必要であり、前記1つ以上の随意のデータ従属性は、前記アプリケーションの実行に必要でなく、さらに、
前記アプリケーションコンテナによって、前記1つ以上の必要なデータ従属性の抽出を開始することと、
前記アプリケーションコンテナによって、前記1つ以上の随意のデータ従属性の抽出を開始することと、
随意のデータ従属性のうちの少なくとも1つが前記アプリケーションコンテナによってまだ受信されていないが前記1つ以上の必要なデータ従属性のすべてを受信することに応答して、前記コンピューティングデバイスによって前記アプリケーションを実行することとを含む、方法。
【請求項2】
前記アプリケーションコンテナは、複数の異なるアプリケーションについての共通の機能のセットを含む、請求項1に記載の方法。
【請求項3】
前記アプリケーションを実行することは、前記コンピューティングデバイスによって、前記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを含み、前記グラフィカルユーザインターフェイスは、前記アプリケーションコンテナによってまだ受信されていない前記1つ以上の随意のデータ従属性のうちの前記少なくとも1つのためのプレースホルダグラフィカル要素を含んでおり、
前記アプリケーションを実行することはさらに、前記1つ以上の随意のデータ従属性のうちの前記少なくとも1つを受信することに応答して、前記コンピューティングデバイスによって、前記プレースホルダグラフィカル要素の代わりに前記少なくとも1つの随意のデータ従属性に関連付けられる情報を表示のために出力することを含む、請求項1または2に記載の方法。
【請求項4】
前記1つ以上の随意のデータ従属性に含まれるデータに基づいて、前記1つ以上の随意のデータ従属性に含まれる前記データを使用するように構成される前記アプリケーションの1つ以上のインストール可能なサブパッケージを決定することと、
前記アプリケーションコンテナによって、前記データを使用するように構成される前記アプリケーションの前記1つ以上のインストール可能なサブパッケージのうちの少なくとも1つをあらかじめフェッチすることとをさらに含む、請求項1から3のいずれか1項に記載の方法。
【請求項5】
前記アプリケーションの前記1つ以上のデータ従属性を決定することは、前記アプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出することを含む、請求項1から4のいずれか1項に記載の方法。
【請求項6】
前記アプリケーションの前記1つ以上のデータ従属性を決定することは、前記アプリケーションコンテナによって、前記アプリケーションのメタデータを解析することを含む、請求項1から5のいずれか1項に記載の方法。
【請求項7】
前記アプリケーションコンテナは、第1のデータソースから前記1つ以上の必要なデータ従属性を抽出し、前記第1のデータソースとは異なる第2のデータソースから前記1つ以上の随意のデータ従属性を抽出する、請求項1から6のいずれか1項に記載の方法。
【請求項8】
前記1つ以上の必要なデータ従属性は、前記アプリケーションのインストール可能なサブパッケージのセットのうちの1つ以上または位置データを含み、前記1つ以上の随意のデータ従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、または、サードパーティデータのうちの1つ以上を含む、請求項1から7のいずれか1項に記載の方法。
【請求項9】
コンピューティングデバイスであって、
アプリケーションコンテナを格納する1つ以上のストレージコンポーネントと、
1つ以上のプロセッサとを含み、
前記1つ以上のプロセッサは、前記アプリケーションコンテナのコンテナランタイムを実行し、アプリケーションを実行するための要求を受信することに応答して、
前記アプリケーションの
アプリケーションコードを分析することにより当該アプリケーションのデータ従属性を決定することを行い、前記データ従属性は、1つ以上の必要なデータ従属性と1つ以上の随意のデータ従属性とを含んでおり、前記1つ以上の必要なデータ従属性は、前記アプリケーションの実行に必要であり、前記1つ以上の随意のデータ従属性は、前記アプリケーションの実行に必要でなく、
前記1つ以上のプロセッサはさらに、
前記1つ以上の必要なデータ従属性の抽出を開始することと、
前記1つ以上の随意のデータ従属性の抽出を開始することと、
随意のデータ従属性のうちの少なくとも1つが前記コンテナランタイムによってまだ受信されていないが前記1つ以上の必要なデータ従属性のすべてを受信することに応答して、前記アプリケーションを実行することとを行う、コンピューティングデバイス。
【請求項10】
前記アプリケーションコンテナは、複数の異なるアプリケーションについての共通の機能のセットを含む、請求項9に記載のコンピューティングデバイス。
【請求項11】
前記コンテナランタイムはさらに、前記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを行うよう前記1つ以上のプロセッサによって実行可能であり、前記グラフィカルユーザインターフェイスは、前記コンテナランタイムによってまだ受信されていない前記1つ以上の随意のデータ従属性のうちの少なくとも1つのためのプレースホルダグラフィカル要素を含んでおり、
前記コンテナランタイムはさらに、前記1つ以上の随意のデータ従属性のうちの前記少なくとも1つを受信することに応答して、前記プレースホルダグラフィカル要素の代わりに前記少なくとも1つの随意のデータ従属性に関連付けられる情報を表示のために出力することを行うよう前記1つ以上のプロセッサによって実行可能である、請求項9または10に記載のコンピューティングデバイス。
【請求項12】
前記アプリケーションコンテナは、
前記1つ以上の随意のデータ従属性に含まれるデータに基づいて、前記1つ以上の随意のデータ従属性に含まれる前記データを使用するように構成される前記アプリケーションの1つ以上のインストール可能なサブパッケージを決定することと、
前記データを使用するように構成される前記アプリケーションの前記1つ以上のインストール可能なサブパッケージのうちの少なくとも1つをあらかじめフェッチすることとを行うよう、前記1つ以上のプロセッサによって実行可能である、請求項9から11のいずれか1項に記載のコンピューティングデバイス。
【請求項13】
前記コンテナランタイムは、少なくとも前記アプリケーションのメタデータを解析するように実行可能であることによって、前記1つ以上の随意のデータ従属性を決定するよう前記1つ以上のプロセッサによって実行可能である、請求項9から12のいずれか1項に記載のコンピューティングデバイス。
【請求項14】
前記コンテナランタイムは、少なくとも前記アプリケーションのヒューリスティック解析から得られる従属情報をリモートサーバから抽出するように実行可能であることによって、前記1つ以上の随意のデータ従属性を決定するよう前記1つ以上のプロセッサによって実行可能である、請求項9から13のいずれか1項に記載のコンピューティングデバイス。
【請求項15】
前記コンテナランタイムは、第1のデータソースから前記1つ以上の必要なデータ従属性を抽出し、前記第1のデータソースとは異なる第2のデータソースから前記1つ以上の随意のデータ従属性を抽出するよう、前記1つ以上のプロセッサによって実行可能である、請求項9から14のいずれか1項に記載のコンピューティングデバイス。
【請求項16】
前記1つ以上の必要なデータ従属性は、前記アプリケーションのインストール可能なサブパッケージのセットのうちの1つ以上または位置データを含み、前記1つ以上の随意のデータ従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、または、サードパーティデータのうちの1つ以上を含む、請求項9から15のいずれか1項に記載のコンピューティングデバイス。
【請求項17】
命令を含むコンピュータ読取可能記プログラムであって、前記命令は、コンピューティングデバイスの1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサに、請求項1から8のいずれか1項に記載の方法を実行させる、コンピュータ読取可能プログラム。
【発明の詳細な説明】
【背景技術】
【0001】
背景
コンピューティングデバイスは、アプリケーションを実行し、ユーザ入力を受信し、表示のための情報を出力するといった、さまざまな機能を実行し得る。たとえば、コンピューティングデバイスは、Eメールクライアント、トラベルアシスタントおよびメッセージングクライアントなどといったアプリケーションを実行し得る。アプリケーションは、さまざまな機能を実現する1つ以上の実行可能なコンポーネントを含み得る。いくつかの分散された環境において、ユーザコンピューティングデバイス(たとえばスマートフォン)は、リモートコンピューティングシステムによって提供されるアプリケーションを検索してインストールするためにメディアストアアプリケーションを使用し得る。典型的には、ユーザが、メディアストアアプリケーションにおいて、ユーザコンピューティングデバイスにインストールするべきアプリケーションを選択すると、リモートコンピューティングシステムは、アプリケーションのすべての機能を実行するために、ユーザが実際にすべての機能を使用するかどうかに関わらず、実行可能なコンポーネントのすべてを含んでいる単一のファイルを送信する。さらに、アプリケーションは典型的に、実行可能なコンポーネントのすべてがダウンロードされユーザコンピューティングデバイスにインストールされるまで、実行することができない。
【発明の概要】
【課題を解決するための手段】
【0002】
概要
一般に、本開示の技術は、存在するオペレーティングシステムへの修正を必要とすることなく、アプリケーションコンテナによるアプリケーションコードおよび従属データの送達の管理を提供する。アプリケーションコンテナは、アプリケーションコンテナ内で実行される任意のアプリケーションコードがなければ、スタンドアロンの機能的なアプリケーションではないが、オペレーティングシステムにとっては、アプリケーションコンテナはアプリケーション自体であるように見える。アプリケーションコンテナは、アプリケーションを記述する際に、デベロッパによって使用可能な多くの異なるアプリケーションプログラミングインターフェイス(API: application programming interface)を提供し得る。すなわち、デベロッパは、存在するオペレーティングシステムによって提供されるかまたは共有ライブラリによって提供されるAPIに依拠することを回避し、また、コンパイル時において、さまざまなライブラリを静的にリンクすることを回避し得る。その代わりに、デベロッパは、アプリケーションコンテナによって提供されるAPIは不変であり、アプリケーションコンテナ自身がアプリケーション従属性および共有ライブラリアップデートなどを管理すると仮定し得る。ユーザがアプリケーションのインストールを開始する場合、アプリケーションコンテナは、並列(並行)で、当該アプリケーションについての1つ以上の別個のサブパッケージと、デベロッパによって特定される任意の従属データとを抽出する。従属データは、必須の従属データと、随意(任意)の従属データとを含み得る。
【0003】
少なくとも1つのサブパッケージおよび必須の従属データがひとたび抽出されると、アプリケーションコンテナは、サブパッケージまたは随意の従属データのすべてが抽出され得るわけではないが、アプリケーションの実行を開始し得る。すなわち、アプリケーションサブパッケージおよび従属データのすべてがコンピューティングデバイスにダウンロードされることを待つのではなく、この開示の技術は、コンピューティングデバイスがアプリケーションサブパッケージおよび従属データの抽出を管理するためにアプリケーション
コンテナを使用することを可能にし、かつ、必要なサブパッケージおよび従属データがひとたび抽出されると、サブパッケージおよび従属データのすべてがコンピューティングデバイスにダウンロードされていなくても、アプリケーションを実行し始めることを可能にする。これにより、コンピューティングデバイスは、実行に先立ってデータのすべてをダウンロードすることが必要とされる場合よりも、アプリケーションをより迅速に実行し始めることができる。さらに、当該技術は、アプリケーションのある機能を実行するのに必要なサブパッケージおよびデータのみをダウンロードすることによって、当該アプリケーションがコンピューティングデバイス上で消費するストレージスペースを少なくすることができるので、コンピューティングデバイスにおいて利用可能なデータストレージスペースをより効率的に使用し得る。
【0004】
一例では、方法は、コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することと、スーパーバイザーコンポーネントによって、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられているかどうかを決定することと、アプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられていると決定することに応答して、アプリケーションコンテナのコンテナランタイムによって、アプリケーションの複数の従属性を決定することとを含み、1つ以上の従属性は、1つ以上の必要な従属性と1つ以上の随意の従属性とを含む。上記方法はさらに、コンテナランタイムによって、1つ以上の必要な従属性の抽出を開始することと、コンテナランタイムによって、1つ以上の随意の従属性の抽出を開始することと、随意の従属性のうちの少なくとも1つがコンテナランタイムによってまだ受信されていないが1つ以上の必要な従属性のすべてを受信することに応答して、コンピューティングデバイスによってアプリケーションを実行することとを含み得る。
【0005】
別の例では、コンピューティングデバイスは、スーパーバイザーコンポーネントを格納する1つ以上のストレージコンポーネントと、1つ以上のプロセッサとを含む。1つ以上のプロセッサは、アプリケーションを実行するための要求を受信することと、アプリケーションを実行するための要求を受信することとを行うよう、スーパーバイザーコンポーネントを実行する。スーパーバイザーコンポーネントが、アプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられていると決定することに応答して、アプリケーションコンテナのコンテナランタイムは、アプリケーションの1つ以上の従属性を決定することを行うよう、1つ以上のプロセッサによって実行可能であり、1つ以上の従属性は、1つ以上の必要な従属性と1つ以上の随意の従属性とを含んでおり、アプリケーションコンテナのコンテナランタイムはさらに、1つ以上の必要な従属性の抽出を開始することと、1つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも1つがコンテナランタイムによってまだ受信されていないが1つ以上の必要な従属性のすべてを受信することに応答して、アプリケーションを実行することとを行うよう1つ以上のプロセッサによって実行可能である。
【0006】
別の例において、命令でエンコードされる一時的でないコンピュータ読取可能記憶媒体であって、命令は、コンピューティングデバイスの1つ以上のプロセッサによって実行されると、1つ以上のプロセッサに、アプリケーションを実行するための要求を受信することと、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられているかどうか決定することと、アプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられていると決定することに応答して、アプリケーションの1つ以上の従属性を決定することとを行わせ、1つ以上の従属性は、1つ以上の必要な従属性と1つ以上の随意の従属性とを含む。命令はさらに、1つ以上のプロセッサに、1つ以上の必
要な従属性の抽出を開始することと、1つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも1つがコンテナランタイムによってまだ受信されていないが1つ以上の必要な従属性のすべてを受信することに応答して、アプリケーションを実行することとを行わせる。
【0007】
別の例において、装置は、アプリケーションを実行するための要求を受信するための手段と、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられているかどうか決定するための手段と、アプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられていると決定することに応答して、アプリケーションの1つ以上の従属性を決定するための手段とを含み、1つ以上の従属性は、1つ以上の必要な従属性と1つ以上の随意の従属性とを含む。装置はさらに、1つ以上の必要な従属性および1つ以上の随意の従属性の抽出を開始するための手段と、随意の従属性のうちの少なくとも1つがコンテナランタイムによってまだ受信されていないが1つ以上の必要な従属性のすべてを受信することに応答して、アプリケーションを実行するための手段とを含む。
【0008】
1つ以上の例の詳細を添付の図面および以下の説明で述べる。本開示の他の特徴、目的および利点は、記載および図面ならびに添付の請求の範囲から明白になるであろう。
【図面の簡単な説明】
【0009】
【
図1】この開示の技術に従った、動的にアプリケーション従属性をロードするアプリケーションコンテナを有する例示的なコンピューティングデバイスを示す概念図である。
【
図2】本開示の1つ以上の局面に従った、コンピューティングデバイスのさらなる詳細を示すブロック図である。
【
図3】この開示の技術に従った、動的にアプリケーション従属性をロードするためのアプリケーションコンテナを有するコンピューティングデバイスの例示的な動作を示すフロー図である。
【発明を実施するための形態】
【0010】
詳細な説明
図1は、この開示の技術に従った、動的にアプリケーション従属性をロードするアプリケーションコンテナ102A~102C(「アプリケーションコンテナ102」)を有する例示的なコンピューティングデバイス100を示す概念図である。コンピューティングデバイス100の例は、(スマートフォンを含む)携帯電話、ラップトップコンピュータ、タブレットコンピュータといったポータブルまたはモバイルデバイス、スマートウォッチまたはコンピュータ化されたアイウェアといったウェアラブルコンピューティングデバイス、スマートテレビジョンプラットホーム、車両ヘッドユニットのような車両コンピューティングシステム、カメラ、携帯情報端末(PDA)などを含み得るがこれらに限定されない。いくつかの例において、コンピューティングデバイス100は、デスクトップコンピュータ、サーバ、メインフレームなどのような据え置き型のコンピューティングデバイスを含み得る。
【0011】
図1に示されるように、コンピューティングデバイス100は、アプリケーションコンテナ102、システムランタイム126、オペレーティングシステム136、および、ハードウェアコンポーネント138を含む。コンピューティングデバイス100は、ネットワーク140および通信リンク148A~148Bを介して1つ以上の他のリモートコンピューティングデバイス142A~142C(「リモートコンピューティングデバイス142」)と通信し得る。
図1に示されるように、ネットワーク140は、任意のパブリックまたはプライベート通信ネットワークを表わしており、たとえば、セルラーネットワー
ク、Wi-Fi(登録商標)ネットワーク、および/または、コンピューティングデバイス同士間でデータを送信するための他のタイプのネットワークである。コンピューティングデバイス100およびリモートコンピューティングデバイス142は、任意の好適な通信技術を使用して、ネットワーク140を介してデータを送受信し得る。たとえば、コンピューティングデバイス100は、通信リンク148Aを使用して、ネットワーク140に動作可能に結合され得る。リモートコンピューティングデバイス142Aは、通信リンク148Bによってネットワーク140に動作可能に結合され得る。ネットワーク140は、ネットワークハブ、ネットワークスイッチ、ネットワークルータなどを含み得、ネットワークハブ、ネットワークスイッチ、ネットワークルータは、動作可能に相互結合されており、これにより、コンピューティングデバイス100とリモートコンピューティングデバイス142との間で情報の交換が提供される。いくつかの例において、通信リンク138A~138Bはイーサネット(登録商標)、ATMまたは他のネットワーク接続であり得る。そのような接続は無線および/または有線接続であり得る。
【0012】
ハードウェアコンポーネント138は、たとえば、コンピュータプロセッサ、通信ユニット(たとえばモデムおよびネットワークインターフェイスコントローラなど)、入力コンポーネント、出力コンポーネント、存在感知型ディスプレイ、揮発性メモリおよび不揮発性メモリ、ならびに、電源を含み得るがこれらに限定されない。オペレーティングシステム136は、ハードウェアコンポーネント138上で実行し得、コンピューティングデバイス100のハードウェアおよびソフトウェアコンポーネントを管理する。たとえば、オペレーティングシステム136は、メモリ管理、プロセススケジューリングおよび不揮発性ストレージ管理を実行し得る。オペレーティングシステム136はさらに、コンピューティングデバイス100において実行されるアプリケーションにネットワークおよびセキュリティサービスを提供し得る。オペレーティングシステム136はさらに、上記よりも多いまたは少ない機能を実行し得る。
【0013】
ランタイムシステム126は、アプリケーションが記述および構築またはコンパイルされる特定のプログラミング言語に従って構築されるアプリケーションについての実行モデルを実現する。ランタイムシステム126は、実行の間にアプリケーションコンテナ102にアクセス可能である1つ以上のライブラリおよび/またはサービスを含み得る。この開示においてさらに記載されるように、各アプリケーションコンテナ102は別個のアプリケーションに対応し得る。ランタイムシステム126は、スレッドマネジメントサービスと、スクリーン描画およびユーザインターフェイスレンダリングコンポーネントと、アプリケーション間およびアプリケーション内メッセージングサービスとを含み得るが、これらはほんのいくつかの例示的なサービスである。アプリケーションコンテナ102は、ランタイムコンポーネント128によって公開されるアプリケーションプログラミングインターフェイス(API)を通じて当該サービスにアクセスし得る。いくつかの例において、ランタイムシステム126は1つ以上のプロセスおよび/またはスレッドとして実行され得る。プロセスおよび/またはスレッドの1つ以上は、オペレーティングシステム権限有りまたは権限無しで、実行され得る。
【0014】
図1に示されるように、ランタイムシステム126はランタイムコンポーネント128を含み得る。各別個のランタイムコンポーネントは、1つ以上のプロセスおよび/またはスレッドにより実現され得る。いくつかの例において、各別個のランタイムコンポーネントは、機能のユーザが定義したセットを提供し得る。たとえば、ユーザインターフェイスレンダリングコンポーネントは、ユーザインターフェイス要素(たとえばボタン、リスト、画像、および入力フィールドなど)およびそれらの対応する挙動を定義する1つ以上のライブラリにより実現され得る。ユーザインターフェイスレンダリングコンポーネントは、グラフィカルユーザインターフェイスにおいてユーザインターフェイス要素をレンダリングするようアプリケーションコンテナ102によって呼び出されるAPIを提供し得る
。
【0015】
スーパーバイザーコンポーネント128Aはランタイムコンポーネント128に含まれる。スーパーバイザーコンポーネント128Aは、アプリケーションコンテナ102のインストールおよびメンテナンスを実行し、アプリケーション間およびアプリケーション内メッセージングサービスを提供する。一般に、スーパーバイザーコンポーネント128Aは、コンピューティングデバイスにおいて実行されるオペレーティングシステム136とは異なる。スーパーバイザーコンポーネント128Aは、アプリケーションコンテナ102によって生成されるメッセージについてリッスン(listen)するメッセージブローカー130を含んでおり、送信側のアプリケーションコンテナまたは1つ以上の他のアプリケーションコンテナについてのアクションを実行する。スーパーバイザーコンポーネント128Aは、任意のメッセージ(たとえばユーザが特定した識別子としてURIを含むメッセージ)を送ることにおいて、第1の優先権または第1の機会を有し得る。いくつかの例では、たとえば、メッセージブローカー130は、アプリケーションコンテナプール132からアプリケーションコンテナを割り当てることと、メッセージについてセキュリティを実施することと、メッセージのログを記録することといった、メッセージについて付加的な処理を提供し得る。例として、アプリケーションコンテナ102Aは、同じアプリケーション内において、第1のユーザインターフェイスから第2のユーザインターフェイスまでナビゲートするようメッセージを生成し得る。アプリケーションコンテナ102Aは、フィルタのセットを含むメッセージングテーブル134を含むメッセージをメッセージブローカー130に送信し得、各フィルタは1つ以上の条件および1つ以上の通信アクションを有する。メッセージの内容がフィルタの条件とマッチする場合、メッセージブローカー130は、第2のグラフィカルユーザインターフェイスを出力するよう命令を実行するといった対応するアクションを実行し得る。いくつかの例では、上記のそのようなメッセージは、メッセージブローカー130にメッセージを転送することなく、ルータ112によって内部でルーティングされ得る。
【0016】
いくつかの例において、スーパーバイザーコンポーネント128Aは、少なくとも1つのアプリケーションコンテナがアプリケーションコンテナプール132に含まれており、起動の準備ができていることを保証する。アプリケーションコンテナプール132に含まれる各アプリケーションコンテナは現在、特定のアプリケーションに割り当てられておらず、現在、アプリケーションコードを実行していない。しかしながら、アプリケーションコンテナプール132に含まれる各アプリケーションコンテナは、スーパーバイザーコンポーネント128Aが特定のアプリケーションコンテナを起動し、特定のアプリケーションに特定のアプリケーションコンテナを割り当てる際に、アプリケーションコードをロードおよび実行することができるために十分なブートストラッピングコードを含む。アプリケーションコンテナプール132からの特定のアプリケーションコンテナは、スーパーバイザーコンポーネント128Aから命令を受信し、特定のアプリケーションについてのアプリケーションコードをロードおよび実行することを開始する。
【0017】
上述したように、アプリケーションコンテナ102の各々は、対応するアプリケーションが実行されているときに、別個のアプリケーションに対応し得る。さまざまな場合において、スーパーバイザーコンポーネント128Aは、どのアプリケーションコンテナがどの実行アプリケーションにマッピングされているかというマッピングを維持する。アプリケーションは、コンピューティングデバイス100上で動作を実行するために別個の機能を含み得る。たとえば、アプリケーションは、Eメールアプリケーション、テキストメッセージングアプリケーション、インスタントメッセージングアプリケーション、気象アプリケーション、ビデオ会議アプリケーション、ソーシャルネットワーキングアプリケーション、気象アプリケーション、株式市場アプリケーション、緊急警戒アプリケーション、スポーツアプリケーション、オフィス生産性アプリケーション、マルチメディアプレーヤ
ーを含み得る。
【0018】
ユーザまたはオペレーティングシステムが特定のアプリケーションを呼び出すと、スーパーバイザーコンポーネント128Aは動的に、アプリケーションコンテナプール132からアプリケーションコンテナ102を割り当て、対応するアプリケーションへの特定のアプリケーションコンテナ102のマッピングを維持する。あるアプリケーションが終了すると、スーパーバイザーコンポーネント128Aは、もはや必要でない任意のアプリケーションコンテナ102をクリーンアップし得る。たとえば、スーパーバイザーコンポーネント128Aは、アプリケーションコンテナ102の状態をリセットし得、または、現在終了しているアプリケーションにマッピングされたアプリケーションコンテナ102をアンインストールし得る。スーパーバイザーコンポーネント128Aが、アクティブに実行されているアプリケーションにもはやマッピングされていないアプリケーションコンテナ102をアンインストールする例において、スーパーバイザーコンポーネント128Aは、新しいアプリケーションコンテナをインストールし、それらをアプリケーションコンテナプール132に加え、これにより、アプリケーションの呼出に応答して、少なくとも1つのアプリケーションコンテナが起動される準備ができていることを保証する。これにより、アプリケーションインストールのユーザインタラクティブレイテンシーは、オペレーティングシステムの観点から各アプリケーションについて別個の識別性を維持しつつ、0またはほぼ0まで低減され得る。
【0019】
図1に示されるように、アプリケーションコンテナ102Aは、アプリケーションの実行可能なコンポーネント108の実行を命令するよう、実行環境およびサポートサービスを提供する。アプリケーションコンテナ102は、オペレーティングシステム136において別個のプロセスとして実行され得、複数の異なるアプリケーションについて共通の機能のセットを含み得る。いくつかの例において、アプリケーションコンテナ102Aは、メッセージングインターフェイス115を含む。ルータ112はメッセージングインターフェイス115を介してランタイムシステム126からメッセージを受信し得、ランタイムシステム126は実行可能なコンポーネント108およびルータ112からメッセージングインターフェイス115を介してメッセージを受信し得る。アプリケーションコンテナ102Aについてのプログラムロジックは、実行可能なコンポーネント108において実現され得る。実行可能なコンポーネントは、マシン実行可能コードのロジカルグルーピングであり得る。たとえば、オブジェクト指向設計において、単一の実行可能なコンポーネントは、マシン実行可能コードを含む単一のコンパイルされたクラスファイルであり得る。
【0020】
アプリケーションコンテナ102Aは、1つ以上のサブパッケージ104にのための容器(vessel)であり得る。いくつかの例において、サブパッケージは2つ以上の実行可能なコンポーネント108を含んでいる。サブパッケージは、リソース(たとえば画像、テキスト、ビデオもしくは任意の他のコンパイルされていないデータ)、セキュリティおよび/もしくは署名情報、バージョン情報および/もしくは従属性情報、または、アプリケーションのための任意の他の情報を含み得る。ソフトウェアデベロッパは、ユーザが定義した複数のサブパッケージで構成されるようにアプリケーションを設計し得る。ユーザが定義した各サブパッケージは、一緒に機能の離散的なセットを提供する実行可能なコンポーネントのセットを含み得る。たとえば、ソフトウェアデベロッパは、複数の異なるユーザインターフェイスを有するナビゲーションアプリケーションを設計し得る。各ユーザインターフェイスは、ユーザインターフェイス要素の異なるセットと、対応する挙動とを含み得る。そのため、各ユーザインターフェイスは、実行可能なコンポーネントの別個のセットを有するように実現され得る。たとえば、ナビゲーションアプリケーションは、ターンバイターン(turn-by-turn)ナビゲーションユーザインターフェイスと、ポイントオブインタレスト(point-of-interest)ユーザインターフェイス(たとえばマップ上でポイ
ントオブインタレストについて詳細を表示する)と、セッティングユーザインターフェイスとを含み得る。ソフトウェアデベロッパは、3つの異なるサブパッケージを有するアプリケーションを設計し得、各サブパッケージは、それぞれのユーザインターフェイスについて機能を実現するために実行可能なコンポーネントのセットを含む。
【0021】
アプリケーションコンテナ102Aはコンテナランタイム124を含み得る。コンテナランタイム124は、コンテナランタイム124、ランタイムシステム126および/またはオペレーティングシステム136内でライブラリによって提供されるサービスおよび/または機能に対する1つ以上のライブラリおよび/または1つ以上のアプリケーションプログラミングインターフェイス(API)117を含み得る。そのため、コンテナランタイム124はセキュアなプロセス内API層を提供し得る。すなわち、各アプリケーションコンテナ102は、アプリケーションコンテナがマッピングされる特定のアプリケーションのためのアプリケーションコードとプロセスおよびアドレススペースを共有する。プロセスおよびアドレススペースを共有することによって、アプリケーションコンテナ102は、アプリケーションコードと共有されるAPIコードとの間でメソッド呼出セマンティックス(method call semantics)を簡素化し得る。すなわち、ブロッキングプロセ
ス間通信呼出(blocking interprocess communication call)を使用することをデベロッパに要求するのではなく、デベロッパは直接的にAPI117を利用し得る。
【0022】
アプリケーションコンテナおよびコンテナランタイムを制御することによって、ランタイムシステム126は、API呼出を代理し得、アプリケーションコンテナおよびコンテナランタイムが不正な変更を加えられておらず、したがって、センシティブな挙動についてランタイムロジックを提供するということを照合し得る。たとえば、ユーザのデバイス識別子(たとえばデバイスのグローバル一意識別子)へのアクセスを要求するアプリケーションは、コンテナランタイムのAPIを通じて呼出を行うことが必要とされ得、これはスーパーバイザーコンポーネント128Aによりチェックし得、これにより、これは許可された挙動であるということを保証するか、または、たとえば個人を識別する情報を取り除くまたは匿名化することによりそのAPIの出力を修正する。一般に、アプリケーションコンテナ102は、オペレーティングシステム136への何らかの直接的なアクセスを許可し得、代理(proxying)を介して何らかの間接的なアクションを許可し得、さらに、あるAPIへのアクセスをブロックし得る。これにより、コンテナランタイム124は、さまざまな動作においてそのようなチェックが発生するという保証を実施し得る。なぜならば、そのような動作は、コンテナランタイム124のAPIを通じてのみなされ得るからである。さらに、アプリケーションコンテナ102のコンテナランタイム124がAPI117を提供するので、存在するオペレーティングシステム136へのアップデートを必要とするのではなく、アプリケーションアップデートについてアプリケーションコンテナ102へのアップデートが実行され得、これにより、任意のそのようなアップデートの採用率(adoption rate)が増加され得、オペレーティングプラットフォームのセキュリ
ティが増加され得る。
【0023】
コンテナランタイム124はさらに、プラットホームコーディネーションを必要とするAPI上で繰り返すために層を提供し得る。たとえば、サブパッケージは、位置のようないくつかの特定のデータを必要とすると宣言し得、コンテナランタイム124は、特定のサブパッケージについての実行可能なコンポーネントのロードと並列(並行)に、位置を得るとともに、アプリケーションの起動の際にアーギュメントとして当該位置を提供することが可能である。一例として、デベロッパは、アプリケーションについてのメタデータにおいて、いくつかの従属データがアプリケーションの実行に必要であることを特定し得る。コンテナランタイム124は、アプリケーションについてのアプリケーションコードを抽出して実行し始め得るだけでなく、並列(並行)で従属データを識別し抽出し得る。いくつかの場合において、デベロッパは、従属データが必須(すなわちアプリケーション
が実行することが必要)か、または、「最良の努力(ベストエフォート:best effort)
」(すなわちアプリケーションの動作/機能を改善するが厳密にアプリケーションが実行することを必要としているわけではない)であるかどうかを特定し得る。必須の従属データの例は、アプリケーションについて基本的なユーザインターフェイスを表示することが必要とされるデータであり得る。「最良の努力」の従属データの場合、コンテナランタイム124は、コンテナランタイム124がまだ「最良の努力」従属データを受信していなくても、アプリケーションコードがダウンロードされ実行するために利用可能になるとすぐに、アプリケーションコードを実行し始め得る。
【0024】
たとえば、特定の州についてすべての州立公園を示すが、近くの公園が示されるモードもサポートする簡易なアプリケーションを考える。デベロッパは以下のようにアプリケーションのメタデータ要件を特定し得る。
url: /
ads: optional
location: optional
atom: home_screen
url: /nearby
ads: optional
location: required
atom: nearby_screen
ユーザがアプリケーションを実行し、(url「/」に対応し得る)初期アプリケーションスクリーンにナビゲートする場合、コンテナランタイム124は、並列(並行)で、home_screen atomをダウンロード(たとえば、リモートコンピューティングデバイス142Aからサブパッケージ146のうちの1つをダウンロード)し始め得、広告表現(ads creative)を要求し得、グローバルポジショニングフィックスを開始し得る。グローバルポジショニングシステムフィックスを得る前に、コンテナランタイム124がhome_screen atomをダウンロードし終えた場合、アプリケーションコンテナ102Aは、表示される広告表現のためのエリアと共に、コンピューティングデバイス100の現在の位置から各公園への距離がそうでなければ示されていたであろう空のスペースと一緒に公園のリストを表示させる。コンテナランタイム124がひとたび広告表現を抽出およびロードすることを終了すると、アプリケーションコンテナ102Aは、広告を含めるようにグラフィカルユーザインターフェイスをアップデートする。同様に、コンテナランタイム124がひとたびコンピューティングデバイス100の現在の位置を得ること(すなわち、GPSフィックス)ができれば、アプリケーションコンテナ102Aは、現在の位置から各公園へのそれぞれの距離を含めるために、グラフィカルユーザインターフェイスをアップデートし得る。
【0025】
コンテナランタイム124がコンピューティングデバイス100の現在の位置を得ることに先立って、ユーザが近隣公園アプリケーションスクリーン(url 「/nearby」に対応
し得る)にナビゲートする場合、コンテナランタイム124は、コンテナランタイム124が現在の位置情報を受信するまで、nearby_screen atomを実行して近隣公園アプリケーションスクリーンを表示することを差し控える。なぜならば、位置がnearby_screen atomの実行に必要であることをデベロッパが特定しているからである。これにより、デベロッパは、アプリケーションが位置情報を受信するのを待っている場合に特別に対処する必要はなく、その代わりに、そのような状況に対処するためにコンテナランタイム124に依拠することができる。
【0026】
コンテナランタイム124は、アプリケーションについてのデータを自動的に決定し先を見越して抽出し得る。たとえば、州立公園アプリケーションの例は、デベロッパによってメタデータにおいて明示的に定義される階層構造を有するものであると記載されている
が、さまざまな例では、デベロッパは、メタデータにおいてアプリケーション構造を定義する必要はない。代わりに、コンテナランタイム124はアプリケーションコードを分析し得、当該アプリケーションによって必要とされる可能性があるデータを決定し得、デベロッパがデータ従属性を特定することなく、アプリケーションによって必要とされるそのデータをオプティミスティックに(optimistically)抽出し得る。すなわち、アプリケーションコンテナ102は、いくつか場合において、良好なランタイム従属性の充足(good
runtime dependency satisfaction)を与えることによって、静的なライブラリについての必要性を除去し得る。アプリケーションコードはアプリケーションコンテナ102によって実行されるので、コンテナランタイム124は最初に、アプリケーションメタデータについての理解を通じて、関連するバージョニングルールを含むアプリケーションの従属性を決定し得、それらの従属性を満たし得、その後、アプリケーションコードを実行し始め得る。さらに、アプリケーションコンテナ102およびランタイムシステム126はオペレーティングシステム136の外部で動作するので、この開示の技術をサポートするためにオペレーティングシステム136を修正する必要はない。
【0027】
さらに、この開示の技術により、コンテナランタイム124が、付加的なアプリケーションコードおよび当該付加的なコードのデータ従属性をオプティミスティックにあらかじめフェッチすることを実行することが可能になる。いくつかの場合において、コンテナランタイム124は、アプリケーションのある機能を提供するために(たとえば一般に用いられる特徴のために)必要とされる可能性がある付加的なコードを予測し得、当該付加的なコードを先を見越して抽出し得る。たとえば、コンテナランタイム124は、ナビゲーションアプリケーションをロードするユーザがさらに、方向を要求する可能性があることを予測し得、それについての機能は、ナビゲーションアプリケーションに初期ユーザインターフェイスを提供するサブパッケージとは異なるサブパッケージ内に存在し得る。コンテナランタイム124は、付加的なコードを抽出し得(たとえば、リモートコンピューティングデバイス142Aからサブパッケージ146のうちの1つをダウンロードし、コンピューティングデバイス100において格納されるサブパッケージ104をロードするなど)、付加的なコードの任意のデータ従属性を識別し、当該付加的なコードのデータ従属性をあらかじめフェッチし得る。言いかえれば、コンテナランタイム124は、アプリケーションコンテナ102によって必要とされる可能性があるアプリケーションコードを決定し得、当該コードが従属するデータをフェッチしつつ、アプリケーションコードをフェッチし得る。対照的に、コードをあらかじめフェッチするだけのシステムは、そのコードが実際に実行されるまで、必要なデータをフェッチするのを待つ。
【0028】
以下にさらに記載されるように、ソフトウェアデベロッパが機能の別個のセットについて別個のサブパッケージを有するアプリケーションを設計することを可能にすることによって、アプリケーションコンテナ102は、そのサブパッケージのすべてについてそのそれぞれの実行コンポーネントのすべてがコンピューティングデバイス100上でローカルに常駐することなく、コンピューティングデバイス100においてアプリケーションが実行されることを可能にする。これにより、アプリケーションの初期実行は、すべてのサブパッケージの抽出および/またはインストールを必要とせず、要求された機能を実現する実行可能なコンポーネントを含むサブパッケージのサブセットの抽出および/またはインストールのみを必要とし得る。さらに、単一のサブパッケージにおいて複数の実行可能なコンポーネントをパッケージングすることによって、実行可能なコンポーネントの抽出および/またはインストールは、性能が貧弱になり得および/またはユーザ体験が貧弱になり得る実行可能なコンポーネントベースで実行可能なコンポーネントを抽出およびインストールするのではなく、要求された機能に従って、(たとえば特定のユーザインターフェイスをレンダリングするよう)サブパッケージベースで発生し得る。
【0029】
上述したように、各アプリケーションは、アプリケーションの動作を定義する1つ以上
の実行可能なコンポーネントを含んでいるアプリケーションコンテナにより実行され得る。アプリケーションコンテナ102Aは、実行可能なコンポーネント108およびメッセージングインターフェイス115とにより、アプリケーションの挙動を変更しおよび/またはアプリケーションに1つ以上の動作を実行させるメッセージを送受信するルータ112を含む。たとえば、ルータ112は、1つ以上の動作の実行を要求するメッセージを受信し得る。ルータ112は、1つ以上の動作を実行するために実行可能なコンポーネントを含むサブパッケージがローカルに格納されているか、または、そうでなければコンピューティングデバイス100上でアクセス可能であるかを、メッセージの内容に基づいて決定し得る。メッセージの内容は、サブパッケージに対応するユニフォームリソースアイデンティファイア(URI: Uniform Resource Identifier)のような識別子を含み得る。サブパッケージがローカルに格納されているかまたはそうでなければコンピューティングデバイス100上でアクセス可能な場合、ルータ112は、メッセージの内容に基づいて、動作を実行するために1つ以上の実行可能なコンポーネントを識別する。いくつかの例では、メッセージは、付加的な属性(たとえばユーザインターフェイスを起動するためのカテゴリ、データのMIMEタイプ、実行のための明示的なコンポーネントクラス)、または、実行するべき1つ以上の動作をさらに特定するデータ(たとえばユーザデータあるいはマシン生成データ)を含み得る。そのため、ルータ112によって識別される1つ以上の実行可能なコンポーネントは、付加的な属性またはデータに基づいて、1つ以上の動作を実行し得る。
【0030】
上述したように、特定のアプリケーションのためのサブパッケージのすべてが、アプリケーションを実行するために、コンピューティングデバイス100においてローカルに常駐する必要があるわけではない。特定の機能についてのサブパッケージがコンピューティングデバイス100において常駐またはそうでなければアクセス可能かどうか決定するために、ルータ112は、アプリケーション定義116に対してルックアップを実行し得る。アプリケーション定義116は一般に、ユーザが特定した識別子(たとえばURI、ストリング、整数または任意の他の好適な識別子)と、アプリケーションについての特定の機能を特定するサブパッケージとの間のマッピングを定義し得る。アプリケーション定義116は、ルーティングテーブル118においてこれらのマッピングを含んでおり、ルーティングテーブル118は、ユーザが特定した識別子120A~120N(「ユーザが特定した識別子120」)と、サブパッケージ識別子122A~122N(「サブパッケージ識別子122」)との間のマッピングを含む。ルータ112が、特定のサブパッケージを使用して機能を実行する、ユーザが特定した識別子を有するメッセージを受信すると、ルータ112は、ルータテーブル118においてルックアップを実行し得る。ルータ112は、たとえばユーザが特定した識別子120Aがメッセージにおけるユーザが特定した識別子とマッチしていると決定すると、ルータ112は、サブパッケージ識別子122Aに対応するサブパッケージ104Aがコンピューティングデバイス100上に常駐しているかどうか決定し得る。サブパッケージ104Aがコンピューティングデバイス100上で常駐しているので、ルータ112は、メッセージに基づいてサブパッケージ104Aへの呼出を実行するか、または、実行可能なコンポーネント108Aを使用して1つ以上の動作を実行するメッセージをサブパッケージ104Aに送信する。
【0031】
上述したように、コンピューティングデバイス100上にアプリケーションについてのサブパッケージの全セットがローカルに格納される必要はないので、コンピューティングデバイス100におけるアプリケーションの初期のインストールおよび/または初期の実行に必要な時間は、リモートコンピューティングデバイスからアプリケーション全体がダウンロードされ、インストールされ、コンピューティングデバイス100によって実行される必要がある場合よりも、少なくなり得る。そのため、ユーザは、アプリケーションからのより大きな応答性、および/または、アプリケーションの挙動についてのより大きな性能を経験し得る。
【0032】
図1の例では、上で記載されたように、ユーザは最初にナビゲーションアプリケーションをインストールし実行することを望み得る。最初は、ナビゲーションアプリケーションについてのサブパッケージまたはアプリケーション定義のいずれも、コンピューティングデバイス100に格納されていない場合がある。ユーザは、コンピューティングデバイス100にユーザ入力を提供して、最初に、オペレーティングシステム136によって提供されるユーザインターフェイスにおいて、マップアプリケーションに対応するアイコンを選択し得る。代替的には、ユーザは、サブパッケージおよびアプリケーション定義を抽出するようコンピューティングデバイス100において実行されリモートコンピューティングデバイス142と通信するメディアストアアプリケーション(図示せず)においてマップアプリケーションを選択し得る。いずれの場合においても、スーパーバイザーコンポーネント128Aのメッセージブローカー130は、オペレーティングシステム136から、または、ナビゲーションアプリケーションについての特定の機能の実行を要求するメディアストアアプリケーションからメッセージを受信する。ナビゲーションアプリケーションがまだインストールされていないので、要求された特定の機能は、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示することである。
【0033】
スーパーバイザーコンポーネント128Aは、メッセージの内容に基づいて、アプリケーションコンテナがコンピューティングデバイス100のメモリにおいてナビゲーションアプリケーションについて既に割り当てられているかどうか決定し得る。たとえば、メッセージの内容は、アプリケーションについての名称のようなナビゲーションアプリケーションの一意識別子を含み得る。スーパーバイザーコンポーネント128Aがナビゲーションアプリケーションについてのアプリケーションコンテナをまだ割り当てていないと決定することに応答して、スーパーバイザーコンポーネント128Aは、アプリケーションコンテナプール132からアプリケーションコンテナ102Aを割り当て得る。アプリケーションコンテナプール132は、アプリケーションのために保留されアプリケーションを実行するのに使用可能なプロセスのセットを含み得る。いくつかの例において、スーパーバイザーコンポーネント128Aは、アプリケーションコンテナ102Aについての新しいプロセスを作成するために、オペレーティングシステム136と通信し得る。
【0034】
スーパーバイザーコンポーネント128Aは、ナビゲーションアプリケーションがまだインストールされていないと決定し得、リモートコンピューティングデバイス142のうちの1つ以上からのアプリケーション定義を要求し得る。たとえば、スーパーバイザーコンポーネント128Aは、リモートコンピューティングデバイス142Aへメッセージを送信し得、当該メッセージは、リモートコンピューティングデバイス142においてグローバルに一意である、ナビゲーションアプリケーションのための識別子を含んでいる。リモートコンピューティングデバイス142Aは、メッセージを受信すると、アプリケーション定義144からアプリケーション定義116を選択し、コンピューティングデバイス100にアプリケーション定義116を送信する。スーパーバイザーコンポーネント128Aは、アプリケーションコンテナ102Aに含まれるか、または、アプリケーションコンテナ102Aにアクセス可能であり得るアプリケーション定義116を受信する。
【0035】
スーパーバイザーコンポーネント128Aは、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示するよう、メッセージブローカー130にアプリケーションコンテナ102Aへメッセージを送信させる。特に、メッセージは、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示する機能を有するサブパッケージに対応するユーザが特定した識別子を含み得る。いくつかの例では、メッセージブローカー130は、メディアストアアプリケーションから受信された情報に基づくユーザが特定した識別子、または、ユーザによって最初に選択されたマッピングアプリケーションについてのアイコンに関連付けられるブートストラッピング機能から
受信された情報に基づくユーザが特定した識別子を受信する(または生成する)。ブートストラッピング機能は、ユーザが特定した識別子をメッセージブローカー130に送信することを含み得るがこれに限定されない。
【0036】
ルータ112は、ユーザが特定した識別子を有するメッセージをメッセージングインターフェイス115を介して受信する。
図1のこの例では、ユーザが特定した識別子は120Aである。ユーザが特定した識別子に基づいて、ルータ112は、ユーザが特定した識別子120Aに対応するサブパッケージ識別子122Aについてのサブパッケージがコンピューティングデバイス100においてローカルに格納されていないことを決定する。ルータ112は、コンテナランタイム124および/またはランタイムシステム126を使用して、サブパッケージ識別子122Aについてのサブパッケージを要求するようリモートコンピューティングデバイス142Aにメッセージを送信し得る。たとえば、リモートコンピューティングデバイス142Aにコンテナランタイム124および/またはランタイムシステム126により送信されるメッセージは、サブパッケージ識別子122Aを含み得る。リモートコンピューティングデバイス142Aは、ナビゲーションアプリケーションのデフォルトまたはメインユーザインターフェイスを表示するための実行可能なコンポーネントを含むサブパッケージをコンピューティングデバイス100に送信し得る。
【0037】
ルータ112は、サブパッケージ識別子122Aについてのサブパッケージがローカルに格納されていないと決定することに応答して、ライフサイクルマネージャ110に、コールバックインターフェイス113を介してシステムライフサイクル呼出についてリッスンさせ得る。当該ライフサイクル呼出はランタイムシステム126によって発行される。ライフサイクル呼出は、たとえば、アプリケーションを開始すること、アプリケーションを一時停止すること、アプリケーションの再開すること、または、アプリケーションを終了することを含み得る。ライフサイクルマネージャ110は、コンピューティングデバイス100がひとたびリモートコンピューティングデバイス142Aからサブパッケージ104Aを抽出すると、サブパッケージ104Aの実行可能なコンポーネントによって実行されるライフサイクル呼出をバッファリングし得る。サブパッケージ104Aがひとたびコンピューティングデバイス100によって抽出されると、ライフサイクルマネージャ110は、バッファリングされたライフサイクル呼出の各々をサブパッケージ104Aに送信し得る。
【0038】
図1の例では、コンピューティングデバイス100がサブパッケージ104Aを抽出しローカルに格納したことをライフサイクルマネージャ110が決定すると、ライフサイクルマネージャ110はローダ106に呼出を送信するか、またはそうでなければ、ローダ106を呼び出して、最初に要求された特定の機能を実行するために、たとえば、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示するために、コンピューティングデバイス100のメモリに実行可能なコンポーネント108の1つ以上をロードする。いくつかの例において、ローダ106は実行可能なコンポーネントをメモリにロードすることを担う。いくつかの例において、ローダ106は複数のローダを表わし得、各ローダは、異なる実行可能なコンポーネントをメモリにロードすることを担う。ローダ106は、特定の実行可能なコンポーネントについて、当該特定の実行可能なコンポーネントによって使用される対応するライブラリを特定し、任意のそのようなライブラリをメモリにロードして、当該ライブラリが特定の実行可能なコンポーネントにアクセス可能になる。ライフサイクルマネージャ110はさらに、実行可能なコンポーネント108のうちの1つ以上に、バッファリングされたライフサイクル呼出を送信し得る。バッファリングされたライフサイクル呼出を受信すると、実行可能なコンポーネント108のうちの1つ以上は、アプリケーションについてのデフォルトまたはメインユーザインターフェイスをコンピューティングデバイス100に表示させる。
【0039】
その後、ユーザがセッティングユーザインターフェイスにナビゲートすることを望む場合、ユーザは、アプリケーションについての現在表示されているデフォルトまたはメインユーザインターフェイスにおけるセッティングのために、ユーザインターフェイス要素(たとえばアイコン、ボタンまたはラベルなど)を選択するユーザ入力を提供し得る。ランタイムシステム126は、ユーザインターフェイス要素の選択を示すメッセージをアプリケーションコンテナ102Aに送信する。実行可能なコンポーネント108Aは、当該選択がセッティングユーザインターフェイスを表示することを決定する。実行可能コンポーネント108Aは、セッティングユーザインターフェイスについての機能を含むサブパッケージ122Nについてのユーザが特定した識別子120Nを有するメッセージを生成する。実行可能なコンポーネント108Aは、メッセージをルータ112に直接的に送信するか、または、ランタイムシステム126に送信し、ランタイムシステム126がルータ112にメッセージをルーティングし得る。いずれの場合も、ルータ112は、ユーザが特定した識別子120Nのルックアップを実行し、サブパッケージ識別子122Nについてのサブパッケージがコンピューティングデバイス100にローカルに格納されていないと決定する。
【0040】
同様の態様で、サブパッケージ104Aに関して上述したように、ルータ112は、サブパッケージ識別子122Nについてのサブパッケージを抽出するために、コンテナランタイム124および/またはランタイムシステム126を使用してリモートコンピューティングデバイス142Aにメッセージを送信する。リモートコンピューティングデバイス142Aは、ナビゲーションアプリケーションのセッティングインターフェイスを表示するための実行可能なコンポーネントを含むサブパッケージ122Nをコンピューティングデバイス100に送信し得る。コンピューティングデバイス100がサブパッケージ122Nを抽出している間、ライフサイクルマネージャ110は、コールバックインターフェイス113において受信されるライフサイクル呼出をバッファリングし得る。サブパッケージ122Nをダウンロードする際に、ライフサイクルマネージャ110は、ローダ106にサブパッケージ122Nの実行可能なコンポーネントをメモリへロードさせる。ローダ106は、実行可能なコンポーネントのうちの1つ以上の実行を開始し得、これにより、ナビゲーションアプリケーションのセッティングインターフェイスがコンピューティングデバイス100のディスプレイデバイスに表示される。
【0041】
図2は、本開示の1つ以上の局面に従った、コンピューティングデバイス100のさらなる詳細を示すブロック図である。
図2は、コンピューティングデバイス100の1つの特定の例のみを示す。コンピューティングデバイス100の他の多くの例は他の場合において使用されてもよく、例示的なコンピューティングデバイス100に含まれるコンポーネントのサブセットを含んでもよく、または、
図2における例示的なコンピューティングデバイス100に示されない付加的なコンポーネントを含んでもよい。
【0042】
図2の例において示されるように、コンピューティングデバイス100は、1つ以上のプロセッサ240と、1つ以上の入力コンポーネント242と、1つ以上の通信ユニット244と、1つ以上の出力コンポーネント246と、1つ以上のストレージデバイス248と、存在感知型ディスプレイ252とを含む。コンピューティングデバイス100のストレージデバイス248は、アプリケーションコンテナ102と、システムランタイム128と、オペレーティングシステム136とを含む。コミュニケーションチャンネル250は、コンポーネント間通信のためにコンポーネント240、242、244、246、248、252、254および/または256の各々を(物理的に、通信可能に、および/または動作可能に)相互接続し得る。いくつかの例では、コミュニケーションチャンネル250は、システムバス、ネットワーク接続、1つ以上のプロセス間通信データ構造、または、ハードウェアおよび/もしくはソフトウェア間でデータを通信するための任意の他のコンポーネントを含み得る。
【0043】
1つ以上のプロセッサ240は、機能を実現し、および/または、コンピューティングデバイス100内で命令を実行し得る。たとえば、コンピューティングデバイス100上のプロセッサ240は、ストレージデバイス248によって格納され、オペレーティングシステム136、アプリケーションコンテナ102およびシステムランタイム126の機能を提供する命令を受信および実行し得る。プロセッサ240によって実行されるこれらの命令により、コンピューティングデバイス100は、プログラム実行中にストレージデバイス248内に情報を格納および/または当該情報を修正し得る。プロセッサ240は、1つ以上の動作を実行するために、オペレーティングシステム136、アプリケーションコンテナ102およびシステムランタイム126の命令を実行し得る。すなわち、オペレーティングシステム136、アプリケーションコンテナ102およびシステムランタイム126は、この開示に記載されるさまざまな機能を実行するようプロセッサ240によって動作可能であり得る。
【0044】
コンピューティングデバイス100の1つ以上の入力コンポーネント242は入力を受信し得る。入力の例は、たとえば、触覚入力、音声入力、運動入力、および光入力である。コンピューティングデバイス100の入力コンポーネント242は、一例において、マウス、キーボード、音声応答システム、ビデオカメラ、ボタン、コントロールパッド、マイクロフォン、または、人間もしくはマシンからの入力を検出するための任意の他のタイプのデバイスを含む。いくつかの例において、入力コンポーネント242は、存在感知型スクリーン、タッチ感知型スクリーンなどを含み得る存在感知型入力コンポーネントであり得る。
【0045】
コンピューティングデバイス100の1つ以上の出力コンポーネント246は出力を生成し得る。出力の例は、触覚出力、音声出力、およびビデオ出力である。いくつかの例において、コンピューティングデバイス100の出力コンポーネント246は、存在感知型スクリーン、サウンドカード、ビデオグラフィックスアダプタカード、スピーカ、陰極線管(CRT)モニタ、液晶ディスプレイ(LCD)、または、人間もしくはマシンへの出力を生成するための任意の他のタイプのデバイスを含む。出力コンポーネントは、陰極線管(CRT)モニタ、液晶ディスプレイ(LCD)、発光ダイオード(LED)といったディスプレイコンポーネント、または、触覚出力、音声出力、および/もしくは視覚出力を生成するための任意の他のタイプのデバイスを含み得る。
【0046】
いくつかの例において、コンピューティングデバイス100の存在感知型ディスプレイ252は、入力コンポーネント242および/または出力コンポーネント246の機能を含み得る。
図2の例では、存在感知型ディスプレイ252は、存在感知型スクリーンまたはタッチ感知型スクリーンのような存在感知型入力コンポーネント256を含み得る。いくつかの例において、存在感知型入力コンポーネント256は、存在感知可能型入力コンポーネントにおいておよび/または存在感知可能型入力コンポーネントの近くで、物体を検出し得る。1つの例示的な範囲として、存在感知型入力コンポーネント256は、存在感知型入力コンポーネント256の2インチ以内にある指またはスタイラスのような物体を検出し得る。存在感知型入力コンポーネント256は、物体が検出された存在感知型入力コンポーネントの位置(たとえば(x,y)座標)を決定し得る。別の例示的な範囲では、存在感知型入力コンポーネント256は、存在感知型入力コンポーネント256から2インチ以下で物体を検出し得、他の範囲も可能である。存在感知型入力コンポーネント256は、容量認識技術、誘導認識技術または光学式認識技術を用いて、ユーザの指によって選択された存在感知型入力コンポーネント256の位置を決定し得る。
【0047】
いくつかの例では、存在感知型ディスプレイ252はさらに、出力コンポーネント246に関して記載されたような触覚刺激、音声刺激、またはビデオ刺激を使用して、ユーザ
に出力を提供し得る。たとえば、存在感知型ディスプレイ252は、グラフィカルユーザインターフェイスを提示するディスプレイコンポーネント254を含み得る。ディスプレイコンポーネント254は、出力コンポーネント246に関して記載したような視覚出力を提供する任意のタイプの出力コンポーネントであり得る。コンピューティングデバイス100の統合されたコンポーネントとして示されているが、存在感知型ディスプレイ252は、いくつかの例では、入力および出力を送信および/または受信するためにコンピューティングデバイス100の他のコンポーネントとデータパスを共有する外部コンポーネントであり得る。たとえば、存在感知型ディスプレイ252は、コンピューティングデバイス100の外部パッケージング内に位置し物理的に接続されるコンピューティングデバイス100の内蔵のコンポーネントであり得る(たとえば携帯電話上のスクリーン)。別の例では、存在感知型ディスプレイ252は、コンピューティングデバイス100のパッケージングの外に位置し物理的に分離されているコンピューティングデバイス100の外部コンポーネントであり得る(たとえば、タブレットコンピュータと有線および/または無線データパスを共有するモニタ、プロジェクタなど)。いくつかの例では、存在感知型ディスプレイ252は、コンピューティングデバイス100のパッケージングの外に位置し、物理的にパッケージングから分離されている場合、入力を受信するための存在感知型入力コンポーネント256、および、出力を提供するためのディスプレイコンポーネント254という2つの別個のコンポーネントによって実現され得る。
【0048】
コンピューティングデバイス100の1つ以上の通信ユニット244は、データを送信および/または受信することにより外部デバイスと通信し得る。たとえば、コンピューティングデバイス100は、通信ユニット244を使用して、セルラー無線ネットワークのような無線ネットワーク上で無線信号を送信および/または受信し得る。いくつかの例において、通信ユニット244は、グローバルポジショニングシステム(GPS)ネットワークのような衛星ネットワーク上で衛星信号を送信および/または受信し得る。通信ユニット244の例は、(たとえばイーサネット(登録商標)カードのような)ネットワークインターフェイスカード、光学トランシーバ、無線周波数トランシーバ、GPSレシーバ、または、情報を送信および/もしくは受信し得る任意の他のタイプのデバイスを含む。通信ユニット244の他の例は、モバイルデバイスにおいて発見されるブルートゥース(登録商標)、GPS、3G、4GおよびWi-Fi(登録商標)無線、ならびに、ユニバーサルシリアルバス(USB)コントローラなどを含み得る。
【0049】
図2に示されるように、コンピューティングデバイス100は電源258を含み得る。いくつかの例において、電源258は電池であり得る。電源258は、コンピューティングデバイス100の1つ以上のコンポーネントに電力を提供し得る。電源258の例は、亜鉛炭素、鉛酸、ニッケルカドミウム(NiCd)、水素化ニッケル金属(NiMH)、リチウムイオン(Liイオン)、および/または、リチウムイオンポリマー(Liイオンポリマー)化学を有する電池を含み得るがこれらに限定されない。いくつかの例において、電源258は制限のある容量(たとえば1000~3000mAh)を有し得る。
【0050】
コンピューティングデバイス100内の1つ以上のストレージデバイス248は、コンピューティングデバイス100の動作の間の処理のために情報を格納し得る。いくつかの例において、ストレージデバイス248は一時メモリであり、これは、ストレージデバイス248の主目的が長期間の格納ではないことを意味する。コンピューティングデバイス100上のストレージデバイス248は、揮発性メモリとして、情報の短期間の格納のために構成されており、したがって、ディアクティベートにされると、格納されたコンテンツを保持しない。揮発性メモリの例は、ランダムアクセスメモリ(RAM)と、ダイナミックランダムアクセスメモリ(DRAM)と、スタティックランダムアクセスメモリ(SRAM)と、当該技術において公知の揮発性メモリの他の形態とを含む。
【0051】
ストレージデバイス248はさらに、いくつかの例において、1つ以上のコンピュータ読取可能記憶媒体を含む。ストレージデバイス248は揮発性メモリより大きな量の情報を格納するように構成され得る。ストレージデバイス248はさらに、不揮発性メモリスペースとして情報の長期間の格納のために構成され得、アクティベート/オフサイクルの後でも情報を保持し得る。不揮発性メモリの例は、磁気ハードディスク、光学ディスク、フロッピー(登録商標)ディスク、フラッシュメモリ、または、電気的プログラム可能メモリ(EPROM: electrically programmable memory)または電気的消去可能プログ
ラム可能メモリ(EEPROM: electrically erasable and programmable)の形態を
含む。ストレージデバイス248は、プログラム命令、ならびに/または、オペレーティングシステム136、システムランタイム126およびアプリケーションコンテナ102に関連付けられるデータを格納し得る。
【0052】
各それぞれのアプリケーションコンテナ102は、別個のアプリケーションに対応し得る。たとえば、オペレーティングシステムは、異なるアプリケーションに対応するそれぞれのアイコンに基づいて、(たとえばメニューまたはアイコンのグリッドから)ユーザが異なるアプリケーションを選択することを可能にするユーザインターフェイスを含み得る。たとえば、ユーザは、オペレーティングシステムユーザインターフェイスからEメールクライアントアイコンを選択し得る。これにより、自身の別個のアプリケーションコンテナを用いてEメールクライアントアプリケーションの実行が行われる。アプリケーションコンテナと異なり、ウェブブラウザのエクステンションまたは他のサブアプリケーション(たとえばプラグイン、JavaScript(登録商標)、Java(登録商標)バーチャルマシンなど)は、オペレーティングシステムのユーザインターフェイスにおいて起動されるように、別個のアプリケーションとして表わされ得ない。たとえば、ウェブブラウザがタブ付インターフェイスの各タブについて別個のプロセスを作成したとしても、タブの各々は、異なる起動可能なアプリケーションとして、オペレーティングシステムのユーザインターフェイス内の別個のアプリケーションとして表わされ得ない。
【0053】
この開示に記載されるようなアプリケーションコンテナは、アプリケーションコンテナがコンテナランタイムを含み得るのでウェブブラウザと異なり得る。この開示に記載されるように、アプリケーションコンテナのコンテナランタイムはライブラリを含み得るが、アプリケーションコンテナ内のサブパッケージの実行可能なコンポーネントにオペレーティングシステムAPIを公開し得る。アプリケーションコンテナと異なり、ウェブブラウザは、そのようなオペレーティングシステムAPIをウェブブラウザ内のエクステンションまたは他のサブアプリケーションへ公開せず、またそのようなオペレーティングシステムAPIからウェブブラウザ内のエクステンションまたは他のサブアプリケーションへのアクセスを防止さえし得る。
【0054】
アプリケーションコンテナは、この開示に記載されるように、ウェブブラウザと異なり得る。なぜならば、アプリケーションコンテナは、付加的なユーザ介在なしでアプリケーションの実行挙動または外観を変更するサブパッケージの抽出を引き起こし得るアプリケーションコンテナの外側にある(たとえばランタイムシステムまたはオペレーティングシステムにおける)スーパーバイザーコンポーネントからユーザが特定した識別子(たとえばURI)を受信し得るからである。ユーザが特定した識別子は、同じコンピューティングデバイスまたは異なるコンピューティングデバイス上で実行される他のアプリケーションから生じ得、アプリケーションコンテナによって受信されると、アプリケーションの実行挙動または外観を自動的に変更し得る。対照的に、ウェブブラウザは、たとえばスーパーバイザーコンポーネントまたはウェブブラウザの外の別のアプリケーションのいずれかといったアプリケーションコンテナの外部のソースからではなく、ウェブブラウザ自体内でユーザ入力(たとえばURLについてのテキストの入力)を受信し得る。さらに、ウェブブラウザは、ユーザに特定された識別子のルックアップを実行し、アプリケーションコ
ンテナによって表わされるアプリケーションの実行を変更するよう、この開示のアプリケーションコンテナ内に記載されるようにルータおよび/またはアプリケーション定義を含み得ない。アプリケーションコンテナと異なり、ウェブブラウザは、アプリケーションコンテナ内でサブパッケージの動作を変更するようライフサイクル呼出を受信およびバッファリングするコールバックインターフェイスを含み得ない。
【0055】
いくつかの例では、ウェブブラウザは、コア機能(たとえばレンダリングエンジン)、1つ以上のサードパーティエクステンション、プラグイン、および/または、サブアプリケーションを含み得る。ウェブブラウザは、アプリケーションコンテナと異なり、ウェブブラウザのコア機能のすべてがローカルに格納され実行のためにコンピューティングデバイスに利用可能でなければ、適切に機能しない場合があり、または、全く実行されない場合がある。対照的に、アプリケーションコンテナは、ローカルに格納され実行のためにコンピューティングデバイスに利用可能であるそのコア機能のサブセットのみ(たとえばユーザインターフェイスのサブセットについてのサブパッケージのみ)で適切に機能し得る。
【0056】
開示の技術に従うと、システムランタイム126は、アプリケーションを実行するための要求を受信する。たとえば、ユーザは、存在感知型ディスプレイ204においてユーザ入力を提供し、当該アプリケーションを実行し得るか、または、アプリケーションの特定の機能を実行し得る。存在感知型ディスプレイ204は、システムランタイム126に、当該アプリケーションについてのアイコンの選択に対応するイベントを生成させ得る。ユーザ入力の指示を受信することに応答して、システムランタイム126は、少なくとも1つのアプリケーションコンテナ102がアプリケーションに割り当てられるかどうか決定し得る。
【0057】
アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがストレージコンポーネント248の揮発性メモリにおいて割り当てられていないということを決定することに応答して、システムランタイム126はリモートコンピューティングデバイスからアプリケーション定義を抽出する。たとえば、システムランタイム126は、通信ユニット244のうちの1つに、アプリケーション定義について、リモートコンピューティングデバイスへ要求を送信させる。アプリケーション定義は、アプリケーションのインストール可能なサブパッケージとユーザが特定した識別子との間の複数のマッピングを定義し得る。
【0058】
コンピューティングデバイス100の揮発性メモリにおいてアプリケーションコンテナ102Aを割り当てることに応答して、または、アプリケーションコンテナ102がコンピューティングデバイス100のメモリにおいて既に割り当てられていると決定することに応答して、システムランタイム126は、たとえばアプリケーションコンテナ102Aにコマンドを送信することにより、要求のユーザが特定した識別子に少なくとも部分的に基づいて、アプリケーションの特定の機能を開始し得る。
【0059】
アプリケーションコンテナ102Aは、アプリケーションについて、または、アプリケーションの特定の機能について、複数の従属性を決定し得る。たとえば、アプリケーションコンテナ102Aは、アプリケーションについてのマニフェストファイルまたは他の情報のようなアプリケーションのメタデータを解析し得る。コンフィグレーションファイルに基づいて、アプリケーションコンテナ102Aは、当該アプリケーションまたは当該アプリケーションの特定の機能について、複数の従属性を決定し得る。別の例として、アプリケーションコンテナ102Aは、アプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出し得る。
【0060】
いくつかの例では、複数の従属性は、1つ以上の必要な従属性と、1つ以上の随意の従属性とを含み得る。ある従属性がアプリケーションを実行するのに必要である場合および/またはアプリケーションの特定の機能を提供する必要がある場合、当該従属性は必要な従属性である。たとえば、アプリケーションコンテナ102Aは、アプリケーションの特定の機能についてのプログラムコードを含むサブパッケージが必要な従属性であると決定し得る。別の例として、ユーザによって要求される特定の機能がナビゲーション機能である場合、アプリケーションコンテナ102Aは、位置情報が必要な従属性であると決定し得る。ある従属性がアプリケーションを実行するのに必要でない場合および/またはアプリケーションの特定の機能を提供するのに必要でない場合、当該従属性は随意の従属性である。たとえば、アプリケーションコンテナ102Aは、ある従属性がアプリケーションによって提示される新しいストーリーについての画像データである場合、当該従属性は随意の従属性であるということを決定し得る。別の例として、ユーザによって要求される特定の機能が特定のブランドに関する情報である場合、アプリケーションコンテナ102Aは、位置情報が随意の従属性であると決定し得る。しかしながら、ユーザがアプリケーションの店舗発見機能を選択すれば、アプリケーションコンテナ102Aは、位置情報が必要な従属性であると決定し得る。なぜならば、コンピューティングデバイス100の現在の位置の近くに位置する店舗を識別するために位置情報が必要であり得るからである。
【0061】
1つ以上の必要な従属性および/または1つ以上の随意の従属性が現在、コンピューティングデバイス100に格納されておらず、および/または、アプリケーションコンテナ102Aに利用可能でないと決定することに応答して、アプリケーションコンテナ102Aは、1つ以上の必要な従属性および/または1つ以上の随意の従属性の抽出を開始する。たとえば、必要な従属性のうちの1つがアプリケーションの特定の機能についてインストール可能なサブパッケージである場合、アプリケーションコンテナ102Aは、リモートコンピューティングデバイスから、複数の実行可能なコンポーネントを含んでいるインストール可能なサブパッケージを抽出し得る。同様に、1つ以上の随意の従属性のいずれかが、コンピューティングデバイス100に格納されていない情報(たとえばテキストデータ、画像データ、オーディオデータ、ビデオデータ、サードパーティデータなど)を含むが、リモートコンピューティングデバイスにおいて利用可能である場合、アプリケーションコンテナ102Aはリモートコンピューティングデバイスから当該データを抽出し得る。リモートコンピューティングデバイスは、アプリケーション定義を含む同じコンピューティングデバイスまたは異なるコンピューティングデバイスであり得る。いくつかの例において、コンピューティングデバイスが異なる場合、それらのコンピューティングデバイスは共通のオペレータによって操作され得る。さらに、リモートコンピューティングデバイスは、2つ以上のリモートコンピューティングデバイスを含み得る。いくつかの場合では、アプリケーションコンテナ102Aは、第1のデータソース(たとえば第1のリモートコンピューティングデバイス)から1つ以上の必要な従属性を抽出し得、第1のデータソースとは異なる第2のデータソース(たとえば第2の異なるリモートコンピューティングデバイス)から1つ以上の随意の従属性を抽出し得る。
【0062】
必要な従属性がひとたびコンピューティングデバイス100によって受信されると、アプリケーションコンテナ102Aは、アプリケーション、または、ユーザによって必要とされるアプリケーションの特定の機能を実行する。すなわち、1つ以上の随意の従属性の少なくとも部分がまだ受信されていないが、アプリケーションコンテナ102Aは、アプリケーションおよび/またはアプリケーションの特定の機能を実行し得る。言いかえれば、1つ以上の必要な従属性のすべてを受信することに応答して、かつ、随意の従属性の少なくとも1つがアプリケーションコンテナ102Aによってまだ受信されていない間、コンピューティングデバイス100は当該アプリケーションを実行し得る。
【0063】
いくつかの例では、コンピューティングデバイス100は、随意の従属性のすべてを受
信する前にアプリケーションを実行し始め、コンピューティングデバイス100は、(たとえば存在感知型ディスプレイ252による)表示のために、アプリケーションコンテナ102Aによってまだ受信されていない1つ以上の随意の従属性の少なくとも1つのためのプレースホルダグラフィカル要素を含むアプリケーションのグラフィカルユーザインターフェイスを出力し得る。1つ以上の随意の従属性のうちの少なくとも1つを受信することに応答して、コンピューティングデバイス100は、プレースホルダ要素の代わりに、表示のために、少なくとも1つの随意の従属性に関連付けられる情報を出力し得る。
【0064】
アプリケーションコンテナ102Aは、アプリケーションの付加的なインストール可能なサブパッケージ、アプリケーションについての付加的なデータ、または、ユーザによって使用される可能性があり得る任意の他の(必要または随意の)従属性をあらかじめフェッチし得る。すなわち、コンピューティングデバイス100は、(たとえば、他のユーザからの使用データ、ユーザの履歴使用パターンなどに基づいて)ユーザによって要求される可能性がある付加的な機能を予想し得、対応する必要な従属性およびいくつかの場合には随意の従属性を先を見越して抽出し得る。いくつかの例では、コンピューティングデバイス100は、1つ以上の随意の従属性に含まれるデータに基づいて、1つ以上の随意の従属性に含まれるデータを使用するように構成されるアプリケーションの1つ以上のインストール可能なサブパッケージを決定し得る。言いかえれば、コンピューティングデバイス100は、コンピューティングデバイス100によって受信される随意の従属性に含まれるデータを使用するアプリケーションの他の特徴を識別し得る。そのような場合では、アプリケーションコンテナ102は、データを使用するように構成されるアプリケーションの1つ以上のインストール可能なサブパッケージのうちの少なくとも1つをあらかじめフェッチし得る。
【0065】
図3は、この開示の技術に従った、動的にアプリケーション従属性をロードするためのアプリケーションコンテナを有するコンピューティングデバイスの例示的な動作を示すフロー図である。例示目的のためにのみ、例示的な動作は
図1のコンピューティングデバイス100の文脈内で下記に記載される。
【0066】
図3では、コンピューティングデバイス100は最初は、アプリケーションの特定の機能を実行するための要求を受信し得る(300)。たとえば、ユーザは、アプリケーションを起動するためにコンピューティングデバイス100においてユーザ入力を提供し得、コンピューティングデバイス100のスーパーバイザーコンポーネント128Aは、アプリケーションを実行するための要求として、ユーザ入力の指示を受信し得る。スーパーバイザーコンポーネント128Aは、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナ(たとえばアプリケーションコンテナ102Aのようなアプリケーションコンテナ102のうちの1つ)がコンピューティングデバイス100のメモリ(たとえば
図2のストレージコンポーネント248のうちの1つ)において割り当てられているかどうか決定し得る(302)。
【0067】
アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがメモリにおいて割り当てられていない(302の「NO」分岐)と決定することに応答して、コンピューティングデバイス100は、アプリケーションコンテナ(たとえばアプリケーションコンテナ102A)を割り当て得る(304)。たとえば、コンピューティングデバイス100は、たとえばアプリケーションについての一意識別子を含むリモートコンピューティングシステムに要求を送信することにより、リモートコンピューティングシステムからアプリケーション定義を抽出し得る。リモートコンピューティングシステムは、ルックアップを実行し得、対応するアプリケーション定義を識別し得る。リモートコンピューティングシステムは、コンピューティングデバイス100にアプリケーション定義を送信し得る。コンピューティングデバイス100は、リモートコンピュ
ーティングシステムからアプリケーション定義を受信し得、アプリケーションについて、コンピューティングデバイス100のメモリにおいてアプリケーションコンテナ102Aを割り当て得る。
【0068】
メモリにおいてアプリケーションコンテナを割り当てることに応答して、または、アプリケーションコンテナがメモリにおいて既に割り当てられていると決定することに応答して(302の「YES」分岐)、アプリケーションコンテナ102Aは、アプリケーションの特定の機能について1つ以上の必要な従属性および1つ以上の随意の従属性を決定し得る(306)。たとえば、アプリケーションコンテナ102Aのコンテナランタイム124は、1つ以上の必要な従属性および1つ以上の随意の従属性を決定するよう、アプリケーションのメタデータを解析し得る。別の例として、アプリケーションコンテナ102Aによって、コンピューティングデバイス100はアプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出させられ得る。1つ以上の必要な従属性は、アプリケーションのインストール可能なサブパッケージのセットのうちの1つ以上または位置データを含み得る。1つ以上の随意の従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、または、サードパーティデータのうちの1つ以上を含み得る。
【0069】
アプリケーションコンテナ102Aは、1つ以上の決定された必要な従属性および1つ以上の決定された随意の従属性の抽出を開始する(308)。いくつかの例では、コンテナランタイム124は、第1のデータソースから1つ以上の必要な従属性を抽出し、第1のデータソースとは異なる第2のデータソースから1つ以上の随意の従属性を抽出する。
【0070】
随意の従属性のすべてを受信する前および必要な従属性のすべてを受信した後、コンピューティングデバイス100はアプリケーションを実行する(310)。すなわち、コンピューティングデバイス100は、随意の従属性のすべてがコンピューティングデバイス100によって受信されていなくても、アプリケーションコンテナ102Aを使用して、アプリケーションを実行し得る。いくつかの例において、随意の従属性は画像データを含む。そのような例において、アプリケーションコンテナ102Aは、随意の従属性画像データのすべてがコンピューティングデバイス100によって受信されたかどうか決定し得る。随意の従属性画像データのすべてがコンピューティングデバイス100によって受信されていない場合、コンピューティングデバイス100は、コンテナランタイム124によってまだ受信されていない1つ以上の随意の従属性のうちの少なくとも1つのためのプレースホルダグラフィカル要素を含むアプリケーションのグラフィカルユーザインターフェイスを表示のために出力し得る。(プレースホルダグラフィカル要素がグラフィカルユーザインターフェイスに含まれ得た後で受信される随意の従属性画像データを含む)随意の従属性画像データのすべてがコンピューティングデバイス100によって受信されている場合、コンピューティングデバイス100は、プレースホルダ要素の代わりに、表示のために、少なくとも1つの随意の従属性に関連付けられる情報を出力し得る。
【0071】
いくつかの例では、コンピューティングデバイス100は、アプリケーションについての付加的なインストール可能なサブパッケージをあらかじめフェッチするように構成され得る(312)。そのような例では、コンピューティングデバイス100は、1つ以上の随意の従属性に含まれるデータに基づいて、1つ以上の随意の従属性に含まれるデータを使用するように構成されるアプリケーションの1つ以上のインストール可能なサブパッケージを決定し得、データを使用するように構成されるアプリケーションの1つ以上のインストール可能なサブパッケージのうちの少なくとも1つをあらかじめフェッチし得る。これにより、コンピューティングデバイス100は、コンピューティングデバイス100のユーザによって使用される可能性がある付加的な機能を先を見越して抽出し得、これにより、ユーザが機能を要求する際に、そのような機能をロードするのに必要な時間の量が低
減され得る。
【0072】
例1.コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することと、上記スーパーバイザーコンポーネントによって、上記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが上記コンピューティングデバイスのメモリにおいて割り当てられているかどうかを決定することと、上記アプリケーションコンテナが上記コンピューティングデバイスの上記メモリにおいて割り当てられていると決定することに応答して、上記アプリケーションコンテナのコンテナランタイムによって、上記アプリケーションの1つ以上の従属性を決定することとを含み、上記1つ以上の従属性は、1つ以上の必要な従属性と1つ以上の随意の従属性とを含んでおり、さらに、上記コンテナランタイムによって、上記1つ以上の必要な従属性の抽出を開始することと、上記コンテナランタイムによって、上記1つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも1つがコンテナランタイムによってまだ受信されていないが上記1つ以上の必要な従属性のすべてを受信することに応答して、上記コンピューティングデバイスによって上記アプリケーションを実行することとを含む、方法。
【0073】
例2.上記アプリケーションを実行することは、上記コンピューティングデバイスによって、上記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを含み、上記グラフィカルユーザインターフェイスは、上記コンテナランタイムによってまだ受信されていない上記1つ以上の随意の従属性のうちの上記少なくとも1つのためのプレースホルダグラフィカル要素を含んでおり、上記アプリケーションを実行することはさらに、上記1つ以上の随意の従属性のうちの上記少なくとも1つを受信することに応答して、上記コンピューティングデバイスによって、上記プレースホルダ要素の代わりに上記少なくとも1つの随意の従属性に関連付けられる情報を表示のために出力することを含む、例1に記載の方法。
【0074】
例3.上記コンピューティングデバイスによって、上記1つ以上の随意の従属性に含まれるデータに基づいて、上記1つ以上の随意の従属性に含まれる上記データを使用するように構成される上記アプリケーションの1つ以上のインストール可能なサブパッケージを決定することと、上記アプリケーションコンテナによって、データを使用するように構成される上記アプリケーションの上記1つ以上のインストール可能なサブパッケージのうちの少なくとも1つをあらかじめフェッチすることとをさらに含む、例1および2のいずれかの組み合わせに記載の方法。
【0075】
例4.上記アプリケーションの上記1つ以上の従属性を決定することは、上記アプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出することを含む、例1~3のいずれかの組み合わせに記載の方法。
【0076】
例5.上記アプリケーションの上記1つ以上の従属性を決定することは、上記コンテナランタイムによって、上記アプリケーションのメタデータを解析することを含む、例1~4のいずれかの組み合わせに記載の方法。
【0077】
例6.上記コンテナランタイムは、第1のデータソースから上記1つ以上の必要な従属性を抽出し、上記第1のデータソースとは異なる第2のデータソースから上記1つ以上の随意の従属性を抽出する、例1~5のいずれかの組み合わせに記載の方法。
【0078】
例7.上記1つ以上の必要な従属性は、上記アプリケーションの上記インストール可能なサブパッケージのセットのうちの1つ以上または位置データを含み、上記1つ以上の随意の従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、また
は、サードパーティデータのうちの1つ以上を含む、例1~6のいずれかの組み合わせに記載の方法。
【0079】
例8.上記スーパーバイザーコンポーネントは、上記コンピューティングデバイスにおいて実行されるオペレーティングシステムとは異なっており、上記アプリケーションコンテナは、複数の異なるアプリケーションについての共通の機能のセットを含む、例1~7のいずれかの組み合わせに記載の方法。
【0080】
例9.コンピューティングデバイスであって、スーパーバイザーコンポーネントを格納する1つ以上のストレージコンポーネントと、1つ以上のプロセッサとを含み、上記1つ以上のプロセッサは、アプリケーションを実行するための要求を受信することと、上記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが1つ以上のストレージコンポーネントにおいて割り当てられているかどうか決定することとを行うよう上記スーパーバイザーコンポーネントを実行し、上記スーパーバイザーコンポーネントが、上記アプリケーションコンテナが上記コンピューティングデバイスの上記メモリにおいて割り当てられていると決定することに応答して、上記アプリケーションコンテナのコンテナランタイムは、上記アプリケーションの1つ以上の従属性を決定することを行うよう、上記1つ以上のプロセッサによって実行可能であり、上記1つ以上の従属性は、1つ以上の必要な従属性と1つ以上の随意の従属性とを含んでおり、さらに、上記1つ以上の必要な従属性の抽出を開始することと、1つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも1つがコンテナランタイムによってまだ受信されていないが上記1つ以上の必要な従属性のすべてを受信することに応答して、上記アプリケーションを実行することとを行うよう、上記1つ以上のプロセッサによって実行可能である、コンピューティングデバイス。
【0081】
例10.上記コンテナランタイムはさらに、上記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを行うよう上記1つ以上のプロセッサによって実行可能であり、上記グラフィカルユーザインターフェイスは、上記コンテナランタイムによってまだ受信されていない上記1つ以上の随意の従属性のうちの少なくとも1つのためのプレースホルダグラフィカル要素を含んでおり、上記コンテナランタイムはさらに、上記1つ以上の随意の従属性のうちの上記少なくとも1つを受信することに応答して、上記プレースホルダ要素の代わりに上記少なくとも1つの随意の従属性に関連付けられる情報を表示のために出力することを行うよう上記1つ以上のプロセッサによって実行可能である、例9に記載のコンピューティングデバイス。
【0082】
例11.上記アプリケーションコンテナは、上記1つ以上の随意の従属性に含まれるデータに基づいて、上記1つ以上の随意の従属性に含まれる上記データを使用するように構成される上記アプリケーションの1つ以上のインストール可能なサブパッケージを決定することと、上記データを使用するように構成される上記アプリケーションの上記1つ以上のインストール可能なサブパッケージのうちの少なくとも1つをあらかじめフェッチすることとを行うよう上記1つ以上のプロセッサによって実行可能である、例9および10のいずれかの組み合わせに記載のコンピューティングデバイス。
【0083】
例12.上記コンテナランタイムは、少なくとも上記アプリケーションのメタデータを解析するように実行可能であることによって、上記1つ以上の随意の従属性を決定するよう上記1つ以上のプロセッサによって実行可能である、例9~11のいずれかの組み合わせに記載のコンピューティングデバイス。
【0084】
例13.上記コンテナランタイムは、少なくとも上記アプリケーションのヒューリスティック解析から得られる従属情報をリモートサーバから抽出するように実行可能であるこ
とによって、上記1つ以上の随意の従属性を決定するよう上記1つ以上のプロセッサによって実行可能である、例9~12のいずれかの組み合わせに記載のコンピューティングデバイス。
【0085】
例14.上記コンテナランタイムは、第1のデータソースから上記1つ以上の必要な従属性を抽出し、上記第1のデータソースとは異なる第2のデータソースから上記1つ以上の随意の従属性を抽出するように上記1つ以上のプロセッサによって実行可能である、例9~13のいずれかの組み合わせに記載のコンピューティングデバイス。
【0086】
例15.上記1つ以上の必要な従属性は、上記アプリケーションの上記インストール可能なサブパッケージのセットのうちの1つ以上または位置データを含み、上記1つ以上の随意の従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、または、サードパーティデータのうちの1つ以上を含む、例9~14のいずれかの組み合わせに記載のコンピューティングデバイス。
【0087】
例16.上記1つ以上のストレージコンポーネントはさらにオペレーティングシステムを格納し、上記スーパーバイザーコンポーネントは上記オペレーティングシステムとは異なっており、上記アプリケーションコンテナは、複数の異なるアプリケーションについての共通の機能のセットを含む、例9~15のいずれかの組み合わせに記載のコンピューティングデバイス。
【0088】
例17.命令でエンコードされる一時的でないコンピュータ読取可能記憶媒体であって、上記命令は、コンピューティングデバイスの1つ以上のプロセッサによって実行されると、上記1つ以上のプロセッサに、アプリケーションを実行するための要求を受信することと、上記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが上記コンピューティングデバイスのメモリにおいて割り当てられているかどうかを決定することと、上記アプリケーションコンテナが上記コンピューティングデバイスの上記メモリにおいて割り当てられていると決定することに応答して、上記アプリケーションの1つ以上の従属性を決定することとを行わせ、上記1つ以上の従属性は、1つ以上の必要な従属性と1つ以上の随意の従属性とを含んでおり、さらに、上記命令は、上記コンピューティングデバイスの上記1つ以上のプロセッサによって実行されると、上記1つ以上のプロセッサに、上記1つ以上の必要な従属性の抽出を開始することと、上記1つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも1つが前記コンテナランタイムによってまだ受信されていないが上記1つ以上の必要な従属性のすべてを受信することに応答して、上記アプリケーションを実行することとを行わせる、一時的でないコンピュータ読取可能記憶媒体。
【0089】
例18.上記命令は上記1つ以上のプロセッサに、少なくとも上記1つ以上のプロセッサに上記アプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出させることにより、または、上記アプリケーションのメタデータを解析させることにより上記1つ以上の従属性を決定することを行わせる、例17に記載の一時的でないコンピュータ読取可能記憶媒体。
【0090】
例19.上記命令は、上記1つ以上のプロセッサに、上記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを行わせ、上記グラフィカルユーザインターフェイスは、まだ受信されていない上記1つ以上の随意の従属性のうちの少なくとも1つのためのプレースホルダグラフィカル要素を含んでおり、上記命令はさらに、上記1つ以上のプロセッサに、上記1つ以上の随意の従属性のうちの上記少なくとも1つを受信することに応答して、上記プレースホルダ要素の代わりに上記少なくとも1つの随意の従属性に関連付けられる情報を表示のために出力することを行わせる、例17およ
び18のいずれかの組み合わせに記載の一時的でないコンピュータ読取可能記憶媒体。
【0091】
例20.上記命令は、上記1つ以上のプロセッサに、上記1つ以上の随意の従属性に含まれるデータに基づいて、上記1つ以上の随意の従属性に含まれる上記データを使用するように構成される上記アプリケーションの1つ以上のインストール可能なサブパッケージを決定することと、上記データを使用するように構成される上記アプリケーションの上記1つ以上のインストール可能なサブパッケージのうちの少なくとも1つをあらかじめフェッチすることとを行わせる、例17~19のいずれかの組み合わせに記載の一時的でないコンピュータ読取可能記憶媒体。
【0092】
例21.例1~8に記載の方法のいずれかの組み合わせを実行するための手段を含む、装置。
【0093】
例22.命令でエンコードされるコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、コンピューティングデバイスの1つ以上のプロセッサに例1~8に記載の方法のいずれかの組み合わせを実行させる、コンピュータ読取可能記憶媒体。
【0094】
1つ以上の例において、記載される機能は、ハードウェア、ソフトウェア、ファームウェアまたはその随意の組み合わせにおいて実現されてもよい。ソフトウェアにおいて実現される場合、これらの機能は、1つ以上の命令またはコードとして、コンピュータ読取可能媒体上に格納または送信され得、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ読取可能媒体は、データ記憶媒体のような有形的な媒体に対応するコンピュータ読取可能記憶媒体、または、たとえば通信プロトコルに従ってある場所から別の場所までコンピュータプログラムの転送を促進する任意の媒体を含む通信媒体を含み得る。このように、コンピュータ読取可能媒体は一般に、(1)一時的でない有形的なコンピュータ読取可能記憶媒体か、または、(2)信号もしくは搬送波のような通信媒体に対応し得る。データ記憶媒体は、この開示に記載される技術の実現のために、命令、コードおよび/またはデータ構造を抽出するよう、1つ以上のコンピュータまたは1つ以上のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラムプロダクトはコンピュータ読取可能媒体を含み得る。
【0095】
限定としてではなく例として、そのようなコンピュータ読取可能記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光学ディスクストレージ、磁気ディスクストレージ、もしくは、他の磁気ストレージデバイス、フラッシュメモリ、または、命令またはデータ構造の形態で所望のプログラムコードを格納するために使用され得るとともにコンピュータによってアクセスされ得る任意の他の媒体を含み得る。さらに、任意の接続が適切にコンピュータ読取可能媒体と称される。たとえば、命令が、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者線(DSL)、または、赤外線、無線およびマイクロ波のようなワイヤレス技術を使用して、ウェブサイト、サーバまたは他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、または、赤外線、無線およびマイクロ波のようなワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ読取可能記憶媒体およびデータ記憶媒体は、接続、搬送波、信号または他の一時的な媒体を含んでおらず、その代りに、一時的でない有形的な記憶媒体に向けられているということが理解されるべきである。本願明細書において使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(CD: compact disc)、レーザーディスク(登録商標)(laser disc)、光ディスク(optical disc)、デジタルバーサタイルディスク(DVD: digital versatile disc)、フロッピー(登録商標)ディスク(floppy disk)およびブルーレイ(登録商標)ディスク(Blu-ray(登録商標)disc)を含んでおり、ディスク(disk)は通常磁気的にデータを再
生する一方、ディスク(disc)はレーザーによりデータを光学的に再生する。上記のもの
の組み合わせも、コンピュータ読取可能媒体の範囲内に含まれるべきである。
【0096】
命令は、1つ以上のデジタル信号プロセッサ(DSP: digital signal processor)
、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC: application specific integrated circuit)、フィールドプログラマブルロジックアレイ(FPGA:field programmable logic array)、または、他の同等な集積論理回路または離散論理回路といった1つ以上のプロセッサによって実行され得る。したがって、本願明細書において使用される「プロセッサ」という用語は、本願明細書において記載される技術の実現例に好適である前述の構造または任意の他の構造のうちのいずれかを指し得る。さらに、いくつかの局面では、本願明細書において記載される機能は、専用ハードウェアおよび/またはソフトウェアモジュール内で提供され得る。さらに、1つ以上の回路または論理素子において当該技術が完全に実現され得る。
【0097】
この開示の技術は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえばチップセット)を含むさまざまなデバイスまたは装置において実現され得る。開示される技術を実行するように構成されるデバイスの機能的な局面を強調するために、さまざまなコンポーネント、モジュールまたはユニットがこの開示において記載されているが、必ずしも異なるハードウェアユニットによる実現を必要とはしない。むしろ、上述したように、さまざまなユニットは、ハードウェアユニットにおいて組み合わせられ得るか、または、好適なソフトウェアおよび/またはファームウェアと共に上述したように1つ以上のプロセッサを含む相互動作するハードウェアユニットの集合によって提供され得る。
【0098】
本開示のさまざまな局面が記載された。これらの局面および他の局面は添付の請求の範囲の範囲内である。