🍀 HashiCorp背叛了吗?— Terraform的历史与OpenTofu诞生的真正原因

开源并非免费。它只是自由的。

当有人试图剥夺这种自由时,社区会以分叉(fork)回应。

🎯 本文涵盖内容

  • Terraform如何成为IaC(Infrastructure as Code)的标准
  • HashiCorp改变许可证的原因和社区的反应
  • OpenTofu诞生的背景以及加入CNCF的原因
  • OpenTofu与Terraform,现在有哪些区别
  • OpenTofu的未来以及我们应该做出何种选择

📌 引言 — “我们信任的工具突然变了”

将基础设施作为代码管理的概念,即IaC(Infrastructure as Code)。在这个领域,长期以来事实上的标准工具就是Terraform

无论是AWS、Azure还是GCP,只需几行.tf文件就能轻松创建云基础设施的Terraform。这个被数百万工程师日常使用的工具,在2023年8月突然改变了许可证。

反应是即时的。社区感到愤怒,企业感到困惑,最终,一个名为OpenTofu的新项目诞生了。短短几个月内,它就成为了CNCF(Cloud Native Computing Foundation)的官方项目。

本文将从头到尾梳理整个事件。从Terraform的历史,到OpenTofu为何必须诞生,以及未来将如何发展。


🔍 Terraform的历史 — 如何登上IaC的宝座

诞生 (2014年)

Terraform是HashiCorp于2014年创建的开源IaC工具。HashiCorp以Vagrant、Consul、Vault、Nomad等基础设施相关工具而闻名。

当时的问题是这样的:随着云计算的爆炸式增长,通过控制台(GUI)点击创建基础设施资源的方式遇到了瓶颈。手动管理数百台服务器、几十个网络设置?这不可能。错误多,无法重现,协作也困难。

Terraform的解决方案既简单又强大。

# main.tf — 声明一个AWS EC2实例的示例
provider "aws" {
  region = "ap-northeast-2"  # 首尔区域
}

resource "aws_instance" "web" {
  ami           = "ami-0c9c942bd7bf113a2"
  instance_type = "t3.micro"

  tags = {
    Name = "my-web-server"
  }
}

只需这一个文件,一个`terraform apply`就能创建一个EC2实例。`terraform destroy`则能干净地删除它。因为是代码,所以可以用Git进行版本控制,也可以与团队成员共享。

成长 (2015~2020年)

Terraform的核心设计理念是声明式(Declarative)方法。它不是说“请这样创建”,而是“最终状态是这样的”,然后Terraform会与当前状态进行比较,自动执行所需的操作。

此外,Provider生态系统也爆炸式增长。从AWS、Azure、GCP到GitHub、Datadog、Cloudflare、Kubernetes——数千个Provider被上传到Registry。实际上,“云世界的一切”都可以通过Terraform进行管理。

# 同时管理多个云的示例
provider "aws" {
  region = "ap-northeast-2"
}

provider "azurerm" {
  features {}
  subscription_id = var.azure_subscription_id
}

# AWS上的S3存储桶
resource "aws_s3_bucket" "backup" {
  bucket = "my-backup-bucket-2024"
}

# Azure上的存储账户
resource "azurerm_storage_account" "backup" {
  name                     = "mybackupstorage2024"
  resource_group_name      = var.resource_group
  location                 = "koreacentral"
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

对于采用多云战略的企业来说,Terraform不再是选择,而是必需品。

鼎盛时期 (2020~2023年)

2021年,HashiCorp在纳斯达克上市。企业价值数十亿美元。Terraform成为了DevOps/云工程师必须掌握的工具,相关的认证(HashiCorp Certified: Terraform Associate)也应运而生。

然而,成为上市公司也意味着要向股东和投资者而非社区负责。2023年,这种裂痕显现出来。


💥 许可证变更 — 那一天的冲击

2023年8月10日

HashiCorp宣布将其主要产品(包括Terraform)的许可证从原有的MPL 2.0(Mozilla Public License 2.0)更改为BSL 1.1(Business Source License 1.1)

这为什么是个问题呢?我们来比较一下差异。

项目 MPL 2.0 (原有) BSL 1.1 (变更后)
个人使用 ✅ 自由 ✅ 自由
企业内部使用 ✅ 自由 ✅ 自由
开源项目 ✅ 自由 ✅ 自由
构建与HashiCorp竞争的产品/服务 可能 不可能
OSI官方开源认证 ✅ 已认证 ❌ 未认证

核心只有一点:“HashiCorp的竞争对手不能利用Terraform构建商业服务。”

HashiCorp的逻辑是这样的:“一些企业利用我们的开源赚钱却不贡献。我们也需要可持续的业务。”这话并非全无道理。

但社区的反应却不同。

我们10年来贡献并发展生态系统,正是因为它是开源的。

现在突然改变规则,这不是背叛吗?

Spacelift、Env0、Scalr等基于Terraform构建服务的企业受到了直接冲击。因为它们与HashiCorp的Terraform Cloud存在竞争关系。


🍀 OpenTofu的诞生 — 社区的分叉(Fork)

OpenTF宣言 (2023年8月)

许可证变更宣布后,社区迅速行动。数十家企业和数千名开发者签署了OpenTF宣言。要点很简单。

  1. 请求HashiCorp恢复到MPL 2.0
  2. 如果HashiCorp不恢复,我们将直接创建一个真正的开源Terraform分叉

参与签署的企业包括Gruntwork、Spacelift、Env0、Terragrunt的开发商等重量级公司。HashiCorp没有回应。

OpenTofu诞生 (2023年9月)

于是,OpenTofu诞生了。它是基于Terraform最后一个MPL 2.0版本(1.5.x)的官方分叉。

名字的由来很有趣。🍀 采用三叶草表情符号作为吉祥物,以及Tofu(豆腐)。豆腐可以搭配任何菜肴,可以自由改变形状,就像开源一样,任何人都可以制作。这是一个巧妙地通过食物表达开源哲学的命名。

OpenTofu 초기 참여 기업/프로젝트:
- Gruntwork (Terragrunt 개발사)
- Spacelift
- Env0
- Scalr
- Digger
- Terramate
- ... 수십 개 기업

加入CNCF (2023年9月)

OpenTofu以惊人的速度加入了CNCF(Cloud Native Computing Foundation)Sandbox项目。这距离宣布仅几周时间。


☁️ 什么是CNCF,OpenTofu为何加入它?

CNCF介绍

CNCF是Linux基金会旗下的一个非营利组织。它囊括了Kubernetes、Prometheus、Envoy、Argo CD、Helm等云原生生态系统的核心项目。简而言之,它是“云原生世界的官方之家”

成为CNCF项目意味着:

  • 🔒 中立性保障: 独立于特定企业的利益
  • 💰 财政支持: 基础设施、市场营销、法律支持
  • 🏛️ 治理: 透明的决策结构
  • 🌍 社区: 全球贡献者网络

OpenTofu选择CNCF的原因

OpenTofu最大的风险是成为“另一个HashiCorp”。因为最初以开源开始,后来因商业利益而改变许可证的情况可能会重演。

加入CNCF从结构上杜绝了这种风险。

  • 任何单一企业都不能“拥有”OpenTofu
  • 未经整个社区的共识,许可证变更是不可能的
  • MPL 2.0许可证将永久保留

就像Kubernetes从Google移交给CNCF一样,OpenTofu也走上了同样的道路。


🔄 OpenTofu vs Terraform — 现在有哪些区别?

最初,它们几乎完全相同。Terraform代码可以直接在OpenTofu中使用。但随着时间的推移,差异正在产生。

当前(2024~2025年)主要区别

功能 Terraform OpenTofu

许可证 BSL 1.1 (非开源) MPL 2.0 (开源)
状态加密 ❌ 不支持 ✅ 原生支持
Provider函数 受限 扩展支持
开发透明度 HashiCorp主导 社区主导
GitHub Stars增长趋势 放缓 急剧上升

特别是状态文件加密是OpenTofu的杀手级功能。Terraform的状态文件经常以明文形式存储敏感信息(密码、API密钥等),存在安全隐患,而OpenTofu原生支持此功能。

# OpenTofu — 状态加密配置示例
terraform {
  # 在OpenTofu中,'terraform'块保持不变
  encryption {
    key_provider "pbkdf2" "my_passphrase" {
      passphrase = var.state_passphrase
    }

    method "aes_gcm" "my_method" {
      keys = key_provider.pbkdf2.my_passphrase
    }

    state {
      method = method.aes_gcm.my_method
    }
  }
}

迁移有多容易?

对于现有的Terraform用户,在大多数情况下,只需这样做:

# macOS (Homebrew)
brew install opentofu

# 将现有Terraform命令替换为tofu
terraform init    →  tofu init
terraform plan    →  tofu plan
terraform apply   →  tofu apply
terraform destroy →  tofu destroy

# .tf文件无需修改即可使用(大多数情况下)

.tf文件内部的代码几乎不需要修改。因为HCL语法本身是相同的。


⚠️ 注意事项 — OpenTofu引入清单

1. 检查Provider兼容性 大多数Provider是兼容的,但某些企业专用Provider可能仅针对HashiCorp Terraform进行了优化。引入前务必确认。

2. 如果您正在使用Terraform Cloud/Enterprise 与HashiCorp的托管服务(Terraform Cloud、Terraform Enterprise)的集成当然是Terraform专用的。切换到OpenTofu时,应考虑Spacelift、Env0、Scalr、Atlantis等替代方案。

3. 状态文件管理 现有的Terraform状态文件可以被OpenTofu直接读取。但是,如果启用OpenTofu的状态加密功能,可能难以再回到Terraform。

4. 团队内版本统一 在团队内部混用Terraform和OpenTofu可能会导致混乱。建议在切换时,整个团队同时进行切换。


🔭 OpenTofu的未来 — 乐观的理由

IBM收购HashiCorp (2024年)

2024年,IBM以约64亿美元收购了HashiCorp。这一消息反而对OpenTofu社区起到了积极作用。我们已经无数次看到,大型企业收购后开源政策变得更加受限的案例。这成为了那些考虑转向OpenTofu的企业下定决心的契机。

快速增长势头

  • GitHub Star数量:突破数万(快速增长中)
  • 贡献者数量:数百名全球开发者
  • 企业赞助:数十家主要科技公司
  • 晋升为CNCF孵化阶段

社区驱动的优势

OpenTofu正在迅速添加Terraform尚未解决的功能。这些是社区多年来一直要求但HashiCorp未优先处理的功能。状态加密就是其中一个典型例子。

仍然需要使用Terraform的情况

尽管OpenTofu非常出色,但仍有一些情况需要选择Terraform。

  • 如果需要HashiCorp的官方企业支持
  • 如果正在使用与Terraform Cloud深度集成的S工作流
  • 如果组织规定需要CNCF项目之外的特定供应商官方支持

✅ 总结 — 开源的自由由分叉守护

时间点 事件
2014年 HashiCorp以MPL 2.0发布Terraform开源版本
2021年 HashiCorp在纳斯达克上市
2023年8月 Terraform宣布将许可证更改为BSL 1.1
2023年8月 OpenTF宣言发布,数千人签署
2023年9月 OpenTofu正式启动,加入CNCF Sandbox
2024年 IBM完成对HashiCorp的收购
2024~2025年 OpenTofu晋升为CNCF孵化项目并添加独有功能

Terraform无疑是一个伟大的工具,现在依然如此。但OpenTofu再次证明,开源的力量不在于特定企业,而在于社区

推荐的下一步学习方向:

  • OpenTofu官方文档: opentofu.org
  • 理解CNCF项目生态系统
  • 基于OpenTofu的工作流工具,如Terragrunt、Atlantis
  • 状态加密实践

如果您是IaC的初学者,现在建议从OpenTofu开始。📦


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注