Software license device binding and transfer
With a single-device license, copying software and its cache to another ordinary computer does not transfer the original computer's authorization.
Device binding vs user account licensing
Account sign-in identifies the customer and their purchases; device binding determines which machine may use the license. After sign-in, the SDK must still verify device identity, signatures and feature entitlements. Copying account session data or cache files to another computer does not replace that computer's own license verification.
How does the SDK identify the computer?
At each start, the SDK reads the OS machine identity and hashes it with the product ID. The server's signature includes this hash, which is also checked locally.
Windows reads MachineGuid, Linux reads machine-id and macOS reads IOPlatformUUID. Raw machine identity is not uploaded, only its calculated hash. The legacy config field device_id does not override the actual local identity.
What happens if files from machine A are copied to B?
- A activates and receives a signature bound to A's device hash.
- B reads its own identity, gets a different hash and rejects A's cache.
- B must activate online. With a one-device limit and A still bound, the server rejects B.
How can a customer change computers?
Have the customer unbind the old computer, then activate the new one. If the old one is broken, release its binding in Device activations in the console. Moving computers does not reset license expiration.
Reinstalling the operating system may change its identity and require a new-device activation. Full OS cloning, spoofed identities or modified clients are stronger attacks; this device hash alone cannot reliably stop them.
With long offline use, A's existing signature cannot immediately learn it was released. A successful server request is needed to update that state. Longer offline periods delay remote enforcement.
Cross-language device hash
SHA256(UTF8(
"LicenovaDevice/v2\n"
+ lower(product_id) + "\n"
+ lower(trim(OS_machine_identity))
))