OpenTofu vs Terraform: Migrasi Setelah Perubahan Lisensi

Foto oleh Collins, Tudor Washington, 1898-1970, photographer via Wikimedia Commons (CC BY 4.0)
Untuk baseline hasil fork (Terraform 1.5.x), ya: sintaks HCL, struktur modul, protokol provider, dan format file state identik, dan biner provider yang sama bekerja untuk keduanya. Sebagian besar proyek bermigrasi tanpa perubahan kode sama sekali. Namun keduanya sudah berbeda sejak 2026, jadi fitur khusus OpenTofu seperti enkripsi state tidak bisa dibawa kembali ke Terraform.
Tidak. File state kompatibel biner antara Terraform 1.5.x dan OpenTofu di kedua arah. Anda mengarahkan OpenTofu ke state yang ada, baik lokal maupun di backend remote, dan ia membacanya langsung. Migrasi yang benar berakhir dengan plan yang menunjukkan nol perubahan.
Setelah mencadangkan state, pasang biner tofu dan jalankan tofu init -upgrade di direktori proyek, lalu tofu plan. Perintah init menarik provider dari registry OpenTofu dan menyegarkan file lock, dan plan seharusnya melaporkan tanpa perubahan terhadap state Anda yang ada. Kemudian perbarui CI Anda untuk memanggil tofu alih-alih terraform.
Ya, dalam kasus umum, karena state tetap kompatibel biner di kedua arah. Satu pengecualiannya adalah enkripsi state OpenTofu: begitu Anda mengenkripsi file state dan plan, Terraform tidak lagi bisa membacanya. Perlakukan pengaktifan enkripsi sebagai keputusan satu arah yang dikomitmenkan secara terpisah dari migrasi awal.
Pada Agustus 2023 HashiCorp memindahkan Terraform dari MPL 2.0 open source ke Business Source License, yang membatasi pembangunan produk komersial pesaing di atas kodenya dan bukan open source yang disetujui OSI. Komunitas mem-fork rilis MPL terakhir menjadi OpenTofu, yang kini dikelola di bawah Linux Foundation dengan lisensi MPL 2.0. Bagi tim yang menjual platform atau layanan terkelola, perbedaan lisensi itu biasanya jadi faktor penentu.

Foto oleh Collins, Tudor Washington, 1898-1970, photographer via Wikimedia Commons (CC BY 4.0)
Ringkasan Utama
OpenTofu adalah fork Terraform berlisensi MPL yang bisa langsung dipakai. File state kompatibel biner dengan Terraform 1.5.x di kedua arah, provider di-resolve dari nama yang sama, dan sebagian besar migrasi hanya berupa tukar biner plus tofu init -upgrade dan plan tanpa perubahan. Mengaktifkan enkripsi state OpenTofu adalah satu-satunya pintu satu arah.
Pada Agustus 2023 HashiCorp mengubah lisensi Terraform dari lisensi open-source MPL 2.0 menjadi Business Source License. BSL bukan open source: ia melarang siapa pun menawarkan produk pesaing yang dibangun di atas kode tersebut. Komunitas mem-fork versi MPL terakhir, dan fork itu menjadi OpenTofu, yang kini dikelola di bawah Linux Foundation. Tiga tahun berlalu, pertanyaan yang akhirnya ditanyakan setiap tim platform sederhana: tetap di Terraform, atau pindah ke OpenTofu, dan berapa biaya sebenarnya untuk pindah?
Saya menjalankan infrastruktur sebagai kode sendiri di armada VPS yang saya kelola, dan saya benar-benar melewati evaluasi ini. Ringkasnya: bagi kebanyakan tim, risiko lisensi adalah satu-satunya argumen yang penting, dan OpenTofu menghilangkannya tanpa mengharuskan Anda belajar ulang alatnya. Tapi ada catatan penting soal state, registry, dan titik di mana kedua proyek benar-benar sudah berbeda. Inilah yang sebenarnya terjadi saat Anda beralih.
BSL Terraform berarti Anda tidak boleh membangun produk komersial yang bersaing dengan HashiCorp menggunakan kode mereka, dan batas persis apa yang dianggap bersaing sengaja dibuat kabur. Bagi perusahaan yang hanya menyediakan cloud sendiri, ini jarang jadi masalah dalam praktik. Tapi ini adalah pertanyaan kepatuhan yang cepat atau lambat akan diangkat tim hukum Anda, dan jadi penghalang nyata jika Anda menjual platform atau layanan terkelola apa pun. OpenTofu berlisensi MPL 2.0, lisensi yang disetujui OSI tanpa klausul semacam itu. Jika kepastian lisensi penting bagi Anda, hal itu saja sudah menyelesaikan keputusan. Semua di bawah ini soal betapa mulusnya peralihan begitu Anda memutuskan.
OpenTofu di-fork dari Terraform 1.5.x, sehingga sintaks HCL, struktur modul, protokol provider, dan permukaan perintahnya identik. File .tf yang ada, modul Anda, file variabel Anda, semuanya bekerja tanpa perubahan. CLI-nya bernama tofu alih-alih terraform, tapi subperintahnya (init, plan, apply, destroy, state) sama. Di sebagian besar proyek, satu-satunya perubahan yang Anda buat adalah mengganti nama biner yang dipanggil di CI. Provider adalah kemenangan kompatibilitas terbesar: biner provider yang sama melayani kedua engine, dan alamat singkat seperti hashicorp/aws di-resolve otomatis.
Jangan hapus biner terraform di hari pertama. Simpan keduanya terpasang selama migrasi agar Anda bisa menjalankan terraform plan dan tofu plan berdampingan dan membandingkan keluarannya. Plan tofu tanpa perubahan terhadap state Anda yang ada adalah bukti bahwa peralihan berjalan transparan.
Ini bagian yang paling dikhawatirkan orang, dan kabar baiknya adalah format state kompatibel biner antara Terraform 1.5.x dan OpenTofu di kedua arah. Anda mengarahkan OpenTofu ke file state yang ada, entah tersimpan di backend S3, bucket GCS, atau file lokal, dan ia membacanya langsung. Tidak ada perintah migrasi state, tidak ada langkah konversi, tidak ada impor ulang. Itulah sebabnya migrasi yang berjalan baik berakhir dengan plan tanpa perubahan: OpenTofu melihat persis resource yang dicatat Terraform.
Pintu satu arah adalah enkripsi state. OpenTofu dapat mengenkripsi file state dan plan saat disimpan dengan kunci Anda sendiri, fitur yang tidak dimiliki CLI terbuka Terraform. Begitu Anda mengaktifkannya, file tersebut tidak bisa dibaca oleh Terraform. Jika Anda menyalakan enkripsi, Anda berkomitmen ke OpenTofu, jadi putuskan itu dengan sengaja dan hanya setelah migrasi biasa terverifikasi.
Inilah urutan sebenarnya yang saya pakai untuk satu proyek. Ia mencadangkan state lebih dulu, tidak menyentuh backend state, dan memverifikasi dengan plan sebelum apa pun diterapkan. Di proyek kecil ini benar-benar pekerjaan lima menit; varian yang memakan waktu seharian muncul dari nama biner yang di-hardcode di skrip pembungkus, perubahan lock-file, dan image runner CI yang masih hanya menyertakan terraform.
# 1. Back up remote state before touching anything
terraform state pull > terraform.tfstate.backup
# 2. Confirm both binaries are available
terraform version # e.g. Terraform v1.14.x
tofu version # e.g. OpenTofu v1.12.x
# 3. Re-init with OpenTofu, refreshing provider lock
tofu init -upgrade
# 4. The proof: this MUST say "No changes"
tofu plan
# Expected tail of output:
# No changes. Your infrastructure matches the configuration.
# 5. If a provider is not on the OpenTofu registry, pin it
# explicitly to the Terraform registry in required_providers:
#
# source = "registry.terraform.io/namespace/name"Terraform menarik provider dan modul dari registry.terraform.io; OpenTofu default ke registry.opentofu.org. Registry OpenTofu mencerminkan provider besar yang sudah Anda pakai (AWS, AzureRM, Google, dan ribuan lainnya) dan me-resolve alamat sumber singkat yang sama, sehingga sebagian besar konfigurasi tidak perlu diubah. Ketika sebuah provider belum dipublikasikan ke registry OpenTofu, Anda menimpa sumbernya ke alamat lengkap registry Terraform di blok required_providers. OpenTofu 1.10 juga menambahkan dukungan registry OCI, memungkinkan Anda menghosting provider di registry kontainer standar, yang berguna untuk lingkungan air-gapped atau yang dikontrol ketat.
Selama beberapa tahun pertama, kedua proyek saling mengikuti dengan ketat. Pada 2026 keduanya benar-benar berbeda: OpenTofu menghadirkan fitur CLI yang tidak dimiliki biner terbuka Terraform. Enkripsi state dan plan hadir di 1.7, evaluasi variabel awal (termasuk di konfigurasi backend) di 1.8, iterasi provider dengan for_each dan flag penargetan -exclude di 1.9, serta dukungan registry OCI di 1.10. Jika salah satunya menyelesaikan masalah nyata bagi Anda, itu kini jadi alasan untuk pindah selain sekadar lisensi. Sebaliknya, platform berbayar HCP Terraform dan fitur Stacks-nya tetap milik HashiCorp, sehingga tim yang sangat bergantung pada perkakas terkelola itu punya alasan untuk bertahan.
| Dimensi | OpenTofu | Terraform |
|---|---|---|
| Lisensi | MPL 2.0, open source disetujui OSI | Business Source License (bukan open source) |
| Tata kelola | Linux Foundation, multi-vendor | HashiCorp (dimiliki IBM) |
| Format file state | Kompatibel biner dengan Terraform 1.5.x dua arah | Format dasar sama (asal fork) |
| Enkripsi state | Bawaan sejak 1.7 (satu arah begitu diaktifkan) | Tidak ada di CLI terbuka |
| Registry default | registry.opentofu.org (+ OCI, + fallback registry TF) | registry.terraform.io |
| Upaya migrasi | Tukar biner + tofu init -upgrade + plan tanpa perubahan | T/A (sumber) |
Untuk proyek baru, atau tim mana pun tanpa ketergantungan keras pada HCP Terraform, saya default ke OpenTofu. Kepastian lisensi itu gratis, fitur CLI tambahannya nyata, dan migrasinya nyaris tanpa dampak. Untuk toko Terraform yang mapan, perlakukan ini sebagai langkah berisiko rendah bernilai tinggi: migrasikan satu proyek non-kritis lebih dulu, buktikan plan tanpa perubahan, perbarui CI, lalu terapkan polanya secara luas. Sisakan enkripsi state sebagai langkah kedua yang disengaja, karena itu satu-satunya keputusan yang tidak bisa Anda tarik kembali dengan mudah. Janji kompatibilitas di sini bukan pemasaran; ia benar-benar terbukti saat saya menjalankannya.