# Terraform: the graph engine ships without the providers, and the build refuses parallelism

> This repository is Terraform core only, the CLI and the graph engine, with providers arriving as separately released plugins. The license is Business Source License 1.1, the README contains no install command at all, the Makefile is deliberately serialised, and the tree carries checkpoint and telemetry code the page never mentions.

**hashicorp/terraform** — GitHub describes it as Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a source-available tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.. The repository metadata lists Go as its primary language. The metadata lists the NOASSERTION license. This article stays within the project description and details documented in the GitHub repository README.

- Repository: https://github.com/hashicorp/terraform
- Website: http://developer.hashicorp.com/terraform
- Stars: 49,789 · Forks: 10,633
- Language: Go
- License: NOASSERTION
- Published: 2026-08-13 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/hashicorp-terraform

## Core only: the providers are downloaded plugins

The developing section is explicit that this repository contains only Terraform core, which is the command line interface and the main graph engine, and that providers are implemented as plugins. Terraform can download them automatically when they are published on the Terraform Registry, and the page notes that HashiCorp develops some providers while others are developed by other organisations, with plugin development documented separately. Consequence: the plan you review is only half of what runs. A provider is a separate program with its own release cadence and its own bugs, fetched at init time rather than vendored in this tree, so reproducibility depends on pinning versions in your own configuration and on that provider continuing to publish.

## The license is BUSL, and the metadata says nothing

The project description calls Terraform a source-available tool, which is the accurate word, and the license section links the Business Source License 1.1 rather than an OSI license. The Dockerfile header says the same thing in machine readable form with the SPDX identifier BUSL-1.1. The repository's own license field, meanwhile, is recorded as NOASSERTION. Consequence: an automated scan of your dependency list will not resolve a license for this tool, and a policy that accepts only MIT, Apache, or BSD will treat Terraform as unknown rather than as approved. The description is also the right lens for the rest of the page: infrastructure is shared, edited, reviewed, and versioned like code, and the tool that does it is not itself open source. Read LICENSE before you put it in a compliance answer.

## The README has no install command to copy

There is no installation snippet anywhere in this page. What you get is a list of destinations: the developer website, HashiCorp Discuss for Terraform core, the documentation, the Learn platform's getting started guides, and a certification exam page. The same pattern holds for the container route, and the reason is written into the Dockerfile comment: the file builds on a Golang alpine image from HashiCorp's own mirror, copies the source in, runs the build script, and sets TF_DEV and TF_RELEASE in the environment, but it explicitly says this produces an image holding a working binary together with all of its source code, and that it is not what produces the official images in the terraform namespace on Dockerhub, which contain only the released binary and come from a closed source official release process. Consequence: both the binary and the container arrive as downloads, and the reproducible build has to be one you assemble.

## Make is serialised on purpose

The Makefile ends with a .NOTPARALLEL declaration and a comment explaining that some commands during the build process create temporary files that collide under parallel conditions. The target list shows the size of the gate a change has to pass: generate and protobuf, defect-detector, fmtcheck, importscheck, vetcheck, staticcheck, exhaustive, copyright with a copyrightfix variant, and syncdeps. Protobuf gets its own target, separated from generate, because protoc is not a dependency Go can fetch and installing it is inconvenient. Consequence: a contributor who reaches for make -j gets collisions, and a two line change can fail on a copyright header, an exhaustive switch check, or a static analysis finding that has nothing to do with the change. The changelog is generated too, with .changie.yaml and a .changes/ directory, so the release note entry is a tool's output rather than a thing you write by hand.

## checkpoint.go and telemetry.go are in the tree and off the page

The top level contains checkpoint.go, telemetry.go, and telemetry_test.go, and the module requires hashicorp/go-checkpoint at v0.5.0 alongside the plugins, the HCL parser, and the registry address library. None of these appears in the README. Consequence for an operator with a compliance question or an air gapped network: the answer is in the source, not on this page, and the presence of a checkpoint dependency and a telemetry test in the same tree tells you the binary is expected to do both, without telling you when or what is sent. That is a case where reading the code is not optional, and where a governance review that only reads the README will produce a wrong answer.

## experiments.go lets two builds disagree about one config

There is a file named experiments.go at the top of the tree, alongside commands.go, help.go, provider_source.go, working_dir.go, and version.go, which is the shape of a program whose behaviour is assembled from named switches. Consequence: the same configuration file can be interpreted differently by two builds of the binary, and nothing in the four feature descriptions on the page mentions that a behaviour can be gated. If you adopt Terraform across a team with more than one build in circulation, the binary version becomes part of your configuration's meaning, and the list of experiment names is something you have to read in the source rather than look up in the documentation.

## Platform differences are split into separate files

Signal handling lives in two files, signal_unix.go and signal_windows.go, and the module pins the Go toolchain with go 1.26.8 plus a godebug directive for winsymlink.

```
go 1.26.8
godebug winsymlink=0
```

The dependency list reinforces the split, carrying a Windows oriented test dependency alongside cross platform helpers for user directories and terminal input, and .go-version pins the toolchain the project builds with. Consequence: the platform a plan is authored on is part of its meaning. Paths, symlink handling, and how an interrupted run cleans up differ between a Unix workstation and Windows, so a workflow that is comfortable locally on one platform is a different code path on the other, and the CI system that holds your state should not be the only place the other platform is ever exercised.

## The documentation you depend on lives in another repository

The contribution guidance sends three different kinds of change to three different places. Compiling the binary and suggesting code changes go to the contributing guide under .github/, bug reports are triaged with the process written down in BUGPROCESS.md, and documentation contributions are directed to the Web Unified Docs repository rather than to this one. The tree still carries website/ and docs/ directories, which makes the split easy to miss. Consequence: a documentation fix is a pull request against a different repository with a different review path, and the version of the documentation you are reading is not pinned to the version of the binary you installed. When an argument in the docs disagrees with the behaviour of your build, check which repository the text came from before you assume the tool is wrong.

## Conclusion

Terraform fits a team that wants infrastructure described in one declarative language and reviewed like code, and that accepts provider versions arriving from outside its own repository. It does not fit a requirement for a permissively licensed tool, since the license here is BUSL and the machine readable field says nothing, nor a build you have to reproduce from source, because the official release process is closed. Before you adopt it, read LICENSE rather than the source available label, pin provider versions in your configuration, and expect the documentation you will rely on to live in a separate repository from the code.

## FAQ

### What is Terraform used for?

For building, changing, and versioning infrastructure safely, using a high level configuration syntax that can manage existing and popular service providers as well as custom in house solutions. The four features named are infrastructure as code, execution plans, a resource graph that parallelises independent work, and change automation built on the first two.

### how to install terraform

This page gives you no install command to copy. It links the developer website, the documentation, the Learn platform's getting started guides, and a certification exam page, and the Dockerfile notes that the official container images come from a closed source release process rather than from the build in this repository.

### how to use terraform modules

Modules are not mentioned in this README, which covers infrastructure as code, execution plans, the resource graph, and change automation, plus provider plugin development. For anything about provider plugins the page points at the developer documentation for plugin development.

### Is Terraform like GitHub?

The analogy is about workflow rather than tooling. The description says infrastructure is codified into declarative configuration files that are shared among team members, treated as code, edited, reviewed, and versioned, which is a review and commit discipline, not a hosting product.

### What is Kubernetes vs Terraform?

This repository does not make that comparison. It describes Terraform as codifying APIs into declarative configuration files, and it is the core CLI and graph engine, with every service integration arriving as a provider plugin from the registry.

## Sources

- [Official documentation](http://developer.hashicorp.com/terraform)
- [Official README](https://github.com/hashicorp/terraform#readme)
- [Project repository](https://github.com/hashicorp/terraform)
- [Release notes](https://github.com/hashicorp/terraform/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/hashicorp-terraform
