An apparatus for managing software licenses comprising: a first computer node comprising a computing device configured to connect to at least a second computer node and a third computer node in a peer-to-peer computer network; wherein the first computer node comprises a software license management controller configured to: temporarily receive a software license for a software product from a software license management controller in the second computer node; receive a request for the received software license from a software license management controller in the third computer node; determine whether the request is to borrow the software license or to check out the software license; when the request is to borrow the software license, send the received software license to the software license management controller in the third computer node for a period of time; when the request is to check out the software license: send a license grant for the received software license for an indefinite period of time to the software license management controller in the third computer node; send a heartbeat signal to the software license management controller in the third computer node for a duration of the license grant; determine whether a response is received to the heartbeat signal; and based on a failure to receive the response to the heartbeat signal, terminate the license grant to the software license management controller in the third computer node; and use the software license for the software product at the first computer node (i) after the period of time elapses but not during the period of time when the request is to borrow the software license and (ii) after the license grant to the software license management controller in the third computer node is terminated when the request is to check out the software license. a first computer node comprising a computing device configured to connect to at least a second computer node and a third computer node in a peer-to-peer computer network; wherein the first computer node comprises a software license management controller configured to: temporarily receive a software license for a software product from a software license management controller in the second computer node; receive a request for the received software license from a software license management controller in the third computer node; determine whether the request is to borrow the software license or to check out the software license; when the request is to borrow the software license, send the received software license to the software license management controller in the third computer node for a period of time; when the request is to check out the software license: send a license grant for the received software license for an indefinite period of time to the software license management controller in the third computer node; send a heartbeat signal to the software license management controller in the third computer node for a duration of the license grant; determine whether a response is received to the heartbeat signal; and based on a failure to receive the response to the heartbeat signal, terminate the license grant to the software license management controller in the third computer node; and use the software license for the software product at the first computer node (i) after the period of time elapses but not during the period of time when the request is to borrow the software license and (ii) after the license grant to the software license management controller in the third computer node is terminated when the request is to check out the software license. temporarily receive a software license for a software product from a software license management controller in the second computer node; receive a request for the received software license from a software license management controller in the third computer node; determine whether the request is to borrow the software license or to check out the software license; when the request is to borrow the software license, send the received software license to the software license management controller in the third computer node for a period of time; when the request is to check out the software license: send a license grant for the received software license for an indefinite period of time to the software license management controller in the third computer node; send a heartbeat signal to the software license management controller in the third computer node for a duration of the license grant; determine whether a response is received to the heartbeat signal; and based on a failure to receive the response to the heartbeat signal, terminate the license grant to the software license management controller in the third computer node; and send a license grant for the received software license for an indefinite period of time to the software license management controller in the third computer node; send a heartbeat signal to the software license management controller in the third computer node for a duration of the license grant; determine whether a response is received to the heartbeat signal; and based on a failure to receive the response to the heartbeat signal, terminate the license grant to the software license management controller in the third computer node; and use the software license for the software product at the first computer node (i) after the period of time elapses but not during the period of time when the request is to borrow the software license and (ii) after the license grant to the software license management controller in the third computer node is terminated when the request is to check out the software license.