Your platform team just spent three weeks debugging a for_each loop that needed to provision resources based on data pulled from an internal API. In HCL, that meant local files, dynamic blocks, and a module that nobody wanted to touch during on-call. In a real programming language, it would have been one function.
That single frustration is why "Terraform vs Pulumi vs OpenTofu" has become one of the most consequential platform decisions a DevOps team makes in 2026 - not because the tools are hard to learn, but because switching later is expensive.
All three tools solve the same problem - declarative infrastructure provisioning with state tracking - but they diverge on two axes: language and governance.
Terraform: HCL, BSL-licensed since Aug 2023.
IBM-owned since Feb 2025 ($6.4B acquisition).
Largest provider registry (4,800+ providers).
OpenTofu: HCL, MPL 2.0, Linux Foundation governed.
Fork of Terraform 1.5.x, GA since Jan 2024.
Near drop-in compatibility, zero rewrite cost.
Pulumi: TypeScript, Python, Go, C#, Java.
Apache 2.0 core, commercial cloud/platform tiers.
Smaller provider ecosystem, full language power.
Terraform and OpenTofu share the same engine and the same HCL syntax - they are functionally the same tool with different licenses and different companies behind them. Pulumi is a genuinely different approach: infrastructure defined in code you can loop, branch, and unit-test the way you would any application.
Three forces are driving the decision right now, and none of them are about raw performance - Terraform and OpenTofu use the same execution engine, so speed rarely decides that half of the comparison.
Licensing risk. HashiCorp's BSL restricts building competing commercial products on top of Terraform. Enterprises with long procurement cycles and legal review processes increasingly flag this as a dependency risk, especially post-IBM-acquisition, even when they have no near-term plans to compete with HashiCorp.
Governance control. OpenTofu is governed by the Linux Foundation with public RFC processes. Teams that got burned by the 2023 relicensing want a tool where a single vendor cannot unilaterally change the license again.
Language ergonomics. Teams doing genuinely dynamic infrastructure - multi-tenant SaaS provisioning, config-driven resource generation, anything with real conditional logic - hit HCL's limits fast. Pulumi removes that ceiling entirely by using a real language.
resource "aws_instance" "api" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.medium"
tags = {
Name = "payment-api"
Environment = "production"
}
}
OpenTofu has started shipping features HashiCorp doesn't offer in the open-source tier, including native state encryption and more flexible provider iteration (for_each on providers), which narrows the gap that used to favor Terraform Cloud's paid features. For teams with no other reason to move, staying on Terraform remains the lowest-friction option - but it is no longer the only option with a mature open-source path.
import * as aws from "@pulumi/aws";
const tenants = ["zerodha-team-a", "zerodha-team-b", "zerodha-team-c"];
const buckets = tenants.map(name =>
new aws.s3.Bucket(`tenant-${name}`, {
bucket: `payments-${name}-prod`,
tags: { tenant: name, managedBy: "pulumi" },
})
);
variable "tenants" {
default = ["zerodha-team-a", "zerodha-team-b", "zerodha-team-c"]
}
resource "aws_s3_bucket" "tenant" {
for_each = toset(var.tenants)
bucket = "payments-${each.value}-prod"
tags = {
tenant = each.value
managed_by = "terraform"
}
}
For simple, mostly-static infrastructure, the HCL version is arguably easier to read at a glance. The moment you need per-tenant conditional logic, API calls during planning, or shared business logic between your application code and your infrastructure code, Pulumi's advantage compounds fast - you write one function instead of fighting dynamic blocks and local-file hacks.
Language and Ecosystem:
| Factor |
Terraform |
OpenTofu |
| License |
Business Source License |
Mozilla Public License 2.0 |
| Governance |
HashiCorp (IBM-owned) |
Linux Foundation |
| Provider count |
4,800+ (largest registry) |
Same registry, near-total compatibility |
Language and Ecosystem, continued:
| Factor |
Pulumi |
Notes |
| Language |
TypeScript, Python, Go, C#, Java |
Real conditionals, loops, functions |
| Migration cost from Terraform |
High - most modules need rewriting |
tf2pulumi helps with a first pass only |
| Testing |
Standard language unit-test frameworks |
Native to the ecosystem, not IaC-specific |
Terraform Cloud / HCP Terraform paid tiers add:
remote state, policy as code (Sentinel), audit logs
OpenTofu: same features are either built into the
free binary, or available via env0, Spacelift, Scalr
Pulumi Cloud paid tiers add: managed state backend,
policy as code (CrossGuard), deployment automation
The pricing comparison should never stop at subscription cost. A tool that looks free becomes expensive fast if your team has to build governance, audit logging, approval workflows, and drift detection manually. Factor in the operational cost of whatever you're not getting from the vendor, not just the invoice.
For teams already deep in Terraform with stable, mostly-static infrastructure and no urgent licensing concern, staying on Terraform remains defensible - migration has a real cost and the BSL restriction rarely bites teams who aren't building a competing commercial IaC product.
For teams motivated primarily by licensing risk or governance control, OpenTofu is close to a free move. Same HCL, same provider registry, same mental model, near-zero rewrite. This is the default recommendation for any team currently blocked purely on the BSL question.
For teams building genuinely dynamic infrastructure - multi-tenant SaaS platforms, config-driven provisioning, anything where HCL's for_each and dynamic blocks are becoming unmaintainable - Pulumi's language-based approach removes the ceiling entirely, at the cost of a real migration effort that should be budgeted honestly, not treated as a weekend project.
Indian platform teams evaluating this in 2026 - particularly at fintechs like Zerodha and Razorpay running per-tenant infrastructure patterns for compliance isolation - are the clearest beneficiaries of Pulumi's language power, while teams running comparatively static VPC/EKS/RDS stacks see the least benefit from switching off Terraform or OpenTofu at all.
INFORMATIONReferences and Further Reading
Discussion0