OpenTofu — Open-source fork Terraformu
OpenTofu je open-source fork Terraformu, ktorý vznikol v auguste 2023 ako reakcia komunity na zmenu licencie Terraformu z Mozilla Public License v2 (MPL) na Business Source License (BSL). Dnes je OpenTofu projektom pod hlavičkou Linux Foundation a jeho cieľom je udržať Infrastructure as Code skutočne otvorený, kompatibilný a riadený komunitou.
Prečo OpenTofu vznikol?
- augusta 2023 HashiCorp oznámil, že Terraform (a väčšina ich produktov) prechádza z MPL na BSL 1.1. BSL je licencia s tzv. "non-compete" klauzulou — zakazuje používať zdrojový kód v produkte, ktorý priamo konkuruje HashiCorpu. To síce umožňuje interné firemné použitie, ale blokuje platformy ako Spacelift, env0 či Scalr, ktoré postavili biznis okolo Terraformu.
Komunita reagovala rýchlo:
- Manifest "OpenTF" — otvorený list podpísaný stovkami firiem a tisíckami vývojárov žiadajúci HashiCorp o návrat k otvorenej licencii.
- Odmietnutie zo strany HashiCorpu — po týždňoch bez reakcie sa komunita rozhodla pre fork.
- Vznik OpenTofu — fork z poslednej MPL verzie Terraformu (1.5.x), prijatý Linux Foundation ako oficiálny projekt pod značkou OpenTofu.
- Akvizícia HashiCorpu IBM-om (2024) situáciu neupokojila — IBM nenavrátil licenciu späť na MPL, takže OpenTofu pokračuje ako plne nezávislá alternatíva.
OpenTofu vs Terraform — hlavné rozdiely
| Aspekt | Terraform (BSL) | OpenTofu (MPL) |
|---|---|---|
| Licencia | Business Source License 1.1 | Mozilla Public License 2.0 |
| Governance | HashiCorp/IBM | Linux Foundation, komunita |
| CLI príkaz | terraform |
tofu |
| Syntax HCL | Identická | Identická (plne kompatibilná) |
| State formát | v4 | v4 (kompatibilný obojsmerne s 1.5.x) |
| Provider registry | registry.terraform.io |
registry.opentofu.org (mirror + vlastné) |
| Module registry | HashiCorp | OpenTofu registry |
| Nové features | Proprietárne (1.6+) | State encryption, early variable eval, provider iteration |
V praxi: existujúce Terraform moduly, providery a state súbory fungujú v OpenTofu bez zmeny — pokiaľ ste na verzii ≤ 1.5.x. Od Terraformu 1.6 sa features začínajú rozchádzať.
Migrácia z Terraformu na OpenTofu
Oficiálna migrácia je navrhnutá tak, aby bola takmer bezbolestná:
# 1. Nainštaluj OpenTofu (macOS/Linux)
brew install opentofu
# alebo
curl --proto '=https' --tlsv1.2 -fsSL \
https://get.opentofu.org/install-opentofu.sh | sh
# 2. V existujúcom projekte spusti
tofu init
# 3. Over plán — musí sedieť s posledným terraform plan
tofu plan
# 4. Aplikuj
tofu apply
State file OpenTofu dokáže prečítať bez migrácie. Providery sa sťahujú z registry.opentofu.org (obsahuje mirror všetkých populárnych providerov ako aws, azurerm, google, kubernetes).
Backend kompatibilita
Zdieľanie state medzi terraform a tofu CLI funguje, ak obaja používajú rovnaký backend (S3, GCS, Consul, atď.). Odporúčanie: v projekte si zvoľte jeden nástroj a držte sa ho, aby ste sa vyhli zmätku v CI.
Nové features v OpenTofu, ktoré Terraform nemá
1. State encryption (1.7+)
OpenTofu podporuje natívne šifrovanie state súboru bez externých nástrojov. Konfigurácia v terraform bloku:
terraform {
encryption {
key_provider "pbkdf2" "mykey" {
passphrase = var.tofu_encryption_passphrase
}
method "aes_gcm" "secure" {
keys = key_provider.pbkdf2.mykey
}
state {
method = method.aes_gcm.secure
}
}
}
Po šifrovaní je .tfstate na disku binárny a nečitateľný bez hesla — riešenie dlhoročného problému Terraformu, kde state obsahoval citlivé údaje v čistom texte.
2. Early variable evaluation (1.8+)
V Terraforme nemôžete použiť premennú v backend alebo module.source. OpenTofu to dovoľuje:
variable "environment" {
type = string
}
terraform {
backend "s3" {
bucket = "tfstate-${var.environment}"
key = "main.tfstate"
region = "eu-central-1"
}
}
Výrazne zjednodušuje multi-environment setup bez generátorov ako Terragrunt.
3. for_each pre providery
Dynamické vytváranie inštancií providera podľa zoznamu regiónov alebo účtov:
provider "aws" {
for_each = toset(["eu-central-1", "us-east-1", "ap-southeast-1"])
alias = "region"
region = each.key
}
Toto je častý use-case v multi-region deploymentoch, ktorý v Terraforme vyžaduje manuálne opakovanie blokov.
Praktický príklad — kompletný modul
Jednoduchý S3 bucket s verzovaním a šifrovaním:
terraform {
required_version = ">= 1.7.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.region
}
variable "region" {
type = string
default = "eu-central-1"
}
variable "bucket_name" {
type = string
}
resource "aws_s3_bucket" "data" {
bucket = var.bucket_name
}
resource "aws_s3_bucket_versioning" "data" {
bucket = aws_s3_bucket.data.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "data" {
bucket = aws_s3_bucket.data.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
output "bucket_arn" {
value = aws_s3_bucket.data.arn
}
tofu init
tofu plan -var="bucket_name=my-unique-bucket-2026"
tofu apply -var="bucket_name=my-unique-bucket-2026"
Identicky to funguje v Terraforme — ukazuje plnú kompatibilitu.
Ekosystém a integrácie
OpenTofu má dnes širokú podporu v nástrojoch, ktoré boli pôvodne postavené nad Terraformom:
- Atlantis — PR-driven automation, podporuje
tofubinary cez env premennú. - Spacelift, env0, Scalr — všetky prešli na OpenTofu ako default.
- Terragrunt — podporuje
tofucezTERRAGRUNT_TFPATH=tofu. - tflint, tfsec, Checkov — fungujú bezo zmeny (pracujú nad HCL súbormi, nie nad CLI).
- GitHub Actions — oficiálny
opentofu/setup-opentofu@v1action.
GitHub Actions príklad
name: OpenTofu CI
on: [pull_request]
jobs:
plan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: opentofu/setup-opentofu@v1
with:
tofu_version: 1.8.0
- run: tofu fmt -check
- run: tofu init
- run: tofu validate
- run: tofu plan -no-color
Kedy zvoliť OpenTofu a kedy Terraform?
OpenTofu je vhodný ak:
- Chcete mať istotu, že váš IaC nástroj zostane open-source.
- Potrebujete state encryption bez externých nástrojov.
- Pracujete s multi-region / multi-backend setupom, kde sa hodí early variable evaluation.
- Využívate platformy (Spacelift, env0), ktoré aj tak prešli na OpenTofu.
Terraform má zmysel ak:
- Máte platenú zmluvu s HashiCorp/IBM a používate Terraform Cloud / Enterprise funkcie (napr. Sentinel, no-code modules, run tasks), ktoré OpenTofu nereplikuje.
- Máte hlboké napojenie na HCP (HashiCorp Cloud Platform).
V oboch prípadoch sú HCL súbory prenositeľné — voľba nie je "lock-in", skôr politická a strategická.
Zhrnutie
OpenTofu ukazuje, že aktívna komunita dokáže udržať kritický open-source nástroj aj proti vôli pôvodného vendora. Za necelé dva roky od svojho vzniku sa stal de facto štandardom pre firmy, ktoré chcú IaC bez právneho rizika BSL licencie, s aktívnym vývojom (state encryption, early eval, provider iteration) a s kompletnou kompatibilitou existujúcich Terraform kódov.
Ak dnes začínate nový projekt, OpenTofu je bezpečná voľba — dostanete všetko, čo Terraform ponúkal v období 1.5.x, plus features, ktoré HashiCorp do Terraformu nikdy nepridal.