Skip to content

Cart

Your cart is empty

Running Arm User-Based Licensing in Modern CI/CD Workflows
ARM

Running Arm User-Based Licensing in Modern CI/CD Workflows

Modern embedded software development no longer ends at a successful local build. Firmware is now continuously compiled, tested, analyzed, and packaged through automated pipelines running on Jenkins, GitHub Actions, GitLab CI, Azure DevOps, and dedicated build servers. While these environments simplify software delivery, they also introduce a practical question for many engineering teams:

 

How should commercial embedded development tools be licensed within an automated build environment?

 

Unlike traditional node-locked licensing, Arm User-Based Licensing (UBL) associates the license with the operating system user executing the Arm development tools rather than a specific machine. This model fits naturally into modern CI/CD infrastructure where build servers, virtual machines, and cloud runners are regularly created, replaced, or scaled without requiring licensing to be tied to individual hardware.

 

A common deployment pattern is to provision a dedicated Windows build runner using a service account such as jenkins, builduser, or gitlab-runner. The UBL license is activated once under that operating system account, allowing every pipeline executed by the same user to access the licensed Arm Compiler or Keil MDK installation without requiring interactive activation during each build.

 

 

This separation between the CI platform and the licensing mechanism is important. GitHub Actions, Jenkins, or GitLab simply schedule the build; the Arm development tools validate the licensed operating system user at runtime. Once the environment has been provisioned, the licensing process becomes transparent to the pipeline itself, allowing engineering teams to focus on build automation rather than license management.

 

Containerized environments introduce another consideration. UBL identifies the effective operating system username inside the container rather than the Docker host. If a build container executes as root, the licensing system also identifies the user as root. For dedicated CI runners this is a supported deployment model, provided the license is activated for that shared build account. For developer-specific containers, Arm recommends using individual usernames so each engineer's license remains associated with their own environment rather than every user appearing as root.

 

Many engineering organizations also maintain products developed with older Arm and Keil toolchains while introducing modern CI practices. Rather than maintaining separate licensing strategies, Professional UBL licenses can generate compatible node-locked licenses for supported legacy tools including Arm Compiler 5, PK51, PK166, and DK251. Arm also provides unattended installation methods together with command-line licensing utilities, allowing legacy projects to be provisioned automatically as part of a build server image or virtual machine deployment instead of requiring manual IDE configuration.

 

As build infrastructure grows, another common question is whether every virtual machine requires its own license. In practice, the answer depends on how the build environment is deployed. Because UBL licenses the operating system user rather than the hardware, organizations commonly create dedicated build identities that can be reused across multiple build servers and virtual machines. For larger deployments, environments with restricted internet connectivity, or enterprise-scale infrastructure, Arm additionally supports Proxy Activation and Local License Server (LLS) workflows to simplify license management while reducing repetitive online activation requests.

 

For teams designing reproducible CI infrastructure, Arm also recommends automating the provisioning process. Installing the required toolchain version, activating the build account once, and scripting the remaining environment configuration allows new build runners to be deployed consistently across physical servers, virtual machines, or cloud-hosted infrastructure. This approach minimizes manual configuration while ensuring every runner behaves identically, an important requirement for deterministic embedded software builds.

 

User-Based Licensing is ultimately designed to complement modern embedded software development practices rather than constrain them. Whether firmware is being compiled on a local build server, a virtual machine, or a cloud-hosted CI runner, UBL provides a licensing model that aligns with automated software delivery while remaining compatible with both current Arm development tools and many existing legacy projects. As engineering organizations continue investing in DevOps and continuous integration, licensing becomes another component of the build infrastructure one that can be provisioned, automated, and managed alongside the rest of the development environment rather than treated as a separate administrative task.

 

If you'd like to explore specific deployment scenarios in greater detail, Arm provides several excellent technical articles covering User-Based Licensing in automated development environments.

 

Further Reading from Arm Documentation:

 

 

 

If you'd like to discuss your CI/CD environment, migration strategy, or User-Based Licensing deployment, feel free to reach out Hrutik Champaneri at hrutik.champaneri@joraltechnologies.com

RELATED NEWS

Percepio Detect: Catching Embedded Software Issues Before They Become Failures
Hrutik Champaneri

Percepio Detect: Catching Embedded Software Issues Before They Become Failures

Embedded applications can pass unit tests, perform reliably in the lab, and still encounter unexpected failures after hours of operation. Occasional timing problems, stalled RTOS tasks, and inter[...]

Read more
CompCert: A C Compiler That Comes With a Proof
Hrutik Champaneri

CompCert: A C Compiler That Comes With a Proof

Safety-critical teams put considerable effort into their C source code. They run static analysis, check MISRA rules, review code, and test the compiled software extensively. However, testing cann[...]

Read more
a³ release 26.10
Alice Campbell

a³ release 26.10

New target aiT for TriCore now supports 3rd GEN AURIX TC46x.   Qualification Support Kits Qualification reports can now be exported as XML. New compiler-specific QSKs: aiT for e200 with Diab [...]

Read more
Beyond Code Generation: AI-Assisted Embedded Development with Arm CMSIS
Hrutik Champaneri

Beyond Code Generation: AI-Assisted Embedded Development with Arm CMSIS

AI coding assistants can generate a UART driver in seconds. But when the output is garbled or an application unexpectedly enters a HardFault handler, the problem may not be obvious from the sourc[...]

Read more
Configuring QA-MISRA for Real-World Embedded C/C++ Projects
Hrutik Champaneri

Configuring QA-MISRA for Real-World Embedded C/C++ Projects

Getting QA-MISRA running is only the first part of the setup. For an actual embedded project, you will usually need to decide which coding rules should be checked, how compiler-specific code sho[...]

Read more