Warum Infrastructure as Code für Self-Hoster unverzichtbar ist

Wer seinen eigenen Server betreibt – ob bei Hetzner, im Homelab oder in einer gemischten Cloud-Umgebung – kennt das Problem: Mit der Zeit wächst die Infrastruktur, und irgendwann weiß niemand mehr, warum bestimmte Einstellungen so konfiguriert wurden, wie sie sind. Ich betreibe typoniels.dev auf einem RKE2-Kubernetes-Cluster, und bevor ich Infrastructure as Code eingeführt hatte, war jede Änderung ein Glücksspiel.

Infrastructure as Code (IaC) löst dieses Problem elegant: Infrastruktur wird wie Code behandelt – versioniert, reviewed und automatisch ausgerollt. Terraform war lange Zeit das Tool der Wahl für genau diese Aufgabe. Bis HashiCorp im August 2023 die Spielregeln geändert hat.

Der HashiCorp-Lizenzstreit: Was genau ist passiert?

Im August 2023 hat HashiCorp die Lizenz von Terraform von der Mozilla Public License 2.0 (MPL-2.0) auf die Business Source License (BUSL 1.1) umgestellt. Das klingt nach einer Kleinigkeit, hat aber erhebliche Konsequenzen.

Die BUSL erlaubt zwar die Nutzung des Codes, verbietet aber die "Verwendung in kompetitiven Produkten oder Dienstleistungen". Für den normalen Self-Hoster ist das technisch gesehen zunächst kein Problem. Aber es hat eine wichtige Signalwirkung: HashiCorp – mittlerweile von IBM übernommen – hat demonstriert, dass es bereit ist, eine wichtige Open-Source-Lizenz rückwirkend zu verändern.

Die Reaktion der Community war schnell: Bereits im August 2023 wurde das OpenTofu-Projekt als Fork von Terraform gegründet. Im Januar 2024 nahm die Linux Foundation OpenTofu als offizielles Projekt unter ihr Dach – ein starkes Signal für die Legitimität und Langlebigkeit des Projekts.

Was ist OpenTofu?

OpenTofu ist ein direkter Fork von Terraform, der unter der MPL-2.0-Lizenz weiterentwickelt wird. Die Syntax ist nahezu identisch mit Terraform – wer Terraform kennt, kann OpenTofu sofort produktiv einsetzen.

Das Projekt wird von einer breiten Koalition aus Unternehmen getragen: Gruntwork, Spacelift, env0, Scalr, Harness und viele weitere. Die Linux Foundation als neutrale Dachorganisation sorgt für eine Governance-Struktur, die nicht von einem einzelnen kommerziellen Interesse abhängig ist.

Feature Terraform (aktuell) OpenTofu
Lizenz BUSL 1.1 MPL-2.0
Governance HashiCorp / IBM Linux Foundation
Provider-Kompatibilität Terraform Registry OpenTofu Registry + Terraform-kompatibel
State-Kompatibilität Vollständig kompatibel
Native State Encryption Nicht vorhanden Seit v1.7 eingebaut
Preis Kostenlos (BUSL-Einschränkungen) Kostenlos, echtes Open Source

Ein besonders wichtiges neues Feature in OpenTofu: Native State Encryption. Terraform speichert den State-File standardmäßig im Klartext. OpenTofu hat diese Funktionalität direkt in den Core integriert:

terraform {
  encryption {
    key_provider "pbkdf2" "mein_key" {
      passphrase = var.state_encryption_passphrase
    }

    method "aes_gcm" "verschluesselt" {
      keys = key_provider.pbkdf2.mein_key
    }

    state {
      method = method.aes_gcm.verschluesselt
    }
  }
}

Migration von Terraform zu OpenTofu: Schritt für Schritt

Die Migration ist einfacher als die meisten erwarten:

# OpenTofu installieren (macOS)
brew install opentofu

# Linux
curl --proto '=https' --tlsv1.2 -fsSL \
  https://get.opentofu.org/install-opentofu.sh | sudo bash
# Sicherung des bestehenden Terraform-States
terraform state pull > terraform.tfstate.backup

# OpenTofu initialisieren – liest bestehenden State direkt
tofu init
tofu plan

# Lock-File neu generieren
rm .terraform.lock.hcl
tofu init
git add .terraform.lock.hcl
git commit -m "migrate: Wechsel von Terraform zu OpenTofu"

In meinem GitLab CI/CD habe ich nur die Binary ausgetauscht:

variables:
  OPENTOFU_VERSION: "1.8.0"

.tofu_setup: &tofu_setup
  before_script:
    - wget -q "https://github.com/opentofu/opentofu/releases/download/v${OPENTOFU_VERSION}/tofu_${OPENTOFU_VERSION}_linux_amd64.zip"
    - unzip -q tofu_${OPENTOFU_VERSION}_linux_amd64.zip
    - mv tofu /usr/local/bin/
    - tofu version

plan:infrastructure:
  stage: validate
  <<: *tofu_setup
  script:
    - tofu init
    - tofu plan -out=tfplan

apply:infrastructure:
  stage: deploy
  <<: *tofu_setup
  script:
    - tofu init
    - tofu apply tfplan
  when: manual
  only:
    - main

Meine persönliche Erfahrung

Ich habe den Wechsel auf meinem RKE2-Cluster durchgeführt, der typoniels.dev betreibt. Die eigentliche Migration hat weniger als eine Stunde gedauert – und das war hauptsächlich Testen und Dokumentieren, nicht das eigentliche Migrieren.

Was mich am meisten überzeugt hat: Die State Encryption. Mein State enthielt bisher Datenbank-Passwörter und API-Keys im Klartext. Mit OpenTofu ist das Problem elegant gelöst – ohne externe Abhängigkeiten.

Fazit

Der HashiCorp-Lizenzwechsel war ein Weckruf – und die Community hat gezeigt, dass sie solche Moves nicht einfach akzeptiert. OpenTofu ist mittlerweile ein reifes, gut unterstütztes Projekt unter dem Dach der Linux Foundation.

Für Self-Hoster gibt es heute keinen überzeugenden Grund mehr, bei Terraform zu bleiben. Die Migration ist überschaubar, das Feature-Set ist mindestens gleichwertig – mit der State Encryption sogar besser. Wer neu mit IaC anfängt, sollte direkt mit OpenTofu beginnen.