Lakshya

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.

5 min read0 diagramsAll 15 chapters

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

ChooseWhenWhy
The permissive forkDefault for new workNeutral governance, shipping faster than the original's open binary, drop-in compatible, and it removes the licence question from procurement permanently
The originalYou already buy the commercial platformThe integrated policy, registry and workflow stack is genuinely good, and the licence does not restrict you
A general-purpose-language toolYour bottleneck is genuinely the configuration language's expressivenessReal loops, real types, real unit tests. With the multi-cloud wrapper dead, this is now the mature multi-cloud option
A single-cloud native toolkitYou are on one cloud and its deployment service's constraints are acceptableExcellent ergonomics — but the underlying deployment service is the ceiling, not the toolkit
A control planeIn addition to, not instead ofIts job is offering developers typed self-service resources that reconcile continuously. If your goal is 'apply this config', a declarative tool is simpler
Configuration managementThe layer infrastructure-as-code does not reachOperating-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

What does the source-available licence actually prohibit?Producing a competitive offering — embedding the product in something you sell that competes with the vendor. Internal use, including hosting it internally, is explicitly permitted.
What is the point of no return when migrating to the fork?Enabling state encryption. State files are interchangeable until then; once encrypted, the original tool cannot read them.
What actually changed in 2025-26?CDK for Terraform was deprecated, the control-plane project rewrote its composition model in v2, and the commercial offerings moved to per-resource pricing.
Why is per-resource pricing a trap for some estates?It scales with object count rather than activity. A Kubernetes-heavy estate or a module that expands into hundreds of small resources bills far above its actual usage.
← The CI/CD platform landscapeArtifact registries, and what immutable actually means →