# US 9,436,814 B2 · Fail-safe licensing for software applications

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 9,436,814 B2
- Document ID: US9436814B2
- Status: Granted
- Kind: B2
- Application number: 14/426,157
- Filed: 2013-01-22
- Published: 2015-07-30
- Granted: 2016-09-06
- Earliest claimed: 2013-01-22
- Assignees: Empire Technology Development LLC
- Applicants: Empire Technology Development LLC
- Inventors: Ezekiel Kruglick
- Web page: https://patentgrep.com/patent/US9436814B2

## CPC

- G06F 21/105: {Arrangements for software license management or administration, e.g. for managing licenses at corporate level}
- G06F 21/121: {Restricting unauthorised execution of programs}
- G06F 21/1078: {Logging; Metering}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Technologies are generally described to provide a fail-safe licensing system. An example system may include a quorum detection module of an instance of a software program configured to query a licensing queue corresponding to the software program for messages to determine a number of active instances of the software program. Based on a comparison of the determined number of active instances and a maximum number of allowed instances of the software program, the quorum detection module may be configured to determine whether the instance of the software program is authorized. In response to a determination that the instance of the software program is authorized, the quorum detection module may generate a unique instance identification tag and post a message to the licensing queue, where the message includes an indication that the instance of the software program is active and an indication of the generated unique instance identification tag.

## Claims

### Claim 1

A method to manage licensing of a software program, the method comprising:
querying, by an instance of the software program running on a computing device, a licensing queue for messages;
receiving, by the instance of the software program, a result based at least in part on the querying of the licensing queue;
determining, by the instance of the software program, a number of active instances of the software program based at least in part on the received result;
determining, by the instance of the software program, whether the instance of the software program is authorized based at least in part on the determined number of active instances;
generating, by the instance of the software program, a unique instance identification tag in response to a determination that the instance of the software program is authorized;
posting, by the instance of the software program, a message to the licensing queue, in response to the determination that the instance of the software program is authorized, the message including an indication that the instance of the software program is active and an indication of the generated unique instance identification tag; and
archiving, by the instance of the software program, the message posted to the licensing queue to determine billing for actual usage of the software program, wherein the licensing queue is associated with a vendor for the software program corresponding to the instance, and the vendor is enabled to observe and record usage of the software program by querying archived messages.

### Claim 2 (depends on 1)

The method of claim 1, further comprising:
terminating execution of the instance of the software program, by the instance of the software program, in response to a determination by the instance of the software program that the instance of the software program is unauthorized.

### Claim 3 (depends on 1)

The method of claim 1, further comprising:
re-querying, by the instance of the software program, the licensing queue for messages at a particular time interval;
receiving, by the instance of the software program, an additional result based at least in part on the re-querying of the licensing queue;
updating, by the instance of the software program, the determined number of active instances of the software program based at least in part on the received additional result;
updating, by the instance of the software program, the determination of whether the instance of the software program is authorized based at least in part on the updated determined number of active instances; and
posting, by the instance of the software program, an additional message to the licensing queue, in response to a determination that the instance of the software program is authorized, the additional message including an indication that the instance of the software program is active and an indication of the generated unique instance identification tag.

### Claim 4 (depends on 1)

The method of claim 1, wherein the determining, by the instance of the software program, whether the instance of the software program is authorized based at least in part on the determined number of active instances includes:
determining a maximum number of allowed instances of the software program; and
comparing the determined maximum number of allowed instances of the software program to the determined number of active instances of the software program.

### Claim 5 (depends on 4)

The method of claim 4, wherein the determining, by the instance of the software program, whether the instance of the software program is authorized based at least in part on the determined number of active instances further includes:
determining that the instance of the software program is authorized in response to a determination that the determined number of active instances of the software program is less than the determined maximum number of allowed instances of the software program.

### Claim 6 (depends on 1)

The method of claim 1, wherein the received result includes an indication that there are one or more messages in the licensing queue and wherein the determining, by the instance of the software program, the number of active instances of the software program based at least in part on the received result includes:
receiving, by the instance of the software program, the one or more messages from the licensing queue, the one or more messages each including an indication of an instance identification tag;
counting, by the instance of the software program, a number of unique instance identification tags based at least in part on the received one or more messages; and
determining, by the instance of the software program, the number of active instance of the software program based at least in part on the counted number of unique identification tags.

### Claim 7 (depends on 1)

The method of claim 1, wherein the querying, by the instance of the software program, the licensing queue for messages includes:
determining, by the instance of the software program, whether the licensing queue exists; and
establishing, by instance of the software program, the licensing queue in response to a determination that the licensing queue does not exist.

### Claim 8 (depends on 1)

The method of claim 1, wherein the instance of the software program is executed on a virtual machine running on the computing device.

### Claim 9

A machine readable non-transitory medium with instructions stored thereon that, when executed by one or more processors, operatively enable a quorum detection module of an instance of a software program to:
query a licensing queue corresponding to the software program for messages;
determine a number of active instances of the software program based at least in part on a result that is received in response to the query;
determine whether the instance of the software program is authorized based at least in part on the determined number of active instances;
generate a unique instance identification tag in response to a determination that the instance of the software program is authorized;
post a message to the licensing queue, in response to the determination that the instance of the software program is authorized, the message including an indication that the instance of the software program is active and an indication of the generated unique instance identification tag; and
archive the message Posted to the licensing queue to determine billing for actual usage of the software program, wherein the licensing queue is associated with a vendor for the software program corresponding to the instance, and the vendor is enabled to observe and record usage of the software program by querying archived messages.

### Claim 10 (depends on 9)

The machine readable non-transitory medium of claim 9, wherein the stored instructions that, when executed by one or more processors, further operatively enable the quorum detection module to:
determine a maximum number of allowed instances of the software program; and
compare the determined maximum number of allowed instances of the software program to the determined number of active instances of the software program.

### Claim 11 (depends on 10)

The machine readable non-transitory medium of claim 10, wherein the stored instructions that, when executed by one or more processors, further operatively enable the quorum detection module to:
authorize the instance of the software program in response to a determination that the determined number of active instances of the software program is less than the determined maximum number of allowed instances of the software program.

### Claim 12 (depends on 9)

The machine readable non-transitory medium of claim 9, wherein the result includes an indication that there are one or more messages in the licensing queue and wherein the stored instructions that, when executed by one or more processors, further operatively enable the quorum detection module to:
read the one or more messages from the licensing queue, the one or more messages each including an indication of an instance identification tag;
count a number of unique instance identification tags based at least in part on the read one or more messages; and
determine the number of active instance of the software program based at least in part on the counted number of unique identification tags.

### Claim 13 (depends on 9)

The machine readable non-transitory medium of claim 9, wherein the stored instructions that, when executed by one or more processors, further operatively enable the quorum detection module to:
determine whether the licensing queue exists; and
establish the licensing queue in response to a determination that the licensing queue does not exist.

### Claim 14 (depends on 9)

The machine readable non-transitory medium of claim 9, wherein the stored instructions that, when executed by one or more processors, further operatively enable the quorum detection module to:
query the licensing queue for unread messages received within a selected time interval.

### Claim 15

An apparatus comprising:
a hardware storage device;
an instance of a software program;
a licensing queue corresponding to the software program and stored in the hardware storage device; and
a quorum detection module coupled to the software program, the quorum detection module operatively enabled to:
query a licensing queue for messages;
determine a number of active instances of the software program based at least in part on a result of the query;
determine whether the instance of the software program is authorized based at least in part on the determined number of active instances;
generate a unique instance identification tag in response to a determination that the instance of the software program is authorized;
post a message to the licensing queue, in response to the determination that the instance of the software program is authorized, the message including an indication that the instance of the software program is active and an indication of the generated unique instance identification tag; and
archive the message posted to the licensing queue to determine billing for actual usage of the software program, wherein the licensing queue is associated with a vendor for the software program corresponding to the instance, and the vendor is enabled to observe and record usage of the software program by querying archived messages.

### Claim 16 (depends on 15)

The apparatus of claim 15, wherein the quorum detection module is further operatively enabled to:
determine a maximum number of allowed instances of the software program; and
compare the determined maximum number of allowed instances of the software program to the determined number of active instances of the software program.

### Claim 17 (depends on 16)

The apparatus of claim 16, wherein the quorum detection module is further operatively enabled to:
determine that the instance of the software program is authorized in response to a determination that the determined number of active instances of the software program is less than the determined maximum number of allowed instances of the software program.

### Claim 18 (depends on 15)

The apparatus of claim 15, wherein the result includes an indication that there are one or more messages in the licensing queue and wherein the quorum detection module is further operatively enabled to:
read the one or more messages from the licensing queue, the one or more messages each including an indication of an instance identification tag;
count a number of unique instance identification tags based at least in part on the read one or more messages; and
determine the number of active instance of the software program based at least in part on the counted number of unique identification tags.

### Claim 19 (depends on 15)

The apparatus of claim 15, wherein the quorum detection module is further operatively enabled to:
determine whether the licensing queue exists; and
establish the licensing queue in response to a determination that the licensing queue does not exist.

### Claim 20 (depends on 15)

The apparatus of claim 15, wherein the quorum detection module is further operatively enabled to:
query the licensing queue for unread messages received within a particular time interval.
