In August 2023, HashiCorp changed Terraform’s license from the Mozilla Public License (MPL) to the Business Source License (BSL). The community response was swift - OpenTofu was forked from Terraform 1.5 within weeks and accepted by the Linux Foundation. By 2026, both OpenTofu and Terraform have diverged significantly, and Pulumi’s growth has been accelerating.

Here is where things stand and which tool to use.

The License Situation

Terraform (HashiCorp/IBM): The BSL restricts competitive use. If you’re building a product that directly competes with HashiCorp’s commercial offerings, you need a commercial license. Individual teams using Terraform to manage their own infrastructure are generally fine under the BSL, but the ambiguity drove enterprises to re-evaluate.

HashiCorp was acquired by IBM in 2024. The practical impact on Terraform’s development trajectory and licensing terms is still playing out, but IBM’s track record with acquired developer tools is not universally positive.

OpenTofu: True open source, maintained by the Linux Foundation, backed by Spacelift, Gruntwork, Env0, and others. Fully compatible with Terraform HCL configurations. OpenTofu 1.8+ added features Terraform doesn’t have: provider-defined functions, earlier variable evaluation.

Pulumi: Never had a license controversy. Uses real programming languages (TypeScript, Python, Go, Java, .NET) instead of HCL. Strong commercial offering but the core SDK is Apache 2.0.

Terraform HCL vs. Real Programming Languages

This is the fundamental choice. HCL (HashiCorp Configuration Language) was designed to be declarative and readable by non-programmers. Pulumi uses actual programming languages.

HCL for a simple AWS S3 bucket:

resource "aws_s3_bucket" "my_bucket" {
  bucket = "my-unique-bucket-name"
}

resource "aws_s3_bucket_versioning" "my_bucket" {
  bucket = aws_s3_bucket.my_bucket.id
  versioning_configuration {
    status = "Enabled"
  }
}

Pulumi (TypeScript) for the same:

import * as aws from "@pulumi/aws";

const bucket = new aws.s3.Bucket("my-bucket", {
  versioning: {
    enabled: true,
  },
});

The Pulumi code is shorter. More importantly, it uses the language’s type system, IDE autocomplete, existing testing frameworks, and package manager.

Where HCL wins: reviewability. A product manager or security engineer can read HCL and roughly understand what it’s doing. They cannot read TypeScript infrastructure code without engineering context.

Where real languages win: anything dynamic. Terraform/HCL’s for_each and count are workable for simple loops. For complex conditional logic, interpolated values, and programmatic resource creation - it degrades into unreadable HCL that fights against the language’s declarative intent.

Feature Comparison in 2026

Feature Terraform 1.9 OpenTofu 1.9 Pulumi 3.x
Language HCL HCL TS/Python/Go/Java/.NET
State management Remote/local Remote/local Pulumi Cloud/local
Provider ecosystem ~3,000 ~3,000 (same) ~1,200 native + Terraform bridge
Import existing resources Yes Yes Yes
Testing terraform test tofu test Native language testing
Policy as code Sentinel (paid) OPA CrossGuard
Stack dependencies Workspaces Workspaces Stack references
Provider-defined functions No Yes (1.8+) N/A
License BSL MPL 2.0 Apache 2.0

The provider ecosystem is the most important row. Terraform’s 3,000 providers - built over 10 years - give it comprehensive coverage of every cloud and SaaS service. Pulumi has a Terraform bridge that lets it use any Terraform provider, but the experience is less polished than native providers.

Where Each Tool Wins

Terraform / OpenTofu:

  • Teams with existing HCL codebase
  • Organizations that need to document infrastructure for non-engineers
  • Shops that want the widest provider coverage
  • Teams where the primary audience for infra code is operations, not developers

Choose OpenTofu over Terraform for new HCL projects. The license is cleaner, development is active, and the feature set is at parity or ahead. The migration from Terraform to OpenTofu is typically a one-line change to your tooling.

Pulumi:

  • Teams of software engineers who write TypeScript or Python daily
  • Complex infrastructure with dynamic resource creation
  • Organizations that want to use existing code review, testing, and package management for infra
  • Projects that mix application and infrastructure code in the same repository

The trend among developer-forward teams: Pulumi is winning new projects. The “infrastructure as software” pitch lands well with engineers who are frustrated by HCL’s limitations.

The CDK Wildcard

AWS CDK (Cloud Development Kit) and CDK for Terraform occupy an interesting middle ground. CDK lets you write TypeScript/Python that generates CloudFormation (CDK) or Terraform HCL (cdktf). You get real language expressiveness with the proven Terraform provider ecosystem.

CDK for Terraform + OpenTofu is worth serious consideration for AWS-heavy shops that want TypeScript/Python semantics without fully committing to Pulumi’s state management model.

Practical Migration Guide

If you’re on Terraform and considering OpenTofu:

  • Change your terraform binary reference to tofu
  • Change the required_providers source for HashiCorp providers if needed
  • Run tofu plan - it should produce identical output
  • The state file format is compatible

If you’re moving from Terraform to Pulumi:

  • Use pulumi convert --from terraform for automated conversion
  • Expect 20-40% of resources to need manual cleanup
  • Budget 2-3 weeks for a medium-sized codebase migration
  • Consider running both in parallel during transition

Bottom Line

The IaC landscape settled into three camps: Terraform (BSL, IBM, mature ecosystem), OpenTofu (open source fork, active development, full HCL compatibility), and Pulumi (real languages, growing ecosystem, strong DX). For new HCL projects, choose OpenTofu over Terraform for licensing clarity. For engineering-led teams that find HCL limiting, Pulumi is the right direction. The “right answer” depends less on technical merit and more on your team composition and the complexity of your infrastructure logic.