CONTROL OF ENTERPRISE LICENSING ACROSS MOBILE DEVICES

System and methods of providing enterprise-wide licensing of apps that are deployed to mobile devices within the enterprise are provided. A method includes: make an enterprise app available to targeted users via an enterprise app store; determine a number of consumed licenses equals a maximum number of licenses for the enterprise app; and based on the determining, preventing non-licensed ones of the targeted users from obtaining the enterprise app from the enterprise app store while simultaneously permitting licensed ones of the targeted users to access the enterprise app in the enterprise app store.

FIELD OF THE INVENTION

The invention relates to control of mobile applications (apps) and, more particularly, to systems and processes which provide enterprise-wide licensing of apps that are deployed to mobile devices within the enterprise.

BACKGROUND

Mobile applications (apps) are software programs that run on mobile computing devices such as smartphones, tablet computers, laptop computers, etc. An enterprise app is a particular type of app that is privately available and used only within an enterprise/organization, as opposed to publicly available apps that are available to anyone in stores such as the Apple App Store and Google Play. Enterprise apps are typically designed to be used within the organization while meeting strict requirements for security and administration management

It is common to utilize an enterprise app store to catalog, distribute, and manage the apps within an enterprise. It is also common for users within the enterprise to have unlimited access to the enterprise apps that are published in the enterprise app store. Using this model, there is no limit to the number of times that an enterprise app may be downloaded from the enterprise app store. However, as enterprise apps have become more complex, the costs for development and maintenance per enterprise app have increased, such that unlimited distribution of an enterprise app within the enterprise can have disadvantageous cost consequences for the enterprise.

For example, an enterprise may contract with a third party to include the third party's service or library in an enterprise app on a cost per user/device basis. Specifically, the third party may provide code that is used in the enterprise app, and the enterprise may in turn agree to pay the third party a fixed fee for each deployment of the enterprise app. The result is that even though the enterprise app is owned by the enterprise and is only distributed internally within the enterprise, there is a real cost to the enterprise for each deployment of the enterprise app.

In another example, an enterprise may contract with a third party to include the third party's service or library in an enterprise app on fixed number of devices. Specifically, the third party may provide code that is used in the enterprise app, and the enterprise may purchase a specific number of licenses from the third party, thereby contractually defining a maximum number of devices to which the enterprise app may be deployed. Unlimited distribution of the enterprise app within the enterprise could result in violation of the contractual agreement.

Moreover, many large enterprises are distributed internal department models in which each department is responsible for its own profit and loss tracking. A particular department that pays to develop an enterprise app may bear a disproportionate amount of the overall cost of the app when users from other departments have unlimited access to the app. In this case, the department that invests the funding toward developing and maintaining the enterprise app may wish to assign intra-enterprise costs to other departments that utilize the app.

SUMMARY

In a first aspect of the invention there is a method implemented in a computer infrastructure having computer executable code tangibly embodied on a computer readable storage medium having programming instructions operable to: make an enterprise app available to targeted users via an enterprise app store; determine a number of consumed licenses equals a maximum number of licenses for the enterprise app; and based on the determining, preventing non-licensed ones of the targeted users from obtaining the enterprise app from the enterprise app store while simultaneously permitting licensed ones of the targeted users to access the enterprise app in the enterprise app store.

In a another aspect of the invention there is a computer program product comprising a computer readable storage medium having program instructions embodied therewith, the program instructions being executable by a server to cause the server to: publish an enterprise app to an enterprise app store such that it is available for download by targeted users; receive a request from a mobile device to run the enterprise app; determine whether a number of consumed licenses of the enterprise app is less than a maximum number of licenses of the enterprise app; and based on the determining, perform one of: permit the mobile device to run the enterprise app when the number of consumed licenses is less than the maximum number of licenses; and prevent the mobile device from running the enterprise app when the number of consumed licenses is not less than the maximum number of licenses.

In a another aspect of the invention there is a system, comprising: a CPU, a computer readable memory and a computer readable storage medium; program instructions to cause a server to receive a request from an agent on a mobile device to run a enterprise app; and program instructions to cause the server to send instruction to the agent to one of: permit the mobile device to run the enterprise app when a number of consumed licenses of the enterprise app is less than a maximum number of licenses of the enterprise app; and prevent the mobile device from running the enterprise app when the number of consumed licenses is not less than the maximum number of licenses. The program instructions are stored on the computer readable storage medium for execution by the CPU via the computer readable memory.

DETAILED DESCRIPTION

The invention relates to control of mobile applications (apps) and, more particularly, to systems and processes which provide enterprise-wide licensing of apps that are deployed to mobile devices within the enterprise. According to aspects of the invention, an enterprise system monitors and controls a number of deployments or concurrent uses of an enterprise app based on a pre-defined maximum number of intra-enterprise licenses for the particular enterprise app. In embodiments, the enterprise system leverages mobile application management (MAM) techniques to prevent a mobile device from downloading or running the enterprise app without a license. In this manner, implementations of the invention provide a license-based mechanism to control enterprise app usage within an enterprise.

System Environment

The present invention may be embodied as a system, method or computer program product. The present invention may take the form of a hardware embodiment, a software embodiment or a combination of software and hardware. Furthermore, the present invention may take the form of a computer program product embodied in any tangible storage medium of expression having computer-usable program code embodied in computer readable storage medium.

The computer readable storage medium is not a transitory signal per se, and is any tangible medium that can contain and store the program for use by or in connection with an instruction execution system, apparatus, or device. For example, the computer readable storage medium can comprise electronic, magnetic, optical, electromagnetic, infrared, and/or semiconductor systems and/or devices. More specific examples (a non-exhaustive list) of the computer readable storage medium include: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any combination thereof. Accordingly, the computer readable storage medium may be any tangible medium that can contain or store a program for use by or in connection with an instruction execution system, apparatus, or device of the present invention.

FIG. 1shows an illustrative environment10for managing the processes in accordance with the invention. The environment10includes a server12or other computing system. The server12can be a standalone server, which implements the processes described herein within a networking environment. The server12and/or processes performed by the server12can be integrated into the networking environment (e.g., cloud environment) such as shown inFIG. 2or any enterprise management system as described herein.

In somer embodiments, the server12can be representative of a mobile backend as a service (MBaaS), maintained by a service provider, e.g., Kony™. As should be understood by those of ordinary skill in the art, the MbaaS is a model for providing web and mobile application developers with a way to link their applications to backend cloud storage and APIs exposed by backend applications, while providing features such as user management, push notifications, and integration.

In embodiments, the server12can also be representative of other types of business enterprise servers, accessible via cloud based applications. For example, the server12can be a single, open standards-based mobile infrastructure platform. In embodiments, the single, open standards-based mobile infrastructure platform can unify multiple infrastructures/platforms together, including mobile application development platform (MADP), mobile backend as a service (MBaaS), Application Programming Interface (API) management, and platform as-a-service (PaaS) infrastructures. To this end, for example, the server12can be representative of Kony™ MobileFabric™ which is a converged mobile infrastructure that empowers enterprises to significantly reduce time to market. In this example, the server12can further integrate EMM/MAM server functions (e.g., management instances), as well as incorporate any number of enterprise stores. For example, the server12can maintain an enterprise app store and apply mobile application management (MAM) techniques to enterprise apps made available in the enterprise app store.

In embodiments, the server12communicates with one or more computer device(s)65via a computer network. The computer device(s)65can be, for example, a smartphone, tablet computer, laptop computer, personal digital assistant, or similar computing device that includes a mobile operating system, wireless communication antenna, processor, user interface, memory, etc. In an enterprise setting, the server12may be an enterprise server, and the devices65may download apps directly from an enterprise app store maintained by the server12.

The server12includes a computing device14which can be resident on a network infrastructure or computing device. The computing device14includes a processor20(e.g., a CPU), a memory22A, an I/O interface24, and a bus26. The bus26provides a communications link between each of the components in the computing device14. In addition, the computing device14includes a random access memory (RAM), a read-only memory (ROM), and an operating system (O/S). The computing device14is in communication with the external I/O device/resource28and a storage system22B. The I/O device28can comprise any device that enables an individual to interact with the computing device14(e.g., user interface) or any device that enables the computing device14to communicate with one or more other computing devices (e.g., devices65, etc.) using any type of communications link.

The processor20executes computer program code (e.g., program control44), which can be stored in the memory22A and/or storage system22B. In embodiments, the program control44of the computing device14of the server12controls the tool(s)50described herein which can be program modules, etc., comprising program code adapted to perform one or more of the processes described herein. The tool(s)50can be implemented as one or more program code in the program control44stored in memory22A as separate or combined modules. Additionally or alternatively, the tool(s)50may be implemented as separate dedicated special use processors or a single or several processors to provide the functionality described herein. While executing the computer program code, the processor20can read and/or write data to/from memory22A, storage system22B, and/or I/O interface24. In this manner, the program code executes the processes of the invention.

The program code can include computer program instructions stored in a computer readable storage medium. The computer program instructions may also be loaded onto the computer14, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer. Moreover, any methods provided herein in the form of flowcharts, block diagrams or otherwise may be implemented using the computer program instructions, implemented on the computer readable storage medium.

In embodiments, the server12is an enterprise mobility management (EMM) server that is configured to perform mobile device management (MDM) and mobile application management (MAM) functions. The tool(s)50may comprise an MDM module that enables the server12to manage devices65that are registered with the server12. A purpose of MDM is to ensure that all the devices and device users are in compliance with the IT policies set by organization. In an MDM-based system, an agent (e.g., a software program) resides on each mobile device (e.g., device65) and communicates with the MDM module of the EMM server (e.g., server12). In an MDM-based system, the operating system (OS) of the mobile device is programmed to permit the MDM module of the server, via the agent, to cause the operating system of the mobile device to perform certain functions, such as: implement device policies and set automated, rule-based actions for policy violations; restrict usage of device features (e.g., camera, microphone, etc.); and locate, lock, wipe or reset any enrolled device. The agent interacts with the OS of the mobile device via application program interfaces (APIs) and appropriate programming.

The tool(s)50may comprise an MAM module that enables the server12to control certain aspects of enterprise apps on mobile devices65that are registered with the server12. The MAM module may operate an enterprise app store to distribute private (enterprise) apps and public (non-enterprise) apps to mobile devices65within the enterprise. The MAM module may, for example, restrict enterprise app usage on mobile devices65based on idle timeout, geo-fencing, and other parameters. The MAM module may also, for example, lock, wipe, erase and expire enterprise apps on a mobile device65. MAM functions may be implemented using the agent that resides on the mobile device65, wherein the agent communicates with the MAM module and interacts with the OS of the device via APIs. In implementations of the invention, the server12can perform MAM functions such as: sending a command to an agent on a mobile device65to remotely uninstall a particular enterprise app from the mobile device65; and sending a command to an agent on the mobile device65to prevent the mobile device65from opening/running the enterprise app.

According to aspects of the invention, the tool(s)50allow an administrator define a maximum number of licenses for each enterprise app contained in an enterprise app store. The tool(s)50monitor the number of deployments of the enterprise app from the enterprise app store, with each deployment counting as one license of the enterprise app. A deployment may be, for example, a download and install of the enterprise app on a device65from an enterprise app store maintained by the server12. When the number of licenses of the enterprise app equals the maximum number of licenses, the tool(s)50automatically modify the enterprise app store to prevent any more deployments of the enterprise app. In this manner, the server12limits the number of deployments of the enterprise app to not exceed the pre-defined maximum number of licenses.

In one embodiment, when the number of licenses equals the maximum number of licenses, the tool(s)50control the enterprise app store so that users who do not have a license cannot see an icon for the enterprise app in a display of the enterprise app store on their device. In another embodiment, when the number of licenses equals the maximum number of licenses, the tool(s)50modify the icon of the enterprise app in the enterprise app store so that users who do not have a license can see the enterprise app exists but that it is currently unavailable for them to download from the enterprise app store. In both embodiments, when the number of licenses equals the maximum number of licenses, users who do have a license can see the enterprise app in the enterprise app store in a normal manner, e.g., to facilitate updates of the enterprise app.

In one embodiment, the enterprise app is available to any targeted user in the enterprise on a first-come, first-served basis until the maximum number of licenses of the enterprise app is reached. In another embodiment, a first subset of the maximum number of licenses is reserved and a second subset of the maximum number of licenses is available on a first-come, first-served basis. The licenses in the first subset may be reserved for a particular device, user, or group of users, e.g., as defined by an enterprise admin via an interface with the server12.

According to aspects of the invention, the tool(s)50are configured with the ability to revoke a license (or licenses) from a particular device65, user, or group of users. For example, when the number of licenses equals the maximum number of licenses, the tool(s)50may revoke a license from one user and then provide that license to another user. Revoking may include, for example, force uninstalling the enterprise app from a user's mobile device65. The uninstalling may be initiated and forced by the tool(s)50using MAM techniques, e.g., using an MAM/MDM agent on the mobile device. In this manner, implementations of the invention may accommodate an urgent request for the enterprise app from an unlicensed user.

In accordance with another aspect of the invention, the tool(s)50monitor a number of concurrent uses (active sessions) of the enterprise app, with each concurrent use counting as one license of the enterprise app. The tool(s)50receive a request from a mobile device when the enterprise app is invoked on one of the devices65. The tool(s)50monitor a number of used licenses (e.g., concurrently open sessions of the app) and either: permit the device65to open the enterprise app when the number of used licenses is less than a maximum number of licenses, or deny the device65permission to open the enterprise app when the number of used licenses is equal to the maximum number of licenses. In this manner, the server12limits the number of concurrent uses of the enterprise app to not exceed the pre-defined maximum number of licenses. This implementation may include providing a priority mechanism for determining application licensing on devices65that allows, e.g., (i) a license to be revoked from running users, (ii) the purchase of a temporary one time use license for a session, or (iii) time limit allowing the user to run the application if no licenses are available. The systems and processes described herein are unique because per-use license offers are not offered on mobile applications today that incorporate the reserve and overflow licensing rules.

FIG. 2shows an exemplary cloud computing environment200. Cloud computing is a computing model that enables convenient, on-demand network access to a shared pool of configurable computing resources, e.g., networks, servers, processing, storage, apps, and services, that can be provisioned and released rapidly, dynamically, and with minimal management efforts and/or interaction with a service provider. In embodiments, one or more aspects, functions and/or processes described herein may be performed and/or provided via cloud computing environment200, e.g., intra-enterprise licensing of enterprise apps, as described herein.

As depicted inFIG. 2, cloud computing environment200includes cloud resources205that are made available to client devices65a . . . nvia a network215, such as the Internet. Client devices65a . . . nmay be similar to device65ofFIG. 1, and may comprise any suitable type of network-enabled computing device, such as handheld computers (e.g., smartphone, tablet computer, laptop computer, personal digital assistant, etc.).

Cloud resources205can include a variety of hardware and/or software computing resources, such as servers, databases, storage, networks, applications, and platforms as shown, for example, in the combination ofFIGS. 1 and 2. Cloud resources205may be on a single network or a distributed network across multiple cloud computing systems and/or individual network enabled computing devices. Cloud resources205are typically provided and maintained by a service provider so that a client does not need to maintain resources. In embodiments, cloud resources205may include at least one server12ofFIG. 1that is specifically adapted to perform one or more of the functions and/or processes described herein.

Cloud computing environment200may be configured such that cloud resources205provide apps to client devices65a . . . n, or other computing devices through a variety of service models, such as any combination of Software as a Service (SaaS), Platforms as a service (PaaS), Infrastructure as a Service (IaaS), and/or any other cloud service models. Cloud resources205may be configured, in some cases, to provide multiple service models to client devices65a . . . n, as described herein. Cloud computing environment200may be configured such that cloud resources205provide computing resources to client devices65a . . . n, through a variety of deployment models, such as any combination of public, private, community, hybrid, and/or any other cloud deployment model.

One or more cloud resources205may be structured in multiple layers or functional abstraction layers, e.g., a firmware and hardware layer, a kernel layer, an infrastructure service layer, a platform service layer, and an application service layer. The firmware and hardware layer may include generic contributing nodes (e.g., data centers, computers, and storage devices) geographically distributed across the Internet and provide the physical resources for implementing the upper layers of the cloud service provider. The kernel layer may include an operating system and/or virtual machine manager that host the cloud infrastructure services. The kernel layer may control and communicate with the underlying firmware and hardware layer through one or more hardware/firmware-level application programming interfaces (APIs). The infrastructure service layer may include virtualized resources, such as virtual machines, virtual storage (e.g., virtual disks), virtual network appliances (e.g., firewalls), and so on. The infrastructure service layer may also include virtualized services, such as database services, networking services, file system services, web hosting services, load balancing services, message queue services, map services, e-mail services, and so on. The platform service layer may include platforms and application frameworks that provide platform services, such as an environment for running virtual machines or a framework for developing and launching a particular type of software application. The application service layer may include a software application installed on one or more virtual machines or deployed in an application framework in the platform service layer. The software application can also communicate with one or more infrastructure service components (e.g., firewalls, databases, web servers, etc.) in the infrastructure service layer.

FIG. 3shows an illustrative system100for managing processes in accordance with the invention. As discussed below,FIG. 3can also be representative of a flow diagram and/or processes of the invention. In embodiments, the system100includes an EMM server102comprising an MAM module104and data storage system106. The EMM server102, the MAM module104, and the data storage system106may be similar to server12, tool(s)50, and storage system22B, respectively, ofFIG. 1. The EMM server102hosts an enterprise app store108that is accessible by any desired number of enterprise devices110via a network112. The EMM server102may also comprise at least one of an MDM module and an MCM module, although such modules are not the subject of the present disclosure.

With continued reference toFIG. 3, each of the devices110may be similar to device65ofFIG. 1. In embodiments, each device110includes an agent111(e.g., a software module) that receives MAM instructions from the MAM module104, sends data to the MAM module104, and that causes the OS of the device110to perform MAM actions (e.g., do not open an app, uninstall an app from the device, etc.) in accordance with instructions and/or policies received from the MAM module104.

In embodiments, the data storage system106stores a catalog of apps that are included in the enterprise app store108. These may include public (non-enterprise) apps and private (enterprise) apps. An admin (e.g., system administrator) of the enterprise may access the MAM module104via a computer-based interface to selectively define properties of apps that are stored in the app store catalog in the storage system106. For each respective app these properties may include, but are not limited to: whether the app is published or unpublished in the app store108; targeting of the app; and a maximum number of licenses for the app. As described in greater detail herein, the maximum number of licenses for the app may be used by the MAM module in limiting distribution or concurrent use of an enterprise app amongst devices110that are registered with the enterprise.

FIG. 4shows an exemplary computer-based user interface (UI)400that is presented by the EMM server102. The UI400lists enterprise apps402a-nstored in the app store catalog in the storage system106. For each enterprise app402a-n, the UI400indicates the app name (column404), a user-defined maximum number of licenses for the app (column406), and a publish status of the app (column408). Other columns may be present in the UI400but are not pertinent to the present description.

The publish status of an app, as shown at column408, indicates whether the particular app is published in the enterprise app store108. A published app is viewable by devices110in the enterprise app store108, whereas an unpublished app is not viewable by devices110in the enterprise app store108. An enterprise admin may publish an app to the app store108or unpublish an app from the app store108by providing input to column406of the UI400. For example, the admin may change this status to publish or unpublish by double clicking on the column406for a respective app and making an appropriate selection.

Another property that can be defined for each respective enterprise app402a-nvia the UI400is a target. Targeting defines which users can see an enterprise app in the enterprise app store108via their respective devices110. Only targeted users for a particular enterprise app are shown the enterprise app when they access the enterprise app store via their device110, whereas non-targeted user are not shown the enterprise app when they access the enterprise app store via their device110. An enterprise app can be targeted to individual users or groups of users associated with domains. Different enterprise apps can have different targets, as defined by the enterprise admin via input to the MAM module104. An enterprise admin may define targets for a particular app (e.g.,402a) by selecting the app (e.g., double clicking on the app name in column404), which causes the system to navigate to a different UI that permits the admin to select individual users or groups of users to be targets of the app.

According to aspects of the invention, another property that can be defined for each respective app402a-nvia the UI400is a maximum number of licenses. In embodiments, selecting (e.g., mouse clicking or double clicking) a particular field in column406causes the system to navigate to a licensing UI for the app associated with the selected field.

FIG. 5shows an exemplary licensing UI500in accordance with aspects of the invention. In the example shown inFIG. 5, the UI500shows the licensing data for app402bbased on the admin selecting the field associated with app402bin column406in the UI400ofFIG. 4.

In embodiments, the UI500includes a selectable field502by which the admin can provide input to the system to define a maximum number of licenses for the enterprise app (e.g., app402bin this example). The field502may comprise a drop down menu with selections such as “Unlimited”, “Custom”, and any desired integer greater than zero. “Unlimited” indicates that the maximum number of licenses for the app is essentially infinity, although for practical purposes the system defines the maximum number of licenses as a sufficiently high number that is reasonably expected to never be equaled by the number of distributions or concurrent uses of the app within the enterprise (e.g., one trillion or greater). “Custom” indicates that the admin can specify an exact number for the maximum number of licenses for the app. In the example, shown inFIG. 5, the admin has selected “Custom” at field502and input a value “7” at field504, meaning that the maximum number of licenses for app402bis seven. In addition to “Unlimited” and “Custom” the system may be programmed to display any desired numbers as selections as field502, e.g., 10, 50, 100, etc.

In embodiments, the UI500includes an indication of the number of licenses consumed (e.g., used) at field506and the number of licenses available at field508. In one embodiment, the number of licenses consumed equals the number of installs of the app (e.g., app402b) on the various devices110, and the number of licenses available equals the maximum number of licenses (field502) less the number of licenses consumed (field506). In another embodiment, the number of licenses consumed equals the number instances of the app currently running (active sessions of the app) across all devices110. In the example, shown inFIG. 5, currently only one enterprise has the app402binstalled on their device110, such that the number of licenses consumed equals “1” and the number of licenses available equals “6” (i.e., 7 less 1). As described in greater detail herein, the MAM module104ofFIG. 3monitors when each app is installed and uninstalled from any device110, and keeps a running count of the current number of installs of the each enterprise app. The number of licenses consumed at field506corresponds to the current number of installs for a particular app.

In embodiments, the UI500may also include a field509aby which the admin can provide input to designate a number of reserved licenses and a field509bby which the admin may provide input to designate one or more devices, users, or groups of users associated with the number of reserved licenses. Designating a number of reserved licenses provides a mechanism to ensure that certain users are provided with a license to the app402b. The number of reserved licenses is a user defined number that is less than or equal to the maximum number of licenses defined at field502. The one or more devices, users, or groups of users associated with the reserved licenses are a subset of the targeted users or group for the app, and may be defined by providing input similar to that for targeting the app. The number of reserved licenses may be defined as equal to a number of devices or a number of users of the one or more devices, users, or groups of users associated with the reserved licenses. In this manner, these devices or users are ensured of having a license of the app402b. When a number of reserve licenses is specified, the remaining non-reserved licenses (i.e., the maximum number of licenses less the number of reserve licenses) are made available to any targeted user of the app402bon a first-come, first-served basis in the manner described herein.

Still referring toFIG. 5, in embodiments the UI500includes a listing510of each currently installed instance of the enterprise app associated with a user of one or more of the devices110. In other embodiments, the listing510shows an entry for each currently running instance (active session) of the app on all devices in the system. The listing510may show, for example, a Display Name, User ID, Source, and Status for each currently installed instance of the enterprise app. The example shown inFIG. 5indicates that user “ajay” has one instance of the app installed, e.g., on one of the devices110. When there are plural users with the app currently installed on their devices110(e.g., the number of licenses consumed indicated at field506is greater than one), the listing510shows a separate line for each user. The listing510may also be configured to show device ID of each device110on which the app is installed to increase the level of granularity that is viewable and controllable by the admin at the UI500.

With continued reference toFIG. 5, according to aspects of the invention, the admin may provide input to the UI500that causes the MAM module104to revoke the license of the app from any user (or device) shown in the listing510. For example, the admin may select a particular user (or device) in the listing via a selectable field512, and then select a recall field514. Based on receiving such input via the UI500, the MAM module104sends an instruction to the agent111residing on the corresponding device110, wherein the instruction causes the agent111to interact with the OS of the device110to cause the OS to uninstall the app from the device110. Upon successful uninstall of the app from the device100, the agent111on the particular device110sends a message to the MAM module104indicating the name of the app, the ID of the user or device110, and that the app has been uninstalled. Upon receipt of this message from the agent, the MAM module104decrements the number of licenses consumed (e.g., at field506) and increments the number licenses available (e.g., at field508) for the particular app.

In accordance with aspects of the invention, when the number of licenses consumed equals the maximum number of licenses for an enterprise app, the MAM module104automatically controls the app store108to prevent the app from being be downloaded to any additional devices110that do not already have a license for the app. In embodiments, when the number of licenses consumed equals the maximum number of licenses for an enterprise app, the system determines a subset of users that are targeted but do not possess a license (do not have the app installed on their device). This subset of users may be determined automatically by the system based on knowledge of the entire pool targeted users minus the licensed users (i.e., those targeted users that currently have the app on their device).

In a first example of preventing distribution of the enterprise app when the number of licenses consumed equals the maximum number of licenses for the enterprise app, the system may automatically de-target the determined subset of users that are targeted for the app but that do not currently have a license. By de-targeting these users, the system makes it so that these users can no longer see the app in the app store. In this example, when one or more licenses subsequently become available, the de-targeted users are then automatically re-targeted by the system so that they can see the app in the app store.

In a second example of preventing distribution of the enterprise app when the number of licenses consumed equals the maximum number of licenses for the enterprise app, the system maintains the determined subset of users as targeted, but automatically causes their device to display a modified icon of the app in the app store. The modified icon shows these users that the app is in the app store, but that it is currently not available for download. In this example, when one or more licenses subsequently become available, the modified icon is replaced with the normal icon of the app in the app store, so that the determined subset of users can once again obtain the app via the app store.

In both examples, when the number of licenses consumed equals the maximum number of licenses for an enterprise app, licensed users (i.e., targeted users that currently have the app installed on their device) can always see the app in the app store, and initially non-targeted users (i.e., users that were not targeted for the app in the first place) never see the app in the app store. In this manner, implementations of the invention control the distribution of an enterprise app within an enterprise to not exceed a user-defined maximum number of licenses.

The MAM module104controlling of the app store108based on maximum license number is demonstrated inFIGS. 6A-D, which show exemplary screen shots of exemplary devices110a-cof system100. In the example illustrated inFIGS. 6A-D, the maximum number of licenses for app402bis seven, devices110aand110bare targeted for app402b, and device110cis not targeted for app402b, all of which may be defined by an enterprise admin providing input to UI400and UI500as described herein. At the time illustrated inFIG. 6A, the number of consumed licenses of app402bis six, e.g., by devices not shown. Still referring toFIG. 6A, devices110aand110bdo not have app402binstalled, and each displays an icon600of the app402bas available in the app store (e.g., enterprise app store108) since these devices are targeted and the number of available licenses is greater than zero, i.e., the number of consumed licenses (6) is less than the maximum number of licenses (7). With continued reference toFIG. 6A, device110cdoes not display an icon of the app402bin the app store, despite the number of available licenses being greater than zero, because device110cis not targeted for this particular app.

Continuing the example with reference toFIGS. 6B and 6C, device110ainstalls the app402bfrom the app store, the agent111on device110asends a message to the MAM module104indicating the install of the app402b, and the MAM module104increments the number of consumed licenses of the app402bfrom six to seven. With the number of available licenses now being zero, i.e., the number of consumed licenses (7) equals the maximum number of licenses (7), the MAM module104automatically controls the app store so that the app402bis no longer available to other targeted devices, such as device110b, that do not already have a license for the app402b. In one embodiment illustrated inFIG. 6B, the MAM module104performs such control of the app store by causing the device110bto not show the icon600for the app402bin the display of the app store. In another embodiment illustrated inFIG. 6C, the MAM module104performs such control of the app store by causing the device110bto show a modified icon602of the app402bin the display of the app store, where the modified icon602indicates that the app402bis published in the app store but currently not available for download (e.g., out of stock). In both embodiments, e.g.,FIGS. 6B and 6C, device110astill displays the icon600of the app402bin the app store because device110apossesses one of the consumed licenses for the app402b. In this manner, the user of device110acan obtain updates of the app402bvia the app store.

Continuing the example with reference toFIG. 6D, another device (not shown) uninstalls the app402b, the agent on the other device sends a message to the MAM module104indicating the uninstall of the app402b, and the MAM module104decrements the number of consumed licenses of the app402bfrom seven to six. The uninstall may be a voluntary uninstall initiated by the user of the not shown device, or may be a forced uninstall initiated by the admin using UI500. In either event, with the number of available licenses now being greater than zero, i.e., the number of consumed licenses (6) being less than the maximum number of licenses (7), the MAM module104automatically controls the app store so that the app402bis again available to targeted devices that do not have a license for the app402b, such as device110b. For example, as shown inFIG. 6D, the device110bshows an icon of the app402bas available for download from the app store.

In an exemplary use case of the system and method ofFIGS. 3-5, an enterprise admin adds a custom developed enterprise app to the enterprise app store catalog maintained by the MAM module104of the EMM server102. In this example, the enterprise app was developed through a contract that the sales department funded out of their budget and includes libraries that are licensed from a third party on a per use basis, meaning that the sales department must pay a fee to the third party for each and every installation of the enterprise app on devices110. A maximum number of licenses is determined, e.g., based on a total cost that the sales department is willing to pay to the third party for licensing and the cost per license. Using aspects described herein, the admin defines the maximum number of licenses of the enterprise app, e.g., using the UIs400and500. The license control functionality described herein ensures that once the number of installs of the enterprise app equals the maximum number of licenses of the enterprise app, no new users will have access to install the enterprise app (which would otherwise cause unplanned costs to the sales department). A particularly advantageous result of the license control functionality described herein is that the enterprise (e.g., the admin) need not specifically decide in advance every single user that will receive the enterprise app—instead, the admin can target a group of users that is larger than the maximum number of licenses of the enterprise app, and maintain control of the number of deployments of the app within that targeted group without deciding which specific users in the group obtain the app.

In another exemplary use case of the system and method ofFIGS. 3-5, the enterprise has contracted with a third party app developer to create an enterprise app. The contract terms indicate that the enterprise has purchased1000licenses of the enterprise app, and that the enterprise pays additional fees to the third party app developer for each deployment beyond the1000maximum. The enterprise admin adds the enterprise app to the enterprise app store maintained by the MAM module104of the EMM server102and sets the maximum number of licenses to 1000 via UIs400and500. The admin targets the app to any desired devices, users, or groups of users within the enterprise, and may use a first-come, first-served basis, reserved licenses, or a mixture of both, as described herein. In all instances, the license control functionality described herein ensures that the number of installations of the enterprise app never exceeds 1000, thereby advantageously helping to avoid unexpected contract violations and/or cost overruns.

FIG. 7shows an alternative implementation and use of the system100′ in accordance with aspects of the invention. In the implementation described with respect toFIGS. 3-5, the MAM module104of the EMM server102manages distribution of an enterprise app by controlling (e.g., limiting) the ability of a device110to download the enterprise app from the app store108when the number of consumed licenses equals the maximum number of licenses. In the implementation described with respect toFIG. 7, any number of targeted users may download an enterprise app (e.g., enterprise app402b) from the app store108onto their devices110, and the MAM module104of the EMM server102manages concurrent uses of the app to not exceed the maximum number of licenses. As such, in the implementation described with respect toFIG. 7, the number of instances of the enterprise app installed on devices110may exceed the maximum number of licenses, but the number of simultaneous uses of the enterprise app on the devices110cannot exceed the maximum number of licenses.

In the implementation described with respect toFIG. 7, the admin may define properties of enterprise apps in a manner similar to that described with respect toFIGS. 4 and 5, e.g., using UI400and UI500. For example, using the UI500, an admin may define a maximum number of licenses for any given app, and may also view a number consumed licenses, available licenses, and details of which users/devices currently possess one of the consumed licenses. In the context of this embodiment, a consumed license corresponds to an instance of the app running on a device (i.e., an active session of the app on a device).

According to aspects of the invention, the MAM module104controls the number of simultaneous uses of an enterprise app by requiring each device110to request a license for the app when the device110attempts to use the app, e.g., when a user starts (i.e., initiates running) the app on the device110. In embodiments, when a user of a device110starts the enterprise app (e.g., by tapping an icon of the app on a touch screen of the device is a conventional fashion), the agent111on the device110sends a message to the MAM module104. The message may include a userID and/or deviceID associated with the device110, a name of the enterprise app being started, and a request for a license for the enterprise app.

Upon receipt of the message from the device110, the MAM module104determines whether the number of currently consumed licenses equals the maximum number of licenses for this app. On the one hand, when the number of consumed licenses is less than the maximum number of licenses for this app (i.e., there is an available license), the MAM module104sends a message to the agent111on the device110, wherein the message causes the agent111to interact with the OS of the device110to permit the OS to run the app. The message may include a policy and a license associated with the app. The MAM module104also increments a count of consumed licenses for this app based on the sending a license to the device110.

On the other hand, when the number of consumed licenses equals the maximum number of licenses for this app (i.e., there are no licenses available), the MAM module104sends a message to the agent111on the device110, wherein the message causes the agent111to interact with the OS of the device110to prevent the OS from running the app. In this situation, the agent111may interact with the OS to cause the device110to display a notification that there are no licenses available and that the app cannot be opened/run.

Upon receiving the notification that there are no licenses available and that the app cannot be opened/run, the user may simply wait a period of time and try again later to open the app. This is because one or more licenses may subsequently become available when other users close (stop running) the same app on other devices110. In embodiments, when a device110that possesses a license for the app closes the app (i.e., stops running the app on the device110), the agent111on the device110sends a message to the MAM module104. The message may include a userID and/or deviceID associated with the device110, and a name of the enterprise app being closed. Upon receipt of this message, the MAM module104decrements the count of consumed licenses of the app, such that another user can now request and obtain the newly freed up license.

In another embodiment, upon receiving the notification that there are no licenses available and that the app cannot be opened/run, the user can respond to the notification by asking for a reservation. In embodiments, based upon user input at the device110, the agent111sends a message to the MAM module104requesting a reservation for a license of the app. Upon receipt of the message from the device110, the MAM module104adds the userID and/or device ID to a reservation queue for the app. When the license for the app subsequently becomes available (i.e. because the app was closed on another device), the MAM module104selects one of the users from the reservation queue and sends a message to the agent111on the device110associated with the selected user, wherein the message grants a license to the device110(e.g., causes the agent111to interact with the OS of the device110to permit the OS to run the app). The message to the device110of the selected user may also cause the agent111to interact with the OS to cause the device110to display a notification that a license has been granted and the app is now available to run.

In accordance with aspects described herein, the MAM module104may select a user from the reservation queue using any suitable selection criteria. In one embodiment, the MAM module104treats the reservation queue as a first-in-first-out queue, such that the user that has been waiting the longest time for a license is the selected user that receives the next available license. In another embodiment, each user may be assigned a pre-defined user priority, e.g., a ranking on a numerical scale, which the MAM module104uses in determining which user to select from the reservation queue for the next available license. For example, a first user may have a higher assigned ranking than a second user, such that the first user will be provided the next available license even though the second user has been waiting longer in the reservation queue.

In further aspects of the implementation described with respect toFIG. 7, the MAM module104may revoke a license from a device110that is currently running the app. For example, an admin may use the UI500(ofFIG. 5) to select a user, and provide an input to revoke the license from the user. Based on this input, the MAM module104sends a message to the agent111on the device110of the selected user, wherein the message causes the agent111to interact with the OS to cause the OS to close (stop running) the app on the device110. Upon closing the app, the agent111on the device110sends a message back to the MAM module104indicating that the app has been closed, and the MAM module104increments the count of available licenses for this app.

In accordance with additional aspects of the implementation described with respect toFIG. 7, the MAM module104may revoke a license from a lower priority user when the MAM module104receives a request for a license from a higher priority user and no licenses are currently available for the higher priority user. The user priorities may be similar to those described with respect to the reservation queue, e.g., assigned by the enterprise admin based on desired reasons for relative priority rankings of users within the enterprise.

In an exemplary scenario, a requesting user attempts to open the app on their device110, which causes the agent111on the device to send a message to the MAM module104requesting a license for the app. In this example, the number of consumed licenses equals the maximum number of licenses, such that there are no licenses available for the requesting user. As described with respect toFIG. 5, the MAM module104may maintain a list of all users that currently have a license for any given app, and that list may include the priority ranking of each user that has a license of the app. Upon determining that there are no licenses available for the requesting user, the MAM module104compares the requesting user's priority to the respective priority of each user in the list of users that currently posses a license for the app. In embodiments, when the requesting user's priority is higher than that of a user that currently possesses a license, the MAM module104revokes the license from the lower priority user that currently possesses the license and grants the license to the higher priority requesting user. The MAM module104may send a message to the device of the lower priority user that currently possesses the license, wherein the message causes the agent111to interact with the OS to cause the device110to display a notification that the license for the app will be revoked at a specified time, e.g., in thirty minutes, or any other time that is predefined by the admin in the properties of the app.

In accordance with additional aspects of the implementation described with respect toFIG. 7, the system can be configured such that a user that is informed that their licenses is being revoked can be provided with the option to purchase a one-time use temporary license to continue using the app. This transaction can be handled using mobile payments inside the EMM server and providing a single-use license that does not count toward the count of currently used licenses. The cost of the single-use license may be defined by the admin, e.g., as a property of each enterprise app, and may be determined by any suitable measure.

Accordingly, the invention solves many problems and provides functionalities which can be implemented on a computing infrastructure as described further herein. For example, the systems and processes described herein allow the enterprise to assign a priority to users based on specific user, device type, or user group to grant a priority to a license of a particular application. As described herein, the respective user priorities may be used by the MAM module in determining which user to select from a reservation queue, and in determining to revoke a license from a lower priority user and grant that license to a higher priority user. The priorities may be based on device type, for example when it is critical that one type of device (e.g., an inventory scanner) have a higher priority than another type of device (e.g., a PDA).

The systems and processes described herein allow a policy to be set up to reserve specific licenses to targeted users. For example, as described herein, a subset of the maximum number of licenses may be reserved for a sub-group of the targeted users for an enterprise app. Reserved licenses may be used in both the distribution embodiment (FIGS. 3-5) and the concurrent use embodiment (FIG. 7).

The systems and processes described herein allow the assignment of a pool of licenses that may float from user to user based on active sessions. For example, consumed licenses may correspond to running instances (i.e., active sessions) of the app as described with respect toFIG. 7, and the maximum number of licenses may be available to all targeted users on a first-come, first-served basis.

The systems and processes described herein allow an administrator to revoke a license from a user for a specific device or for all of the user's devices. For example, a single user may have plural mobile devices registered with the enterprise, e.g., a smartphone, a tablet computer, and a laptop computer. The user may have the enterprise app installed on all their devices. In embodiments, when the admin can select the user in the UI500and revoke all the licenses from the user in one revoke input. The revoking may comprise uninstalling the app from all the user's devices, or closing the app on all the user devices. At another level of granularity, the UI500may display each device associated with a particular user, and the admin may provide input to revoke a license from a single device of a user while leaving a license unaffected on another device of the same user.

The systems and processes described herein allow the admin to immediately revoke a license from a device. For example, an admin may use UI500to revoke a license from a device listed in the UI500. The revoking can be performed in both the distribution embodiment and the concurrent use embodiment.

The systems and processes described herein track how many simultaneous sessions are active to determine if the license is available. For example, as described herein, the agent on each device informs the MAM module when the app is initiated on a device and when the app is closed on a device, and using this information the MAM module maintains a count of number of running instances of the app across all devices. The MAM module may determine a number of available licenses based on the maximum number of licenses and the number of consumed licenses (number of running instances) of the app.

The systems and processes described herein provide policy settings allowing the administrator to set a time limit within an application if all the licenses are reserved. The user will receive a notification based on their priority of a time limit until the application is stopped and the license revoked.

The systems and processes described herein allow the administrator to set a reserve priority for a user or group. This priority is used to determine if they have the ability to initially reserve a license if all licenses are reserved.

The systems and processes described herein allow an administrator to set a running priority for a user group. This priority is used once the application has been started to determine the order in which users or groups are terminated in the event licenses are required.

The systems and processes described herein provide a reserve license of a user requesting to use the application. The reserve license should and preferably must be higher than a user's running priority that is currently using the application to steal the license of the running user.

The systems and processes described herein display a reservation time to the requester if the license will be revoked from a running user.

The systems and processes described herein allow the user to purchase a temporary single use license if none are available.

The systems and processes described herein allow a running user to purchase a temporary, single use license if their licenses are to be revoked and they wish to continue.

Flow Diagrams

Any flow diagrams, sequence diagrams, sequence of steps, swim lane diagrams, block diagrams, etc. should be understood as representative of implementing processing steps of the invention which can be executed, for example, from either a server, in a client-server relationship, or they may run on a user workstation with operative information conveyed to the user workstation or a cloud environment. Furthermore, steps of the processes of the invention may be implemented using a computer readable storage medium having program code for use by or in connection with a computer or any instruction execution system. The software and/or computer program product can be implemented in the environments ofFIGS. 1-7, e.g., configured or provisioned on a computer infrastructure as shown inFIG. 1or can be in a cloud environment ofFIG. 2or can be a computer program product as further described below or any combinations thereof, including within the one of the systems ofFIGS. 3 and 7, and aspects of the methods are described using reference numbers of elements from these systems. Moreover, the flow diagrams, sequence diagrams, sequence of steps, swim lane diagrams, block diagrams, etc. should be understood as illustrative of the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present invention. The specific steps noted herein may occur out of the order noted, depending upon the functionality involved.

FIG. 8shows a method in accordance with a first embodiment of the invention. At step805, a system (e.g., system100comprising EMM server102running MAM module104) receives a definition of targeted users for an enterprise app. Step805may comprise the system receiving input from an admin via an enterprise app management interface, such as UI400, e.g., in a manner similar to that described with respect toFIG. 4.

At step810, the system receives a definition of a maximum number of licenses for the enterprise app of step805. Step810may comprise the system receiving input from an admin via an enterprise app management interface, such as UI500, e.g., in a manner similar to that described with respect toFIG. 5.

At step815, the system makes the enterprise app available to targeted users (defined at step805) via an enterprise app store. For example, the system may publish the enterprise app to the app store in a manner such that only the targeted users can see the enterprise app in the app store, while non-targeted users cannot see the enterprise app in the app store, e.g., as described with respect toFIGS. 6A-D.

At step820, the system increments a consumed license count for the enterprise app when a targeted user installs the enterprise app on their mobile device. For example, an agent on the user's mobile device sends a message to the system when the user installs the enterprise app on their mobile device. Based on the indication that the enterprise app has been installed on a mobile device, the system increments a consumed license counter, e.g., as described with respect toFIG. 5. Step820may be repeated until the number of consumed licenses equals the maximum number of licenses, e.g., any of the targeted users may install the enterprise app in their device(s) as long as the number of consumed licenses is less than the maximum number of licenses.

At step825, the system determines the number of consumed licenses equals the maximum number of licenses. At step830, based on the number of consumed licenses equaling the maximum number of licenses, the system prevents non-licensed targeted users from obtaining the enterprise app via the app store. For example, as described with respect toFIGS. 6A-D, the system may take action such that an icon that represents the app no longer appears in the app store for the non-licensed targeted users. In another example, as described with respect toFIGS. 6A-D, the system may take action such that a modified icon that represents the app is not available appears in the app store for the non-licensed targeted users. During this time when the number of consumed licenses equals the maximum number of licenses, licensed targeted users (i.e., users who currently have the enterprise app installed on their device) can still see the icon of the enterprise app in the app store.

At step835, the system obtains a consumed license. In embodiments, the system may obtain a consumed license when a licensed user (i.e., a user who currently has the enterprise app installed on their device) voluntarily uninstalls the enterprise app from one or more of their devices. In this situation, the agent(s) on the one or more devices send a message to the system indicating the uninstall, and the system decrements the consumed license count at step840based on the number of licenses that were uninstalled. The process returns to step815after step840since the consumed license count has been decremented and is thus no longer equal to the maximum number of licenses.

In embodiments, the system may obtain a consumed license at step835when a license is revoked from a user. For example, as described with respect toFIGS. 3-5, an admin may revoke a license from a user, e.g., using UI500. The revoking by the admin causes the agent(s) on the one or more devices to force uninstall the enterprise app from the device(s). In this situation, the agent(s) on the one or more devices send a message to the system indicating the uninstall, and the system decrements the consumed license count at step840based on the number of licenses that were uninstalled. The process returns to step815after step840since the consumed license count has been decremented and is thus no longer equal to the maximum number of licenses.

FIG. 9shows a method in accordance with a second embodiment of the invention. At step905, a system (e.g., system100′ comprising EMM server102running MAM module104) receives a definition of targeted users for an enterprise app. Step905may comprise the system receiving input from an admin via an enterprise app management interface, such as UI400, e.g., in a manner similar to that described with respect toFIG. 4.

At step910, the system receives a definition of a maximum number of licenses for the enterprise app of step905. Step910may comprise the system receiving input from an admin via an enterprise app management interface, such as UI500, e.g., in a manner similar to that described with respect toFIG. 5.

At step915, the system makes the enterprise app available to targeted users (defined at step805) via an enterprise app store. For example, the system may publish the enterprise app to the app store in a manner such that only the targeted users can see the enterprise app in the app store, while non-targeted users cannot see the enterprise app in the app store. In the embodiment ofFIG. 9, distribution of the enterprise app is not limited at the app store level, and the enterprise app may be installed on any number of mobile devices registered with the enterprise.

At step920, the system receives a request from a mobile device to run the enterprise app on the mobile device. In embodiments, when the user attempts to open/run the enterprise app on their mobile device110, an agent111on the mobile device sends a message to the MAM module104, as described with respect toFIG. 7. The message includes a request to run the enterprise app.

At step925, the system determines the number of consumed licenses. In embodiments, the system maintains a counter of consumed licenses, the value of the counter being equal to the number of concurrent active sessions of the enterprise app across all mobile devices in the enterprise. The system also stores the user defined value of maximum number of licenses that was designated at step910, e.g., as shown in UI500. When the system receives a new request to run the app, as at step920, the system compares the number of consumed licenses to the maximum number of licenses.

When, at step930, the number of consumed licenses is less than the maximum number of licenses, this indicates that a license is available for the requesting user, and then at step935the system permits the mobile device of the requesting user to run the enterprise app. This may be performed in the manner described with respect toFIG. 7, e.g., by the MAM module104sending a message to the agent111on the device110, wherein the message causes the agent111to interact with the OS of the device110to permit the OS to run the enterprise app. Step935may also include the system incrementing the counter of consumed licenses for this enterprise app.

When, at step930, the number of consumed licenses is not less than the maximum number of licenses, this indicates that no licenses are available for the requesting user, and then at step940the system prevents the mobile device of the requesting user from running the enterprise app. This may be performed in the manner described with respect toFIG. 7, e.g., by the MAM module104sending a message to the agent111on the device110, wherein the message causes the agent111to interact with the OS of the device110to prevent the OS from running the enterprise app. In this situation, the agent111may interact with the OS to cause the device110to display a notification that there are no licenses available and that the app cannot be opened/run.

One possible action after the denial of running the enterprise app at step940is that the requesting user may wait and try to open the app at a later time. This is indicated the arrow returning to step920.

Another alternative action after the denial of running the enterprise app at step940is that the requesting user can request a reservation for the enterprise app. For example, as described with respect toFIG. 7, at step945the system may receive a reservation request from the agent on the mobile device of the requesting user. Step945may include the system placing the requesting user in a reservation queue, as described with respect toFIG. 7. At step950, the system waits until a license for the enterprise app becomes available, either by a user voluntarily closing the enterprise app in their device or by a revoke (i.e., the system forcing a mobile device to close the enterprise app), as described with respect toFIG. 7. At step955, when a license becomes available, the system selects a user from the reservation queue and grants the newly available license to the selected user. The system may select the user from the reservation queue based on respective priorities that are based on at least one of user, device type, user group.

Another alternative action after the denial of running the enterprise app at step940is that the system immediately initiates the process to revoke a license from a current user for the purpose of granting the license to the requesting user. At step960, the system determines that the requesting user has a higher priority than a current user of the enterprise app, e.g., as described with respect toFIG. 7. At step965, the system automatically revokes the license from the lower priority user that currently possesses the license, and at step970the system automatically grants the license to the higher priority requesting user. The revoking may be performed in the manner described herein, e.g., the system sending instruction to the agent on the mobile device of the lower priority user to force close the enterprise app, the system receiving a message from that agent that the enterprise app is now closed, and the system sending instruction to the agent on the mobile device of the higher priority user to open the enterprise app.

The foregoing examples have been provided for the purpose of explanation and should not be construed as limiting the present invention. While the present invention has been described with reference to an exemplary embodiment, changes may be made, within the purview of the appended claims, without departing from the scope and spirit of the present invention in its aspects. Also, although the present invention has been described herein with reference to particular materials and embodiments, the present invention is not intended to be limited to the particulars disclosed herein; rather, the present invention extends to all functionally equivalent structures, methods and uses, such as are within the scope of the appended claims.