(57)【要約】      （修正有）【課題】存在するオペレーティングシステムへの修正を必要とすることなく、アプリケーションコンテナによるアプリケーションコードおよび従属データの送達の管理を提供する。【解決手段】コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信すると、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられていると決定することに応答して、アプリケーションコンテナのコンテナランタイムによって、アプリケーションの１つ以上の必要な従属性および１つ以上の随意の従属性を決定して抽出を開始する。随意の従属性の少なくとも１つがまだ受信されていなくとも、１つ以上の必要な従属性のすべてを受信することに応答して、アプリケーションを実行する。【選択図】図３
2020074139.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することと、
前記スーパーバイザーコンポーネントによって、前記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが前記コンピューティングデバイスのメモリにおいて割り当てられているかどうかを決定することと、
前記アプリケーションコンテナが前記コンピューティングデバイスの前記メモリにおいて割り当てられていると決定することに応答して、前記アプリケーションコンテナのコンテナランタイムによって、前記アプリケーションの１つ以上の従属性を決定することとを含み、前記１つ以上の従属性は、１つ以上の必要な従属性と１つ以上の随意の従属性とを含んでおり、さらに、
前記コンテナランタイムによって、前記１つ以上の必要な従属性の抽出を開始することと、
前記コンテナランタイムによって、前記１つ以上の随意の従属性の抽出を開始することと、
随意の従属性のうちの少なくとも１つが前記コンテナランタイムによってまだ受信されていないが前記１つ以上の必要な従属性のすべてを受信することに応答して、前記コンピューティングデバイスによって前記アプリケーションを実行することとを含む、方法。
【請求項２】
前記アプリケーションを実行することは、前記コンピューティングデバイスによって、前記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを含み、前記グラフィカルユーザインターフェイスは、前記コンテナランタイムによってまだ受信されていない前記１つ以上の随意の従属性のうちの前記少なくとも１つのためのプレースホルダグラフィカル要素を含んでおり、
前記アプリケーションを実行することはさらに、前記１つ以上の随意の従属性のうちの前記少なくとも１つを受信することに応答して、前記コンピューティングデバイスによって、前記プレースホルダ要素の代わりに前記少なくとも１つの随意の従属性に関連付けられる情報を表示のために出力することを含む、請求項１に記載の方法。
【請求項３】
前記コンピューティングデバイスによって、前記１つ以上の随意の従属性に含まれるデータに基づいて、前記１つ以上の随意の従属性に含まれる前記データを使用するように構成される前記アプリケーションの１つ以上のインストール可能なサブパッケージを決定することと、
前記アプリケーションコンテナによって、前記データを使用するように構成される前記アプリケーションの前記１つ以上のインストール可能なサブパッケージのうちの少なくとも１つをあらかじめフェッチすることとをさらに含む、請求項１および請求項２のいずれかの組み合わせに記載の方法。
【請求項４】
前記アプリケーションの前記１つ以上の従属性を決定することは、前記アプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出することを含む、請求項１〜３のいずれかの組み合わせに記載の方法。
【請求項５】
前記アプリケーションの前記１つ以上の従属性を決定することは、前記コンテナランタイムによって、前記アプリケーションのメタデータを解析することを含む、請求項１〜４のいずれかの組み合わせに記載の方法。
【請求項６】
前記コンテナランタイムは、第１のデータソースから前記１つ以上の必要な従属性を抽出し、前記第１のデータソースとは異なる第２のデータソースから前記１つ以上の随意の従属性を抽出する、請求項１〜５のいずれかの組み合わせに記載の方法。
【請求項７】
前記１つ以上の必要な従属性は、前記アプリケーションの前記インストール可能なサブパッケージのセットのうちの１つ以上または位置データを含み、前記１つ以上の随意の従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、または、サードパーティデータのうちの１つ以上を含む、請求項１〜６のいずれかの組み合わせに記載の方法。
【請求項８】
前記スーパーバイザーコンポーネントは、前記コンピューティングデバイスにおいて実行されるオペレーティングシステムとは異なっており、前記アプリケーションコンテナは、複数の異なるアプリケーションについての共通の機能のセットを含む、請求項１〜７のいずれかの組み合わせに記載の方法。
【請求項９】
コンピューティングデバイスであって、
スーパーバイザーコンポーネントを格納する１つ以上のストレージコンポーネントと、
１つ以上のプロセッサとを含み、
前記１つ以上のプロセッサは、
アプリケーションを実行するための要求を受信することと、
アプリケーションを実行するための要求を受信することとを行うよう前記スーパーバイザーコンポーネントを実行し、
前記スーパーバイザーコンポーネントが、前記アプリケーションコンテナが前記コンピューティングデバイスの前記メモリにおいて割り当てられていると決定することに応答して、前記アプリケーションコンテナのコンテナランタイムは、
前記アプリケーションの１つ以上の従属性を決定することを行うよう、前記１つ以上のプロセッサによって実行可能であり、前記１つ以上の従属性は、１つ以上の必要な従属性と１つ以上の随意の従属性とを含んでおり、
前記アプリケーションコンテナのコンテナランタイムはさらに、
前記１つ以上の必要な従属性の抽出を開始することと、
前記１つ以上の随意の従属性の抽出を開始することと、
随意の従属性のうちの少なくとも１つが前記コンテナランタイムによってまだ受信されていないが前記１つ以上の必要な従属性のすべてを受信することに応答して、前記アプリケーションを実行することとを行うよう前記１つ以上のプロセッサによって実行可能である、コンピューティングデバイス。
【請求項１０】
前記コンテナランタイムはさらに、前記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを行うよう前記１つ以上のプロセッサによって実行可能であり、前記グラフィカルユーザインターフェイスは、前記コンテナランタイムによってまだ受信されていない前記１つ以上の随意の従属性のうちの少なくとも１つのためのプレースホルダグラフィカル要素を含んでおり、
前記コンテナランタイムはさらに、前記１つ以上の随意の従属性のうちの前記少なくとも１つを受信することに応答して、前記プレースホルダ要素の代わりに前記少なくとも１つの随意の従属性に関連付けられる情報を表示のために出力することを行うよう前記１つ以上のプロセッサによって実行可能である、請求項９に記載のコンピューティングデバイス。
【請求項１１】
前記アプリケーションコンテナは、
前記１つ以上の随意の従属性に含まれるデータに基づいて、前記１つ以上の随意の従属性に含まれる前記データを使用するように構成される前記アプリケーションの１つ以上のインストール可能なサブパッケージを決定することと、
前記データを使用するように構成される前記アプリケーションの前記１つ以上のインストール可能なサブパッケージのうちの少なくとも１つをあらかじめフェッチすることとを
行うよう、前記１つ以上のプロセッサによって実行可能である、請求項９および請求項１０のいずれかの組み合わせに記載のコンピューティングデバイス。
【請求項１２】
前記コンテナランタイムは、少なくとも前記アプリケーションのメタデータを解析するように実行可能であることによって、前記１つ以上の随意の従属性を決定するよう前記１つ以上のプロセッサによって実行可能である、請求項９〜１１のいずれかの組み合わせに記載のコンピューティングデバイス。
【請求項１３】
前記コンテナランタイムは、少なくとも前記アプリケーションのヒューリスティック解析から得られる従属情報をリモートサーバから抽出するように実行可能であることによって、前記１つ以上の随意の従属性を決定するよう前記１つ以上のプロセッサによって実行可能である、請求項９〜１２のいずれかの組み合わせに記載のコンピューティングデバイス。
【請求項１４】
請求項１〜８に記載の方法のいずれかの組み合わせを実行するための手段を含む、装置。
【請求項１５】
命令でエンコードされるコンピュータ読取可能記憶媒体であって、前記命令は、実行されると、コンピューティングデバイスの１つ以上のプロセッサに、請求項１〜８に記載の方法のいずれかの組み合わせを実行させる、コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
コンピューティングデバイスは、アプリケーションを実行し、ユーザ入力を受信し、表示のための情報を出力するといった、さまざまな機能を実行し得る。たとえば、コンピューティングデバイスは、Ｅメールクライアント、トラベルアシスタントおよびメッセージングクライアントなどといったアプリケーションを実行し得る。アプリケーションは、さまざまな機能を実現する１つ以上の実行可能なコンポーネントを含み得る。いくつかの分散された環境において、ユーザコンピューティングデバイス（たとえばスマートフォン）は、リモートコンピューティングシステムによって提供されるアプリケーションを検索してインストールするためにメディアストアアプリケーションを使用し得る。典型的には、ユーザが、メディアストアアプリケーションにおいて、ユーザコンピューティングデバイスにインストールするべきアプリケーションを選択すると、リモートコンピューティングシステムは、アプリケーションのすべての機能を実行するために、ユーザが実際にすべての機能を使用するかどうかに関わらず、実行可能なコンポーネントのすべてを含んでいる単一のファイルを送信する。さらに、アプリケーションは典型的に、実行可能なコンポーネントのすべてがダウンロードされユーザコンピューティングデバイスにインストールされるまで、実行することができない。
【発明の概要】
【課題を解決するための手段】
【０００２】
概要
一般に、本開示の技術は、存在するオペレーティングシステムへの修正を必要とすることなく、アプリケーションコンテナによるアプリケーションコードおよび従属データの送達の管理を提供する。アプリケーションコンテナは、アプリケーションコンテナ内で実行される任意のアプリケーションコードがなければ、スタンドアロンの機能的なアプリケーションではないが、オペレーティングシステムにとっては、アプリケーションコンテナはアプリケーション自体であるように見える。アプリケーションコンテナは、アプリケーションを記述する際に、デベロッパによって使用可能な多くの異なるアプリケーションプログラミングインターフェイス（ＡＰＩ： application programming interface）を提供し得る。すなわち、デベロッパは、存在するオペレーティングシステムによって提供されるかまたは共有ライブラリによって提供されるＡＰＩに依拠することを回避し、また、コンパイル時において、さまざまなライブラリを静的にリンクすることを回避し得る。その代わりに、デベロッパは、アプリケーションコンテナによって提供されるＡＰＩは不変であり、アプリケーションコンテナ自身がアプリケーション従属性および共有ライブラリアップデートなどを管理すると仮定し得る。ユーザがアプリケーションのインストールを開始する場合、アプリケーションコンテナは、並列（並行）で、当該アプリケーションについての１つ以上の別個のサブパッケージと、デベロッパによって特定される任意の従属データとを抽出する。従属データは、必須の従属データと、随意（任意）の従属データとを含み得る。
【０００３】
少なくとも１つのサブパッケージおよび必須の従属データがひとたび抽出されると、アプリケーションコンテナは、サブパッケージまたは随意の従属データのすべてが抽出され得るわけではないが、アプリケーションの実行を開始し得る。すなわち、アプリケーションサブパッケージおよび従属データのすべてがコンピューティングデバイスにダウンロードされることを待つのではなく、この開示の技術は、コンピューティングデバイスがアプリケーションサブパッケージおよび従属データの抽出を管理するためにアプリケーション
コンテナを使用することを可能にし、かつ、必要なサブパッケージおよび従属データがひとたび抽出されると、サブパッケージおよび従属データのすべてがコンピューティングデバイスにダウンロードされていなくても、アプリケーションを実行し始めることを可能にする。これにより、コンピューティングデバイスは、実行に先立ってデータのすべてをダウンロードすることが必要とされる場合よりも、アプリケーションをより迅速に実行し始めることができる。さらに、当該技術は、アプリケーションのある機能を実行するのに必要なサブパッケージおよびデータのみをダウンロードすることによって、当該アプリケーションがコンピューティングデバイス上で消費するストレージスペースを少なくすることができるので、コンピューティングデバイスにおいて利用可能なデータストレージスペースをより効率的に使用し得る。
【０００４】
一例では、方法は、コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することと、スーパーバイザーコンポーネントによって、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられているかどうかを決定することと、アプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられていると決定することに応答して、アプリケーションコンテナのコンテナランタイムによって、アプリケーションの複数の従属性を決定することとを含み、１つ以上の従属性は、１つ以上の必要な従属性と１つ以上の随意の従属性とを含む。上記方法はさらに、コンテナランタイムによって、１つ以上の必要な従属性の抽出を開始することと、コンテナランタイムによって、１つ以上の随意の従属性の抽出を開始することと、随意の従属性のうちの少なくとも１つがコンテナランタイムによってまだ受信されていないが１つ以上の必要な従属性のすべてを受信することに応答して、コンピューティングデバイスによってアプリケーションを実行することとを含み得る。
【０００５】
別の例では、コンピューティングデバイスは、スーパーバイザーコンポーネントを格納する１つ以上のストレージコンポーネントと、１つ以上のプロセッサとを含む。１つ以上のプロセッサは、アプリケーションを実行するための要求を受信することと、アプリケーションを実行するための要求を受信することとを行うよう、スーパーバイザーコンポーネントを実行する。スーパーバイザーコンポーネントが、アプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられていると決定することに応答して、アプリケーションコンテナのコンテナランタイムは、アプリケーションの１つ以上の従属性を決定することを行うよう、１つ以上のプロセッサによって実行可能であり、１つ以上の従属性は、１つ以上の必要な従属性と１つ以上の随意の従属性とを含んでおり、アプリケーションコンテナのコンテナランタイムはさらに、１つ以上の必要な従属性の抽出を開始することと、１つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも１つがコンテナランタイムによってまだ受信されていないが１つ以上の必要な従属性のすべてを受信することに応答して、アプリケーションを実行することとを行うよう１つ以上のプロセッサによって実行可能である。
【０００６】
別の例において、命令でエンコードされる一時的でないコンピュータ読取可能記憶媒体であって、命令は、コンピューティングデバイスの１つ以上のプロセッサによって実行されると、１つ以上のプロセッサに、アプリケーションを実行するための要求を受信することと、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられているかどうか決定することと、アプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられていると決定することに応答して、アプリケーションの１つ以上の従属性を決定することとを行わせ、１つ以上の従属性は、１つ以上の必要な従属性と１つ以上の随意の従属性とを含む。命令はさらに、１つ以上のプロセッサに、１つ以上の必
要な従属性の抽出を開始することと、１つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも１つがコンテナランタイムによってまだ受信されていないが１つ以上の必要な従属性のすべてを受信することに応答して、アプリケーションを実行することとを行わせる。
【０００７】
別の例において、装置は、アプリケーションを実行するための要求を受信するための手段と、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられているかどうか決定するための手段と、アプリケーションコンテナがコンピューティングデバイスのメモリにおいて割り当てられていると決定することに応答して、アプリケーションの１つ以上の従属性を決定するための手段とを含み、１つ以上の従属性は、１つ以上の必要な従属性と１つ以上の随意の従属性とを含む。装置はさらに、１つ以上の必要な従属性および１つ以上の随意の従属性の抽出を開始するための手段と、随意の従属性のうちの少なくとも１つがコンテナランタイムによってまだ受信されていないが１つ以上の必要な従属性のすべてを受信することに応答して、アプリケーションを実行するための手段とを含む。
【０００８】
１つ以上の例の詳細を添付の図面および以下の説明で述べる。本開示の他の特徴、目的および利点は、記載および図面ならびに添付の請求の範囲から明白になるであろう。
【図面の簡単な説明】
【０００９】
【図１】この開示の技術に従った、動的にアプリケーション従属性をロードするアプリケーションコンテナを有する例示的なコンピューティングデバイスを示す概念図である。
【図２】本開示の１つ以上の局面に従った、コンピューティングデバイスのさらなる詳細を示すブロック図である。
【図３】この開示の技術に従った、動的にアプリケーション従属性をロードするためのアプリケーションコンテナを有するコンピューティングデバイスの例示的な動作を示すフロー図である。
【発明を実施するための形態】
【００１０】
詳細な説明
図１は、この開示の技術に従った、動的にアプリケーション従属性をロードするアプリケーションコンテナ１０２Ａ〜１０２Ｃ（「アプリケーションコンテナ１０２」）を有する例示的なコンピューティングデバイス１００を示す概念図である。コンピューティングデバイス１００の例は、（スマートフォンを含む）携帯電話、ラップトップコンピュータ、タブレットコンピュータといったポータブルまたはモバイルデバイス、スマートウォッチまたはコンピュータ化されたアイウェアといったウェアラブルコンピューティングデバイス、スマートテレビジョンプラットホーム、車両ヘッドユニットのような車両コンピューティングシステム、カメラ、携帯情報端末（ＰＤＡ）などを含み得るがこれらに限定されない。いくつかの例において、コンピューティングデバイス１００は、デスクトップコンピュータ、サーバ、メインフレームなどのような据え置き型のコンピューティングデバイスを含み得る。
【００１１】
図１に示されるように、コンピューティングデバイス１００は、アプリケーションコンテナ１０２、システムランタイム１２６、オペレーティングシステム１３６、および、ハードウェアコンポーネント１３８を含む。コンピューティングデバイス１００は、ネットワーク１４０および通信リンク１４８Ａ〜１４８Ｂを介して１つ以上の他のリモートコンピューティングデバイス１４２Ａ〜１４２Ｃ（「リモートコンピューティングデバイス１４２」）と通信し得る。図１に示されるように、ネットワーク１４０は、任意のパブリックまたはプライベート通信ネットワークを表わしており、たとえば、セルラーネットワー
ク、Ｗｉ−Ｆｉ（登録商標）ネットワーク、および／または、コンピューティングデバイス同士間でデータを送信するための他のタイプのネットワークである。コンピューティングデバイス１００およびリモートコンピューティングデバイス１４２は、任意の好適な通信技術を使用して、ネットワーク１４０を介してデータを送受信し得る。たとえば、コンピューティングデバイス１００は、通信リンク１４８Ａを使用して、ネットワーク１４０に動作可能に結合され得る。リモートコンピューティングデバイス１４２Ａは、通信リンク１４８Ｂによってネットワーク１４０に動作可能に結合され得る。ネットワーク１４０は、ネットワークハブ、ネットワークスイッチ、ネットワークルータなどを含み得、ネットワークハブ、ネットワークスイッチ、ネットワークルータは、動作可能に相互結合されており、これにより、コンピューティングデバイス１００とリモートコンピューティングデバイス１４２との間で情報の交換が提供される。いくつかの例において、通信リンク１３８Ａ〜１３８Ｂはイーサネット（登録商標）、ＡＴＭまたは他のネットワーク接続であり得る。そのような接続は無線および／または有線接続であり得る。
【００１２】
ハードウェアコンポーネント１３８は、たとえば、コンピュータプロセッサ、通信ユニット（たとえばモデムおよびネットワークインターフェイスコントローラなど）、入力コンポーネント、出力コンポーネント、存在感知型ディスプレイ、揮発性メモリおよび不揮発性メモリ、ならびに、電源を含み得るがこれらに限定されない。オペレーティングシステム１３６は、ハードウェアコンポーネント１３８上で実行し得、コンピューティングデバイス１００のハードウェアおよびソフトウェアコンポーネントを管理する。たとえば、オペレーティングシステム１３６は、メモリ管理、プロセススケジューリングおよび不揮発性ストレージ管理を実行し得る。オペレーティングシステム１３６はさらに、コンピューティングデバイス１００において実行されるアプリケーションにネットワークおよびセキュリティサービスを提供し得る。オペレーティングシステム１３６はさらに、上記よりも多いまたは少ない機能を実行し得る。
【００１３】
ランタイムシステム１２６は、アプリケーションが記述および構築またはコンパイルされる特定のプログラミング言語に従って構築されるアプリケーションについての実行モデルを実現する。ランタイムシステム１２６は、実行の間にアプリケーションコンテナ１０２にアクセス可能である１つ以上のライブラリおよび／またはサービスを含み得る。この開示においてさらに記載されるように、各アプリケーションコンテナ１０２は別個のアプリケーションに対応し得る。ランタイムシステム１２６は、スレッドマネジメントサービスと、スクリーン描画およびユーザインターフェイスレンダリングコンポーネントと、アプリケーション間およびアプリケーション内メッセージングサービスとを含み得るが、これらはほんのいくつかの例示的なサービスである。アプリケーションコンテナ１０２は、ランタイムコンポーネント１２８によって公開されるアプリケーションプログラミングインターフェイス（ＡＰＩ）を通じて当該サービスにアクセスし得る。いくつかの例において、ランタイムシステム１２６は１つ以上のプロセスおよび／またはスレッドとして実行され得る。プロセスおよび／またはスレッドの１つ以上は、オペレーティングシステム権限有りまたは権限無しで、実行され得る。
【００１４】
図１に示されるように、ランタイムシステム１２６はランタイムコンポーネント１２８を含み得る。各別個のランタイムコンポーネントは、１つ以上のプロセスおよび／またはスレッドにより実現され得る。いくつかの例において、各別個のランタイムコンポーネントは、機能のユーザが定義したセットを提供し得る。たとえば、ユーザインターフェイスレンダリングコンポーネントは、ユーザインターフェイス要素（たとえばボタン、リスト、画像、および入力フィールドなど）およびそれらの対応する挙動を定義する１つ以上のライブラリにより実現され得る。ユーザインターフェイスレンダリングコンポーネントは、グラフィカルユーザインターフェイスにおいてユーザインターフェイス要素をレンダリングするようアプリケーションコンテナ１０２によって呼び出されるＡＰＩを提供し得る
。
【００１５】
スーパーバイザーコンポーネント１２８Ａはランタイムコンポーネント１２８に含まれる。スーパーバイザーコンポーネント１２８Ａは、アプリケーションコンテナ１０２のインストールおよびメンテナンスを実行し、アプリケーション間およびアプリケーション内メッセージングサービスを提供する。一般に、スーパーバイザーコンポーネント１２８Ａは、コンピューティングデバイスにおいて実行されるオペレーティングシステム１３６とは異なる。スーパーバイザーコンポーネント１２８Ａは、アプリケーションコンテナ１０２によって生成されるメッセージについてリッスン（listen）するメッセージブローカー１３０を含んでおり、送信側のアプリケーションコンテナまたは１つ以上の他のアプリケーションコンテナについてのアクションを実行する。スーパーバイザーコンポーネント１２８Ａは、任意のメッセージ（たとえばユーザが特定した識別子としてＵＲＩを含むメッセージ）を送ることにおいて、第１の優先権または第１の機会を有し得る。いくつかの例では、たとえば、メッセージブローカー１３０は、アプリケーションコンテナプール１３２からアプリケーションコンテナを割り当てることと、メッセージについてセキュリティを実施することと、メッセージのログを記録することといった、メッセージについて付加的な処理を提供し得る。例として、アプリケーションコンテナ１０２Ａは、同じアプリケーション内において、第１のユーザインターフェイスから第２のユーザインターフェイスまでナビゲートするようメッセージを生成し得る。アプリケーションコンテナ１０２Ａは、フィルタのセットを含むメッセージングテーブル１３４を含むメッセージをメッセージブローカー１３０に送信し得、各フィルタは１つ以上の条件および１つ以上の通信アクションを有する。メッセージの内容がフィルタの条件とマッチする場合、メッセージブローカー１３０は、第２のグラフィカルユーザインターフェイスを出力するよう命令を実行するといった対応するアクションを実行し得る。いくつかの例では、上記のそのようなメッセージは、メッセージブローカー１３０にメッセージを転送することなく、ルータ１１２によって内部でルーティングされ得る。
【００１６】
いくつかの例において、スーパーバイザーコンポーネント１２８Ａは、少なくとも１つのアプリケーションコンテナがアプリケーションコンテナプール１３２に含まれており、起動の準備ができていることを保証する。アプリケーションコンテナプール１３２に含まれる各アプリケーションコンテナは現在、特定のアプリケーションに割り当てられておらず、現在、アプリケーションコードを実行していない。しかしながら、アプリケーションコンテナプール１３２に含まれる各アプリケーションコンテナは、スーパーバイザーコンポーネント１２８Ａが特定のアプリケーションコンテナを起動し、特定のアプリケーションに特定のアプリケーションコンテナを割り当てる際に、アプリケーションコードをロードおよび実行することができるために十分なブートストラッピングコードを含む。アプリケーションコンテナプール１３２からの特定のアプリケーションコンテナは、スーパーバイザーコンポーネント１２８Ａから命令を受信し、特定のアプリケーションについてのアプリケーションコードをロードおよび実行することを開始する。
【００１７】
上述したように、アプリケーションコンテナ１０２の各々は、対応するアプリケーションが実行されているときに、別個のアプリケーションに対応し得る。さまざまな場合において、スーパーバイザーコンポーネント１２８Ａは、どのアプリケーションコンテナがどの実行アプリケーションにマッピングされているかというマッピングを維持する。アプリケーションは、コンピューティングデバイス１００上で動作を実行するために別個の機能を含み得る。たとえば、アプリケーションは、Ｅメールアプリケーション、テキストメッセージングアプリケーション、インスタントメッセージングアプリケーション、気象アプリケーション、ビデオ会議アプリケーション、ソーシャルネットワーキングアプリケーション、気象アプリケーション、株式市場アプリケーション、緊急警戒アプリケーション、スポーツアプリケーション、オフィス生産性アプリケーション、マルチメディアプレーヤ
ーを含み得る。
【００１８】
ユーザまたはオペレーティングシステムが特定のアプリケーションを呼び出すと、スーパーバイザーコンポーネント１２８Ａは動的に、アプリケーションコンテナプール１３２からアプリケーションコンテナ１０２を割り当て、対応するアプリケーションへの特定のアプリケーションコンテナ１０２のマッピングを維持する。あるアプリケーションが終了すると、スーパーバイザーコンポーネント１２８Ａは、もはや必要でない任意のアプリケーションコンテナ１０２をクリーンアップし得る。たとえば、スーパーバイザーコンポーネント１２８Ａは、アプリケーションコンテナ１０２の状態をリセットし得、または、現在終了しているアプリケーションにマッピングされたアプリケーションコンテナ１０２をアンインストールし得る。スーパーバイザーコンポーネント１２８Ａが、アクティブに実行されているアプリケーションにもはやマッピングされていないアプリケーションコンテナ１０２をアンインストールする例において、スーパーバイザーコンポーネント１２８Ａは、新しいアプリケーションコンテナをインストールし、それらをアプリケーションコンテナプール１３２に加え、これにより、アプリケーションの呼出に応答して、少なくとも１つのアプリケーションコンテナが起動される準備ができていることを保証する。これにより、アプリケーションインストールのユーザインタラクティブレイテンシーは、オペレーティングシステムの観点から各アプリケーションについて別個の識別性を維持しつつ、０またはほぼ０まで低減され得る。
【００１９】
図１に示されるように、アプリケーションコンテナ１０２Ａは、アプリケーションの実行可能なコンポーネント１０８の実行を命令するよう、実行環境およびサポートサービスを提供する。アプリケーションコンテナ１０２は、オペレーティングシステム１３６において別個のプロセスとして実行され得、複数の異なるアプリケーションについて共通の機能のセットを含み得る。いくつかの例において、アプリケーションコンテナ１０２Ａは、メッセージングインターフェイス１１５を含む。ルータ１１２はメッセージングインターフェイス１１５を介してランタイムシステム１２６からメッセージを受信し得、ランタイムシステム１２６は実行可能なコンポーネント１０８およびルータ１１２からメッセージングインターフェイス１１５を介してメッセージを受信し得る。アプリケーションコンテナ１０２Ａについてのプログラムロジックは、実行可能なコンポーネント１０８において実現され得る。実行可能なコンポーネントは、マシン実行可能コードのロジカルグルーピングであり得る。たとえば、オブジェクト指向設計において、単一の実行可能なコンポーネントは、マシン実行可能コードを含む単一のコンパイルされたクラスファイルであり得る。
【００２０】
アプリケーションコンテナ１０２Ａは、１つ以上のサブパッケージ１０４にのための容器（vessel）であり得る。いくつかの例において、サブパッケージは２つ以上の実行可能なコンポーネント１０８を含んでいる。サブパッケージは、リソース（たとえば画像、テキスト、ビデオもしくは任意の他のコンパイルされていないデータ）、セキュリティおよび／もしくは署名情報、バージョン情報および／もしくは従属性情報、または、アプリケーションのための任意の他の情報を含み得る。ソフトウェアデベロッパは、ユーザが定義した複数のサブパッケージで構成されるようにアプリケーションを設計し得る。ユーザが定義した各サブパッケージは、一緒に機能の離散的なセットを提供する実行可能なコンポーネントのセットを含み得る。たとえば、ソフトウェアデベロッパは、複数の異なるユーザインターフェイスを有するナビゲーションアプリケーションを設計し得る。各ユーザインターフェイスは、ユーザインターフェイス要素の異なるセットと、対応する挙動とを含み得る。そのため、各ユーザインターフェイスは、実行可能なコンポーネントの別個のセットを有するように実現され得る。たとえば、ナビゲーションアプリケーションは、ターンバイターン（turn-by-turn）ナビゲーションユーザインターフェイスと、ポイントオブインタレスト（point-of-interest）ユーザインターフェイス（たとえばマップ上でポイ
ントオブインタレストについて詳細を表示する）と、セッティングユーザインターフェイスとを含み得る。ソフトウェアデベロッパは、３つの異なるサブパッケージを有するアプリケーションを設計し得、各サブパッケージは、それぞれのユーザインターフェイスについて機能を実現するために実行可能なコンポーネントのセットを含む。
【００２１】
アプリケーションコンテナ１０２Ａはコンテナランタイム１２４を含み得る。コンテナランタイム１２４は、コンテナランタイム１２４、ランタイムシステム１２６および／またはオペレーティングシステム１３６内でライブラリによって提供されるサービスおよび／または機能に対する１つ以上のライブラリおよび／または１つ以上のアプリケーションプログラミングインターフェイス（ＡＰＩ）１１７を含み得る。そのため、コンテナランタイム１２４はセキュアなプロセス内ＡＰＩ層を提供し得る。すなわち、各アプリケーションコンテナ１０２は、アプリケーションコンテナがマッピングされる特定のアプリケーションのためのアプリケーションコードとプロセスおよびアドレススペースを共有する。プロセスおよびアドレススペースを共有することによって、アプリケーションコンテナ１０２は、アプリケーションコードと共有されるＡＰＩコードとの間でメソッド呼出セマンティックス（method call semantics）を簡素化し得る。すなわち、ブロッキングプロセ
ス間通信呼出（blocking interprocess communication call）を使用することをデベロッパに要求するのではなく、デベロッパは直接的にＡＰＩ１１７を利用し得る。
【００２２】
アプリケーションコンテナおよびコンテナランタイムを制御することによって、ランタイムシステム１２６は、ＡＰＩ呼出を代理し得、アプリケーションコンテナおよびコンテナランタイムが不正な変更を加えられておらず、したがって、センシティブな挙動についてランタイムロジックを提供するということを照合し得る。たとえば、ユーザのデバイス識別子（たとえばデバイスのグローバル一意識別子）へのアクセスを要求するアプリケーションは、コンテナランタイムのＡＰＩを通じて呼出を行うことが必要とされ得、これはスーパーバイザーコンポーネント１２８Ａによりチェックし得、これにより、これは許可された挙動であるということを保証するか、または、たとえば個人を識別する情報を取り除くまたは匿名化することによりそのＡＰＩの出力を修正する。一般に、アプリケーションコンテナ１０２は、オペレーティングシステム１３６への何らかの直接的なアクセスを許可し得、代理（proxying）を介して何らかの間接的なアクションを許可し得、さらに、あるＡＰＩへのアクセスをブロックし得る。これにより、コンテナランタイム１２４は、さまざまな動作においてそのようなチェックが発生するという保証を実施し得る。なぜならば、そのような動作は、コンテナランタイム１２４のＡＰＩを通じてのみなされ得るからである。さらに、アプリケーションコンテナ１０２のコンテナランタイム１２４がＡＰＩ１１７を提供するので、存在するオペレーティングシステム１３６へのアップデートを必要とするのではなく、アプリケーションアップデートについてアプリケーションコンテナ１０２へのアップデートが実行され得、これにより、任意のそのようなアップデートの採用率（adoption rate）が増加され得、オペレーティングプラットフォームのセキュリ
ティが増加され得る。
【００２３】
コンテナランタイム１２４はさらに、プラットホームコーディネーションを必要とするＡＰＩ上で繰り返すために層を提供し得る。たとえば、サブパッケージは、位置のようないくつかの特定のデータを必要とすると宣言し得、コンテナランタイム１２４は、特定のサブパッケージについての実行可能なコンポーネントのロードと並列（並行）に、位置を得るとともに、アプリケーションの起動の際にアーギュメントとして当該位置を提供することが可能である。一例として、デベロッパは、アプリケーションについてのメタデータにおいて、いくつかの従属データがアプリケーションの実行に必要であることを特定し得る。コンテナランタイム１２４は、アプリケーションについてのアプリケーションコードを抽出して実行し始め得るだけでなく、並列（並行）で従属データを識別し抽出し得る。いくつかの場合において、デベロッパは、従属データが必須（すなわちアプリケーション
が実行することが必要）か、または、「最良の努力（ベストエフォート：best effort）
」（すなわちアプリケーションの動作／機能を改善するが厳密にアプリケーションが実行することを必要としているわけではない）であるかどうかを特定し得る。必須の従属データの例は、アプリケーションについて基本的なユーザインターフェイスを表示することが必要とされるデータであり得る。「最良の努力」の従属データの場合、コンテナランタイム１２４は、コンテナランタイム１２４がまだ「最良の努力」従属データを受信していなくても、アプリケーションコードがダウンロードされ実行するために利用可能になるとすぐに、アプリケーションコードを実行し始め得る。
【００２４】
たとえば、特定の州についてすべての州立公園を示すが、近くの公園が示されるモードもサポートする簡易なアプリケーションを考える。デベロッパは以下のようにアプリケーションのメタデータ要件を特定し得る。
url: /
ads: optional
location: optional
atom: home_screen
url: /nearby
ads: optional
location: required
atom: nearby_screen
ユーザがアプリケーションを実行し、（ｕｒｌ「／」に対応し得る）初期アプリケーションスクリーンにナビゲートする場合、コンテナランタイム１２４は、並列（並行）で、home_screen atomをダウンロード（たとえば、リモートコンピューティングデバイス１４２Ａからサブパッケージ１４６のうちの１つをダウンロード）し始め得、広告表現（ads creative）を要求し得、グローバルポジショニングフィックスを開始し得る。グローバルポジショニングシステムフィックスを得る前に、コンテナランタイム１２４がhome_screen atomをダウンロードし終えた場合、アプリケーションコンテナ１０２Ａは、表示される広告表現のためのエリアと共に、コンピューティングデバイス１００の現在の位置から各公園への距離がそうでなければ示されていたであろう空のスペースと一緒に公園のリストを表示させる。コンテナランタイム１２４がひとたび広告表現を抽出およびロードすることを終了すると、アプリケーションコンテナ１０２Ａは、広告を含めるようにグラフィカルユーザインターフェイスをアップデートする。同様に、コンテナランタイム１２４がひとたびコンピューティングデバイス１００の現在の位置を得ること（すなわち、ＧＰＳフィックス）ができれば、アプリケーションコンテナ１０２Ａは、現在の位置から各公園へのそれぞれの距離を含めるために、グラフィカルユーザインターフェイスをアップデートし得る。
【００２５】
コンテナランタイム１２４がコンピューティングデバイス１００の現在の位置を得ることに先立って、ユーザが近隣公園アプリケーションスクリーン（url 「/nearby」に対応
し得る）にナビゲートする場合、コンテナランタイム１２４は、コンテナランタイム１２４が現在の位置情報を受信するまで、nearby_screen atomを実行して近隣公園アプリケーションスクリーンを表示することを差し控える。なぜならば、位置がnearby_screen atomの実行に必要であることをデベロッパが特定しているからである。これにより、デベロッパは、アプリケーションが位置情報を受信するのを待っている場合に特別に対処する必要はなく、その代わりに、そのような状況に対処するためにコンテナランタイム１２４に依拠することができる。
【００２６】
コンテナランタイム１２４は、アプリケーションについてのデータを自動的に決定し先を見越して抽出し得る。たとえば、州立公園アプリケーションの例は、デベロッパによってメタデータにおいて明示的に定義される階層構造を有するものであると記載されている
が、さまざまな例では、デベロッパは、メタデータにおいてアプリケーション構造を定義する必要はない。代わりに、コンテナランタイム１２４はアプリケーションコードを分析し得、当該アプリケーションによって必要とされる可能性があるデータを決定し得、デベロッパがデータ従属性を特定することなく、アプリケーションによって必要とされるそのデータをオプティミスティックに（optimistically）抽出し得る。すなわち、アプリケーションコンテナ１０２は、いくつか場合において、良好なランタイム従属性の充足（good
runtime dependency satisfaction）を与えることによって、静的なライブラリについての必要性を除去し得る。アプリケーションコードはアプリケーションコンテナ１０２によって実行されるので、コンテナランタイム１２４は最初に、アプリケーションメタデータについての理解を通じて、関連するバージョニングルールを含むアプリケーションの従属性を決定し得、それらの従属性を満たし得、その後、アプリケーションコードを実行し始め得る。さらに、アプリケーションコンテナ１０２およびランタイムシステム１２６はオペレーティングシステム１３６の外部で動作するので、この開示の技術をサポートするためにオペレーティングシステム１３６を修正する必要はない。
【００２７】
さらに、この開示の技術により、コンテナランタイム１２４が、付加的なアプリケーションコードおよび当該付加的なコードのデータ従属性をオプティミスティックにあらかじめフェッチすることを実行することが可能になる。いくつかの場合において、コンテナランタイム１２４は、アプリケーションのある機能を提供するために（たとえば一般に用いられる特徴のために）必要とされる可能性がある付加的なコードを予測し得、当該付加的なコードを先を見越して抽出し得る。たとえば、コンテナランタイム１２４は、ナビゲーションアプリケーションをロードするユーザがさらに、方向を要求する可能性があることを予測し得、それについての機能は、ナビゲーションアプリケーションに初期ユーザインターフェイスを提供するサブパッケージとは異なるサブパッケージ内に存在し得る。コンテナランタイム１２４は、付加的なコードを抽出し得（たとえば、リモートコンピューティングデバイス１４２Ａからサブパッケージ１４６のうちの１つをダウンロードし、コンピューティングデバイス１００において格納されるサブパッケージ１０４をロードするなど）、付加的なコードの任意のデータ従属性を識別し、当該付加的なコードのデータ従属性をあらかじめフェッチし得る。言いかえれば、コンテナランタイム１２４は、アプリケーションコンテナ１０２によって必要とされる可能性があるアプリケーションコードを決定し得、当該コードが従属するデータをフェッチしつつ、アプリケーションコードをフェッチし得る。対照的に、コードをあらかじめフェッチするだけのシステムは、そのコードが実際に実行されるまで、必要なデータをフェッチするのを待つ。
【００２８】
以下にさらに記載されるように、ソフトウェアデベロッパが機能の別個のセットについて別個のサブパッケージを有するアプリケーションを設計することを可能にすることによって、アプリケーションコンテナ１０２は、そのサブパッケージのすべてについてそのそれぞれの実行コンポーネントのすべてがコンピューティングデバイス１００上でローカルに常駐することなく、コンピューティングデバイス１００においてアプリケーションが実行されることを可能にする。これにより、アプリケーションの初期実行は、すべてのサブパッケージの抽出および／またはインストールを必要とせず、要求された機能を実現する実行可能なコンポーネントを含むサブパッケージのサブセットの抽出および／またはインストールのみを必要とし得る。さらに、単一のサブパッケージにおいて複数の実行可能なコンポーネントをパッケージングすることによって、実行可能なコンポーネントの抽出および／またはインストールは、性能が貧弱になり得および／またはユーザ体験が貧弱になり得る実行可能なコンポーネントベースで実行可能なコンポーネントを抽出およびインストールするのではなく、要求された機能に従って、（たとえば特定のユーザインターフェイスをレンダリングするよう）サブパッケージベースで発生し得る。
【００２９】
上述したように、各アプリケーションは、アプリケーションの動作を定義する１つ以上
の実行可能なコンポーネントを含んでいるアプリケーションコンテナにより実行され得る。アプリケーションコンテナ１０２Ａは、実行可能なコンポーネント１０８およびメッセージングインターフェイス１１５とにより、アプリケーションの挙動を変更しおよび／またはアプリケーションに１つ以上の動作を実行させるメッセージを送受信するルータ１１２を含む。たとえば、ルータ１１２は、１つ以上の動作の実行を要求するメッセージを受信し得る。ルータ１１２は、１つ以上の動作を実行するために実行可能なコンポーネントを含むサブパッケージがローカルに格納されているか、または、そうでなければコンピューティングデバイス１００上でアクセス可能であるかを、メッセージの内容に基づいて決定し得る。メッセージの内容は、サブパッケージに対応するユニフォームリソースアイデンティファイア（ＵＲＩ： Uniform Resource Identifier）のような識別子を含み得る。サブパッケージがローカルに格納されているかまたはそうでなければコンピューティングデバイス１００上でアクセス可能な場合、ルータ１１２は、メッセージの内容に基づいて、動作を実行するために１つ以上の実行可能なコンポーネントを識別する。いくつかの例では、メッセージは、付加的な属性（たとえばユーザインターフェイスを起動するためのカテゴリ、データのＭＩＭＥタイプ、実行のための明示的なコンポーネントクラス）、または、実行するべき１つ以上の動作をさらに特定するデータ（たとえばユーザデータあるいはマシン生成データ）を含み得る。そのため、ルータ１１２によって識別される１つ以上の実行可能なコンポーネントは、付加的な属性またはデータに基づいて、１つ以上の動作を実行し得る。
【００３０】
上述したように、特定のアプリケーションのためのサブパッケージのすべてが、アプリケーションを実行するために、コンピューティングデバイス１００においてローカルに常駐する必要があるわけではない。特定の機能についてのサブパッケージがコンピューティングデバイス１００において常駐またはそうでなければアクセス可能かどうか決定するために、ルータ１１２は、アプリケーション定義１１６に対してルックアップを実行し得る。アプリケーション定義１１６は一般に、ユーザが特定した識別子（たとえばＵＲＩ、ストリング、整数または任意の他の好適な識別子）と、アプリケーションについての特定の機能を特定するサブパッケージとの間のマッピングを定義し得る。アプリケーション定義１１６は、ルーティングテーブル１１８においてこれらのマッピングを含んでおり、ルーティングテーブル１１８は、ユーザが特定した識別子１２０Ａ〜１２０Ｎ（「ユーザが特定した識別子１２０」）と、サブパッケージ識別子１２２Ａ〜１２２Ｎ（「サブパッケージ識別子１２２」）との間のマッピングを含む。ルータ１１２が、特定のサブパッケージを使用して機能を実行する、ユーザが特定した識別子を有するメッセージを受信すると、ルータ１１２は、ルータテーブル１１８においてルックアップを実行し得る。ルータ１１２は、たとえばユーザが特定した識別子１２０Ａがメッセージにおけるユーザが特定した識別子とマッチしていると決定すると、ルータ１１２は、サブパッケージ識別子１２２Ａに対応するサブパッケージ１０４Ａがコンピューティングデバイス１００上に常駐しているかどうか決定し得る。サブパッケージ１０４Ａがコンピューティングデバイス１００上で常駐しているので、ルータ１１２は、メッセージに基づいてサブパッケージ１０４Ａへの呼出を実行するか、または、実行可能なコンポーネント１０８Ａを使用して１つ以上の動作を実行するメッセージをサブパッケージ１０４Ａに送信する。
【００３１】
上述したように、コンピューティングデバイス１００上にアプリケーションについてのサブパッケージの全セットがローカルに格納される必要はないので、コンピューティングデバイス１００におけるアプリケーションの初期のインストールおよび／または初期の実行に必要な時間は、リモートコンピューティングデバイスからアプリケーション全体がダウンロードされ、インストールされ、コンピューティングデバイス１００によって実行される必要がある場合よりも、少なくなり得る。そのため、ユーザは、アプリケーションからのより大きな応答性、および／または、アプリケーションの挙動についてのより大きな性能を経験し得る。
【００３２】
図１の例では、上で記載されたように、ユーザは最初にナビゲーションアプリケーションをインストールし実行することを望み得る。最初は、ナビゲーションアプリケーションについてのサブパッケージまたはアプリケーション定義のいずれも、コンピューティングデバイス１００に格納されていない場合がある。ユーザは、コンピューティングデバイス１００にユーザ入力を提供して、最初に、オペレーティングシステム１３６によって提供されるユーザインターフェイスにおいて、マップアプリケーションに対応するアイコンを選択し得る。代替的には、ユーザは、サブパッケージおよびアプリケーション定義を抽出するようコンピューティングデバイス１００において実行されリモートコンピューティングデバイス１４２と通信するメディアストアアプリケーション（図示せず）においてマップアプリケーションを選択し得る。いずれの場合においても、スーパーバイザーコンポーネント１２８Ａのメッセージブローカー１３０は、オペレーティングシステム１３６から、または、ナビゲーションアプリケーションについての特定の機能の実行を要求するメディアストアアプリケーションからメッセージを受信する。ナビゲーションアプリケーションがまだインストールされていないので、要求された特定の機能は、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示することである。
【００３３】
スーパーバイザーコンポーネント１２８Ａは、メッセージの内容に基づいて、アプリケーションコンテナがコンピューティングデバイス１００のメモリにおいてナビゲーションアプリケーションについて既に割り当てられているかどうか決定し得る。たとえば、メッセージの内容は、アプリケーションについての名称のようなナビゲーションアプリケーションの一意識別子を含み得る。スーパーバイザーコンポーネント１２８Ａがナビゲーションアプリケーションについてのアプリケーションコンテナをまだ割り当てていないと決定することに応答して、スーパーバイザーコンポーネント１２８Ａは、アプリケーションコンテナプール１３２からアプリケーションコンテナ１０２Ａを割り当て得る。アプリケーションコンテナプール１３２は、アプリケーションのために保留されアプリケーションを実行するのに使用可能なプロセスのセットを含み得る。いくつかの例において、スーパーバイザーコンポーネント１２８Ａは、アプリケーションコンテナ１０２Ａについての新しいプロセスを作成するために、オペレーティングシステム１３６と通信し得る。
【００３４】
スーパーバイザーコンポーネント１２８Ａは、ナビゲーションアプリケーションがまだインストールされていないと決定し得、リモートコンピューティングデバイス１４２のうちの１つ以上からのアプリケーション定義を要求し得る。たとえば、スーパーバイザーコンポーネント１２８Ａは、リモートコンピューティングデバイス１４２Ａへメッセージを送信し得、当該メッセージは、リモートコンピューティングデバイス１４２においてグローバルに一意である、ナビゲーションアプリケーションのための識別子を含んでいる。リモートコンピューティングデバイス１４２Ａは、メッセージを受信すると、アプリケーション定義１４４からアプリケーション定義１１６を選択し、コンピューティングデバイス１００にアプリケーション定義１１６を送信する。スーパーバイザーコンポーネント１２８Ａは、アプリケーションコンテナ１０２Ａに含まれるか、または、アプリケーションコンテナ１０２Ａにアクセス可能であり得るアプリケーション定義１１６を受信する。
【００３５】
スーパーバイザーコンポーネント１２８Ａは、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示するよう、メッセージブローカー１３０にアプリケーションコンテナ１０２Ａへメッセージを送信させる。特に、メッセージは、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示する機能を有するサブパッケージに対応するユーザが特定した識別子を含み得る。いくつかの例では、メッセージブローカー１３０は、メディアストアアプリケーションから受信された情報に基づくユーザが特定した識別子、または、ユーザによって最初に選択されたマッピングアプリケーションについてのアイコンに関連付けられるブートストラッピング機能から
受信された情報に基づくユーザが特定した識別子を受信する（または生成する）。ブートストラッピング機能は、ユーザが特定した識別子をメッセージブローカー１３０に送信することを含み得るがこれに限定されない。
【００３６】
ルータ１１２は、ユーザが特定した識別子を有するメッセージをメッセージングインターフェイス１１５を介して受信する。図１のこの例では、ユーザが特定した識別子は１２０Ａである。ユーザが特定した識別子に基づいて、ルータ１１２は、ユーザが特定した識別子１２０Ａに対応するサブパッケージ識別子１２２Ａについてのサブパッケージがコンピューティングデバイス１００においてローカルに格納されていないことを決定する。ルータ１１２は、コンテナランタイム１２４および／またはランタイムシステム１２６を使用して、サブパッケージ識別子１２２Ａについてのサブパッケージを要求するようリモートコンピューティングデバイス１４２Ａにメッセージを送信し得る。たとえば、リモートコンピューティングデバイス１４２Ａにコンテナランタイム１２４および／またはランタイムシステム１２６により送信されるメッセージは、サブパッケージ識別子１２２Ａを含み得る。リモートコンピューティングデバイス１４２Ａは、ナビゲーションアプリケーションのデフォルトまたはメインユーザインターフェイスを表示するための実行可能なコンポーネントを含むサブパッケージをコンピューティングデバイス１００に送信し得る。
【００３７】
ルータ１１２は、サブパッケージ識別子１２２Ａについてのサブパッケージがローカルに格納されていないと決定することに応答して、ライフサイクルマネージャ１１０に、コールバックインターフェイス１１３を介してシステムライフサイクル呼出についてリッスンさせ得る。当該ライフサイクル呼出はランタイムシステム１２６によって発行される。ライフサイクル呼出は、たとえば、アプリケーションを開始すること、アプリケーションを一時停止すること、アプリケーションの再開すること、または、アプリケーションを終了することを含み得る。ライフサイクルマネージャ１１０は、コンピューティングデバイス１００がひとたびリモートコンピューティングデバイス１４２Ａからサブパッケージ１０４Ａを抽出すると、サブパッケージ１０４Ａの実行可能なコンポーネントによって実行されるライフサイクル呼出をバッファリングし得る。サブパッケージ１０４Ａがひとたびコンピューティングデバイス１００によって抽出されると、ライフサイクルマネージャ１１０は、バッファリングされたライフサイクル呼出の各々をサブパッケージ１０４Ａに送信し得る。
【００３８】
図１の例では、コンピューティングデバイス１００がサブパッケージ１０４Ａを抽出しローカルに格納したことをライフサイクルマネージャ１１０が決定すると、ライフサイクルマネージャ１１０はローダ１０６に呼出を送信するか、またはそうでなければ、ローダ１０６を呼び出して、最初に要求された特定の機能を実行するために、たとえば、アプリケーションについてのデフォルトまたはメインユーザインターフェイスを表示するために、コンピューティングデバイス１００のメモリに実行可能なコンポーネント１０８の１つ以上をロードする。いくつかの例において、ローダ１０６は実行可能なコンポーネントをメモリにロードすることを担う。いくつかの例において、ローダ１０６は複数のローダを表わし得、各ローダは、異なる実行可能なコンポーネントをメモリにロードすることを担う。ローダ１０６は、特定の実行可能なコンポーネントについて、当該特定の実行可能なコンポーネントによって使用される対応するライブラリを特定し、任意のそのようなライブラリをメモリにロードして、当該ライブラリが特定の実行可能なコンポーネントにアクセス可能になる。ライフサイクルマネージャ１１０はさらに、実行可能なコンポーネント１０８のうちの１つ以上に、バッファリングされたライフサイクル呼出を送信し得る。バッファリングされたライフサイクル呼出を受信すると、実行可能なコンポーネント１０８のうちの１つ以上は、アプリケーションについてのデフォルトまたはメインユーザインターフェイスをコンピューティングデバイス１００に表示させる。
【００３９】
その後、ユーザがセッティングユーザインターフェイスにナビゲートすることを望む場合、ユーザは、アプリケーションについての現在表示されているデフォルトまたはメインユーザインターフェイスにおけるセッティングのために、ユーザインターフェイス要素（たとえばアイコン、ボタンまたはラベルなど）を選択するユーザ入力を提供し得る。ランタイムシステム１２６は、ユーザインターフェイス要素の選択を示すメッセージをアプリケーションコンテナ１０２Ａに送信する。実行可能なコンポーネント１０８Ａは、当該選択がセッティングユーザインターフェイスを表示することを決定する。実行可能コンポーネント１０８Ａは、セッティングユーザインターフェイスについての機能を含むサブパッケージ１２２Ｎについてのユーザが特定した識別子１２０Ｎを有するメッセージを生成する。実行可能なコンポーネント１０８Ａは、メッセージをルータ１１２に直接的に送信するか、または、ランタイムシステム１２６に送信し、ランタイムシステム１２６がルータ１１２にメッセージをルーティングし得る。いずれの場合も、ルータ１１２は、ユーザが特定した識別子１２０Ｎのルックアップを実行し、サブパッケージ識別子１２２Ｎについてのサブパッケージがコンピューティングデバイス１００にローカルに格納されていないと決定する。
【００４０】
同様の態様で、サブパッケージ１０４Ａに関して上述したように、ルータ１１２は、サブパッケージ識別子１２２Ｎについてのサブパッケージを抽出するために、コンテナランタイム１２４および／またはランタイムシステム１２６を使用してリモートコンピューティングデバイス１４２Ａにメッセージを送信する。リモートコンピューティングデバイス１４２Ａは、ナビゲーションアプリケーションのセッティングインターフェイスを表示するための実行可能なコンポーネントを含むサブパッケージ１２２Ｎをコンピューティングデバイス１００に送信し得る。コンピューティングデバイス１００がサブパッケージ１２２Ｎを抽出している間、ライフサイクルマネージャ１１０は、コールバックインターフェイス１１３において受信されるライフサイクル呼出をバッファリングし得る。サブパッケージ１２２Ｎをダウンロードする際に、ライフサイクルマネージャ１１０は、ローダ１０６にサブパッケージ１２２Ｎの実行可能なコンポーネントをメモリへロードさせる。ローダ１０６は、実行可能なコンポーネントのうちの１つ以上の実行を開始し得、これにより、ナビゲーションアプリケーションのセッティングインターフェイスがコンピューティングデバイス１００のディスプレイデバイスに表示される。
【００４１】
図２は、本開示の１つ以上の局面に従った、コンピューティングデバイス１００のさらなる詳細を示すブロック図である。図２は、コンピューティングデバイス１００の１つの特定の例のみを示す。コンピューティングデバイス１００の他の多くの例は他の場合において使用されてもよく、例示的なコンピューティングデバイス１００に含まれるコンポーネントのサブセットを含んでもよく、または、図２における例示的なコンピューティングデバイス１００に示されない付加的なコンポーネントを含んでもよい。
【００４２】
図２の例において示されるように、コンピューティングデバイス１００は、１つ以上のプロセッサ２４０と、１つ以上の入力コンポーネント２４２と、１つ以上の通信ユニット２４４と、１つ以上の出力コンポーネント２４６と、１つ以上のストレージデバイス２４８と、存在感知型ディスプレイ２５２とを含む。コンピューティングデバイス１００のストレージデバイス２４８は、アプリケーションコンテナ１０２と、システムランタイム１２８と、オペレーティングシステム１３６とを含む。コミュニケーションチャンネル２５０は、コンポーネント間通信のためにコンポーネント２４０、２４２、２４４、２４６、２４８、２５２、２５４および／または２５６の各々を（物理的に、通信可能に、および／または動作可能に）相互接続し得る。いくつかの例では、コミュニケーションチャンネル２５０は、システムバス、ネットワーク接続、１つ以上のプロセス間通信データ構造、または、ハードウェアおよび／もしくはソフトウェア間でデータを通信するための任意の他のコンポーネントを含み得る。
【００４３】
１つ以上のプロセッサ２４０は、機能を実現し、および／または、コンピューティングデバイス１００内で命令を実行し得る。たとえば、コンピューティングデバイス１００上のプロセッサ２４０は、ストレージデバイス２４８によって格納され、オペレーティングシステム１３６、アプリケーションコンテナ１０２およびシステムランタイム１２６の機能を提供する命令を受信および実行し得る。プロセッサ２４０によって実行されるこれらの命令により、コンピューティングデバイス１００は、プログラム実行中にストレージデバイス２４８内に情報を格納および／または当該情報を修正し得る。プロセッサ２４０は、１つ以上の動作を実行するために、オペレーティングシステム１３６、アプリケーションコンテナ１０２およびシステムランタイム１２６の命令を実行し得る。すなわち、オペレーティングシステム１３６、アプリケーションコンテナ１０２およびシステムランタイム１２６は、この開示に記載されるさまざまな機能を実行するようプロセッサ２４０によって動作可能であり得る。
【００４４】
コンピューティングデバイス１００の１つ以上の入力コンポーネント２４２は入力を受信し得る。入力の例は、たとえば、触覚入力、音声入力、運動入力、および光入力である。コンピューティングデバイス１００の入力コンポーネント２４２は、一例において、マウス、キーボード、音声応答システム、ビデオカメラ、ボタン、コントロールパッド、マイクロフォン、または、人間もしくはマシンからの入力を検出するための任意の他のタイプのデバイスを含む。いくつかの例において、入力コンポーネント２４２は、存在感知型スクリーン、タッチ感知型スクリーンなどを含み得る存在感知型入力コンポーネントであり得る。
【００４５】
コンピューティングデバイス１００の１つ以上の出力コンポーネント２４６は出力を生成し得る。出力の例は、触覚出力、音声出力、およびビデオ出力である。いくつかの例において、コンピューティングデバイス１００の出力コンポーネント２４６は、存在感知型スクリーン、サウンドカード、ビデオグラフィックスアダプタカード、スピーカ、陰極線管（ＣＲＴ）モニタ、液晶ディスプレイ（ＬＣＤ）、または、人間もしくはマシンへの出力を生成するための任意の他のタイプのデバイスを含む。出力コンポーネントは、陰極線管（ＣＲＴ）モニタ、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）といったディスプレイコンポーネント、または、触覚出力、音声出力、および／もしくは視覚出力を生成するための任意の他のタイプのデバイスを含み得る。
【００４６】
いくつかの例において、コンピューティングデバイス１００の存在感知型ディスプレイ２５２は、入力コンポーネント２４２および／または出力コンポーネント２４６の機能を含み得る。図２の例では、存在感知型ディスプレイ２５２は、存在感知型スクリーンまたはタッチ感知型スクリーンのような存在感知型入力コンポーネント２５６を含み得る。いくつかの例において、存在感知型入力コンポーネント２５６は、存在感知可能型入力コンポーネントにおいておよび／または存在感知可能型入力コンポーネントの近くで、物体を検出し得る。１つの例示的な範囲として、存在感知型入力コンポーネント２５６は、存在感知型入力コンポーネント２５６の２インチ以内にある指またはスタイラスのような物体を検出し得る。存在感知型入力コンポーネント２５６は、物体が検出された存在感知型入力コンポーネントの位置（たとえば（ｘ，ｙ）座標）を決定し得る。別の例示的な範囲では、存在感知型入力コンポーネント２５６は、存在感知型入力コンポーネント２５６から２インチ以下で物体を検出し得、他の範囲も可能である。存在感知型入力コンポーネント２５６は、容量認識技術、誘導認識技術または光学式認識技術を用いて、ユーザの指によって選択された存在感知型入力コンポーネント２５６の位置を決定し得る。
【００４７】
いくつかの例では、存在感知型ディスプレイ２５２はさらに、出力コンポーネント２４６に関して記載されたような触覚刺激、音声刺激、またはビデオ刺激を使用して、ユーザ
に出力を提供し得る。たとえば、存在感知型ディスプレイ２５２は、グラフィカルユーザインターフェイスを提示するディスプレイコンポーネント２５４を含み得る。ディスプレイコンポーネント２５４は、出力コンポーネント２４６に関して記載したような視覚出力を提供する任意のタイプの出力コンポーネントであり得る。コンピューティングデバイス１００の統合されたコンポーネントとして示されているが、存在感知型ディスプレイ２５２は、いくつかの例では、入力および出力を送信および／または受信するためにコンピューティングデバイス１００の他のコンポーネントとデータパスを共有する外部コンポーネントであり得る。たとえば、存在感知型ディスプレイ２５２は、コンピューティングデバイス１００の外部パッケージング内に位置し物理的に接続されるコンピューティングデバイス１００の内蔵のコンポーネントであり得る（たとえば携帯電話上のスクリーン）。別の例では、存在感知型ディスプレイ２５２は、コンピューティングデバイス１００のパッケージングの外に位置し物理的に分離されているコンピューティングデバイス１００の外部コンポーネントであり得る（たとえば、タブレットコンピュータと有線および／または無線データパスを共有するモニタ、プロジェクタなど）。いくつかの例では、存在感知型ディスプレイ２５２は、コンピューティングデバイス１００のパッケージングの外に位置し、物理的にパッケージングから分離されている場合、入力を受信するための存在感知型入力コンポーネント２５６、および、出力を提供するためのディスプレイコンポーネント２５４という２つの別個のコンポーネントによって実現され得る。
【００４８】
コンピューティングデバイス１００の１つ以上の通信ユニット２４４は、データを送信および／または受信することにより外部デバイスと通信し得る。たとえば、コンピューティングデバイス１００は、通信ユニット２４４を使用して、セルラー無線ネットワークのような無線ネットワーク上で無線信号を送信および／または受信し得る。いくつかの例において、通信ユニット２４４は、グローバルポジショニングシステム（ＧＰＳ）ネットワークのような衛星ネットワーク上で衛星信号を送信および／または受信し得る。通信ユニット２４４の例は、（たとえばイーサネット（登録商標）カードのような）ネットワークインターフェイスカード、光学トランシーバ、無線周波数トランシーバ、ＧＰＳレシーバ、または、情報を送信および／もしくは受信し得る任意の他のタイプのデバイスを含む。通信ユニット２４４の他の例は、モバイルデバイスにおいて発見されるブルートゥース（登録商標）、ＧＰＳ、３Ｇ、４ＧおよびＷｉ−Ｆｉ（登録商標）無線、ならびに、ユニバーサルシリアルバス（ＵＳＢ）コントローラなどを含み得る。
【００４９】
図２に示されるように、コンピューティングデバイス１００は電源２５８を含み得る。いくつかの例において、電源２５８は電池であり得る。電源２５８は、コンピューティングデバイス１００の１つ以上のコンポーネントに電力を提供し得る。電源２５８の例は、亜鉛炭素、鉛酸、ニッケルカドミウム（ＮｉＣｄ）、水素化ニッケル金属（ＮｉＭＨ）、リチウムイオン（Ｌｉイオン）、および／または、リチウムイオンポリマー（Ｌｉイオンポリマー）化学を有する電池を含み得るがこれらに限定されない。いくつかの例において、電源２５８は制限のある容量（たとえば１０００〜３０００ｍＡｈ）を有し得る。
【００５０】
コンピューティングデバイス１００内の１つ以上のストレージデバイス２４８は、コンピューティングデバイス１００の動作の間の処理のために情報を格納し得る。いくつかの例において、ストレージデバイス２４８は一時メモリであり、これは、ストレージデバイス２４８の主目的が長期間の格納ではないことを意味する。コンピューティングデバイス１００上のストレージデバイス２４８は、揮発性メモリとして、情報の短期間の格納のために構成されており、したがって、ディアクティベートにされると、格納されたコンテンツを保持しない。揮発性メモリの例は、ランダムアクセスメモリ（ＲＡＭ）と、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、スタティックランダムアクセスメモリ（ＳＲＡＭ）と、当該技術において公知の揮発性メモリの他の形態とを含む。
【００５１】
ストレージデバイス２４８はさらに、いくつかの例において、１つ以上のコンピュータ読取可能記憶媒体を含む。ストレージデバイス２４８は揮発性メモリより大きな量の情報を格納するように構成され得る。ストレージデバイス２４８はさらに、不揮発性メモリスペースとして情報の長期間の格納のために構成され得、アクティベート／オフサイクルの後でも情報を保持し得る。不揮発性メモリの例は、磁気ハードディスク、光学ディスク、フロッピー（登録商標）ディスク、フラッシュメモリ、または、電気的プログラム可能メモリ（ＥＰＲＯＭ： electrically programmable memory）または電気的消去可能プログ
ラム可能メモリ（ＥＥＰＲＯＭ： electrically erasable and programmable）の形態を
含む。ストレージデバイス２４８は、プログラム命令、ならびに／または、オペレーティングシステム１３６、システムランタイム１２６およびアプリケーションコンテナ１０２に関連付けられるデータを格納し得る。
【００５２】
各それぞれのアプリケーションコンテナ１０２は、別個のアプリケーションに対応し得る。たとえば、オペレーティングシステムは、異なるアプリケーションに対応するそれぞれのアイコンに基づいて、（たとえばメニューまたはアイコンのグリッドから）ユーザが異なるアプリケーションを選択することを可能にするユーザインターフェイスを含み得る。たとえば、ユーザは、オペレーティングシステムユーザインターフェイスからＥメールクライアントアイコンを選択し得る。これにより、自身の別個のアプリケーションコンテナを用いてＥメールクライアントアプリケーションの実行が行われる。アプリケーションコンテナと異なり、ウェブブラウザのエクステンションまたは他のサブアプリケーション（たとえばプラグイン、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｊａｖａ（登録商標）バーチャルマシンなど）は、オペレーティングシステムのユーザインターフェイスにおいて起動されるように、別個のアプリケーションとして表わされ得ない。たとえば、ウェブブラウザがタブ付インターフェイスの各タブについて別個のプロセスを作成したとしても、タブの各々は、異なる起動可能なアプリケーションとして、オペレーティングシステムのユーザインターフェイス内の別個のアプリケーションとして表わされ得ない。
【００５３】
この開示に記載されるようなアプリケーションコンテナは、アプリケーションコンテナがコンテナランタイムを含み得るのでウェブブラウザと異なり得る。この開示に記載されるように、アプリケーションコンテナのコンテナランタイムはライブラリを含み得るが、アプリケーションコンテナ内のサブパッケージの実行可能なコンポーネントにオペレーティングシステムＡＰＩを公開し得る。アプリケーションコンテナと異なり、ウェブブラウザは、そのようなオペレーティングシステムＡＰＩをウェブブラウザ内のエクステンションまたは他のサブアプリケーションへ公開せず、またそのようなオペレーティングシステムＡＰＩからウェブブラウザ内のエクステンションまたは他のサブアプリケーションへのアクセスを防止さえし得る。
【００５４】
アプリケーションコンテナは、この開示に記載されるように、ウェブブラウザと異なり得る。なぜならば、アプリケーションコンテナは、付加的なユーザ介在なしでアプリケーションの実行挙動または外観を変更するサブパッケージの抽出を引き起こし得るアプリケーションコンテナの外側にある（たとえばランタイムシステムまたはオペレーティングシステムにおける）スーパーバイザーコンポーネントからユーザが特定した識別子（たとえばＵＲＩ）を受信し得るからである。ユーザが特定した識別子は、同じコンピューティングデバイスまたは異なるコンピューティングデバイス上で実行される他のアプリケーションから生じ得、アプリケーションコンテナによって受信されると、アプリケーションの実行挙動または外観を自動的に変更し得る。対照的に、ウェブブラウザは、たとえばスーパーバイザーコンポーネントまたはウェブブラウザの外の別のアプリケーションのいずれかといったアプリケーションコンテナの外部のソースからではなく、ウェブブラウザ自体内でユーザ入力（たとえばＵＲＬについてのテキストの入力）を受信し得る。さらに、ウェブブラウザは、ユーザに特定された識別子のルックアップを実行し、アプリケーションコ
ンテナによって表わされるアプリケーションの実行を変更するよう、この開示のアプリケーションコンテナ内に記載されるようにルータおよび／またはアプリケーション定義を含み得ない。アプリケーションコンテナと異なり、ウェブブラウザは、アプリケーションコンテナ内でサブパッケージの動作を変更するようライフサイクル呼出を受信およびバッファリングするコールバックインターフェイスを含み得ない。
【００５５】
いくつかの例では、ウェブブラウザは、コア機能（たとえばレンダリングエンジン）、１つ以上のサードパーティエクステンション、プラグイン、および／または、サブアプリケーションを含み得る。ウェブブラウザは、アプリケーションコンテナと異なり、ウェブブラウザのコア機能のすべてがローカルに格納され実行のためにコンピューティングデバイスに利用可能でなければ、適切に機能しない場合があり、または、全く実行されない場合がある。対照的に、アプリケーションコンテナは、ローカルに格納され実行のためにコンピューティングデバイスに利用可能であるそのコア機能のサブセットのみ（たとえばユーザインターフェイスのサブセットについてのサブパッケージのみ）で適切に機能し得る。
【００５６】
開示の技術に従うと、システムランタイム１２６は、アプリケーションを実行するための要求を受信する。たとえば、ユーザは、存在感知型ディスプレイ２０４においてユーザ入力を提供し、当該アプリケーションを実行し得るか、または、アプリケーションの特定の機能を実行し得る。存在感知型ディスプレイ２０４は、システムランタイム１２６に、当該アプリケーションについてのアイコンの選択に対応するイベントを生成させ得る。ユーザ入力の指示を受信することに応答して、システムランタイム１２６は、少なくとも１つのアプリケーションコンテナ１０２がアプリケーションに割り当てられるかどうか決定し得る。
【００５７】
アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがストレージコンポーネント２４８の揮発性メモリにおいて割り当てられていないということを決定することに応答して、システムランタイム１２６はリモートコンピューティングデバイスからアプリケーション定義を抽出する。たとえば、システムランタイム１２６は、通信ユニット２４４のうちの１つに、アプリケーション定義について、リモートコンピューティングデバイスへ要求を送信させる。アプリケーション定義は、アプリケーションのインストール可能なサブパッケージとユーザが特定した識別子との間の複数のマッピングを定義し得る。
【００５８】
コンピューティングデバイス１００の揮発性メモリにおいてアプリケーションコンテナ１０２Ａを割り当てることに応答して、または、アプリケーションコンテナ１０２がコンピューティングデバイス１００のメモリにおいて既に割り当てられていると決定することに応答して、システムランタイム１２６は、たとえばアプリケーションコンテナ１０２Ａにコマンドを送信することにより、要求のユーザが特定した識別子に少なくとも部分的に基づいて、アプリケーションの特定の機能を開始し得る。
【００５９】
アプリケーションコンテナ１０２Ａは、アプリケーションについて、または、アプリケーションの特定の機能について、複数の従属性を決定し得る。たとえば、アプリケーションコンテナ１０２Ａは、アプリケーションについてのマニフェストファイルまたは他の情報のようなアプリケーションのメタデータを解析し得る。コンフィグレーションファイルに基づいて、アプリケーションコンテナ１０２Ａは、当該アプリケーションまたは当該アプリケーションの特定の機能について、複数の従属性を決定し得る。別の例として、アプリケーションコンテナ１０２Ａは、アプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出し得る。
【００６０】
いくつかの例では、複数の従属性は、１つ以上の必要な従属性と、１つ以上の随意の従属性とを含み得る。ある従属性がアプリケーションを実行するのに必要である場合および／またはアプリケーションの特定の機能を提供する必要がある場合、当該従属性は必要な従属性である。たとえば、アプリケーションコンテナ１０２Ａは、アプリケーションの特定の機能についてのプログラムコードを含むサブパッケージが必要な従属性であると決定し得る。別の例として、ユーザによって要求される特定の機能がナビゲーション機能である場合、アプリケーションコンテナ１０２Ａは、位置情報が必要な従属性であると決定し得る。ある従属性がアプリケーションを実行するのに必要でない場合および／またはアプリケーションの特定の機能を提供するのに必要でない場合、当該従属性は随意の従属性である。たとえば、アプリケーションコンテナ１０２Ａは、ある従属性がアプリケーションによって提示される新しいストーリーについての画像データである場合、当該従属性は随意の従属性であるということを決定し得る。別の例として、ユーザによって要求される特定の機能が特定のブランドに関する情報である場合、アプリケーションコンテナ１０２Ａは、位置情報が随意の従属性であると決定し得る。しかしながら、ユーザがアプリケーションの店舗発見機能を選択すれば、アプリケーションコンテナ１０２Ａは、位置情報が必要な従属性であると決定し得る。なぜならば、コンピューティングデバイス１００の現在の位置の近くに位置する店舗を識別するために位置情報が必要であり得るからである。
【００６１】
１つ以上の必要な従属性および／または１つ以上の随意の従属性が現在、コンピューティングデバイス１００に格納されておらず、および／または、アプリケーションコンテナ１０２Ａに利用可能でないと決定することに応答して、アプリケーションコンテナ１０２Ａは、１つ以上の必要な従属性および／または１つ以上の随意の従属性の抽出を開始する。たとえば、必要な従属性のうちの１つがアプリケーションの特定の機能についてインストール可能なサブパッケージである場合、アプリケーションコンテナ１０２Ａは、リモートコンピューティングデバイスから、複数の実行可能なコンポーネントを含んでいるインストール可能なサブパッケージを抽出し得る。同様に、１つ以上の随意の従属性のいずれかが、コンピューティングデバイス１００に格納されていない情報（たとえばテキストデータ、画像データ、オーディオデータ、ビデオデータ、サードパーティデータなど）を含むが、リモートコンピューティングデバイスにおいて利用可能である場合、アプリケーションコンテナ１０２Ａはリモートコンピューティングデバイスから当該データを抽出し得る。リモートコンピューティングデバイスは、アプリケーション定義を含む同じコンピューティングデバイスまたは異なるコンピューティングデバイスであり得る。いくつかの例において、コンピューティングデバイスが異なる場合、それらのコンピューティングデバイスは共通のオペレータによって操作され得る。さらに、リモートコンピューティングデバイスは、２つ以上のリモートコンピューティングデバイスを含み得る。いくつかの場合では、アプリケーションコンテナ１０２Ａは、第１のデータソース（たとえば第１のリモートコンピューティングデバイス）から１つ以上の必要な従属性を抽出し得、第１のデータソースとは異なる第２のデータソース（たとえば第２の異なるリモートコンピューティングデバイス）から１つ以上の随意の従属性を抽出し得る。
【００６２】
必要な従属性がひとたびコンピューティングデバイス１００によって受信されると、アプリケーションコンテナ１０２Ａは、アプリケーション、または、ユーザによって必要とされるアプリケーションの特定の機能を実行する。すなわち、１つ以上の随意の従属性の少なくとも部分がまだ受信されていないが、アプリケーションコンテナ１０２Ａは、アプリケーションおよび／またはアプリケーションの特定の機能を実行し得る。言いかえれば、１つ以上の必要な従属性のすべてを受信することに応答して、かつ、随意の従属性の少なくとも１つがアプリケーションコンテナ１０２Ａによってまだ受信されていない間、コンピューティングデバイス１００は当該アプリケーションを実行し得る。
【００６３】
いくつかの例では、コンピューティングデバイス１００は、随意の従属性のすべてを受
信する前にアプリケーションを実行し始め、コンピューティングデバイス１００は、（たとえば存在感知型ディスプレイ２５２による）表示のために、アプリケーションコンテナ１０２Ａによってまだ受信されていない１つ以上の随意の従属性の少なくとも１つのためのプレースホルダグラフィカル要素を含むアプリケーションのグラフィカルユーザインターフェイスを出力し得る。１つ以上の随意の従属性のうちの少なくとも１つを受信することに応答して、コンピューティングデバイス１００は、プレースホルダ要素の代わりに、表示のために、少なくとも１つの随意の従属性に関連付けられる情報を出力し得る。
【００６４】
アプリケーションコンテナ１０２Ａは、アプリケーションの付加的なインストール可能なサブパッケージ、アプリケーションについての付加的なデータ、または、ユーザによって使用される可能性があり得る任意の他の（必要または随意の）従属性をあらかじめフェッチし得る。すなわち、コンピューティングデバイス１００は、（たとえば、他のユーザからの使用データ、ユーザの履歴使用パターンなどに基づいて）ユーザによって要求される可能性がある付加的な機能を予想し得、対応する必要な従属性およびいくつかの場合には随意の従属性を先を見越して抽出し得る。いくつかの例では、コンピューティングデバイス１００は、１つ以上の随意の従属性に含まれるデータに基づいて、１つ以上の随意の従属性に含まれるデータを使用するように構成されるアプリケーションの１つ以上のインストール可能なサブパッケージを決定し得る。言いかえれば、コンピューティングデバイス１００は、コンピューティングデバイス１００によって受信される随意の従属性に含まれるデータを使用するアプリケーションの他の特徴を識別し得る。そのような場合では、アプリケーションコンテナ１０２は、データを使用するように構成されるアプリケーションの１つ以上のインストール可能なサブパッケージのうちの少なくとも１つをあらかじめフェッチし得る。
【００６５】
図３は、この開示の技術に従った、動的にアプリケーション従属性をロードするためのアプリケーションコンテナを有するコンピューティングデバイスの例示的な動作を示すフロー図である。例示目的のためにのみ、例示的な動作は図１のコンピューティングデバイス１００の文脈内で下記に記載される。
【００６６】
図３では、コンピューティングデバイス１００は最初は、アプリケーションの特定の機能を実行するための要求を受信し得る（３００）。たとえば、ユーザは、アプリケーションを起動するためにコンピューティングデバイス１００においてユーザ入力を提供し得、コンピューティングデバイス１００のスーパーバイザーコンポーネント１２８Ａは、アプリケーションを実行するための要求として、ユーザ入力の指示を受信し得る。スーパーバイザーコンポーネント１２８Ａは、アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナ（たとえばアプリケーションコンテナ１０２Ａのようなアプリケーションコンテナ１０２のうちの１つ）がコンピューティングデバイス１００のメモリ（たとえば図２のストレージコンポーネント２４８のうちの１つ）において割り当てられているかどうか決定し得る（３０２）。
【００６７】
アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナがメモリにおいて割り当てられていない（３０２の「ＮＯ」分岐）と決定することに応答して、コンピューティングデバイス１００は、アプリケーションコンテナ（たとえばアプリケーションコンテナ１０２Ａ）を割り当て得る（３０４）。たとえば、コンピューティングデバイス１００は、たとえばアプリケーションについての一意識別子を含むリモートコンピューティングシステムに要求を送信することにより、リモートコンピューティングシステムからアプリケーション定義を抽出し得る。リモートコンピューティングシステムは、ルックアップを実行し得、対応するアプリケーション定義を識別し得る。リモートコンピューティングシステムは、コンピューティングデバイス１００にアプリケーション定義を送信し得る。コンピューティングデバイス１００は、リモートコンピュ
ーティングシステムからアプリケーション定義を受信し得、アプリケーションについて、コンピューティングデバイス１００のメモリにおいてアプリケーションコンテナ１０２Ａを割り当て得る。
【００６８】
メモリにおいてアプリケーションコンテナを割り当てることに応答して、または、アプリケーションコンテナがメモリにおいて既に割り当てられていると決定することに応答して（３０２の「ＹＥＳ」分岐）、アプリケーションコンテナ１０２Ａは、アプリケーションの特定の機能について１つ以上の必要な従属性および１つ以上の随意の従属性を決定し得る（３０６）。たとえば、アプリケーションコンテナ１０２Ａのコンテナランタイム１２４は、１つ以上の必要な従属性および１つ以上の随意の従属性を決定するよう、アプリケーションのメタデータを解析し得る。別の例として、アプリケーションコンテナ１０２Ａによって、コンピューティングデバイス１００はアプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出させられ得る。１つ以上の必要な従属性は、アプリケーションのインストール可能なサブパッケージのセットのうちの１つ以上または位置データを含み得る。１つ以上の随意の従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、または、サードパーティデータのうちの１つ以上を含み得る。
【００６９】
アプリケーションコンテナ１０２Ａは、１つ以上の決定された必要な従属性および１つ以上の決定された随意の従属性の抽出を開始する（３０８）。いくつかの例では、コンテナランタイム１２４は、第１のデータソースから１つ以上の必要な従属性を抽出し、第１のデータソースとは異なる第２のデータソースから１つ以上の随意の従属性を抽出する。
【００７０】
随意の従属性のすべてを受信する前および必要な従属性のすべてを受信した後、コンピューティングデバイス１００はアプリケーションを実行する（３１０）。すなわち、コンピューティングデバイス１００は、随意の従属性のすべてがコンピューティングデバイス１００によって受信されていなくても、アプリケーションコンテナ１０２Ａを使用して、アプリケーションを実行し得る。いくつかの例において、随意の従属性は画像データを含む。そのような例において、アプリケーションコンテナ１０２Ａは、随意の従属性画像データのすべてがコンピューティングデバイス１００によって受信されたかどうか決定し得る。随意の従属性画像データのすべてがコンピューティングデバイス１００によって受信されていない場合、コンピューティングデバイス１００は、コンテナランタイム１２４によってまだ受信されていない１つ以上の随意の従属性のうちの少なくとも１つのためのプレースホルダグラフィカル要素を含むアプリケーションのグラフィカルユーザインターフェイスを表示のために出力し得る。（プレースホルダグラフィカル要素がグラフィカルユーザインターフェイスに含まれ得た後で受信される随意の従属性画像データを含む）随意の従属性画像データのすべてがコンピューティングデバイス１００によって受信されている場合、コンピューティングデバイス１００は、プレースホルダ要素の代わりに、表示のために、少なくとも１つの随意の従属性に関連付けられる情報を出力し得る。
【００７１】
いくつかの例では、コンピューティングデバイス１００は、アプリケーションについての付加的なインストール可能なサブパッケージをあらかじめフェッチするように構成され得る（３１２）。そのような例では、コンピューティングデバイス１００は、１つ以上の随意の従属性に含まれるデータに基づいて、１つ以上の随意の従属性に含まれるデータを使用するように構成されるアプリケーションの１つ以上のインストール可能なサブパッケージを決定し得、データを使用するように構成されるアプリケーションの１つ以上のインストール可能なサブパッケージのうちの少なくとも１つをあらかじめフェッチし得る。これにより、コンピューティングデバイス１００は、コンピューティングデバイス１００のユーザによって使用される可能性がある付加的な機能を先を見越して抽出し得、これにより、ユーザが機能を要求する際に、そのような機能をロードするのに必要な時間の量が低
減され得る。
【００７２】
例１．コンピューティングデバイスにおいて実行されるスーパーバイザーコンポーネントによって、アプリケーションを実行するための要求を受信することと、上記スーパーバイザーコンポーネントによって、上記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが上記コンピューティングデバイスのメモリにおいて割り当てられているかどうかを決定することと、上記アプリケーションコンテナが上記コンピューティングデバイスの上記メモリにおいて割り当てられていると決定することに応答して、上記アプリケーションコンテナのコンテナランタイムによって、上記アプリケーションの１つ以上の従属性を決定することとを含み、上記１つ以上の従属性は、１つ以上の必要な従属性と１つ以上の随意の従属性とを含んでおり、さらに、上記コンテナランタイムによって、上記１つ以上の必要な従属性の抽出を開始することと、上記コンテナランタイムによって、上記１つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも１つがコンテナランタイムによってまだ受信されていないが上記１つ以上の必要な従属性のすべてを受信することに応答して、上記コンピューティングデバイスによって上記アプリケーションを実行することとを含む、方法。
【００７３】
例２．上記アプリケーションを実行することは、上記コンピューティングデバイスによって、上記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを含み、上記グラフィカルユーザインターフェイスは、上記コンテナランタイムによってまだ受信されていない上記１つ以上の随意の従属性のうちの上記少なくとも１つのためのプレースホルダグラフィカル要素を含んでおり、上記アプリケーションを実行することはさらに、上記１つ以上の随意の従属性のうちの上記少なくとも１つを受信することに応答して、上記コンピューティングデバイスによって、上記プレースホルダ要素の代わりに上記少なくとも１つの随意の従属性に関連付けられる情報を表示のために出力することを含む、例１に記載の方法。
【００７４】
例３．上記コンピューティングデバイスによって、上記１つ以上の随意の従属性に含まれるデータに基づいて、上記１つ以上の随意の従属性に含まれる上記データを使用するように構成される上記アプリケーションの１つ以上のインストール可能なサブパッケージを決定することと、上記アプリケーションコンテナによって、データを使用するように構成される上記アプリケーションの上記１つ以上のインストール可能なサブパッケージのうちの少なくとも１つをあらかじめフェッチすることとをさらに含む、例１および２のいずれかの組み合わせに記載の方法。
【００７５】
例４．上記アプリケーションの上記１つ以上の従属性を決定することは、上記アプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出することを含む、例１〜３のいずれかの組み合わせに記載の方法。
【００７６】
例５．上記アプリケーションの上記１つ以上の従属性を決定することは、上記コンテナランタイムによって、上記アプリケーションのメタデータを解析することを含む、例１〜４のいずれかの組み合わせに記載の方法。
【００７７】
例６．上記コンテナランタイムは、第１のデータソースから上記１つ以上の必要な従属性を抽出し、上記第１のデータソースとは異なる第２のデータソースから上記１つ以上の随意の従属性を抽出する、例１〜５のいずれかの組み合わせに記載の方法。
【００７８】
例７．上記１つ以上の必要な従属性は、上記アプリケーションの上記インストール可能なサブパッケージのセットのうちの１つ以上または位置データを含み、上記１つ以上の随意の従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、また
は、サードパーティデータのうちの１つ以上を含む、例１〜６のいずれかの組み合わせに記載の方法。
【００７９】
例８．上記スーパーバイザーコンポーネントは、上記コンピューティングデバイスにおいて実行されるオペレーティングシステムとは異なっており、上記アプリケーションコンテナは、複数の異なるアプリケーションについての共通の機能のセットを含む、例１〜７のいずれかの組み合わせに記載の方法。
【００８０】
例９．コンピューティングデバイスであって、スーパーバイザーコンポーネントを格納する１つ以上のストレージコンポーネントと、１つ以上のプロセッサとを含み、上記１つ以上のプロセッサは、アプリケーションを実行するための要求を受信することと、上記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが１つ以上のストレージコンポーネントにおいて割り当てられているかどうか決定することとを行うよう上記スーパーバイザーコンポーネントを実行し、上記スーパーバイザーコンポーネントが、上記アプリケーションコンテナが上記コンピューティングデバイスの上記メモリにおいて割り当てられていると決定することに応答して、上記アプリケーションコンテナのコンテナランタイムは、上記アプリケーションの１つ以上の従属性を決定することを行うよう、上記１つ以上のプロセッサによって実行可能であり、上記１つ以上の従属性は、１つ以上の必要な従属性と１つ以上の随意の従属性とを含んでおり、さらに、上記１つ以上の必要な従属性の抽出を開始することと、１つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも１つがコンテナランタイムによってまだ受信されていないが上記１つ以上の必要な従属性のすべてを受信することに応答して、上記アプリケーションを実行することとを行うよう、上記１つ以上のプロセッサによって実行可能である、コンピューティングデバイス。
【００８１】
例１０．上記コンテナランタイムはさらに、上記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを行うよう上記１つ以上のプロセッサによって実行可能であり、上記グラフィカルユーザインターフェイスは、上記コンテナランタイムによってまだ受信されていない上記１つ以上の随意の従属性のうちの少なくとも１つのためのプレースホルダグラフィカル要素を含んでおり、上記コンテナランタイムはさらに、上記１つ以上の随意の従属性のうちの上記少なくとも１つを受信することに応答して、上記プレースホルダ要素の代わりに上記少なくとも１つの随意の従属性に関連付けられる情報を表示のために出力することを行うよう上記１つ以上のプロセッサによって実行可能である、例９に記載のコンピューティングデバイス。
【００８２】
例１１．上記アプリケーションコンテナは、上記１つ以上の随意の従属性に含まれるデータに基づいて、上記１つ以上の随意の従属性に含まれる上記データを使用するように構成される上記アプリケーションの１つ以上のインストール可能なサブパッケージを決定することと、上記データを使用するように構成される上記アプリケーションの上記１つ以上のインストール可能なサブパッケージのうちの少なくとも１つをあらかじめフェッチすることとを行うよう上記１つ以上のプロセッサによって実行可能である、例９および１０のいずれかの組み合わせに記載のコンピューティングデバイス。
【００８３】
例１２．上記コンテナランタイムは、少なくとも上記アプリケーションのメタデータを解析するように実行可能であることによって、上記１つ以上の随意の従属性を決定するよう上記１つ以上のプロセッサによって実行可能である、例９〜１１のいずれかの組み合わせに記載のコンピューティングデバイス。
【００８４】
例１３．上記コンテナランタイムは、少なくとも上記アプリケーションのヒューリスティック解析から得られる従属情報をリモートサーバから抽出するように実行可能であるこ
とによって、上記１つ以上の随意の従属性を決定するよう上記１つ以上のプロセッサによって実行可能である、例９〜１２のいずれかの組み合わせに記載のコンピューティングデバイス。
【００８５】
例１４．上記コンテナランタイムは、第１のデータソースから上記１つ以上の必要な従属性を抽出し、上記第１のデータソースとは異なる第２のデータソースから上記１つ以上の随意の従属性を抽出するように上記１つ以上のプロセッサによって実行可能である、例９〜１３のいずれかの組み合わせに記載のコンピューティングデバイス。
【００８６】
例１５．上記１つ以上の必要な従属性は、上記アプリケーションの上記インストール可能なサブパッケージのセットのうちの１つ以上または位置データを含み、上記１つ以上の随意の従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、または、サードパーティデータのうちの１つ以上を含む、例９〜１４のいずれかの組み合わせに記載のコンピューティングデバイス。
【００８７】
例１６．上記１つ以上のストレージコンポーネントはさらにオペレーティングシステムを格納し、上記スーパーバイザーコンポーネントは上記オペレーティングシステムとは異なっており、上記アプリケーションコンテナは、複数の異なるアプリケーションについての共通の機能のセットを含む、例９〜１５のいずれかの組み合わせに記載のコンピューティングデバイス。
【００８８】
例１７．命令でエンコードされる一時的でないコンピュータ読取可能記憶媒体であって、上記命令は、コンピューティングデバイスの１つ以上のプロセッサによって実行されると、上記１つ以上のプロセッサに、アプリケーションを実行するための要求を受信することと、上記アプリケーションのインストール可能なサブパッケージを維持するためのアプリケーションコンテナが上記コンピューティングデバイスのメモリにおいて割り当てられているかどうかを決定することと、上記アプリケーションコンテナが上記コンピューティングデバイスの上記メモリにおいて割り当てられていると決定することに応答して、上記アプリケーションの１つ以上の従属性を決定することとを行わせ、上記１つ以上の従属性は、１つ以上の必要な従属性と１つ以上の随意の従属性とを含んでおり、さらに、上記命令は、上記コンピューティングデバイスの上記１つ以上のプロセッサによって実行されると、上記１つ以上のプロセッサに、上記１つ以上の必要な従属性の抽出を開始することと、上記１つ以上の随意の従属性の抽出を開始することと、随意の従属性の少なくとも１つが前記コンテナランタイムによってまだ受信されていないが上記１つ以上の必要な従属性のすべてを受信することに応答して、上記アプリケーションを実行することとを行わせる、一時的でないコンピュータ読取可能記憶媒体。
【００８９】
例１８．上記命令は上記１つ以上のプロセッサに、少なくとも上記１つ以上のプロセッサに上記アプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出させることにより、または、上記アプリケーションのメタデータを解析させることにより上記１つ以上の従属性を決定することを行わせる、例１７に記載の一時的でないコンピュータ読取可能記憶媒体。
【００９０】
例１９．上記命令は、上記１つ以上のプロセッサに、上記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを行わせ、上記グラフィカルユーザインターフェイスは、まだ受信されていない上記１つ以上の随意の従属性のうちの少なくとも１つのためのプレースホルダグラフィカル要素を含んでおり、上記命令はさらに、上記１つ以上のプロセッサに、上記１つ以上の随意の従属性のうちの上記少なくとも１つを受信することに応答して、上記プレースホルダ要素の代わりに上記少なくとも１つの随意の従属性に関連付けられる情報を表示のために出力することを行わせる、例１７およ
び１８のいずれかの組み合わせに記載の一時的でないコンピュータ読取可能記憶媒体。
【００９１】
例２０．上記命令は、上記１つ以上のプロセッサに、上記１つ以上の随意の従属性に含まれるデータに基づいて、上記１つ以上の随意の従属性に含まれる上記データを使用するように構成される上記アプリケーションの１つ以上のインストール可能なサブパッケージを決定することと、上記データを使用するように構成される上記アプリケーションの上記１つ以上のインストール可能なサブパッケージのうちの少なくとも１つをあらかじめフェッチすることとを行わせる、例１７〜１９のいずれかの組み合わせに記載の一時的でないコンピュータ読取可能記憶媒体。
【００９２】
例２１．例１〜８に記載の方法のいずれかの組み合わせを実行するための手段を含む、装置。
【００９３】
例２２．命令でエンコードされるコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、コンピューティングデバイスの１つ以上のプロセッサに例１〜８に記載の方法のいずれかの組み合わせを実行させる、コンピュータ読取可能記憶媒体。
【００９４】
１つ以上の例において、記載される機能は、ハードウェア、ソフトウェア、ファームウェアまたはその随意の組み合わせにおいて実現されてもよい。ソフトウェアにおいて実現される場合、これらの機能は、１つ以上の命令またはコードとして、コンピュータ読取可能媒体上に格納または送信され得、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ読取可能媒体は、データ記憶媒体のような有形的な媒体に対応するコンピュータ読取可能記憶媒体、または、たとえば通信プロトコルに従ってある場所から別の場所までコンピュータプログラムの転送を促進する任意の媒体を含む通信媒体を含み得る。このように、コンピュータ読取可能媒体は一般に、（１）一時的でない有形的なコンピュータ読取可能記憶媒体か、または、（２）信号もしくは搬送波のような通信媒体に対応し得る。データ記憶媒体は、この開示に記載される技術の実現のために、命令、コードおよび／またはデータ構造を抽出するよう、１つ以上のコンピュータまたは１つ以上のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラムプロダクトはコンピュータ読取可能媒体を含み得る。
【００９５】
限定としてではなく例として、そのようなコンピュータ読取可能記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭもしくは他の光学ディスクストレージ、磁気ディスクストレージ、もしくは、他の磁気ストレージデバイス、フラッシュメモリ、または、命令またはデータ構造の形態で所望のプログラムコードを格納するために使用され得るとともにコンピュータによってアクセスされ得る任意の他の媒体を含み得る。さらに、任意の接続が適切にコンピュータ読取可能媒体と称される。たとえば、命令が、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者線（ＤＳＬ）、または、赤外線、無線およびマイクロ波のようなワイヤレス技術を使用して、ウェブサイト、サーバまたは他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、ＤＳＬ、または、赤外線、無線およびマイクロ波のようなワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ読取可能記憶媒体およびデータ記憶媒体は、接続、搬送波、信号または他の一時的な媒体を含んでおらず、その代りに、一時的でない有形的な記憶媒体に向けられているということが理解されるべきである。本願明細書において使用されるディスク（disk）およびディスク（disc）は、コンパクトディスク（ＣＤ： compact disc）、レーザーディスク（登録商標）（laser disc）、光ディスク（optical disc）、デジタルバーサタイルディスク（ＤＶＤ： digital versatile disc）、フロッピー（登録商標）ディスク（floppy disk)およびブルーレイ（登録商標）ディスク（Blu-ray（登録商標）disc）を含んでおり、ディスク（disk）は通常磁気的にデータを再
生する一方、ディスク（disc）はレーザーによりデータを光学的に再生する。上記のもの
の組み合わせも、コンピュータ読取可能媒体の範囲内に含まれるべきである。
【００９６】
命令は、１つ以上のデジタル信号プロセッサ（ＤＳＰ： digital signal processor）
、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ： application specific integrated circuit）、フィールドプログラマブルロジックアレイ（ＦＰＧＡ：field programmable logic array）、または、他の同等な集積論理回路または離散論理回路といった１つ以上のプロセッサによって実行され得る。したがって、本願明細書において使用される「プロセッサ」という用語は、本願明細書において記載される技術の実現例に好適である前述の構造または任意の他の構造のうちのいずれかを指し得る。さらに、いくつかの局面では、本願明細書において記載される機能は、専用ハードウェアおよび／またはソフトウェアモジュール内で提供され得る。さらに、１つ以上の回路または論理素子において当該技術が完全に実現され得る。
【００９７】
この開示の技術は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえばチップセット）を含むさまざまなデバイスまたは装置において実現され得る。開示される技術を実行するように構成されるデバイスの機能的な局面を強調するために、さまざまなコンポーネント、モジュールまたはユニットがこの開示において記載されているが、必ずしも異なるハードウェアユニットによる実現を必要とはしない。むしろ、上述したように、さまざまなユニットは、ハードウェアユニットにおいて組み合わせられ得るか、または、好適なソフトウェアおよび／またはファームウェアと共に上述したように１つ以上のプロセッサを含む相互動作するハードウェアユニットの集合によって提供され得る。
【００９８】
本開示のさまざまな局面が記載された。これらの局面および他の局面は添付の請求の範囲の範囲内である。
【図１】
2020074139.tif 000003
【図２】
2020074139.tif 000004
【図３】
2020074139.tif 000005
【手続補正書】
【提出日】令和2年2月6日(2020.2.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイスによって、アプリケーションを実行するための要求を受信することに応答して、
前記アプリケーションのためのアプリケーションコンテナによって、前記アプリケーションのデータ従属性を決定することを含み、前記データ従属性は、１つ以上の必要なデータ従属性と１つ以上の随意のデータ従属性とを含んでおり、前記１つ以上の必要なデータ従属性は、前記アプリケーションの実行に必要であり、前記１つ以上の随意のデータ従属性は、前記アプリケーションの実行に必要でなく、さらに、
前記アプリケーションコンテナによって、前記１つ以上の必要なデータ従属性の抽出を開始することと、
前記アプリケーションコンテナによって、前記１つ以上の随意のデータ従属性の抽出を開始することと、
随意のデータ従属性のうちの少なくとも１つが前記アプリケーションコンテナによってまだ受信されていないが前記１つ以上の必要なデータ従属性のすべてを受信することに応答して、前記コンピューティングデバイスによって前記アプリケーションを実行することとを含む、方法。
【請求項２】
前記アプリケーションコンテナは、複数の異なるアプリケーションについての共通の機能のセットを含む、請求項１に記載の方法。
【請求項３】
前記アプリケーションを実行することは、前記コンピューティングデバイスによって、前記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを含み、前記グラフィカルユーザインターフェイスは、前記アプリケーションコンテナによってまだ受信されていない前記１つ以上の随意のデータ従属性のうちの前記少なくとも１つのためのプレースホルダグラフィカル要素を含んでおり、
前記アプリケーションを実行することはさらに、前記１つ以上の随意のデータ従属性のうちの前記少なくとも１つを受信することに応答して、前記コンピューティングデバイスによって、前記プレースホルダグラフィカル要素の代わりに前記少なくとも１つの随意のデータ従属性に関連付けられる情報を表示のために出力することを含む、請求項１または２に記載の方法。
【請求項４】
前記１つ以上の随意のデータ従属性に含まれるデータに基づいて、前記１つ以上の随意のデータ従属性に含まれる前記データを使用するように構成される前記アプリケーションの１つ以上のインストール可能なサブパッケージを決定することと、
前記アプリケーションコンテナによって、前記データを使用するように構成される前記アプリケーションの前記１つ以上のインストール可能なサブパッケージのうちの少なくとも１つをあらかじめフェッチすることとをさらに含む、請求項１から３のいずれか１項に記載の方法。
【請求項５】
前記アプリケーションの前記１つ以上のデータ従属性を決定することは、前記アプリケーションのヒューリスティック解析から得られる従属性情報をリモートサーバから抽出することを含む、請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記アプリケーションの前記１つ以上のデータ従属性を決定することは、前記アプリケーションコンテナによって、前記アプリケーションのメタデータを解析することを含む、請求項１から５のいずれか１項に記載の方法。
【請求項７】
前記アプリケーションコンテナは、第１のデータソースから前記１つ以上の必要なデータ従属性を抽出し、前記第１のデータソースとは異なる第２のデータソースから前記１つ以上の随意のデータ従属性を抽出する、請求項１から６のいずれか１項に記載の方法。
【請求項８】
前記１つ以上の必要なデータ従属性は、前記アプリケーションのインストール可能なサブパッケージのセットのうちの１つ以上または位置データを含み、前記１つ以上の随意のデータ従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、または、サードパーティデータのうちの１つ以上を含む、請求項１から７のいずれか１項に記載の方法。
【請求項９】
コンピューティングデバイスであって、
アプリケーションコンテナを格納する１つ以上のストレージコンポーネントと、
１つ以上のプロセッサとを含み、
前記１つ以上のプロセッサは、前記アプリケーションコンテナのコンテナランタイムを実行し、アプリケーションを実行するための要求を受信することに応答して、
前記アプリケーションのデータ従属性を決定することを行い、前記データ従属性は、１つ以上の必要なデータ従属性と１つ以上の随意のデータ従属性とを含んでおり、前記１つ以上の必要なデータ従属性は、前記アプリケーションの実行に必要であり、前記１つ以上の随意のデータ従属性は、前記アプリケーションの実行に必要でなく、
前記１つ以上のプロセッサはさらに、
前記１つ以上の必要なデータ従属性の抽出を開始することと、
前記１つ以上の随意のデータ従属性の抽出を開始することと、
随意のデータ従属性のうちの少なくとも１つが前記コンテナランタイムによってまだ受信されていないが前記１つ以上の必要なデータ従属性のすべてを受信することに応答して、前記アプリケーションを実行することとを行う、コンピューティングデバイス。
【請求項１０】
前記アプリケーションコンテナは、複数の異なるアプリケーションについての共通の機能のセットを含む、請求項９に記載のコンピューティングデバイス。
【請求項１１】
前記コンテナランタイムはさらに、前記アプリケーションのグラフィカルユーザインターフェイスを表示のために出力することを行うよう前記１つ以上のプロセッサによって実行可能であり、前記グラフィカルユーザインターフェイスは、前記コンテナランタイムによってまだ受信されていない前記１つ以上の随意のデータ従属性のうちの少なくとも１つのためのプレースホルダグラフィカル要素を含んでおり、
前記コンテナランタイムはさらに、前記１つ以上の随意のデータ従属性のうちの前記少なくとも１つを受信することに応答して、前記プレースホルダグラフィカル要素の代わりに前記少なくとも１つの随意のデータ従属性に関連付けられる情報を表示のために出力することを行うよう前記１つ以上のプロセッサによって実行可能である、請求項９または１０に記載のコンピューティングデバイス。
【請求項１２】
前記アプリケーションコンテナは、
前記１つ以上の随意のデータ従属性に含まれるデータに基づいて、前記１つ以上の随意のデータ従属性に含まれる前記データを使用するように構成される前記アプリケーションの１つ以上のインストール可能なサブパッケージを決定することと、
前記データを使用するように構成される前記アプリケーションの前記１つ以上のインストール可能なサブパッケージのうちの少なくとも１つをあらかじめフェッチすることとを行うよう、前記１つ以上のプロセッサによって実行可能である、請求項９から１１のいずれか１項に記載のコンピューティングデバイス。
【請求項１３】
前記コンテナランタイムは、少なくとも前記アプリケーションのメタデータを解析するように実行可能であることによって、前記１つ以上の随意のデータ従属性を決定するよう前記１つ以上のプロセッサによって実行可能である、請求項９から１２のいずれか１項に記載のコンピューティングデバイス。
【請求項１４】
前記コンテナランタイムは、少なくとも前記アプリケーションのヒューリスティック解析から得られる従属情報をリモートサーバから抽出するように実行可能であることによって、前記１つ以上の随意のデータ従属性を決定するよう前記１つ以上のプロセッサによって実行可能である、請求項９から１３のいずれか１項に記載のコンピューティングデバイス。
【請求項１５】
前記コンテナランタイムは、第１のデータソースから前記１つ以上の必要なデータ従属性を抽出し、前記第１のデータソースとは異なる第２のデータソースから前記１つ以上の随意のデータ従属性を抽出するよう、前記１つ以上のプロセッサによって実行可能である、請求項９から１４のいずれか１項に記載のコンピューティングデバイス。
【請求項１６】
前記１つ以上の必要なデータ従属性は、前記アプリケーションのインストール可能なサブパッケージのセットのうちの１つ以上または位置データを含み、前記１つ以上の随意のデータ従属性は、アプリケーションデータ、画像データ、ユーザデータ、位置データ、または、サードパーティデータのうちの１つ以上を含む、請求項９から１５のいずれか１項に記載のコンピューティングデバイス。
【請求項１７】
命令を含むコンピュータ読取可能記プログラムであって、前記命令は、コンピューティングデバイスの１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに、請求項１から８のいずれか１項に記載の方法を実行させる、コンピュータ読取可能プログラム。
【外国語明細書】
2020074139000001.pdf