/툴 리뷰/Terraform vs OpenTofu in Practice: What to Use After BSL, and When to Switch
Tool ReviewsTerraformOpenTofu

Terraform vs OpenTofu in Practice: What to Use After BSL, and When to Switch

After HashiCorp’s BSL switch, this post helps you decide Terraform vs OpenTofu for new IaC and when to migrate existing code to tofu, using a self-assessment flowchart. It covers the license decision tree, migration and rollback commands, f

Terraform vs OpenTofu in Practice: What to Use After BSL, and When to Switch

What “Can we still use Terraform on a new project?” actually means

Since HashiCorp moved Terraform from MPL 2.0 (open source) to BSL (Business Source License) 1.1 in 2023, one question has become a fixture in infrastructure team meetings: “Does this trip the license?” And once IBM’s acquisition of HashiCorp was confirmed in 2024, that anxiety grew into a larger decision: “Are we willing to accept vendor lock-in?”

At the same time, OpenTofu—the community fork of Terraform—has been growing steadily under the Linux Foundation and has started shipping its own features, such as state encryption. The question is no longer “which is better,” but “which should we use in our situation.”

This post is a decision, not an introduction. Every section ends with a decision rationale, and the end includes a situation-by-situation decision table plus copy-pasteable migration commands. The license interpretation below is for practical judgment only; the final call must go through your in-house legal review.

License judgment: does BSL actually apply to our company?

The core BSL clause is not, as often misunderstood, “no commercial use.” Precisely, it prohibits use to create a competitive offering against HashiCorp’s commercial products. Most in-house infrastructure management use does not trigger it.

You can self-assess in about five minutes with this Yes/No flow.

TEXT
[시작]


① 우리는 Terraform으로 만든 결과물을
   외부에 재판매하거나 SaaS/관리형 서비스로 제공하는가?

  ├── No ──▶ [BSL 저촉 가능성 낮음]
  │           (사내 인프라, 자사 서비스 배포 등 → 대부분 안전)

  └── Yes


② 그 제품이 HashiCorp의 상용 제품
   (Terraform Cloud/Enterprise 등)과 경쟁하는가?

        ├── No ──▶ [BSL 저촉 가능성 낮음 — 단, 법무 확인 권장]

        └── Yes ──▶ [⚠ BSL 리스크 — 법무 검토 필수 / OpenTofu 검토]

In short:

Usage patternBSL riskVerdict
Provisioning in-house servers and cloud infrastructureLowFree choice of Terraform or OpenTofu
Deploying backend infrastructure for your own SaaSLowMostly safe (what you sell is not IaC)
Selling a paid IaC platform that wraps TerraformHighStrongly recommend OpenTofu + legal
MSP / managed service that operates infrastructure for customersGray areaLegal review required

Core decision rationale: If you use infrastructure, you can keep using Terraform without much worry. If you sell infrastructure automation itself, OpenTofu is the safe zone.

Head-to-head: features and compatibility

OpenTofu started as a fork of Terraform 1.5.x, so early compatibility is very high. As the two projects evolve independently, though, gaps appear.

ItemTerraform (BSL)OpenTofu (MPL 2.0)
LicenseBSL 1.1MPL 2.0 (fully open source)
HCL syntaxOriginalFork-based — 100% compatible at first, modest divergence possible later
State file formatCompatibleInteroperable (same state read/write)
Provider/module registryHashiCorp RegistryOpenTofu Registry (mirror + own)
State encryptionNot supported (backend-dependent)Built-in client-side encryption
GovernanceHashiCorp (IBM) aloneUnder the Linux Foundation
TFC/TFE integrationNativeLimited (remote backend works)

⚠️ Feature gaps by version (e.g. whether Terraform 1.6/1.7/1.8 features landed in the matching OpenTofu release) change quickly. Do not treat any snapshot as definitive—always check each project’s official release notes. Support for stacks, certain functions, and provider-defined functions in particular shifts often.

Decision rationale: Because state remains compatible, the migration itself is technically low-burden. If you need state encryption, OpenTofu is the only built-in option.

Migration in practice: terraform → tofu procedure

Technically it is surprisingly simple. Below is the full copy-pasteable flow.

1) Install the binary

Bash
# macOS (Homebrew)
brew install opentofu

# Linux (스크립트 설치)
curl -fsSL https://get.opentofu.org/install-opentofu.sh -o install.sh
chmod +x install.sh
./install.sh --install-method standalone
rm install.sh

# 설치 확인
tofu version

Expected healthy output:

TEXT
OpenTofu v1.x.x
on darwin_arm64

2) Command mapping — just replace terraform with tofu

TerraformOpenTofu
terraform inittofu init
terraform plantofu plan
terraform applytofu apply
terraform state listtofu state list

3) Always back up state and lock before switching

Bash
# 로컬 state인 경우
cp terraform.tfstate terraform.tfstate.bak
cp .terraform.lock.hcl .terraform.lock.hcl.bak

# 원격 backend면 콘솔/버전관리로 state 스냅샷 확보

4) Init and confirm a no-op plan

Bash
tofu init -upgrade
tofu plan

Expected healthy result: No changes. Your infrastructure matches the configuration.

If you get that no-op, state was interpreted correctly. If the plan shows resource recreation (destroy/create), do not apply—investigate provider version and lock-file differences first.

5) Swap the CI pipeline (GitHub Actions)

YAML
# Before
- uses: hashicorp/setup-terraform@v3
  with:
    terraform_version: "1.5.7"

# After
- uses: opentofu/setup-opentofu@v1
  with:
    tofu_version: "1.8.0"

If you use Atlantis, set the execution binary in atlantis.yaml or server config:

YAML
# atlantis.yaml (프로젝트 단위)
projects:
  - dir: .
    workflow: tofu
# server-side: workflows.tofu.plan.steps 에서 tofu 바이너리 호출

6) Rollback procedure

If something goes wrong, reverting is equally simple.

Bash
# 1. 백업한 state/lock 복원
cp terraform.tfstate.bak terraform.tfstate
cp .terraform.lock.hcl.bak .terraform.lock.hcl

# 2. 다시 terraform으로 초기화
terraform init -upgrade
terraform plan   # No changes 확인

Because the state format is compatible, two-way switching is possible—that is the psychological safety net.

Failure-branch checklist: what actually blocks a migration

The commands are easy. What actually blocks a move is the dependencies below. Check these before you switch.

  • Is the provider on the OpenTofu Registry? If a minor or in-house provider is unregistered, you need an explicit source (source = "registry.opentofu.org/...") or a mirror.
  • Do you depend on TFC/TFE-specific features?
    • Workspace management via remote backend → partially compatible; reconfiguration may be needed
    • Sentinel policies → not supported on OpenTofu (consider OPA/Conftest as a replacement)
    • TFC-only features such as Run Tasks / Drift Detection → cannot be migrated as-is
  • Are wrappers and the tool chain compatible?
    • Terragrunt: OpenTofu supported (terraform_binary = "tofu")
    • TFLint / tfsec / Checkov: mostly HCL-parse based so they work, but confirm versions
  • Are module sources hardcoded to a specific registry?

Decision rationale: If you are deeply tied to TFC/TFE Sentinel and Run Tasks, migration cost spikes. In that case the real decision is larger than “move to OSS”: keep TFC vs. switch to self-hosting.

Decision table by situation

SituationRecommendationWhy
New projectPrefer OpenTofuAvoid lock-in, state encryption, no license burden. A good default unless you need specific TFC features
Existing small setup (a few states, no TFC)Recommend migrating to OpenTofuLow switching cost; mostly a command swap
Large enterprise dependent on TFC/TFEStay put, then review in stagesReplacement design for Sentinel and Run Tasks must come first. Do not rush the move
Vendor that resells / SaaS-ifies IaCOpenTofu (after legal review)The core case for avoiding BSL risk

Cost comparison: open source is free; the real cost is the management layer

Both CLIs themselves are free. Cost shows up in the “management layer” that handles collaboration, policy, and state.

OptionFormRough cost feelNotes
OpenTofu + AtlantisSelf-hosted OSSInfra ops cost onlyNo lock-in, you operate it
Terraform CloudSaaS (paid tiers)Resource/seat-based billingNative features and Sentinel
SpaceliftSaaS / self-hostedWorker- and seat-basedOfficial OpenTofu support
Env0SaaSSeat/usage-basedStrong on governance and cost tracking

Exact unit prices change with vendor policy, so check each vendor’s official pricing page.

Korea in one paragraph: In Korea, OpenTofu adoption is growing among cloud MSPs and platform teams, and Korean-language materials and community talks keep accumulating. That said, large enterprises that need a commercial support contract should separately confirm Terraform Cloud/Enterprise’s official support channels, or whether vendors such as Spacelift and Env0 have local partnerships.

Conclusion: one-line verdicts

  • You use infrastructure + new project → OpenTofu as the default.
  • Org deeply tied to TFC-specific features → stay as-is until a replacement is designed.
  • Vendor that sells IaC → OpenTofu + legal review.

The technical migration is as light as swapping terraform for tofu and confirming a no-op on tofu plan. The real decision is license and TFC dependency.

FAQ

Q. We only manage in-house infrastructure. Does Terraform BSL apply? A. Generally no. BSL restricts use to create a product that competes with HashiCorp’s commercial offerings, and provisioning your own infrastructure is not that. Final judgment still needs in-house legal review.

Q. If we move to OpenTofu, do we have to rebuild existing state? A. No. The state format is compatible, so the same state file is read as-is. After a backup, run tofu init and tofu plan and confirm a no-op (No changes). You can also roll back to terraform if needed.

Q. We use Terraform Cloud Sentinel policies. Can we go to OpenTofu? A. Sentinel is not supported on OpenTofu. Finish a replacement design with an open-source policy engine such as OPA (Open Policy Agent)/Conftest first, then migrate.

확인 정보
✦ ✦ ✦
편집 검토 · Editorial Review

Nodelog는 모든 콘텐츠의 내용과 출처를 공개 전에 검토합니다. 환경(OS·버전)에 따라 결과가 달라질 수 있는 기술 정보는 공식 문서와 함께 확인하며, 검토 기준과 정정 원칙은 편집 정책에서 안내합니다. 오류를 발견하시면 이메일로 제보해 주세요 — 확인 후 신속히 정정합니다.

편집 책임 · Nodelog 기술 편집팀·발행 · ·업데이트 ·
관련 공식 문서Terraform 공식 문서

Comments

Be the first to comment.