SDLC, DevOps & Developer Experience · Chapter 10 of 15
Infrastructure as code: the tooling and the licence question
What the licence change actually restricts, the fork's point of no return, and the three 2025-26 events that mattered more than the licence fight did.
The infrastructure-as-code licence dispute consumed an enormous amount of attention and changed the practical situation for almost nobody. This chapter says precisely what it restricts, then covers the changes that actually matter and got a fraction of the coverage.
What the licence change actually restricts
In August 2023 Terraform moved from the Mozilla Public Licence to the Business Source Licence 1.1. Since IBM completed its acquisition of HashiCorp in February 2025, the licensor named in that file is IBM. The specifics are more boring than the discourse:
- Only one thing is prohibited: producing a competitive offering — embedding the product in something you sell that competes with the vendor's commercial products.
- Explicitly permitted: all internal organisational use, including hosting it as an internal service for your own company. All non-production use. Consulting services helping others run it. Open-source projects that are not themselves competitive.
- Versions released before the change remain permissively licensed forever. The relicensing is not retroactive.
- And each version converts to MPL 2.0 four years after its own publication — a rolling change date, not a single one — so 1.6.0 becomes open again in 2027.
- The bottom line: if you run it to manage your own infrastructure, you are unaffected. The people genuinely affected are the vendors selling competing managed services. That distinction is routinely muddled and worth stating flatly.
The fork, and its point of no return
OpenTofu — MPL 2.0, under the Linux Foundation — ships frequently and is drop-in compatible. It has also diverged in ways worth knowing:
- Native state and plan encryption at rest, with pluggable key providers. The Terraform binary has no equivalent, and given that state files contain generated secrets in clear text — as covered in the infrastructure-as-code chapter — this is a substantive difference rather than a feature-list entry.
- Early variable evaluation, iteration over provider blocks, an exclusion flag, and registry support over container registries.
- And the migration trap: state files are interchangeable between the two until you enable state encryption. Once OpenTofu writes an encrypted state, Terraform cannot read it. That is the practical point of no return and most migration guides bury it in a footnote.
The three things that actually mattered in 2025–26, none of which got the attention the licence fight did.
1 · CDK for Terraform was killed. Deprecated at the end of 2025 and the repository archived, the stated reason being that it did not find product-market fit and investment was consolidating on the core. The practical consequence: the ‘write infrastructure in a real programming language’ path outside a single cloud is now essentially uncontested by Pulumi. That is a much bigger change to the landscape than a licence.
2 · Crossplane rewrote its model. Version 2, in 2025, made composite resources namespaced by default, removed the separate claim concept entirely, and replaced the patching-and-transform composition style with composition functions. Any material written against the previous mental model is now wrong in its fundamentals rather than in its details.
3 · The whole category moved to per-resource pricing. Both the major commercial offerings now bill by resources under management rather than by seat. That is a structural change to how you budget, and it carries a specific trap below.
Per-resource pricing is a trap for particular estate shapes
Cost now scales with resource count, not activity. You are billed for how many objects the tool manages, whether or not you ever run it.
A Kubernetes-heavy estate managed through the Kubernetes provider, or any module that expands into hundreds of small objects per service, produces a bill entirely unrelated to how much infrastructure work you do.
Count your resources before believing a per-resource quote, and check what the vendor counts — whether a module's internal resources count individually is the difference between two very different numbers.
Choosing, in 2026
| Choose | When | Why |
|---|---|---|
| The permissive fork | Default for new work | Neutral governance, shipping faster than the original's open binary, drop-in compatible, and it removes the licence question from procurement permanently |
| The original | You already buy the commercial platform | The integrated policy, registry and workflow stack is genuinely good, and the licence does not restrict you |
| A general-purpose-language tool | Your bottleneck is genuinely the configuration language's expressiveness | Real loops, real types, real unit tests. With the multi-cloud wrapper dead, this is now the mature multi-cloud option |
| A single-cloud native toolkit | You are on one cloud and its deployment service's constraints are acceptable | Excellent ergonomics — but the underlying deployment service is the ceiling, not the toolkit |
| A control plane | In addition to, not instead of | Its job is offering developers typed self-service resources that reconcile continuously. If your goal is 'apply this config', a declarative tool is simpler |
| Configuration management | The layer infrastructure-as-code does not reach | Operating-system configuration, network devices, appliances, orchestration on machines that already exist |
On the last row: the upstream configuration-management tool remains freely licensed and unchanged; the commercial platform on top is sold per managed node with no published list price. The licensing boundary catches people — the certified content collections and the execution-environment base images are the licensed part, not the command-line tool, and teams discover this when an air-gapped build tries to pull from a licensed registry.
The framing worth carrying
The licence drama was mostly noise, and the signal was elsewhere. A wrapper died, a control plane rewrote its model, and the commercial model changed from per-seat to per-resource. Being able to say that — and to explain why the licence genuinely does not restrict ordinary use — is a much better answer than a strong opinion about the licence, because it demonstrates that you read the terms rather than the commentary.
Check yourself