Disagree with a license? Fork the project, but donโt lift the code and say it was always publicly available. Compare HashiCorp's code and license to OpenTofu's version.
Update: Since this article was published, HashiCorp sent OpenTofu a cease-and-desist letter on April 3, 2024, expressing in greater detail the concerns raised in this post. On April 11, 2024, the OpenTofu maintainers responded with a detailed analysis of the claims made about the removed block. Based on these documents, it appears that the OpenTofu community did notย misappropriate HashiCorpโsย intellectual property.ย
OpenTofuโs founders had a mission. Upset by HashiCorp licensing changes in August 2023 to its popular Terraform infrastructure-as-code tool, OpenTofu set out to be the โopen source successor to the MPLv2-licensed Terraform,โ further promising that it โwill be community-driven, impartial, layered and modular, and backward-compatible.โ
Hugely promising, but extraordinarily difficult to pull off. So difficult in fact, that OpenTofu may have illegally taken HashiCorpโs code to keep pace.
At least, itโs hard to avoid that conclusion, perusing OpenTofuโs GitHub repositories and comparing them to HashiCorpโs. Specifically, OpenTofu appears to have lifted Terraform code related to a new removed block feature first implemented in Terraform V1.7, which was released under the Business Software License (BUSL) a few months after the OpenTofu fork was created. The tell? OpenTofu took this BUSL-licensed HashiCorp code, removed the headers, and tried to instead relicense it under the Mozilla Public License (MPL 2.0).
Folks, thatโs not how open source works. You can disagree with a copyright holderโs choice of license, but you donโt have the right to take someone elseโs code and rip-and-replace their license.
The hubris of youth
OpenTofu launched in September 2023 to much fanfare and โformal pledgesโ of support from more than 140 organizations, among them Cloudflare, Harness, Oracle, and GitLab. Of course, the core maintainers mostly came from direct HashiCorp competitors (Spacelift, env0) that had built their businesses on Terraform and were upset by HashiCorpโs license change. Fair enough.
By January, the project was toutingย OpenTofuโs general availability, even as it called out soon-to-be-released features like client-side state encryption that Terraform didnโt have. Despite the optimistic start, however, the team soon began to realizeย the difficultyย of implementing the feature. Security is hard. (Maybe HashiCorp wasnโt dumb, after all.)
If that pace of development sounds too good to be true, coming from a hastily assembled group of relatively small companies (and none of the major cloud vendors), perhaps it was. After all, whatever one may think about HashiCorpโs license change, the company has spent a decade building the product. The engineering muscle behind such an effort doesnโt spring to life in a few months, whatever the high-flying ideals of founders.
Licensing magic
In Terraform V1.7,ย HashiCorp introduced a major new feature: removed block automation, which lets Terraform better manage resource deletion. Think of it as a config-driven approach to terraform state rm. However, the feature itself, while cool, isnโt the point. The timing of that feature is. Importantly, this feature was introduced in late November 2023 after HashiCorp switched to the BUSL. If someone wanted to use the removed block functionality, they couldnโt get it under the MPL.
By late February, OpenTofu released similar functionality to HashiCorpโs removed block automation. Not just in terms of what it does, but also in terms of the code written to accomplish it. Take a look at these repositories and tell me if you donโt see the same thing:
- Terraformโs remove_statement.go versus OpenTofuโs remove_statement.go
- Terraformโs removed.go versus OpenTofuโs removed.go
- Terraformโs removed_test.go versus OpenTofuโs removed_test.go
- Terraformโs remove_target_test.go versus OpenTofuโs remove_test.go
- Terraformโs remove_target.goย versus OpenTofuโsย remove_endpoint_test.go
Copyright law is complicated. I am a lawyer by background, but I donโt practice and so canโt be considered a very good one. Maybe it matters that OpenTofu seems to have deleted some comments in a few files. Maybe it matters that they seem to have changed a line here or there. Perhaps one could credibly argue that OpenTofu has not, in fact, created derivative works of Terraformโs BUSL-licensed code. Perhaps.
Such an argument becomes less persuasive, however, when you look at OpenTofuโs headers on the files. Hereโs the header that HashiCorp used on its removed block files:
// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: BUSL-1.1
Now hereโs the header that OpenTofu used:
// Copyright (c) 2023 HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0
See the problem? OpenTofu recognizes that itโs using HashiCorpโs code but pretends the code in question was licensed under the MPL. Except it wasnโt. Ever. All of the code in question was released after HashiCorp moved to BUSL for Terraform. At best, the OpenTofu community has engaged in wishful thinking, desperately hoping it could retroactively make BUSL-licensed code magically become MPL-licensed code. At worst, the OpenTofu developers deceitfully misappropriated HashiCorpโs intellectual property and tried to make it their own.
Whatever OpenTofuโs developers may think, this sort of behavior is the opposite of a positive, โcommunity-driven approachโ and definitely doesnโt show โthe value of open source,โ as the Linux Foundation press release proclaims. It looks a lot like a violation of HashiCorpโs intellectual property. Itโs completely fair for OpenTofu to disagree with HashiCorpโs license change and fork the project; itโs completely illegal for OpenTofu or anyone else to take HashiCorpโs code and apply whatever license they prefer.
This feels like a failure of governance, among other things. Thereโs no way that Cloudflare, Oracle, and other responsible companies signed up for that kind of community, but that seems to be what theyโre getting.


