💬

TFLintもTerraformのライセンス変更の影響を受けていないか調査

2024/01/23に公開

Terraformのライセンス変更のせいでインフラプロジェクトの自動テストの設計が破綻した話の続き。

Terratest以外にもTFLintを導入する予定だったが、これも競合製品に該当する可能性が高い気がしたので、今後のTerraformのバージョンアップに対応していけるのか調べた。

そもそもTFLintがどんなツールなのか軽く説明すると、要はTerraformの.tfファイルに対する静的チェックを行なってくれるツールである。

チェックしてくれるルール項目はこちらのページを読むだけで全部分かる。

チェックしてくれるルールはそこまで多くないものの、リソース名をスネークケースに統一したり、コメントを//ではなく#だけを使うように強制したり、variableやoutputをvariables.tfやoutputs.tfに集約することをルール化したりと、地味に嬉しいチェックが揃っている。

ちなみにTerraformの設定ファイルのルールチェックはOPAで実装する予定で、基本的に1つのテスト(静的チェック)に使うツールは学習・保守コストの観点から1つに絞るべきであり、OPAでの実装だけでいくことも考えたが、TFLintは学習コストが極めて低いのと、TFLintのルールをOPAで焼き直しするのも微妙に面倒なので採用していた。

がしかし、この問題の影響によっては外す必要も出てくる。

調査

tflint licenseなどで検索してみたところ、早速HashiCorpのライセンス関連の話題を扱うスレッドが見つかった。

このスレッド内をtflintを検索してみたところ、TFLintのメンテナがLicenseに関する質問をしていた(ありがたや)。

https://discuss.hashicorp.com/t/hashicorp-projects-changing-license-to-business-source-license-v1-1/57106/3

メンテナからの質問を要約すると以下。

  • TFLintはTerraformの挙動をエミュレートするためにTerraformのコードのコピーを保持しているが、そのコードはBSL(ライセンス)に変更する必要があるのか?
  • BSLのソースコードをライブラリとして利用しているOSS(=TFLint)も、BSLにライセンス変更しなければいけないのか?
  • TFLintのプラグインであるtflint-ruleset-opaは、HashiCorpのPaC(Policy as Code)プロダクトであるSentinelと競合する可能性があり、BSL違反とならないか?

それに対してのHashiCorp側の回答が以下。

https://discuss.hashicorp.com/t/hashicorp-projects-changing-license-to-business-source-license-v1-1/57106/7

TFLintはTerraformの挙動をエミュレートするためにTerraformのコードのコピーを保持しているが、そのコードはBSL(ライセンス)に変更する必要があるのか?

Terraformのコードのコピーに関してはBSLが適用されるとのこと。

しかしTFLint自体のライセンスは変更する必要がないとしている。

BSLのソースコードをライブラリとして利用しているOSS(=TFLint)も、BSLにライセンス変更しなければいけないのか?

TFLintの既存のライセンスと、コードコピーによるBSLが混在したライセンス状態になるらしい。

(いまいちどんな状態か自分はよく分からない)

TFLintのプラグインであるtflint-ruleset-opaは、HashiCorpのPaC(Policy as Code)プロダクトであるSentinelと競合する可能性があり、BSL違反とならないか?

ソースコードをレビューしたところ、host or embedしてないので、BSL違反ではないらしいとの回答。

(GruntWorkが如何様にも拡大解釈可能と批判していたhost or embedがここで登場)

以上でメンテナの方とHashiCorpのやり取りは終了している。

つまり、コピー部分のライセンスは変更しないといけない状態だが、それ以外は継続開発して問題ないという解釈でいいのか?

さらにスレッド内をtflintやメンテナの方のHNで検索してみたが、それ以上の有益な情報は無かった。


結局のところ、TFLintのCHANGELOGやPR、ソースコードを調べればTerraform 1.6以降もサポートが継続されているかどうか分かると気づいたので、ソースコードプロジェクトに戻る。

まずCHANGELOGを見る限り、ライセンスに関する記述は無いが、現在も開発は継続している状態。

そもそもだが、もし仮に保守開発が止まったとしても、TerraformのメジャーバージョンアップによってHCLの基本的な記述方法が変わるとかでも起きない限り、既存の機能(ルール)を使い続けるだけでも、十分有益なのではと思った。

何より、学習コストも導入コストも低く、仮に外さないといけなくなった場合でもそこまで痛くない(OPAでの書き直しはあるが)ので、TFLintに関しては継続採用ということで決着。

追記

(2024年4月1日) 最近HashiCorpからコードスタイルガイドが発表されて、その中でTFLintに触れているのでTerratestと同じ道は辿らなそう。

Discussion