You like deploying infrastructure, probably in a cloud environment, but you don’t want to push a bunch of buttons in their web interface, so you use Terraform to declaratively define the things you want, and it goes and builds them for you. Super useful for when you need to build resources often, to detect and correct config drift, and get started down the path of Infrastructure as Code.
In the past you would stand up and hand-configure all of the hardware that would run your software. This is a way to define the hardware configuration in software and apply it automatically. Advantages of this approach include increased scalability, reproducibility, and being able to use version control.
Plus, it is idempotent, which means you don't have to change it before pushing it to an existing infrastructure. If you do change it, the infrastructure will be updated to match. It ends the need for custom deployment scripts.
There's plenty of responses which are probably more thorough than I am, however, as I understand it as a PM dealing with cloud migrations:
Terraform is scripts of code which automates the deployment cloud platforms, applications, services so that you don't need to manually set up and configure everything each time.
Pulumi looks cool but unfortunately I haven't seen a single company advertising Pulumi as a desirable skill, so if I wanted to land a job in this area, I'd still be forced to learn Terraform.
(Not a legal advice) AFAIK, they can't. If you want to switch a license you have to get consent of all contributors or (in case of CLA shit) consent of the owner of the code