Abstract:
A peer to peer software license management system that is capable of temporarily relocating available software licenses is disclosed. Any node of the peer to peer software license management system (i.e., any computer in which the software license management system software of the invention is installed) is allowed to act as a license provider, or act as a license consumer, or act as both a license provider and a license consumer. Any node of the peer to peer software license management system has the capacity to temporarily borrow a software license from another node, and to re-serve the borrowed software license to yet another node as if the node that borrowed the software license were itself a license provider. Each node of the peer to peer software license management system operates as both a license provider and a license consumer.

Description:
RELATED APPLICATION 
       [0001]    This patent application is related to another patent application by the same inventors entitled “Software License Management System That Functions In A Disconnected Or Intermittently Connected Mode” filed on even date herewith as U.S. patent application Ser. No. [Docket No. H0017806-0104]. The related patent application is assigned to the assignee of the present patent application. The disclosure of the related patent application is hereby incorporated by reference into the present application as if fully set forth herein. 
       TECHNICAL FIELD 
       [0002]    This disclosure relates generally to software license management systems and more specifically to a peer to peer software license management system for temporarily relocating available software licenses. 
       BACKGROUND 
       [0003]    Software license management is an essential service for any commercial software product to ensure the legitimate usage of the software product and to ensure the proper distribution of the software product. Software license providers (“license providers”) are typically located within software that is located on a computer server. Software license consumers (“license consumers”) are typically software applications that are located on a computer workstation or computer server. Existing software license management systems are based upon the ability of the software provider to communicate securely with the software license consumers. 
         [0004]    A license provider has a finite number of software licenses (“licenses”) stored within the computer server on which the license provider is located. The license provider typically has an encrypted license file that contains the names of the licenses and the names of the customers (i.e., license consumers) that are authorized to receive the licenses. 
         [0005]    When a license consumer desires to obtain particular software licenses, the license consumer may attempt to acquire the licenses from one or more license providers. The license consumer sends a license request to one or more license providers. A license provider that can satisfy the license consumer&#39;s request (1) licenses the requested license (or licenses) to the license consumer, (2) marks the requested license (or licenses) as being in use by the license consumer, and (3) establishes and maintains a secure communication link with the license consumer. 
         [0006]    The license provider maintains the secure communication link with the license consumer until the license consumer releases the license (or licenses) or the link with the license consumer fails due to a hardware or software fault, thereby implicitly releasing the license (or licenses). A license that is marked as being in use is not available to other license consumers until the license has been released. Licenses that are released re-enter the available license pool of the license provider. 
         [0007]    The encrypted license file in the software license management system may be stored on a disk drive or other memory device such as a Univeral Serial Bus (USB) key or smartcard. As previously mentioned, the encrypted license file contains the names of the authorized license consumers and the names of the licenses that they are authorized to receive. The software license management system is capable of reading the authorization information in the encrypted license file and serving the requested licenses to the license consumers that have the proper authorization. 
         [0008]    The software license management system typically resides at a location that is remote from the location of the software applications that it licenses. This provides a more convenient centralized administration of the license process. In existing software license management systems, the license provider (located on a license server) is located at a remote location with respect to the license consumer (located on a client server). 
         [0009]    Dedicated license servers are not efficient in mobile computing scenarios. For example, dedicated license servers are not efficient at supporting software product demonstrations or training operations at remote non-fixed locations. Prior art approaches to providing software licenses in mobile computing scenarios include providing (for an additional fee) (1) short-term or dedicated entitlement to support mobile use, (2) portable entitlement in the form of hardware keys, (3) temporary offline stand-alone licenses, and (4) node-locked licenses that are not network-based. 
         [0010]    It would be desirable to have a more efficient method for providing software license entitlement in mobile computing scenarios. It would be desirable to have a software license management system that has the ability to temporarily relocate available software licenses in mobile computing scenarios. 
       SUMMARY 
       [0011]    The present invention provides a peer to peer software license management system that is capable of temporarily relocating available software licenses. The present invention comprises a peer to peer software license management system in which any node (i.e., any computer in which the software license management system software of the invention is installed) is allowed to act as a license provider, or act as a license consumer, or act as both a license provider and a license consumer. 
         [0012]    Any node of the peer to peer software license management system of the invention has the capacity (1) to temporarily borrow a software license from another node, and (2) re-serve the borrowed software license to yet another node as if the node that borrowed the software license were itself a license provider. Each node of the peer to peer software license management system of the invention operates as both a license consumer and a license provider. 
         [0013]    Other technical features may be readily apparent to one skilled in the art from the following figures, descriptions, and claims. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0014]    For a more complete understanding of this disclosure, reference is now made to the following description, taken in conjunction with the accompanying drawings, in which: 
           [0015]      FIG. 1  illustrates a schematic representation of an exemplary first computer node of the peer to peer software license management system of the invention; 
           [0016]      FIG. 2  illustrates a schematic representation of a first computer node of the invention accessing a software license from a second computer node of the invention; 
           [0017]      FIG. 3  illustrates a schematic representation of a first computer node of the invention temporarily borrowing a software license from a second computer node of the invention; 
           [0018]      FIG. 4  illustrates a schematic representation of a third computer node of the invention accessing a temporarily borrowed software license from the first computer node of the invention; 
           [0019]      FIG. 5  illustrates a flow chart showing the steps of an advantageous embodiment of a method of the present invention; and 
           [0020]      FIG. 6  illustrates a flow chart showing the steps of another advantageous embodiment of a method of the present invention. 
       
    
    
     DETAILED DESCRIPTION 
       [0021]      FIGS. 1 through 6  and the various embodiments used to describe the principles of the present invention in this patent document are by way of illustration only and should not be construed in any way to limit the scope of the invention. Those skilled in the art will understand that the principles of the invention may be implemented in any type of suitably arranged device or system. 
         [0022]    Every computer that participates in the peer to peer software license management system of the invention is referred to as a node. In a peer to peer system, each node can accept incoming connections from other nodes and each node can initiate outgoing connections to other nodes. This feature distinguishes a peer to peer system from a client-server system. In a client-server system, only client nodes can initiate outgoing connections and only server nodes can accept incoming connections. 
         [0023]      FIG. 1  illustrates a schematic representation of an exemplary first computer node  100  (also designated as node  1 ) of the peer to peer software license management system of the invention. First computer node  100  is representative of each of the other nodes in the system (not shown in  FIG. 1 ). As shown in  FIG. 1 , first computer node  100  comprises an application process  110 . Application process  110  comprises at least one program  120  and a licensing library  130 . The licensing library  130  contains one or more software licenses. The program  120  is capable of accessing the licensing library  130  through a licensing application programming interface (designated as “Licensing API” in  FIG. 1 ). 
         [0024]    First computer node  100  also comprises a continuously running program that is referred to as a license service  140  or a license daemon  140 . The license daemon  140  is connected to and in communication with the licensing library  130 . The licensing library  130  is capable of accessing the license daemon  140  to pass on to the license daemon  140  any license requests that are made by the program  120 . 
         [0025]    First computer node  100  also comprises an encrypted license file  150 . The encrypted license file  150  contains the names of authorized license consumers and the names of the licenses that they are authorized to receive. The license daemon  140  is connected to and in communication with the encrypted license file  150 . The license daemon  140  is capable of reading the authorization information in the encrypted license file  150  and serving the requested licenses to the license consumers that have the proper authorization. 
         [0026]    First computer node  100  also comprises an address file  160  that contains computer addresses of remotely located licensing nodes in the peer to peer system. The license daemon  140  is connected to and in communication with the address file  160 . The license daemon  140  is capable of communicating with the remotely located nodes in the peer to peer system. 
         [0027]    The standard computer hardware of computer node  100  (central processing unit, memory units, etc.) and the standard computer software of computer node  100  (operating system, etc.) together with the software of the peer to peer software license management system of the invention (license daemon, license file, licensing library, etc.) comprises a software license management controller that performs the functions of the present invention. 
         [0028]      FIG. 2  illustrates a schematic representation of the first computer node  100  accessing a software license from a second computer node  200  of the peer to peer system of the invention. Second computer node  200  comprises an application process  210  that comprises at least one program  220  and a licensing library  230 . Second computer node  200  also comprises its own license daemon  240  and encrypted license file  250 . Although not shown in  FIG. 2 , the second computer node  200  also comprises an address file that contains computer addresses of remotely located licensing nodes in the peer to peer system. 
         [0029]      FIG. 2  illustrates how the first computer node  100  may access a software license from the second computer node  200  in the peer to peer system. When the at least one program  120  makes a license request, the licensing library  130  sends the request to the license daemon  140 . The license daemon  140  first attempts to access (or to “check out”) the requested license from its own encrypted license file  150  (not shown in  FIG. 2 ). If the requested license is in the encrypted license file  150 , then the license daemon  140  provides the requested license to the program  120  from the licensing library  130 . 
         [0030]    If the requested license is not in the encrypted license file  150  (i.e., the requested license is not locally available), then the license daemon  140  passes the license request to the known remote nodes (which are also referred to as remote hosts).  FIG. 2  illustrates the connection and communication between license daemon  140  of the first computer node  100  and the license daemon  240  of the second computer node  200 . 
         [0031]    The license daemon  240  accesses its own encrypted license file  250  to determine whether the requested license is located within the second computer node  200 . If the requested license is located within the encrypted license file  250 , then the license daemon  240  marks the requested license as being in use and grants the license request. The license daemon  240  provides the requested license to the license daemon  140  from the licensing library  230 . The license daemon  140  provides the requested license to the licensing library  130  and to the requesting program  120 . 
         [0032]    If the requested license is not located within the encrypted license file  250  in the second computer node  200 , then the license daemon  240  reports that finding back to the license daemon  140  in the first computer node  100 . 
         [0033]    When the license daemon  140  sends out a license request to the other nodes in the peer to peer network, the other nodes will cascade the request to other nodes in their local address list (if any) until the requested license is found or the license search fails due the lack of availability of the requested license on any node that is connected in the peer to peer network. 
         [0034]    In the search for a requested license, a success or a failure will be reported back to the requesting program  120  via the API link. A successfully accessed license will eventually be returned to the remote computer node from which the license came (1) when the requesting program  120  releases the license via the API link or (2) when the requesting program  120  terminates. Returning the license to the remote computer node from which the license came requires the local license daemon  140  to track where the license originated and to communicate with the license daemon on the remote computer node (e.g., license daemon  240  in our present example) to inform the license daemon on the remote computer node of the eventual release of the requested license. After the requested license has been released, the license daemon on the remote computer node that provided the requested license from its local encrypted license file releases the license back into the local pool of licenses that are eligible for a subsequent license. 
         [0035]    In order prevent abuse of license entitlement, the license daemon of the computer node that provides the requested license generates and sends an occasional “all is well” signal (referred to as a “heartbeat”) to all of the other computer nodes that are participating in a license access (also referred to as a license “checkout”). If for some reason the heartbeat signal is not acknowledged as expected, then the heartbeat signal is said to have failed. If the heartbeat signal fails, then all license daemons that are involved in the license checkout process immediately consider that the license checkout process has failed. 
         [0036]    The failure of the heartbeat signal results in the requesting program (e.g., program  120 ) being informed via the API link that a license that it had successfully requested is now unavailable and that the previously successful license request has been terminated. The license daemon that provided the requested license from its local encrypted license file then releases the license back into the local pool of licenses that are eligible for a subsequent license. No heartbeat signal is required when a license request is satisfied from a local license file. 
         [0037]    In addition to being checked out, licenses can also be borrowed. Borrowing a license entails relocating a license from one license file to another license file for a predetermined (but finite) period of time. 
         [0038]    A license daemon in a computer node can request to borrow one or more licenses from another computer node. The license borrowing process is conceptually similar to a normal license check out process from one node to another. But there is no heartbeat signal maintained between the two nodes that are involved in the borrowing transaction. This is so that the borrowing node can be disconnected from the network of the donor node and continue to use the borrowed license while the borrowing node is offline (i.e., not connected to the peer to peer network). The donor node considers that the borrowed license has been checked out. But the borrowing node considers the borrowed license to be available for check out by programs that are running locally on the borrowing node. 
         [0039]      FIG. 3  illustrates how the first computer node  100  may temporarily borrow a software license from the second computer node  200  in the peer to peer system. When the at least one program  120  makes a license request, the licensing library  130  sends the request to the license daemon  140 . The license daemon  140  first attempts to access (or to “check out”) the requested license from its own encrypted license file  150  (not shown in  FIG. 3 ). If the requested license is in the encrypted license file  150 , then the license daemon  140  provides the requested license to the program  120  from the licensing library  130 . 
         [0040]    If the requested license is not in the encrypted license file  150  (i.e., the requested license is not locally available), then the license daemon  140  may issue a request to borrow the license from one of the known remote nodes (which are also referred to as remote hosts).  FIG. 3  illustrates the connection and communication between license daemon  140  of the first computer node  100  and the license daemon  240  of the second computer node  200 . Although not shown in  FIG. 3 , the second computer node  200  comprises a previously mentioned address file that contains computer addresses of remotely located licensing nodes in the peer to peer system. 
         [0041]    The license daemon  240  accesses a donor license file  270  to determine whether the requested license is a license that is authorized to be “loaned” out as a borrowed license. If the requested license is located within the donor license file  270 , then the license daemon  240  marks the requested license as being in use for the requested time period and grants the license request. The license daemon  240  provides the requested borrowed license to the license daemon  140  from the licensing library  230 . The license daemon  140  stores the requested borrowed license in a borrowed licenses file  170  and allows the requesting program  120  to access the requested borrowed license. 
         [0042]    If the requested borrowed license is not located within the donor license file  270 , then the license daemon  240  reports that finding back to the license daemon  140  in the first computer node  100 . 
         [0043]    When the license daemon  140  sends out a request to borrow a license to the other nodes in the peer to peer network, the other nodes will cascade the request to other nodes in their local address list (if any) until the requested license is found or the license search fails due the lack of availability of the requested license on any node that is connected in the peer to peer network. 
         [0044]    As previously mentioned, when the license daemon  240  sends the borrowed license to the license daemon  140 , the license daemon  140  stores the borrowed license in the borrowed licenses file  170 . The borrowed licenses that are stored in the borrowed licenses file  170  in the first computer node  100  appear as normal local licenses during the requested time period (i.e., the “lifetime” of the borrowed license). 
         [0045]    After the borrowed license is successfully stored in the borrowed licenses file  170  in the first computer node  100 , the network connection between the license daemon  140  of first computer node  100  and the license daemon  240  of the second computer node  200  is severed. The severance is schematically represented in  FIG. 3  with the scissors symbol  290 . The borrowing node (first computer node  100  in our present example) may continue to use the borrowed license while offline (i.e., not connected to the peer to peer network). 
         [0046]    The borrowing node (first computer node  100  in our present example) may check the borrowed license back into the donor node (second computer node  200  in our present example) at any time the borrowing node and the donor node are connected on a common network. Checking the borrowed license back into the donor node ends the period of borrowing. 
         [0047]    To secure the borrowing transaction and enforce the time limit for the borrowed license, it is necessary to specify a maximum borrowing time limit at the time when the borrowed license is borrowed. The maximum borrowing time limit (also referred to as the “timeout” value) is tracked independently by both the donor node and the borrowing node. If the timeout value expires before the borrowed license is returned to the donor node from the borrowing node, then the borrowed license will automatically be disabled on the borrower node and will automatically be enabled on the donor node (i.e., checked back into the donor node). 
         [0048]    During the time that the borrowed license is still within the timeout value, the borrowed license remains valid. Furthermore, a valid borrowed license is considered to be available for checkout from the borrowing node. Due to the peer to peer capabilities of the network, the borrowed license is not restricted to checkout only by programs that are running on the borrowing node. That is, the borrowed license may be served to other connecting nodes that request it. This means that a license can be temporarily relocated from a donor node (that acts as a license server) to a borrowing node (that subsequently goes offline with respect to the donor node) and the borrowing node can subsequently act as a license server for the borrowed license. 
         [0049]      FIG. 4  illustrates how the first computer node  100  may act as a license server for a borrowed license and serve the borrowed license to a third computer node  300  in the peer to peer system. Third computer node  300  comprises an application process  310  that further comprises at least one program  320  and a licensing library  330 . Third computer node  300  also comprises its own license daemon  340  and address file  360 . Although not shown in  FIG. 4 , the third computer node  300  also comprises an encrypted license file. 
         [0050]    When the at least one program  320  makes a license request, the licensing library  330  sends the request to the license daemon  340 . The license daemon  340  first attempts to access (or to “check out”) the requested license from its own encrypted license file (not shown in  FIG. 4 ). If the requested license is in the encrypted license file, then the license daemon  340  provides the requested license to the program  320  from the licensing library  330 . 
         [0051]    If the requested license is not in the encrypted license file (i.e., the requested license is not locally available), then the license daemon  340  may issue a request to access (or “check out”) the license from one of the known remote nodes (which are also referred to as remote hosts).  FIG. 4  illustrates the connection and communication between license daemon  340  of the third computer node  300  and the license daemon  140  of the first computer node  100 . Although not shown in  FIG. 4 , the first computer node  100  comprises an encrypted license file  150  and an address file  160  that contains computer addresses of remotely located licensing nodes in the peer to peer system. 
         [0052]    The license daemon  140  accesses the borrowed licenses file  170  to determine whether the requested license is available. If the requested license is located within the borrowed licenses file  170 , then the license daemon  140  marks the requested license as being in use and grants the license request. The license daemon  140  provides the requested license to the licensing daemon  340  from the borrowed licenses file  170 . The license daemon  340  provides the borrowed license to the licensing library  330  and to the requesting program  320 . 
         [0053]    If the requested license is not located within the borrowed licenses file  170 , then the license daemon  140  reports that finding back to the license daemon  340  in the third computer node  300 . 
         [0054]    When the license daemon  340  sends out a request to access a license to the other nodes in the peer to peer network, the other nodes will cascade the request to other nodes in their local address list (if any) until the requested license is found or the license search fails due the lack of availability of the requested license on any node that is connected in the peer to peer network. 
         [0055]    As previously mentioned, when the license daemon  140  sends the borrowed license to the license daemon  340 , the license daemon  340  provides the borrowed license to the program  320 . The first computer node  100  is a borrowing node that has gone offline with respect to the original donor node (second computer node  200 ). In this manner, the first computer node  100  acts in turn as a license server that serves the previously borrowed license to the third computer node  300 . 
         [0056]      FIG. 5  illustrates a flow chart  500  that shows the steps of an advantageous embodiment of a method of the present invention. In the first step, a peer to peer network of computer licensing nodes is provided (step  510 ). Then a requesting program  120  in a first computer node  100  issues a license request to its license daemon  140  (step  520 ). The license daemon  140  searches for the requested license in a local license file  150  and in a local licensing library  130  and, if found, sends the requested license to the requesting program  120  (step  530 ). 
         [0057]    If the license daemon  140  does not find the requested license in the first computer node  100  then the license daemon  140  sends the license request to each computer node in the peer to peer network for which the license daemon  140  has an address and the license request cascades through the network nodes (step  540 ). Then a license daemon  240  in a second computer node  200  determines that the requested license is in its local license file  250  and is in its local licensing library  230  (step  550 ). 
         [0058]    Then the license daemon  240  (1) marks the requested license as being in use and (2) grants the license request to license daemon  140  and (3) sends out a heartbeat signal to license daemon  140  for the duration of the license grant (step  560 ). The license terminates when (1) requesting program  120  releases the license or (2) when requesting program  120  terminates or (3) when the heartbeat signal fails (step  570 ). When the license terminates then license daemon  240  releases the license back into the local pool of licenses that are eligible for a subsequent license (step  580 ). 
         [0059]      FIG. 6  illustrates a flow chart  600  that shows the steps of another advantageous embodiment of a method of the present invention. In the first step, a peer to peer network of computer licensing nodes is provided (step  610 ). Then a requesting program  120  in a first computer node  100  issues a license request to its license daemon  140  (step  620 ). The license daemon  140  searches for the requested license in a local license file  150  and in a local licensing library  130  and, if found, sends the requested license to the requesting program  120  (step  630 ). 
         [0060]    If the license daemon  140  does not find the requested license in the first computer node  100  then the license daemon  140  sends a borrow request to each computer node in the peer to peer network for which the license daemon  140  has an address and the borrow request cascades through the network nodes (step  640 ). Then a license daemon  240  in a second computer node  200  determines that the requested license is in its local donor file  270  and is in its local licensing library  230  (step  650 ). 
         [0061]    Then the license daemon  240  (1) marks the requested license as being in use for a requested time limit and (2) sends the requested borrowed license to license daemon  140  and to the borrowed licenses file  270  in the first computer node  100  (step  660 ). The network connection between the first computer node  100  and the second computer node  200  is then severed and the first computer node  100  operates offline with the borrowed license (step  670 ). 
         [0062]    While operating offline the first computer node  100  then licenses the borrowed license to a third computer node  300  (step  680 ). The borrowed license automatically terminates when the original requested time limit expires (step  690 ). When the borrowed license terminates then license daemon  240  releases the borrowed license back into the local pool of licenses that are eligible for a subsequent license or a subsequent borrowing (step  695 ). 
         [0063]    It may be advantageous to set forth definitions of certain words and phrases used throughout this patent document. The terms “application,” “program,” and “routine” refer to one or more computer programs, sets of instructions, procedures, functions, objects, classes, instances, or related data adapted for implementation in a suitable computer language. The term “couple” and its derivatives refer to any direct or indirect communication between two or more elements, whether or not those elements are in physical contact with one another. 
         [0064]    The terms “transmit,” “receive,” and “communicate,” as well as derivatives thereof, encompass both direct and indirect communication. The terms “include” and “comprise,” as well as derivatives thereof, mean inclusion without limitation. The term “or” is inclusive, meaning and/or. The phrases “associated with” and “associated therewith,” as well as derivatives thereof, may mean to include, be included within, interconnect with, contain, be contained within, connect to or with, couple to or with, be communicable with, cooperate with, interleave, juxtapose, be proximate to, be bound to or with, have, have a property of, or the like. The term “controller” means any device, system, or part thereof that controls at least one operation. A controller may be implemented in hardware, firmware, software, or some combination of at least two of the same. The functionality associated with any particular controller may be centralized or distributed, whether locally or remotely. 
         [0065]    While this disclosure has described certain embodiments and generally associated methods, alterations and permutations of these embodiments and methods will be apparent to those skilled in the art. Accordingly, the above description of example embodiments does not define or constrain this disclosure. Other changes, substitutions, and alterations are also possible without departing from the spirit and scope of the invention, as defined by the following claims.