The BSL Fork
In August 2023, HashiCorp switched Terraform from MPL 2.0 to BSL (Business Source License). The community responded by forking it as OpenTofu under the Linux Foundation.
Timeline
- 2023-08: HashiCorp announces BSL license
- 2023-09: OpenTofu manifesto (10,000+ signatures)
- 2023-12: OpenTofu 1.6 GA (first stable release)
- 2024-06: OpenTofu 1.7 (state encryption, removed blocks)
- 2025-01: OpenTofu 1.8 (provider-defined functions)
- 2026-01: OpenTofu 1.9 (module testing, stack orchestration)
Feature Comparison (2026)
| Feature | Terraform | OpenTofu |
|---|---|---|
| License | BSL 1.1 | MPL 2.0 (truly open) |
| State encryption | โ (requires Terraform Cloud) | โ Native |
| Provider-defined functions | โ | โ |
| Removed blocks | โ | โ (clean refactoring) |
| Registry | registry.terraform.io | registry.opentofu.org |
| Provider compatibility | โ | โ (99% compatible) |
| Module compatibility | โ | โ |
| Cloud/Enterprise | Terraform Cloud ($$$) | Spacelift, env0, Scalr |
| IBM ownership | โ (acquired 2024) | โ (Linux Foundation) |
Migration Steps
1. Check Compatibility
# Most configurations work without changes
# Check for HashiCorp-specific features
grep -r "terraform {" . | grep -v ".terraform"
grep -r "cloud {" . # Terraform Cloud blocks need removal2. Install OpenTofu
# macOS
brew install opentofu
# Linux
curl -fsSL https://get.opentofu.org/install-opentofu.sh | sh
# Verify
tofu --version3. Initialize
# Replace 'terraform' with 'tofu' in all commands
tofu init
tofu plan
tofu apply4. State Migration
# State files are compatible โ no migration needed!
# Just point OpenTofu at your existing state
tofu init -backend-config="bucket=my-state-bucket"5. CI/CD Updates
# GitHub Actions
- uses: opentofu/setup-opentofu@v1
with:
tofu_version: "1.9.0"
- run: tofu init
- run: tofu plan -out=plan.tfplan
- run: tofu apply plan.tfplanState Encryption (OpenTofu Exclusive)
terraform {
encryption {
key_provider "pbkdf2" "main" {
passphrase = var.state_passphrase
}
method "aes_gcm" "main" {
keys = key_provider.pbkdf2.main
}
state {
method = method.aes_gcm.main
}
plan {
method = method.aes_gcm.main
}
}
}State files are encrypted at rest โ no more secrets in plaintext state.
When to Stay with Terraform
- โ Heavy Terraform Cloud/Enterprise investment
- โ Team training is all Terraform-branded
- โ Using HCP-exclusive features (Sentinel, cost estimation)
- โ IBM support contract required
When to Switch to OpenTofu
- โ Want truly open-source (no license risk)
- โ Need state encryption natively
- โ Avoid IBM/HashiCorp vendor lock-in
- โ Open-source company (BSL may affect your distribution)
- โ Using third-party CI/CD (Spacelift, env0, Atlantis)