Delta patching for shared libraries

Delta patching addresses version incompatibilities in shared libraries by using a patch to update from a preceding version, enhancing computing device performance and usability by reducing data transfer and installation time.

DE112024002983T5Pending Publication Date: 2026-05-28GOOGLE LLC

Patent Information

Authority / Receiving Office
DE · DE
Patent Type
Applications
Current Assignee / Owner
Filing Date
2024-07-03
Publication Date
2026-05-28

AI Technical Summary

Technical Problem

Computing devices face inefficiencies in updating shared libraries due to incompatibilities between different versions, leading to the need to download large amounts of data, which can impact performance and usability.

Method used

Implement delta patching to update shared libraries by selecting a preceding version as a base to create the target version, reducing the data required for updates by using a patch that includes only the differences between versions.

Benefits of technology

Reduces data transfer and installation time, improving performance and usability by minimizing network activity and battery consumption during updates.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 00000000_0000_ABST
    Figure 00000000_0000_ABST
Patent Text Reader

Abstract

A computing device can select the most recent version of a shared library installed on the computing device, which is an earlier version than a target version of the shared library, as a base version of the shared library from a multitude of versions of the shared library installed on the computing device. The computing device can send an update request, which includes a specification of the base version of the shared library, to a computing system. In response to the update request, the computing device can receive a patch from the computing system to patch the base version of the shared library to the target version. The computing device can apply the patch to the base version of the shared library to create the target version of the shared library.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] This application claims priority over US patent application no. 18 / 353.009, filed on July 14, 2023, the entire contents of which are incorporated herein by reference. GENERAL STATE OF THE ART

[0002] Computing devices, such as mobile phones, can run a variety of computer programs and software applications, typically called "apps." Some of these applications can use shared libraries to perform certain operations or provide certain application features. A computing device can update applications and shared libraries installed on the device to newer versions to fix bugs and other problems and / or introduce new features. SUMMARY

[0003] Techniques are described by which a computing system and a computing device can operate to enable the computing device to update a shared library installed on the computing device to a target version by patching the shared library, rather than downloading the entire target version of the shared library. Certain shared libraries are not compatible between different versions of the same shared library. This means that applications may depend on a specific version of the shared library to function. Therefore, if different applications installed on the computing device depend on different versions of the same shared library, the computing device can install multiple different versions of the shared library for use by the different applications.

[0004] The computing device can update an application that depends on a specific version of a shared library, such as by downloading an updated version of the application from a computing system that is part of an application distribution service and by installing the updated version of the application. However, if the updated application depends on a newer version of the shared library, the updated application may no longer be able to use the specific version of the shared library that the same application used before the update. Therefore, the computing device may need to download the newer version of the shared library that the updated application depends on in order for the updated application to function, which may result in the computing device having to download a large amount of data (e.g., a file).Hundreds of megabytes or more).

[0005] According to aspects of this disclosure, the computing device can perform delta patching of an older version of a shared library to produce a newer version of the shared library. Since the computing device may contain several different versions of this shared library, the computing device can select a version of the shared library installed on the computing device to act as the base version of the shared library to be patched, in order to produce the newer version of the shared library on which the updated application depends, the newer version of the shared library being referred to herein as the target version of the shared library.

[0006] The computing device can therefore select the most recent version of the shared library from all versions of that shared library installed on the computing device that precede the target version of the shared library as the base version of the shared library to be patched in order to create the target version of the shared library. The computing device can send an update request to the computing system specifying the base version of the shared library to be patched and can receive a patch in response to patch the base version of the shared library in order to create the target version of the shared library. The computing device can then apply the patch to the base version of the shared library to create the target version of the shared library.

[0007] In some aspects, the techniques described herein relate to a procedure that includes: one or more processors of a computing device selecting a most recent version of the shared library, preceding a target version of the shared library, as a base version of the shared library from a multitude of versions of a shared library installed on the computing device; the one or more processors sending an update request, specifying the base version of the shared library, to a computing system; and, in response to the sending of the update request, the one or more processors receiving a patch from the computing system to patch the base version of the shared library to the target version of the shared library.and applying the patch by one or more processors to the base version of the shared library to produce the target version of the shared library.

[0008] In some aspects, the techniques described herein concern a computing device comprising: memory configured to store a multitude of versions of a shared library installed on the computing device; one or more processors operatively coupled to the memory and configured to: select a most recent version of the shared library, preceding a target version of the shared library, as a base version of the shared library from among the multitude of versions of a shared library installed on the computing device; send an update request, specifying the base version of the shared library, to a computing system;In response to the sending of the update request, receiving a patch from the computing system to patch the base version of the shared library to the target version of the shared library; and applying the patch to the base version of the shared library to create the target version of the shared library.

[0009] In some aspects, the techniques described herein concern a computer-readable storage medium encoded with instructions which, when executed by one or more processors of a computing device, cause the one or more processors to: select a most recent version of the shared library preceding a target version of the shared library as a base version of the shared library from a multitude of versions of a shared library installed on the computing device; send an update request, including a specification of the base version of the shared library, to a computing system; in response to the sending of the update request, receive a patch from the computing system to patch the base version of the shared library to the target version of the shared library;and applying the patch to the base version of the shared library to create the target version of the shared library.

[0010] The details of one or more examples are set forth in the accompanying drawings and the following description. Further features, functions, and advantages of the disclosure will become apparent from the description, the drawings, and the claims. BRIEF DESCRIPTION OF THE DRAWINGS Fig. Figure 1 is a concept diagram illustrating an exemplary computing system and an exemplary computing device for updating shared libraries according to techniques of this disclosure. Fig. Figure 2 is a block diagram illustrating an exemplary computing device for managing application updates according to the techniques of this disclosure. Fig. 3A and Fig. 3B are concept diagrams illustrating exemplary techniques for updating shared libraries according to the techniques of this revelation. Fig. Figure 4 is a flowchart illustrating another exemplary operation of the computing system and computing device according to the techniques of this disclosure. DETAILED DESCRIPTION

[0011] Fig. Figure 1 is a concept diagram illustrating an exemplary computing system and device for updating shared libraries according to the techniques of this revelation. As in the example from Fig. As shown in Figure 1, a computing device 100 can communicate with a computing system 110 via a network 130 to update shared libraries according to one or more techniques of this disclosure.

[0012] In the example from Fig. 1. The computing device 100 is a mobile computing device. However, the computing device 100 can be any mobile or non-mobile computing device, such as a mobile phone, a smartphone, a desktop computer, a laptop computer, a tablet computer, a portable gaming device, a portable media player, an e-book reader, a watch (including a so-called smartwatch), an accessory device (such as a projection device), smart glasses, a game controller, a vehicle computer, or any other type of computing device.

[0013] Computing system 110 can be any suitable remote computing system, such as one or more desktop computers, laptop computers, mainframes, servers, cloud computing systems, virtual machines, etc., capable of sending and receiving information over network 130. In some examples, computing system 110 can be a cloud computing system that provides one or more services over network 130. That is, in some examples, computing system 110 can be a distributed computing system in which one or more computing devices coordinate the execution of threads to jointly perform one or more operations associated with computing system 110. One or more computing devices, such as computing device 100, can access the services provided by the cloud by communicating with computing system 110.While it is described herein that they are carried out at least partially by the computing system 110, any or all of the techniques of the present disclosure can be carried out by one or more other devices, such as the computing device 100. That is to say, in some examples, the computing device 100 can be operated to carry out one or more techniques of the present disclosure on its own.

[0014] The computing system 110 includes one or more processors 113 and a memory 114. The processors 113 can implement functionalities and / or execute instructions associated with the computing system 110. Examples of processors 113 include application processors, display controllers, auxiliary processors, one or more sensor hubs, and any other hardware configured to function as a processor, processing unit, or processing device (including field-programmable gate arrays (FPGAs), application-specific integrated circuits (ASICs), general-purpose processors, graphics processing units (GPUs), etc.).The update module 117, the patch generator module 119, and the like can be operated (or, in other words, executed) by the processors 113 to perform various actions, operations, or functions of the computing system 110. That is to say, the update module 117 and the patch generator module 119 can each form an executable bytecode which, when executed, causes the processors 113 to perform specific operations according to various aspects of the techniques described herein (e.g., causing the computing system 110 to become a computer for a specific purpose, with which various aspects of the techniques are to be carried out).

[0015] The computer system 110 may also include a memory 114. Memory 114 may contain the shared library repository 115, the update module 117, the patch generator module 119, and the sandbox software development kit (SDK) repository 121. Memory 114 may be described as a computer-readable storage medium in some examples. In some examples, memory 114 is temporary storage, meaning that a primary purpose of memory 114 is not long-term storage. Memory 114 may also be described as volatile storage, meaning that memory 114 does not retain its stored contents when the computer system 110 is turned off (or, in other words, powered down).Examples of volatile memory include random-access memories (RAM), dynamic random-access memories (DRAM), static random-access memories (SRAM), and other forms of volatile memory known in the prior art. In some examples, memory 114 can be used to store program instructions for execution by processors 113. Memory 114 can be used by software or applications running on the computing system 110 (e.g., software needed to generate patches for shared libraries) to temporarily store information during program execution.

[0016] The computing device 100 can include applications 106A-106N (collectively, "Applications 106"), shared libraries 126A-126G (collectively, "Shared Libraries 126"), sandbox software development kits (SDKs) 128A-128E (collectively, "Sandbox SDKs 128"), an update module 107, a presence-sensitive display 120, and communication components ("COMM" components) 124. The display 120 can be a presence-sensitive display that functions as both an input and output device. For example, the presence-sensitive display can function as an input device using a presence-sensitive input component, such as a resistive touchscreen, an acoustic surface wave touchscreen, a capacitive touchscreen, a projective capacitive touchscreen, a pressure-sensitive screen, an acoustic pulse detection touchscreen, or any other presence-sensitive display technology.The presence-sensitive display can function as an output device (e.g., display device) using any one or more display components, such as a liquid crystal display (LCD), a dot matrix display, a light-emitting diode display (LED), a microLED display, an organic light-emitting diode display (OLED), an eInk display, an active matrix organic light-emitting diode display (AMOLED), or a similar monochrome or color display capable of outputting 100 visible pieces of information to a user of the computing device.

[0017] The COMM components 124 can receive and transmit various types of information over the network 130, such as information about pending updates related to one or more applications 106 installed on the computing device 100. The network 130 can include a remote network such as the Internet, a local area network (LAN), a personal area network (PAN) (e.g., Bluetooth®), a corporate network, a wireless network, a cellular network, a telephony network, an urban network (e.g., Wi-Fi, WAN, WiMAX, etc.), one or more other network types, or a combination of two or more different network types (e.g., a combination of a cellular network and the Internet).

[0018] The COMM components 124 can include wireless communication devices capable of transmitting and / or receiving communication signals using the network 130, such as a cellular device, a 3G radio, a 4G radio, a 5G radio, a Bluetooth® radio (or any other PAN radio), an NFC radio, or a WiFi radio (or any other WLAN radio). Additionally or alternatively, the COMM components 124 can include wired communication devices capable of transmitting and / or receiving communication signals via a direct connection over a wired communication medium (e.g., a USB cable).

[0019] The computing device 100 can run one or more applications 106. The applications 106 can be first-party applications or components, developed and provided as applications integrated into an operating system, or third-party applications that a user of the computing device 100 obtains through application storage services provided by the operating system, the computing system 110, or another computing system. The application 106 can provide, as some examples, gaming services (e.g., video games), email services, web browsing services, SMS and / or chat services, web conferencing services, video conferencing services, music services (including streaming music services), video services (including video streaming services), navigation services, word processing services, spreadsheet services, slide and / or presentation services, assistance services, text input services, or any other services commonly provided by applications.

[0020] The computing device 100 includes shared libraries 126. A shared library, such as shared library 126A, can be one or more files containing compiled code, such as functions, and data that can be referenced and used by multiple applications (e.g., two or more of the applications 106) to perform certain operations or provide certain features. For example, shared library 126A can provide a web browsing component, and two or more of the applications 106 can link to shared library 126A to provide web browsing functionality for accessing and displaying web pages.

[0021] Any shared library within the shared libraries (126) can be a static shared library. A static shared library can be a shared library that simulates static linking while allowing multiple applications to reuse the same instance of the library. That is, a static shared library can allow an application to link to a specific version of the shared library without having to include the library within the application.At runtime, an application linked to a specific version of the static shared library can copy the code and data of that specific version into the application's process space, effectively making that specific version a part of the application. The application can then directly access the symbols of that specific version, improving application performance by reducing the number of times the computer needs to load the code and data of that specific version from memory.

[0022] A static shared library may not be compatible between different versions of the same shared library. Therefore, an application that links to and / or depends on specific versions of a shared library may not be able to access functionality in a different version of the same shared library without recompiling the application to link to that different version.

[0023] For example, a newer version of a shared library might discard one or more functions in an older version of the same shared library and replace those deprecated functions with one or more newer ones. Therefore, an application linked to the older version of the shared library that calls those one or more functions might be unable to link to the newer version because the newer version might no longer support calling those functions.

[0024] In the example from Fig. 1 The computing device 100 includes shared libraries 126, which contain different versions of the same static shared library (e.g., different versions of a web browsing component), and two or more of the applications 106 can link to and depend on different versions of the same shared library to perform certain operations or provide certain features. For example, application 106A can link to shared library 126A, and application 106N can link to shared library 126G, which are different versions of the same shared library.In examples where shared library 126A and shared library 126G are static shared libraries, application 106A, which is linked to shared library 126A, may not be able to link to shared library 126G, even though shared library 126A and shared library 126G are different versions of the same shared library.

[0025] The computing device 100 includes the Sandbox SDKs 128. Sandbox SDKs 128 are SDKs that run in dedicated runtime environments, which are isolated processes connected to the applications 106, also known as sandbox environments, to provide various functionalities to the applications 106. Sandbox SDKs can run in runtime environments separate from the runtime environments of the applications that use the Sandbox SDKs (e.g., in a sandbox), thereby enhancing data privacy for the users of the applications by preventing the collection and sharing of data without user consent. For example, an instance of a Sandbox SDK, such as Sandbox SDK 128A, can run in a sandbox environment connected to the application 106A to provide one or more functionalities that the application 106A can use.For example, an application might use a sandbox SDK associated with a social media company to integrate features provided by that company, such as single sign-on, social history, advertising, and the like. In another example, an application might use a sandbox SDK that performs analytics reporting to integrate application analytics features, such as crash reports, into the application.

[0026] Similar to static shared libraries, a sandbox SDK may be incompatible between different versions of the same sandbox SDK. Therefore, an application using one version of a sandbox SDK may not be able to access functionality in another version of the same sandbox SDK. In the example from Fig. 1. The computing device 100 includes the sandbox SDKs 128, which contain different versions of the same sandbox SDK (e.g., different versions of a sandbox SDK that provides analysis reports), and two or more of the applications 106 can link to and depend on different versions of the same sandbox SDK to perform certain operations or provide certain features. For example, application 106A can use sandbox SDK 128A, and application 106N can use sandbox SDK 128E, which can be different versions of the same sandbox SDK that performs the analysis reports.Because Sandbox SDKs are not compatible between different versions of the same Sandbox SDK, the application 106A, which uses the shared library 126A, may not be able to use the shared library 126G, even though the Sandbox SDK 128A and the Sandbox SDK 128E are different versions of the same shared library.

[0027] In some examples, when different applications use the same version of the same sandbox SDK, the compute device 100 can contain multiple instances of the same version of the same sandbox SDK, because each instance of a sandbox SDK used by an application runs in a separate sandbox environment associated with that application. Therefore, if application 106A and application 106N use the same version of the same sandbox SDK, the compute device 100 can contain sandbox SDK 128A and sandbox SDK 128E, which are different instances of the same version of the same sandbox SDK. This allows sandbox SDK 128A to run in a sandbox environment associated with application 106A and sandbox SDK 128E to run in a sandbox environment associated with application 106N.

[0028] Computing Device 100 can run Update Module 107 to facilitate the management of application updates, shared library updates, and / or sandbox SDK updates by working in conjunction with Update Module 117 of Computing System 110. For example, Computing Device 100 can use Update Module 107 to update applications 106, shared libraries 126, and / or sandbox SDKs 128 installed on Computing Device 100 to new versions of such applications 106 and shared libraries released by developers on Computing System 110 (e.g., in an online application store provided by Computing System 110). In various cases, Update Module 107 can be a client application connected to an online application store managed and / or provided by Computing System 110.

[0029] From time to time, developers of various applications may add new features, fix various bugs, resolve various security issues, or otherwise update the software code for an application and / or a shared library. The developer may publish a new version of the application (e.g., for application 106A) to the online application store provided by Computing System 110, and Computing Device 100 may use Update Module 107 to download and install new versions of applications installed on Computing Device 100.For example, the computing device 100 can use one or more COMM components 124 to receive data from the computing system 110 to update an application installed on the computing device 100 to a newer version of the application published on the computing system 110, and the computing device can use the update module 107 to apply the patch to the application in order to update the application.For example, if the developer of application 106A releases a newer version of application 106A on computer system 110, computer device 100 may be able to update application 106A to the released new version by downloading a patch from computer system 110 to update application 106A to the released new version, and by applying the patch to application 106A installed on computer device 100 to install the new version of application 106A on computer device 100.

[0030] In some examples, a new version of an application may depend on a different version of a shared library (e.g., a newer version of the shared library) than an earlier version of the same application. For example, while the version of application 106A installed on computing device 100 may depend on a specific version of a shared library represented by shared library 126A, a new version of application 106A may depend on a newer, different version of the same shared library and may not be able to use shared library 126A used by the previous version of application 106A. Such a newer, different version of a shared library is referred to herein as a target version of the shared library.

[0031] Computing device 100 can receive information from computing system 110 regarding the target version of a shared library on which a new version of the application depends. In response to receiving this information, computing device 100 can determine whether the target version of the shared library is installed on computing device 100. If computing device 100 determines that the target version of the shared library is not yet installed, it can install the target version.

[0032] In some examples, computer 100 can install the target version of the shared library used by the application by downloading and installing it from computer 110. However, the size of a shared library can be relatively large (e.g., over one hundred megabytes). Therefore, downloading the target version of the shared library can result in computer 100 downloading a relatively large amount of data.If the computing device 100 has to download a relatively large amount of data when updating a shared library, the time required for the computing device 100 to install the target version of the shared library may increase, which may impair the usability of the computing device 100, as the waiting time until the user of the computing device 100 is able to use an updated application that depends on the target version of the shared library is increased.

[0033] Furthermore, the performance of computing device 100 can be negatively impacted if it has to download a relatively large amount of data while updating a shared library. For example, downloading a relatively large amount of data may require sustained network activity, which can drain the battery of computing device 100 if it is a mobile computing device (e.g., a smartphone). Downloading a relatively large amount of data can also increase the processing load on computing device 100. An increase in the processing load on computing device 100 can lead to a decrease in its processing performance, particularly the performance of tasks other than downloading data.An increase in the processing load of the computing device 100 can also lead to increased heat generation by processing components and / or network components of the computing device 100, which can potentially lead to overheating of the computing device 100.

[0034] Furthermore, the data usage of Computing Device 100 may increase if Computing Device 100 needs to download a relatively large amount of data while updating a shared library. If Computing Device 100 uses a data plan provided by a service provider that limits the amount of data transferred by a user account over a certain period, the relatively large amount of data downloaded by Computing Device 100 while updating a shared library may cause Computing Device 100 to consume the data allocated to the user of Computing Device 100 by the data plan more quickly. This could potentially lead to the service provider throttling Computing Device 100 and / or charging fees for exceeding the data allowance.

[0035] According to aspects of this disclosure, the computing device 100 can reduce the amount of data it needs to download to install a target version of the shared library by downloading a patch that it can use to update a version of the shared library installed on the computing device to the target version. Since a target version of the shared library can share a significant amount of code with an older version of the same shared library installed on the computing device 100, a patch to update the older version of the shared library to the target version does not need to include all of the code of the target version of the shared library.Instead, the patch can include a subset of the code of the target version of the shared library to update the older version of the shared library to the target version of the same shared library, thereby reducing the amount of data that computing device 100 needs to download to install the target version of the shared library on computing device 100.

[0036] Computing Device 100 can select a base version of a shared library from among the versions installed on Computing Device 100 to be patched in order to create the target version of the shared library. That is, since different versions of a shared library can currently be installed on Computing Device 100, Computing Device 100 can select one version of the shared library from among those installed on Computing Device 100 as the base version to be patched in order to create the target version of the shared library.For example, if shared library 126A and shared library 126G are different versions of the same shared library, such that shared library 126A and shared library 126G have different version numbers, computing device 100 can select one of shared library 126A and shared library 126G as the base version of the shared library to be patched to produce the target version of the shared library.

[0037] Computing Device 100 can select, from among the versions of a shared library installed on Computing Device 100, the most recent version of the shared library that precedes the target version of the shared library as the base version of the shared library to be patched to create the target version of the shared library. The most recent version of a shared library that precedes the target version of the same shared library from among the versions of that shared library installed on Computing Device 100 can be the version of the shared library with the highest version (e.g., the highest version number) from among the versions of the shared library installed on Computing Device 100 that is a lower version (e.g.,(a lower version number) than the version number of the target version of the shared library. In another example, the most recent version of the shared library preceding the target version of the shared library from among the versions of the shared library installed on computing device 100 could be the most recently released version of the shared library from among the versions of the shared library installed on computing device 100 that was released before the target version of the shared library was released.

[0038] The most recent version of the shared library that precedes the target version of the shared library from among the 100 versions of the shared library installed on computer device 100 can share the most code with the target version of the shared library from among the versions of the shared library installed on computer device 100. Therefore, selecting the most recent version of the shared library that precedes the target version of the shared library from among the versions of the shared library installed on computer device 100 as the base version of the shared library can reduce the size of the patch used to generate the target version of the shared library.

[0039] For example, the target version of a shared library might be version 11, the version of shared library 126A might be version 10, and the version of shared library 126G might be version 8. Since version 126A is a higher version than version 126G, and since version 126A is a lower version than the target version, computing device 100 can designate shared library 126A as the base version of the shared library.

[0040] The computing device 100 can use one or more COMM components 124 to send a request to the computing system 110 to update a shared library to a target version of the shared library. The request can specify the shared library to be updated, for example, by including the name of the shared library. The request can also specify the base version of the shared library to be patched, for example, by including the version number of the base version of the shared library. In the example where shared library 126A is selected as the base version of the shared library, the request can specify the name of shared library 126A and the version number of shared library 126A.

[0041] The computing system 110 can receive a request to update a shared library and, in response, can generate a patch to patch the base version of the shared library specified by the request in order to produce the target version of the shared library.To generate the patch, the patch generator module 119 can retrieve the base version of the shared library and the target version of the shared library from the shared library repository 115 and compare the base version of the shared library with the target version of the shared library to identify differences between the base version of the shared library and the target version of the shared library, such as by comparing the source code, binaries, or other relevant data associated with the base version of the shared library and the target version of the shared library.For example, the patch generator module 119 can retrieve the source code, binaries, or other relevant data associated with the base version of the shared library specified by the request, as well as the source code, binaries, or other relevant data associated with the target version of the shared library, from the shared library repository 115 to identify differences between the base version of the shared library and the target version of the shared library.

[0042] The patch generator module 119 can create a patch based on the differences between the base version of the shared library and the target version. This patch contains instructions (e.g., code) and / or data to transform the base version of the shared library into the target version. Such a patch is called a delta patch because it does not contain all the code and data of the target version. Instead, it can include code and data that have changed between the base version and the target version. The computing system 110 can then send the patch to the computing device 100 to patch the base version of the shared library specified in the request to the target version.

[0043] Computing device 100 can receive the patch to update the base version of the shared library specified in the request to the target version of the shared library. In response to receiving the patch, computing device 100 can apply the patch to the base version of the shared library to build and install the target version, for example, by executing the code contained in the patch to update the base version of the shared library to build the target version on computing device 100.For example, if the computing device 100 determines that the shared library 126A is the base version of a shared library that needs to be patched to create the target version of the shared library, the computing device 100 can apply the patch to the shared library 126A to create the shared library 126H, which is the target version of the shared library, on the computing device 100.

[0044] Similar to the techniques for updating shared libraries, the compute device 100 can be able to update a version of a sandbox SDK used by an application to a newer version of the sandbox SDK. For example, application 106A can use a particular sandbox SDK, such as sandbox SDK 128A, running in a sandbox environment, and the update module 107 can update an application, such as application 106A, to a newer version of the application that uses a newer version of the particular sandbox SDK, referred to herein as the target version of the sandbox SDK.

[0045] Computing device 100 can receive information from computing system 110 regarding the target version of the Sandbox SDK, on ​​which a new version of the application depends. In response to receiving this information, computing device 100 can determine whether the target version of the Sandbox SDK is installed on computing device 100. If computing device 100 determines that the target version of the Sandbox SDK is not yet installed, it can install the target version.

[0046] Computing Device 100 can select a base version of a Sandbox SDK from among the versions installed on it to patch in order to create the target version. For example, if Sandbox SDK 128A and Sandbox SDK 128E are different versions of the same Sandbox SDK, Computing Device 100 can select one of them as the base version to patch to create the target version.

[0047] Computing Device 100 can select, from among the versions of a Sandbox SDK installed on Computing Device 100, the most recent version of the Sandbox SDK that precedes the target version of the Sandbox SDK as the base version of the Sandbox SDK to be patched to create the target version of the shared library. The most recent version of a Sandbox SDK that precedes the target version of the same Sandbox SDK from among the versions of that Sandbox SDK installed on Computing Device 100 can be the version of the Sandbox SDK with the highest version number among those installed on Computing Device 100 that has a lower version number than the target version of the Sandbox SDK.In another example, the most recent version of the Sandbox SDK that precedes the target version of the Sandbox SDK from the versions of the Sandbox SDK installed on compute device 100 can be the most recently released version of the Sandbox SDK from the versions of the Sandbox SDK installed on compute device 100 that was released before the release of the target version of the Sandbox SDK.

[0048] Computing device 100 can use one or more COMM components 124 to send a request to compute system 110 to update a sandbox SDK to a target version of the sandbox SDK. The request can specify the sandbox SDK to be updated, for example, by including the name of the sandbox SDK. The request can also specify the base version of the sandbox SDK to be patched, for example, by including the version number of the base version of the sandbox SDK. In the example where sandbox SDK 128E is selected as the base version of the shared library, the request can specify the name of sandbox SDK 128E and the version number of sandbox SDK 128E.

[0049] The computing system 110 can receive a request to update a sandbox SDK and, in response, can generate a patch to patch the base version of the sandbox SDK specified by the request to produce the target version. To generate the patch, the patch generator module 119 can compare the base version of the sandbox SDK with the target version to identify differences between them, such as by comparing the source code, binaries, or other relevant data associated with the base and target versions.For example, the patch generator module 119 can retrieve the source code, binaries, or other relevant data associated with the base version of the Sandbox SDK specified by the request, as well as the source code, binaries, or other relevant data associated with the target version of the Sandbox SDK, from the Sandbox SDK repository 121 to identify differences between the base version of the Sandbox SDK and the target version of the Sandbox SDK.

[0050] The patch generator module 119 can create a patch based on the differences between the base version of the Sandbox SDK and the target version. This patch contains instructions (e.g., code) and / or data to transform the base version of the Sandbox SDK into the target version. Such a patch is called a delta patch because it does not contain all the code and data of the target version of the Sandbox SDK, but instead can include code and data that have changed between the base version and the target version. The computing system 110 can therefore send the patch to the computing device 100 to patch the base version of the Sandbox SDK specified in the request to the target version.

[0051] Computing Device 100 can receive the patch to patch the base version of the Sandbox SDK specified in the request to the target version of the Sandbox SDK. In response to receiving the patch, Computing Device 100 can apply the patch to the base version of the Sandbox SDK to create and install the target version, such as by executing the code contained in the patch to update the base version of the Sandbox SDK to create the target version on Computing Device 100. For example, if Computing Device 100 determines that Sandbox SDK 128E is the base version of a Sandbox SDK to be patched to create the target version, Computing Device 100 can apply the patch to Sandbox SDK 128E to create Sandbox SDK 128F, which is the target version of the Sandbox SDK.

[0052] Several aspects of these techniques can reduce the amount of data transferred from the Computing Device 100 to update shared libraries and sandbox SDKs, thereby improving the performance of the Computing Device 100. By reducing the amount of data transferred from the Computing Device 100 to update shared libraries and sandbox SDKs, the techniques described in this disclosure can decrease the time the Computing Device 100 needs to install new versions of shared libraries and sandbox SDKs, which can reduce the waiting time for the Computing Device 100 user to be able to use an updated application that depends on new versions of shared libraries and / or sandbox SDKs.

[0053] Furthermore, reducing the amount of data transferred by Computing Device 100 to update shared libraries and sandbox SDKs can decrease the amount of network activity maintained by Computing Device 100 and reduce the amount of time the Computing Device may be operating under increased processing load to transfer data, thereby reducing the battery consumption of Computing Device 100 and the heat generated by the processing and / or networking components of Computing Device 100 during data transfer.

[0054] Fig. Figure 2 is a block diagram illustrating an exemplary computing device for updating shared libraries according to techniques of this disclosure. The example from Fig. The computing device shown in Figure 200 is an example of the one described in Figure 2. Fig. 1. Calculating device shown: 100.

[0055] As in the example from Fig. As shown in Figure 2, the computing device 200 includes a presence-sensitive display 220, which may be similar to, but not substantially similar to, the presence-sensitive display 120, one or more processors 242, one or more COMM components 224, which may be similar to, but not substantially similar to, the COMM components 124, and one or more storage devices 246. One or more storage devices 246 of the computing device 200 may contain an operating system 205, one or more applications 206A-206N (collectively, "Applications 206"), an update module 207, shared libraries 226A-226P (collectively, "Shared Libraries 226"), and sandbox SDKs 228A-228J (collectively, "Sandbox SDKs 228"). The Applications 206 are examples of the Applications 106 from Figure 206. Fig. 1. Update module 207 is an example of update module 107 from Fig. 1, the shared libraries 226 are examples of the shared libraries 126 from Fig. 1, and the Sandbox SDKs 228 are examples of the Sandbox SDKs 128 from Fig. 1.

[0056] The presence-sensitive display 220 of the computing device 200 can include the functionality of an input component and / or an output component. In the example of Fig. 2. The presence-sensitive display 220 can include a presence-sensitive input (PSI) component 240 (“PSI component 240”), such as a presence-sensitive screen or a touch-sensitive screen. In some examples, the presence-sensitive input component 240 can detect an object at and / or near the presence-sensitive input component. As an example, the presence-sensitive input component 240 can detect an object, such as a finger or a stylus, that is within 2 inches or less of the presence-sensitive input component 240. The presence-sensitive input component 240 can determine a position (e.g., an (x,y) coordinate) of the presence-sensitive input component at which the object was detected.In another example area, the presence-sensitive input component 240 can detect an object 2 inches or less from the presence-sensitive input component 240, and other areas are also possible. The presence-sensitive input component 240 can determine the position selected by a user's finger using capacitive, inductive, and / or optical detection techniques.

[0057] In some examples, the presence-sensitive display 220 can also provide outputs to a user using tactile, acoustic, or visual stimuli. For example, the presence-sensitive display 220 can include a display component 248 that displays a graphical user interface. The display component 248 can be any type of output component that provides a visual output, such as a liquid crystal display (LCD), a dot matrix display, a light-emitting diode display (LED), a micro-LED display, an organic light-emitting diode display (OLED), an E-Ink display, an organic active-matrix light-emitting diode display (AMOLED), etc.Although depicted as an integrated component of the computing device 200, the presence-sensitive display 220 may in some examples be an external component that shares a data or information path with other components of the computing device 200 to transmit and / or receive input and output data.

[0058] For example, the presence-sensitive display 220 can be an integrated component of the computing device 200, located within the external packaging of the computing device 200 and physically connected to it. In another example, the presence-sensitive display 220 can be an external component of the computing device 200, located outside the packaging of the computing device 200 and physically separate from it. In some examples, when located outside the packaging of the computing device 200 and physically separate from it, the presence-sensitive display 220 can be implemented by two separate components: a presence-sensitive input component 240 for receiving inputs and a display component 248 for providing outputs.

[0059] One or more processors 242 can implement functionality and / or execute instructions associated with the computing device 200. Examples of one or more processors 242 include application processors, display controllers, auxiliary processors, one or more sensor hubs, and any other hardware configured to function as a processor, processing unit, or processing device. The operating system 205, the applications 206, the update module 207, the shared libraries 226, the sandbox SDKs 228, and the like can be operated (or, in other words, executed) by one or more processors 242 to perform various actions, operations, or functions of the computing device 200.That is, the operating system 205, the applications 206, the update module 207, the shared libraries 226, and the sandbox SDKs 228 can form executable bytecode which, when executed, causes the one or more processors 242 to perform specific operations according to various aspects of the techniques described herein (e.g., causing the computing device 200 to become a computer for a specific purpose, with which various aspects of the techniques are to be performed). For example, the one or more processors 242 of the computing device 200 can retrieve and execute instructions stored by storage devices 246 that cause the one or more processors 242 to perform the operations described herein, which are associated with the operating system 205 and the applications 206.When executed by one or more processors 242, the instructions can cause the computing device 200 to store information within the storage devices 246.

[0060] One or more storage devices 246 within the computing device 200 can store information for processing during the operation of the computing device 200 (e.g., the computing device 200 can store data that the operating system 205 accesses while running on the computing device 200). The storage devices 246 can also store data associated with the applications 206, the update module 207, the shared libraries 226, and the sandbox SDKs 228.

[0061] In some examples, the memory device 246 is a temporary memory, meaning that long-term storage is not its primary purpose. The memory devices 246 on the computing device 200 can be configured as volatile memory for short-term information storage and therefore do not retain stored contents when the device is powered off. Examples of volatile memory include random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), and other forms of volatile memory known in the prior art.

[0062] In some examples, the storage devices 246 may also include one or more computer-readable storage media. The storage devices 246 may include one or more non-transient computer-readable storage media. The storage devices 246 may be configured to store larger amounts of information than is typically stored by volatile memory. The storage devices 246 may also be configured for long-term storage of information as non-volatile memory and retain information after power cycles. Examples of non-volatile memory include magnetic disks, optical media, flash memory, or forms of electrically programmable memory (EPROM) or electrically erasable and programmable memory (EEPROM). Program instructions and / or information (e.g.,data) are stored, which are associated with the operating system 205, the applications 206, the update module 207, the shared libraries 226 and the sandbox SDKs 228.

[0063] According to the techniques of this disclosure, one or more processors 242 can execute the update module 207 to update a shared library to a target version of a shared library and / or to update a sandbox SDK to a target version of a sandbox SDK. One or more processors 242 are configured to execute the update module 207 to select, from the versions of a shared library installed on the computing device 200, a base version of the shared library to be patched to produce the target version of the shared library. For example, shared libraries 226 are different versions of the same shared library, such as different versions of a web view component that provides web browser functionality to applications associated with a version of the shared library.For example, application 206A can be linked to the shared library 226A, and application 206N can be linked to the shared library 226P.

[0064] When application 206A is updated to a new version, the new version may no longer be linked to shared library 22A, but instead to a new version of the shared library. Therefore, one or more processors 242 are configured to run update module 207 to patch a version of the shared library (e.g., one of shared libraries 226) to the new version of the shared library to which the new version of application 206A is linked.

[0065] One or more processors 242 are configured to execute the update module 207 to determine the versions of a shared library installed on the computing device 200 and to select a base version of the shared library to patch in order to install a new version. For example, the update module 207 can call one or more functions of the operating system 205 to determine a list of all shared libraries installed on the computing device 200 and can filter the list using the name of a shared library to determine all versions of that shared library installed on the computing device 200.The update module may therefore be able to select the base version of the shared library to be patched from the list of all versions of the same shared library installed on the computing device 200.

[0066] One or more processors 242 are configured to execute the update module 207 to select, from the versions of a shared library installed on the computing device 200 (e.g., from the shared libraries 226), a most recent version of the shared library that precedes the target version of the shared library as the base version of the shared library to be patched in order to create the target version of the shared library.In some examples, the most recent version of the shared library preceding the target version of the shared library, from among the versions of the shared library installed on Computing Device 200, may be the version of the shared library with the highest version number among those installed on Computing Device 200 that has a lower version number than the target version of the shared library. In some examples, the most recent version of the shared library preceding the target version of the shared library, from among the versions of the shared library installed on Computing Device 200, may be the most recently released version of the shared library that was released before the release of the target version of the shared library.

[0067] One or more processors 242 are configured to execute the update module 207. In response to the determination of the base version of the shared library to be patched, one or more COMM components 224 are used to send a request to the compute system 110 to update a shared library to a target version. The request can specify the shared library to be updated, for example, by including the name of the shared library, such as the name of the shared library package. The request can also specify the base version of the shared library to be patched, for example, by including the version number of the base version of the shared library to be patched to produce the target version of the shared library.

[0068] One or more processors 242 are configured to execute the update module 207 in order to use one or more COMM components 224 to receive a patch from the computing system 110, which is to be applied to the base version of the shared library in order to produce the target version of the shared library, in response to the sending of the request to update the shared library to the target version of the shared library.The update module 207 can call one or more functions of the operating system 205 to determine the location of the base version of the shared library in the storage devices 246, such as the directory path of the base version of the shared library, to locate the base version of the shared library, and can apply the patch to the base version of the shared library to create the target version of the shared library on the computing device 200.

[0069] The Computing Device 200 can also update a Sandbox SDK installed on the Computing Device 200 to a target version of the Sandbox SDK. For example, the Sandbox SDKs 228 may contain different versions of the same Sandbox SDK installed on the Computing Device 200, and one or more Processors 242 are also configured to run the Update Module 207 to select a base version of the Sandbox SDK from the versions installed on the Computing Device 200 to be patched to produce the target version of the Sandbox SDK.

[0070] One or more processors 242 are configured to execute the update module 207 to determine the versions of a sandbox SDK installed on the computing device 200 and can select a base version of the sandbox SDK to be patched from among the versions installed on the computing device 200 in order to install a new version of the sandbox SDK. For example, the update module 207 can call one or more functions of the operating system 205 to determine a list of all sandbox SDKs installed on the computing device 200 and can filter the list using the name of a specific sandbox SDK to determine all versions of that specific sandbox SDK installed on the computing device 200.The update module 207 may therefore be able to select the base version of the Sandbox SDK to be patched from the list of all versions of the same Sandbox SDK installed on the computing device 200.

[0071] One or more processors 242 are configured to execute the update module 207 to select, from the versions of a sandbox SDK installed on the computing device 200 (e.g., from the sandbox SDKs 228), a most recent version of the sandbox SDK that precedes the target version of the sandbox SDK, as the base version of the sandbox SDK to be patched to create the target version of the sandbox SDK. In some examples, the most recent version of the Sandbox SDK that precedes the target version of the Sandbox SDK from among the versions of the Sandbox SDK installed on Computing Device 200 (e.g., Sandbox SDKs 228) can be the version of the Sandbox SDK that has the highest version number from among the versions of the Sandbox SDK installed on Computing Device 200 (e.g., from Sandbox SDKs 228) and that has a lower version number than the target version of the Sandbox SDK.In some examples, the most recent version of the Sandbox SDK that precedes the target version of the Sandbox SDK from among the versions of the Sandbox SDK installed on the compute device 200 may be the most recently released version of the Sandbox SDK that was released before the target version of the Sandbox SDK was released.

[0072] One or more processors 242 are configured to execute the update module 207. In response to the determination of the base version of the sandbox SDK to be patched, one or more COMM components 224 are used to send a request to the compute system 110 to update a sandbox SDK to a target version. The request can specify the sandbox SDK to be updated, for example, by including the name of the sandbox SDK, such as the name of the sandbox SDK package. The request can also specify the base version of the sandbox SDK to be patched, for example, by including the version number of the base version of the sandbox SDK to be patched to produce the target version of the sandbox SDK.

[0073] One or more processors 242 are configured to execute the update module 207. In response to a request to update the Sandbox SDK to the target version, the update module 207 uses one or more COMM components 224 to receive a patch from the compute system 110. This patch is applied to the base version of the Sandbox SDK to generate the target version. The update module 207 can call one or more operating system functions 205 to determine the location of the base version of the Sandbox SDK on the storage devices 246, such as the directory path of the base version. It can then apply the patch to the base version of the Sandbox SDK to generate the target version on the compute device 200.

[0074] In some examples, Computing Device 200 can patch a sandbox SDK to perform an update to the same version of the sandbox SDK. Because sandbox SDKs can run in sandbox environments associated with individual applications (such as Applications 206) that use the functionality provided by the sandbox SDKs, Computing Device 110 can generate separate sandbox SDK packages for each of the different applications that can use a specific version of a sandbox SDK. Therefore, if two different applications use the same version of the same sandbox SDK, Computing Device 110 can generate separate sandbox SDK packages for the same version of the same sandbox SDK for the different applications.For example, Sandbox SDK 228A and Sandbox SDK 228J can be the same version of the same SDK, with Sandbox SDK 228A being able to run in a sandbox environment associated with Application 206A and Sandbox SDK 228J being able to run in a sandbox environment associated with Application 206N.

[0075] If there are problems with how Computing System 110 generates a specific sandbox SDK package that runs in a sandbox environment associated with a specific application, Computing System 110 may be able to generate a patch to fix these problems without upgrading the sandbox SDK to a newer version. However, Computing System 110 may not be able to identify the specific sandbox SDK package to patch based solely on the sandbox SDK version number, because Computing System 110 may have generated multiple sandbox SDK packages (e.g., Sandbox SDK 228A and Sandbox SDK 228J) for the same sandbox SDK version.

[0076] Instead, Computing System 110 may be able to identify a specific instance of a sandbox SDK based on a derived identifier of the sandbox SDK instance. An instance of a sandbox SDK may have a derived identifier, sometimes called a derived package identifier, generated based on the name (or package name) of the application using the sandbox SDK instance (e.g., calling functions of that instance), the version code of the application using the sandbox SDK instance, and a cryptographic hash (e.g., a SHA-256 hash) of the sandbox SDK instance file. The derived identifier of a sandbox SDK instance must not be based on the version number of the sandbox SDK itself, to make it more difficult for malicious actors to determine the SDK version number based on the derived identifier.In the example where Sandbox SDK 228A and Sandbox SDK 228J are instances of the same version of the same Sandbox SDK, with Sandbox SDK 228A running in a sandbox environment associated with application 206A and Sandbox SDK 228J running in a sandbox environment associated with application 206N, Sandbox SDK 228A and Sandbox SDK 228J can have different derived identifiers because Sandbox SDK 228A and Sandbox SDK 228J are used by different applications.

[0077] The Computing Device 200 can communicate with the Computing System 110 to determine whether an update is available for an instance of a sandbox SDK (e.g., one of the Sandbox SDKs 228) and, if an update is available for that instance of the sandbox SDK, to apply a patch to update the sandbox SDK. One or more processors 242 of the Computing Device 200 are configured to use one or more COMM components 224 to send a request to update an instance of a sandbox SDK to the Computing System 110. The request to update the instance of the SDK can specify the derived identifier of the instance of the sandbox SDK. The Computing System 110 can determine whether an update is available for the instance of the sandbox SDK based on the derived identifier of the sandbox SDK.For example, Computing System 110 may store or be able to access a list of derived identifiers with available updates, and Computing System 110 may look up the derived identifier of the Sandbox SDK instance to determine if an update is available for the Sandbox SDK instance.

[0078] When Computing System 110 determines that an update is available for the Sandbox SDK instance, Computing System 110 can send a patch to update the Sandbox SDK instance to Computing Device 200. One or more Processors 242 are configured to use one or more COMM Components 224 to receive a patch to update the Sandbox SDK instance from Computing System 110 in response to the Sandbox SDK update request. One or more Processors 242 are then configured to execute the Update Module 207 to apply the patch to the Sandbox SDK and update it.

[0079] In some examples, the compute system 110 can release hotfix patches for sandbox SDKs to address security issues and / or other critical bugs present in specific versions of a sandbox SDK. One or more processors 242 are configured to run the update module 207 to determine a list of the versions of a sandbox SDK installed on the compute device 200 and can use one or more COMM components 224 to send a hotfix patch request that includes information about the versions of the sandbox SDK installed on the compute device 200. In some examples, the sandbox SDK versions may follow a format MAJORVERSION.SECONDVERSION.PATCH.

[0080] Computing System 110 can receive the request for hotfix patches and, based on the versions of the Sandbox SDK specified in the request, can determine one or more versions of the Sandbox SDK for which hotfix patches are available. Computing System 110 can therefore send one or more hotfix patches for one or more versions of the SDK installed on Computing Device 200 to Computing Device 200.

[0081] One or more Processors 242 are configured to use one or more COMM Components 224 to receive a hotfix patch for each of the one or more versions of the Sandbox SDK installed on Computing Device 200 from Computing System 110. One or more Processors 242 are therefore configured to execute the Update Module 207 to apply a corresponding hotfix patch to each of the one or more versions of the Sandbox SDK installed on Computing Device 200.

[0082] Fig. 3A and Fig. 3B are concept diagrams illustrating exemplary techniques for updating shared libraries according to the techniques of this revelation. Fig. 3A and Fig. 3B are used in connection with the computing device 100 and the computing system 110. Fig. 1 described.

[0083] As in Fig. As shown in Figure 3A, applications 306A and 306B, installed on computer 100, are both linked to version 5000 of the shared library 326A installed on computer 100. Because applications 306A and 306B are linked to the same version of the shared library 326A, they can be linked to the same copy of version 5000 of the shared library 326A.

[0084] Computing Device 100 can update Application 306B to a new version of Application 306B linked to version 5001 of Shared Library 326A. Since the only version of Shared Library 326A installed on Computing Device 100 is version 5000, Computing Device 100 can determine that the base version of Shared Library 326A is version 5000. Furthermore, since the new version of Application 306B is linked to version 5001 of Shared Library 326A, Computing Device 100 can determine that the target version of Shared Library 326A is version 5001.

[0085] The computing device 100 can therefore send an update request to the computing system 110, specifying the base version of the shared library 326A, which in the example consists of Fig. Computing device 3A is version 5000 of shared library 326A and can receive a patch from computing device 110 to patch version 5000 of shared library 326A to version 5001. Computing device 100 can therefore apply the patch to version 5000 of shared library 326A to create version 5001 of shared library 326A.

[0086] Because application 306A still depends on version 5000 of shared library 326A, computer 100 can apply the patch to version 5000 of shared library 326A to create version 5001 without overwriting version 5000. Alternatively, computer 100 can retain version 5000 of shared library 326A. That is, version 5000 of shared library 326A can remain installed on computer 100 even after it has been patched to create version 5001.

[0087] As in Fig. As shown in Figure 3B, application 306C, installed on computer 100, is linked to version 6003 of shared library 326B, also installed on computer 100, and application 306D, installed on computer 100, is linked to version 6000 of shared library 326B, also installed on computer 100. Computer 100 can update application 306D to a new version linked to version 6008 of shared library 326B. The computing device 100 can therefore determine a base version of the shared library 326B from version 6003 of the shared library 326B installed on the computing device 100 and version 6000 of the shared library 326B installed on the computing device 100, which is to be patched to create version 6008 of the shared library 326B.

[0088] Computing device 100 can determine that version 6003 of shared library 326B is the most recent version of shared library 326B among versions 6003 and 6000 of shared library 326B installed on computing device 100, which precedes version 6008 of shared library 326B. Therefore, computing device 100 can determine that the base version of shared library 326B is version 6003.

[0089] The computing device 100 can therefore send an update request to the computing system 110, specifying the base version of the shared library 326B, which in the example consists of Fig. 3A is version 6003 of shared library 326B, and can receive a patch from computer 110 to patch version 6003 of shared library 326B to version 6008. Computer 100 can therefore apply the patch to version 6003 of shared library 326B to create version 6008 of shared library 326B.

[0090] It should be noted that although version 6003 of shared library 326B is linked by application 306C but not by application 306D, compute device 100 can still patch version 6003 of shared library 326B, which is linked by application 306D, to create version 6008 of shared library 326B, which is linked by the new version of application 306D. Furthermore, since application 306C still depends on version 6003 of shared library 326B, compute device 100 can apply the patch to version 6003 of shared library 326B to create version 6008 of shared library 326B without overwriting version 6003 of shared library 326B. Instead, the computing device 100 can retain version 6003 of the shared library 326B.This means that version 6003 of the shared library 326B can remain installed on computing device 100 even after version 6003 of the shared library 326B has been patched to create version 6008 of the shared library 326B on computing device 100.

[0091] Fig. Figure 4 is a flowchart illustrating another exemplary operation of a computing device according to the techniques of this disclosure. Fig. 4 is used in connection with the computer system 110. Fig. 1 and the calculating device 200 from Fig. 2 described.

[0092] As in Fig. As shown in Figure 4, one or more processors 242 of the computing device 200 can be used.

[0093] from a multitude of versions of a shared library installed on the computing device 200, select a most recent version of the shared library that precedes a target version of the shared library, as a base version of the shared library (402).For example, to select the most recent version of the shared library installed on the computing device that precedes the target version of the shared library as the base version of the shared library, the one or more processors 242 can select a highest version of the shared library installed on the computing device with the highest version number from the multitude of versions of the shared library installed on the computing device that has a lower version number than the target version of the shared library as the base version of the shared library.

[0094] Such a shared library may be a static shared library, meaning it is not backward compatible with earlier versions. Therefore, an application may be able to use one particular version of a shared library but might not be able to use a different version of the same shared library.

[0095] The one or more processors 242 can use the one or more COMM components 224 to send an update request, which includes a specification of the base version of the shared library, to a compute system 110 (404). The compute system 110 can use the specification of the base version of the shared library to generate a patch, such as a delta patch, to update the base version of the shared library to the target version of the shared library, and can send the patch to the compute device 200.

[0096] The one or more processors 242 can, in response to the sending of the update request, receive a patch from the computing system 110 to patch the base version of the shared library to the target version of the shared library using the one or more COMM components 224 (406). As described above, the patch can be a delta patch, which can contain code and data that can represent the difference between the code and data of the base version of the shared library and the target version of the shared library.

[0097] The one or more processors 242 can apply the patch to the base version of the shared library to create the target version of the shared library (408).

[0098] In some examples, a first application installed on the computing device and a second application installed on the computing device are both associated with the base version of the shared library. When the first application is updated, the updated first application can be associated with a new version of the shared library, which can be the target version of the shared library.

[0099] One or more Processors 242 can therefore patch the base version of the shared library to create the target version of the shared library, enabling the updated first application to use the target version. One or more Processors 242 can retain the base version of the shared library because the second application is still associated with the base version.

[0100] In some examples, a first application is associated with a first version of the shared library installed on the computing device, and a second application is associated with a second version of the shared library installed on the computing device. When the first application is updated, the updated first application can be associated with a new version of the shared library, which can be the target version of the shared library.

[0101] One or more Processors 242 can determine that the second version of the shared library, linked by the second application, is the base version of the shared library, and can patch the second version of the shared library to create the target version of the shared library, enabling the updated first application to use the target version of the shared library. One or more Processors 242 can retain the second version of the shared library because the second application is still linked to the second version of the shared library.

[0102] In some examples, the Computing Device 200 can update versions of a sandbox software development kit (SDK) in a similar manner. One or more Processors 242 can select a most recent version of the sandbox SDK, which is preceded by a target version of the sandbox SDK, from a multitude of versions of the sandbox SDK installed on the Computing Device 200 as a base version of the sandbox SDK. One or more Processors 242 can send a second update request, specifying the base version of the sandbox SDK, to a Computing System 110. In response to the sending of the second update request, one or more Processors 242 can receive a second patch from Computing System 110 to patch the base version of the sandbox SDK to the target version of the sandbox SDK. One or more Processors 242 can apply the second patch to the base version of the sandbox SDK to create the target version of the sandbox SDK.

[0103] In some examples, Computing Device 200 may be able to perform an update of the same version of a sandbox SDK instance. Such an update of the same version can be used to resolve a problem with a specific instance of a sandbox SDK installed on Computing Device 200. One or more Processors 242 can determine a derived identifier of a sandbox SDK instance running in a sandbox environment associated with an application. One or more Processors 242 can send a third update request, which includes a specification of the derived identifier of the sandbox SDK instance, to Computing System 110. Such a derived identifier can be different for different instances of the sandbox SDK, including different instances of the same version of the same sandbox SDK.The derived identifier of the Sandbox SDK instance is based at least partially on an identity of the application associated with the Sandbox environment and a cryptographic hash of the Sandbox SDK instance.

[0104] In response to the sending of the third update request, one or more Processors 242 can receive a third patch from Computing System 110 to patch the Sandbox SDK instance. One or more Processors 242 can then apply the third patch to the Sandbox SDK instance to update it.

[0105] In some examples, one or more processors 242 can further specify a second sandbox SDK that runs in a sandbox environment associated with a second application. One or more processors 242 can send a hotfix request, specifying a version of the second sandbox SDK, to the computer system 110. In response to the hotfix request, one or more processors 242 can receive a hotfix patch from the computer system 110 to patch the second sandbox SDK. One or more processors 242 can apply the hotfix patch to the second sandbox SDK to update it. Aspects of this revelation include the following examples Example 1. Method comprising: Selecting a most recent version of the shared library, preceding a target version of the shared library, as a base version of the shared library by one or more processors of a computing device and from a plurality of versions of a shared library installed on the computing device; sending an update request, including a specification of the base version of the shared library, by the one or more processors to a computing system; in response to the sending of the update request, receiving a patch by the one or more processors and from the computing system to patch the base version of the shared library to the target version of the shared library;and applying the patch by one or more processors to the base version of the shared library to produce the target version of the shared library. Example 2. Method according to Example 1, wherein the shared library is a static shared library that is not backwards compatible with earlier versions of the shared library. Example 3. A method according to one of Examples 1 and 2, wherein selecting the most recent version of the shared library installed on the computing device that precedes the target version of the shared library as the base version of the shared library further comprises: selecting a highest version of the shared library installed on the computing device from the plurality of versions of the shared library installed on the computing device that is a lower version than the target version of the shared library than the base version of the shared library by the one or more processors. Example 4. Method according to any of Examples 1-3, wherein a first application installed on the computing device and a second application installed on the computing device are linked to the base version of the shared library, and wherein patching the base version of the shared library to produce the target version of the shared library further comprises: updating the first application by the one or more processors to link the first application to the target version of the shared library; and retaining the base version of the shared library on the computing device by the one or more processors for use by the second application. Example 5. Method according to any one of Examples 1-4, wherein a first application is linked to a first version of the shared library installed on the computing device and a second application is linked to a second version of the shared library installed on the computing device, wherein the second version of the shared library is selected as the base version of the shared library, and wherein patching the base version of the shared library to produce the target version of the shared library further comprises: patching the second version of the shared library linked by the second application by the one or more processors to produce the target version of the shared library;Updating the first application by the one or more processors to link the first application with the target version of the shared library; and retaining the second version of the shared library on the computing device by the one or more processors for use by the second application. Example 6. A method according to any one of Examples 1-5, further comprising: selecting a most recent version of the Sandbox SDK, preceding a target version of the Sandbox SDK, as a base version of the Sandbox SDK by the one or more processors and from a plurality of versions of a Sandbox Software Development Kit (SDK) installed on the computing device; sending a second update request, including a specification of the base version of the Sandbox SDK, by the one or more processors to a computing system; in response to the sending of the second update request, receiving a second patch by the one or more processors and from the computing system to patch the base version of the Sandbox SDK to the target version of the Sandbox SDK; and applying the second patch to the base version of the Sandbox SDK by the one or more processors to produce the target version of the Sandbox SDK. Example 7. A procedure according to any one of Examples 1-6, further comprising: determining a derived identifier of an instance of a sandbox SDK running in a sandbox environment associated with an application by the one or more processors; sending a third update request, including a specification of the derived identifier of the instance of the sandbox SDK, by the one or more processors to the computing system; in response to the sending of the third update request, receiving a third patch by the one or more processors and from the computing system to patch the instance of the sandbox SDK; and applying the third patch to the instance of the sandbox SDK by the one or more processors to update the instance of the sandbox SDK in order to produce an updated instance of the sandbox SDK. Example 8. Method according to Example 7, wherein the derived identifier of the instance of the sandbox SDK is based at least partially on an identity of the application associated with the sandbox environment and a cryptographic hash of the instance of the sandbox SDK. Example 9. Procedure according to Example 7, wherein applying the third patch to the instance of the Sandbox SDK to update the instance of the Sandbox SDK comprises: applying the third patch to the instance of the Sandbox SDK by the one or more processors to perform an update of the same version of the instance of the Sandbox SDK. Example 10. A procedure according to any one of Examples 1-9, further comprising: determining a second sandbox SDK running in a sandbox environment associated with a second application by the one or more processors; sending a hotfix request, including a specification of a version of the second sandbox SDK, by the one or more processors to the computing system; in response to the sending of the hotfix request, receiving a hotfix patch by the one or more processors and from the computing system to patch the second sandbox SDK; and applying the hotfix patch to the second sandbox SDK by the one or more processors to update the second sandbox SDK. Example 11. Computing device comprising: a memory configured to store a plurality of versions of a shared library installed on the computing device; one or more processors operatively coupled to the memory and configured to: select, from the plurality of versions of a shared library installed on the computing device, a most recent version of the shared library that precedes a target version of the shared library, as a base version of the shared library; send an update request, including a specification of the base version of the shared library, to a computing system; in response to the sending of the update request, receive a patch from the computing system to patch the base version of the shared library to the target version of the shared library;and apply the patch to the base version of the shared library to create the target version of the shared library. Example 12. Computing device according to Example 11, wherein the shared library is a static shared library that is not backward compatible with earlier versions of the shared library. Example 13. Computing device according to one of Examples 11 and 12, wherein the one or more processors are further configured to select the most recent version of the shared library installed on the computing device that precedes the target version of the shared library as the base version of the shared library, and are configured to select a highest version of the shared library installed on the computing device from the plurality of versions of the shared library installed on the computing device that is a lower version than the target version of the shared library as the base version of the shared library. Example 14. Computing device according to one of Examples 11-13, wherein a first application installed on the computing device and a second application installed on the computing device are linked to the base version of the shared library, and wherein the one or more processors for patching the base version of the shared library to produce the target version of the shared library are further configured to: update the first application to link to the target version of the shared library; and retain the base version of the shared library on the computing device for use by the second application. Example 15. Computing device according to any of Examples 11-14, wherein a first application is linked to a first version of the shared library installed on the computing device, and a second application is linked to a second version of the shared library installed on the computing device, the second version of the shared library being selected as the base version of the shared library, and wherein the one or more processors for patching the base version of the shared library to produce the target version of the shared library are further configured to: patch the second version of the shared library linked by the second application to produce the target version of the shared library; update the first application to link to the target version of the shared library;and to retain the second version of the shared library on the computing device for use by the second application. Example 16. Computing device according to any of Examples 11-15, wherein the one or more processors are further configured to: select, from a plurality of versions of a sandbox software development kit (SDK) installed on the computing device, a most recent version of the sandbox SDK that precedes a target version of the sandbox SDK, as a base version of the sandbox SDK; send a second update request, including a specification of the base version of the sandbox SDK, to a computing system; in response to the sending of the second update request, receive a second patch from the computing system to patch the base version of the sandbox SDK to the target version of the sandbox SDK; and apply the second patch to the base version of the sandbox SDK to produce the target version of the sandbox SDK. Example 17. Computing device according to any of Examples 11-16, wherein the one or more processors are further configured to: determine a derived identifier of an instance of a sandbox SDK running in a sandbox environment associated with an application; send a third update request to the computing system, specifying the derived identifier of the instance of the sandbox SDK; in response to the sending of the third update request, receive a third patch from the computing system to patch the instance of the sandbox SDK; and apply the third patch to the instance of the sandbox SDK to update the instance of the sandbox SDK, producing an updated instance of the SDK. Example 18. Computing device according to Example 17, wherein the derived identifier of the instance of the sandbox SDK is based at least partially on an identity of the application associated with the sandbox environment and a cryptographic hash of the instance of the sandbox SDK. Example 19. Computing device according to Example 17, wherein the one or more processors are further configured to apply the third patch to the instance of the Sandbox SDK in order to update the instance of the Sandbox SDK, and to: apply the third patch to the instance of the Sandbox SDK to perform an update of the same version of the instance of the Sandbox SDK. Example 20. A computer-readable storage medium encoded with instructions which, when executed by one or more processors of a computing device, cause the one or more processors to: select a most recent version of the shared library preceding a target version of the shared library as a base version of the shared library from a plurality of versions of a shared library installed on the computing device; send an update request, including a specification of the base version of the shared library, to a computing system; in response to the sending of the update request, receive a patch from the computing system to patch the base version of the shared library to the target version of the shared library;and applying the patch to the base version of the shared library to create the target version of the shared library.

[0106] As an example, and not as a limitation, such computer-readable storage media may include RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, flash memory, or any other storage medium that can be used to store desired program code in the form of instructions or data constructs and that can be accessed by a computer. Likewise, any such connection is properly referred to as a computer-readable medium.When instructions are transmitted, for example, from a website, server, or other remote source using coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, then the coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwave are included in the definition of medium. However, it should be understood that computer-readable storage media and data storage media do not include connections, carrier waves, signals, or other volatile media, but instead refer to non-volatile, tangible storage media.Disk and disc, as used herein, include Compact Disc (CD), Laser Disc, Optical Disc, Digital Versatile Disc (DVD), floppy disk, and Blu-ray Disc, whereby disks normally reproduce data magnetically, while discs reproduce data optically using lasers. Combinations of the foregoing are also included in the scope of computer-readable media.

[0107] Instructions can be executed by one or more processors, such as one or more digital signal processors (DSPs), general-purpose microprocessors, application-specific integrated circuits (ASICs), field-programmable logic arrays (FPGAs), or other equivalent integrated or discrete logic circuits. Accordingly, the term "processor" in this context can refer to any of the aforementioned structures or any other structure suitable for implementing the techniques described herein. Furthermore, some aspects of the functionality described herein can be provided in dedicated hardware and / or software modules. The techniques could also be implemented entirely in one or more circuits or logic elements.

[0108] The techniques of this disclosure can be implemented in a variety of devices or apparatuses, including a wireless handheld device, an integrated circuit (IC), or a set of ICs (e.g., a chipset). This disclosure describes various components, modules, or units to highlight functional aspects of devices configured to perform the disclosed techniques, but these do not necessarily require implementation by different hardware units. Rather, as described above, different units can be combined in a single hardware unit or provided by a collection of interoperable hardware units, including one or more processors, as described above in conjunction with suitable software and / or firmware.

[0109] Several examples have been described. These and other examples fall within the scope of the following claims. QUOTES INCLUDED IN THE DESCRIPTION

[0000] This list of documents cited by the applicant was automatically generated and is included solely for the reader's convenience. The list is not part of the German patent or utility model application. The DPMA accepts no liability for any errors or omissions. Cited patent literature

[0000] US 18 / 353.009

[0001]

Claims

[1] Procedure, encompassing: Selecting a most recent version of the shared library, preceding a target version of the shared library, as a base version of the shared library by one or more processors of a computing device and from a multitude of versions of a shared library installed on the computing device; Sending an update request, which includes a specification of the base version of the shared library, by one or more processors to a computing system; in response to the sending of the update request, the receipt of a patch by one or more processors and by the computing system to patch the base version of the shared library to the target version of the shared library; and Applying the patch by one or more processors to the base version of the shared library to create the target version of the shared library. [2] Method according to claim 1, wherein the shared library is a static shared library that is not backwards compatible with previous versions of the shared library. [3] Method according to one of claims 1 and 2, wherein selecting the most recent version of the shared library installed on the computing device, which precedes the target version of the shared library as the base version of the shared library, further comprises: Selecting a highest version of the shared library installed on the computing device from the multitude of versions of the shared library installed on the computing device that is a lower version than the target version of the shared library than the base version of the shared library by the one or more processors. [4] Method according to any one of claims 1-3, wherein a first application installed on the computing device and a second application installed on the computing device are linked to the base version of the shared library, and wherein patching the base version of the shared library to generate the target version of the shared library further comprises: Updating the first application by the one or more processors to link the first application with the target version of the shared library; and Retaining the base version of the shared library on the computing device by one or more processors for use by the second application. [5] A method according to any one of claims 1-4, wherein a first application is linked to a first version of the shared library installed on the computing device and a second application is linked to a second version of the shared library installed on the computing device, wherein the second version of the shared library is selected as the base version of the shared library, and wherein patching the base version of the shared library to produce the target version of the shared library further comprises: Patching the second version of the shared library linked by the second application through one or more processors to produce the target version of the shared library; Updating the first application by the one or more processors to link the first application with the target version of the shared library; and Retaining the second version of the shared library on the computing device by one or more processors for use by the second application. [6] Method according to any one of claims 1-5, further comprising: Selecting a most recent version of the Sandbox SDK, which precedes a target version of the Sandbox SDK, as a base version of the Sandbox SDK by one or more processors and from a variety of versions of a Sandbox Software Development Kit (SDK) installed on the computing device; Sending a second update request, which includes a specification of the base version of the Sandbox SDK, by one or more processors to a computing system; in response to the sending of the second update request, the receipt of a second patch by the one or more processors and by the computing system to patch the base version of the Sandbox SDK to the target version of the Sandbox SDK; and Applying the second patch to the base version of the Sandbox SDK by one or more processors to generate the target version of the Sandbox SDK. [7] Method according to any one of claims 1-6, further comprising: Determining a derived identifier of an instance of a sandbox SDK running in a sandbox environment associated with an application, by one or more processors; Sending a third update request, which includes a specification of the derived identifier of the instance of the Sandbox SDK, by one or more processors to the computing system; in response to the sending of the third update request, the receipt of a third patch by the one or more processors and by the computing system to patch the instance of the sandbox SDK; and Applying the third patch to the instance of the Sandbox SDK by one or more processors to update the instance of the Sandbox SDK in order to create an updated instance of the Sandbox SDK. [8] Method according to claim 7, wherein the derived identifier of the instance of the sandbox SDK is based at least partially on an identity of the application associated with the sandbox environment and a cryptographic hash of the instance of the sandbox SDK. [9] Method according to one of claims 7 and 8, wherein applying the third patch to the instance of the Sandbox SDK to update the instance of the Sandbox SDK comprises: Applying the third patch to the Sandbox SDK instance by one or more processors to update the same version of the Sandbox SDK instance. [10] Method according to any one of claims 1-9, further comprising: Determining a second sandbox SDK to run in a sandbox environment associated with a second application, using one or more processors; Sending a hotfix request, which includes a specification of a version of the second sandbox SDK, by one or more processors to the computing system; in response to the sending of the hotfix request, receipt of a hotfix patch by one or more processors and by the computing system to patch the second sandbox SDK; and Applying the hotfix patch to the second sandbox SDK by one or more processors to update the second sandbox SDK. [11] Computing device comprising: a memory configured to store multiple versions of a shared library installed on the computing device; one or more processors that are operatively coupled to the memory and configured to do the following: Selecting a most recent version of the shared library that precedes a target version of the shared library as a base version of the shared library from the multitude of versions of a shared library installed on the computing device; Sending an update request, which includes a specification of the base version of the shared library, to a computer system; in response to sending the update request, receiving a patch from the computing system to patch the base version of the shared library to the target version of the shared library; and Applying the patch to the base version of the shared library to create the target version of the shared library. [12] Computing device according to claim 11, wherein the shared library is a static shared library that is not backward compatible with previous versions of the shared library. [13] Computing device according to one of claims 11 and 12, wherein the one or more processors for selecting the most recent version of the shared library installed on the computing device, which precedes the target version of the shared library as the base version of the shared library, are further configured as follows: Selecting the highest version of the shared library installed on the computing device from the multitude of versions of the shared library installed on the computing device that has a lower version than the target version of the shared library than the base version of the shared library. [14] Computing device according to one of claims 11-13, wherein a first application installed on the computing device and a second application installed on the computing device are linked to the base version of the shared library, and wherein the one or more processors for patching the base version of the shared library in order to generate the target version of the shared library are further configured to: Updating the first application to link to the target version of the shared library; and Retain the base version of the shared library on the computing device for use by the second application. [15] Computing device according to any one of claims 11-14, wherein a first application is associated with a first version of the shared library installed on the computing device and a second application is associated with a second version of the shared library installed on the computing device, wherein the second version of the shared library is selected as the base version of the shared library, and wherein the one or more processors for patching the base version of the shared library to produce the target version of the shared library are further configured as follows: Patching the second version of the shared library linked by the second application to produce the target version of the shared library; Updating the first application to link to the target version of the shared library; and Retaining the second version of the shared library on the computing device for use by the second application. [16] Computing device according to any one of claims 11-15, wherein the one or more processors are further configured as follows: Selecting, from a variety of versions of a sandbox software development kit (SDK) installed on the computing device, a most recent version of the sandbox SDK that precedes a target version of the sandbox SDK as a base version of the sandbox SDK; Sending a second update request, which includes a specification of the base version of the Sandbox SDK, to a computing system; in response to sending the second update request, receiving a second patch from the computing system to patch the base version of the Sandbox SDK to the target version of the Sandbox SDK; and Applying the second patch to the base version of the Sandbox SDK to generate the target version of the Sandbox SDK. [17] Computing device according to any one of claims 11-16, wherein the one or more processors are further configured as follows: Determining a derived identifier of an instance of a sandbox SDK running in a sandbox environment associated with an application; Sending a third update request, which includes a specification of the derived identifier of the Sandbox SDK instance, to the computing system; in response to sending the third update request, receiving a third patch from the computing system to patch the instance of the sandbox SDK; and Applying the third patch to the Sandbox SDK instance to update the Sandbox SDK instance and create an updated instance of the SDK. [18] Computing device according to claim 17, wherein the derived identifier of the instance of the sandbox SDK is based at least partially on an identity of the application associated with the sandbox environment and a cryptographic hash of the instance of the sandbox SDK. [19] Computing device according to one of claims 17 and 18, wherein the one or more processors for applying the third patch to the instance of the Sandbox SDK in order to update the instance of the Sandbox SDK are further configured to: Applying the third patch to the Sandbox SDK instance to update the same version of the Sandbox SDK instance. [20] A computer-readable storage medium encoded with instructions which, when executed by one or more processors of a computing device, cause the one or more processors to do the following: Selecting, from a multitude of versions of a shared library installed on the computing device, a most recent version of the shared library that precedes a target version of the shared library as a base version of the shared library; Sending an update request, which includes a specification of the base version of the shared library, to a computer system; in response to sending the update request, receiving a patch from the computing system to patch the base version of the shared library to the target version of the shared library; and Applying the patch to the base version of the shared library to create the target version of the shared library.

Citation Information

Patent Citations

  • US18353009B2

  • US-PATENTANMELDUNGNR.18/353.009

Cited By

  • Independent publishing and serving of applications and software development kits

    US20250036384A1