Terraform 4,548 (github.com/hashicorp/terraform (https://github.com/hashicorp/terraform 49,776 ), about 49,700 stars, 1.16.4) is the best-known multi-cloud IaC tool: HashiCorp Configuration Language (HCL) files, providers for each platform's API, and a state file that you store and protect, where CloudFormation 24 keeps state in AWS 24 .
In August 2023 HashiCorp moved Terraform from the Mozilla Public License 2.0 (MPL) to the Business Source License 1.1 (BSL), which is source-available, not open source: production use is allowed, but not a hosted or embedded product competing with the vendor's paid versions, and each release becomes MPL 2.0 after four years. IBM, which bought HashiCorp on 27 February 2025, is now the licensor. The AWS provider stayed MPL 2.0.
OpenTofu 78,487 (github.com/opentofu/opentofu (https://github.com/opentofu/opentofu 30,309 ), MPL 2.0) forked the last MPL release in 2023 under the Linux Foundation and became a CNCF Sandbox project on 23 April 2025. Version 1.12.6 reads the same HCL and adds features such as client-side state encryption. The AWS provider honors AWS_ENDPOINT_URL, so it reaches LocalStack 63,725 with no wrapper:
terraform {
required_providers { aws = { source = "hashicorp/aws", version = "~> 6.66" } }
}
provider "aws" { region = "us-east-1" } # the endpoint comes from AWS_ENDPOINT_URL
resource "aws_dynamodb_table" "books" {
name = "booknest-books-tofu"
billing_mode = "PAY_PER_REQUEST"
hash_key = "id"
attribute {
name = "id"
type = "N"
}
}cd ../tofu
tofu init -no-color | grep -E 'Installed|initialized!'
tofu apply -auto-approve -no-color | tail -2
tofu destroy -auto-approve -no-color | tail -1- Installed hashicorp/aws v6.66.0 (signed, key ID 0C0AF313E5FD9F80) OpenTofu has been successfully initialized! Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Destroy complete! Resources: 1 destroyed.
The provider filled .terraform with 823 MB, so CI should cache it. tofu plan compares code, state and the live API, and so also shows drift. Commit .terraform.lock.hcl, never terraform.tfstate.