# License options ACEMD is dual-licensed. The right license depends on whether you're doing commercial work and how your hardware is organised. ## Non-commercial license Free for academic and non-profit use under the [Acellera Software Not-for-Profit License Agreement](../reference/license.md). No license file is required to run ACEMD non-commercially; the package prints the license terms on first run and registration is optional (and silences the message). If your work is funded by, conducted at, or otherwise tied to a for-profit organisation, you need a **commercial** license — see below. ## Commercial license Required for any commercial use, including fee-based services. Contact [info@acellera.com](mailto:info@acellera.com) for terms. Commercial licenses come in three deployment shapes. Pick the one that matches how your users access compute: ### Node-locked A `license.dat` file bound to the **MAC address** of a specific machine. - **Best for** individual workstations or small HPC clusters where ACEMD only runs on a handful of fixed hosts. - **You provide** the MAC address(es) at purchase. The license is issued for those hosts and won't validate on other hardware. - See [Install a node-locked license](../how-to/install-a-node-locked-license.md). ### Floating A license file deployed on a single **license server** machine; clients check out a license at runtime from a fixed pool. - **Best for** larger HPC clusters where any of many nodes might run ACEMD, and you don't want to bind to specific node MACs. - **You provide** the MAC of the license-server host plus the maximum concurrent-license count. - **Clients need** network access (default TCP `27000`) to the license server. - See [Deploy a floating license server](../how-to/deploy-a-floating-license-server.md). ### Cloud Same protocol as floating, but the license server is **hosted by Acellera**. - **Best for** cloud/virtualised environments where MAC addresses are unstable and you don't want to run your own license server. - **You receive** a public IP and port; set `ACELLERA_LICENSE_SERVER=@` on each client. - **Clients need** network access to Acellera's server. ## Which one for which situation | Situation | Pick | |--------------------------------------------------------|-----------------------| | Solo workstation | Non-commercial or node-locked | | Small lab, a few fixed GPU hosts | Node-locked | | HPC cluster, many shared nodes | Floating | | Cloud / Kubernetes / spot instances | Cloud | ## How ACEMD finds the license at runtime ACEMD looks for a license in the following places (both the American and British spellings are accepted for each environment variable): - Environment variables `ACELLERA_LICENSE_SERVER` / `ACELLERA_LICENCE_SERVER` — for floating and cloud. - Environment variables `ACELLERA_LICENSE_FILE` / `ACELLERA_LICENCE_FILE` — explicit path to a node-locked file. - `/opt/acellera/license.dat` (or `licence.dat`) — system-wide node-locked location. - `~/.acellera/license.dat` (or `licence.dat`) — per-user node-locked location. If **any** of these variables is set or any of these files exists, ACEMD hands off to the bundled `license-checker` binary, which performs the actual validation and decides which license to use. The Python layer does not itself rank the candidates or enforce a precedence between them — that logic lives in the external checker. `acemd --license` runs the checker and prints its report so you can verify a license install. Note that `acemd --license` always exits with status `0`; it is informational and does not return a pass/fail exit code, so don't rely on its exit status in scripts — read its output instead. ## See also - [Install a node-locked license](../how-to/install-a-node-locked-license.md) - [Deploy a floating license server](../how-to/deploy-a-floating-license-server.md) - [License text](../reference/license.md)