A floating license limits how many copies of your software run at the same time, rather than how many are installed. If a team buys five seats, any employee can use the software, but only five can run it concurrently — when one closes, a seat frees up for the next. This is ideal for tools shared across a team, lab, or CI fleet, and it usually earns more revenue than per-install pricing.
How concurrent licensing works
A floating license has three moving parts:
- Lease — when the app starts, it checks out a seat. If all seats are taken, it is refused.
- Heartbeat — while running, the app periodically renews its seat so a crashed client does not hold a seat forever.
- Release — on exit, the app returns the seat to the pool.
The server tracks active seats per key and enforces the maximum. That is the whole model.
Adding floating licenses in Python
The SDK wraps lease, heartbeat, and release in a context manager, so you focus on your app:
from pylicensify import LicenseClient, SeatUnavailable
client = LicenseClient(public_key="YOUR_PUBLIC_KEY")
try:
with client.session("PY-XXXXXXXXXXXXXXXX") as sess:
print("Seat acquired:", sess.seats) # {'used': 1, 'max': 5}
run_app() # released automatically on exit
except SeatUnavailable:
print("All seats are in use. Try again shortly.")
The heartbeat runs in the background while the block is active, and the seat is released automatically when the block exits — even if your program crashes, the seat expires after the heartbeat window.
Floating vs. per-device licensing
Per-device (HWID) licensing caps how many machines a key installs on. Floating licensing caps how many run at once. Choose per-device when each user has their own dedicated install; choose floating when a pool of users shares a smaller number of concurrent seats. Many products offer both.
Frequently asked questions
What happens if the app crashes without releasing a seat?
The seat is not held forever. Because each session must heartbeat to stay alive, a crashed client stops renewing and its seat expires automatically, returning to the pool.
Can I change the number of seats later?
Yes. Update the concurrent-session limit on the key and it takes effect immediately — no client change needed.
Does a floating license need my own server?
No. The lease, heartbeat, and release endpoints are hosted for you on the global edge. Your app just calls them.
Want to sell seats to teams? Start free and see the floating license docs.
Related guides
- How to Bind a License Key to a Device (HWID) in Python
- How to Add Offline License Activation to Your Software
- Python Software Licensing: A Practical Guide
Frequently asked questions
What is a floating license?
A floating license caps how many copies of your software run at the same time rather than how many machines it is installed on. A team of twenty can install it everywhere but only, say, five may run it concurrently.
How does a seat get released if the app crashes?
Each session holds a lease that expires unless the client sends a heartbeat. If the process dies the heartbeat stops, the lease lapses after its TTL, and the seat returns to the pool automatically.
When should I choose floating over device binding?
Floating suits teams and shared lab machines where headcount matters more than installs. Device binding suits individual desktop licenses where you want the key tied to specific hardware.