1 ポイント 投稿者 GN⁺ 2023-10-09 | 1件のコメント | WhatsAppで共有
  • Homebrew/homebrew-core PR #139538 は、HashiCorpの ライセンス変更 により terraform formula にユーザー向け警告を追加し、将来的に無効化される可能性があることを知らせる変更
  • 変更理由は、ライセンス変更以降 homebrew-core で terraformバージョン更新が今後行われなくなること であり、ユーザーがインストール時にそれを認識できるようにすることに重点がある
  • レビュー過程では、1.6.0 より前の将来リリースは受け入れ可能かもしれないが、そのようなリリースが存在しない可能性もあるという バージョン例外 が議論された
  • PR は依存関係の整理後、2024年4月4日に再びレビュー準備完了状態となり、未来形の文言を削除すべきというフィードバックを反映して terraform: deprecate and add caveat コミットで更新された
  • 最終変更は 2024年4月5日、merge queue を通じて Homebrew masterコミット 4782218 としてマージされ、関連する terraform 廃止 PR #168090 もマージされた

terraform formula の廃止と警告追加

  • PR #139538 の目的は、HashiCorp の ライセンス変更 により homebrew-core で terraform のバージョン更新が今後行われない状況をユーザーに知らせること
  • 当初の説明は、「将来的にこの formula を無効化する可能性がある」ことをユーザーに伝える方向だった
  • 変更対象は Formula/terraform.rb で、その後ファイルパスは Formula/t/terraform.rb として表示された
  • PR には formula deprecatedbusl-licensegomaintainer feedback などのラベルが付けられた

バージョンとライセンスをめぐる議論

  • レビュー中、terraform の将来リリースのうち 1.6.0 より前のバージョン は受け入れ可能かもしれないという意見が出た
    • ただし、そのようなリリースが実際には存在しない可能性も示された
  • PR の説明は、ライセンス変更以降 homebrew-core ではこれ以上バージョン更新が行われない点を変更の根拠としている
  • その後のコミットメッセージは、「ライセンス変更により homebrew-core で今後バージョン更新が行われないため、将来的にこの formula を無効化する」という趣旨を含んでいた

レビューと変更反映の流れ

  • 2023年8月14日に PR が作成され、複数の maintainer が Formula/terraform.rb の変更をレビューした
  • 2023年9月6日にはレビュー反映を求める ping があり、作成者は反映完了を知らせた
  • 2023年9月7日に MikeMcQuaid が変更を承認したが、merge queue でステータスチェック失敗により除外された
  • 2023年9月20日には chenrui333 も変更を承認した
  • 2024年2月23日に PR は draft として表示された

依存関係の整理と関連 PR

  • 2024年3月13日には cdktf: deprecate コミットがこの PR を参照した
    • そのコミットメッセージでは、cdktf がまもなく廃止される terraform を使用していると述べている
    • terraform の廃止を妨げる最後の formula のひとつだと説明している
    • cdktf は月700回以上ダウンロードされており、HashiCorp GitHub org でホストされているものの BUSL ライセンス変更の影響は受けないと記されている
  • 関連 PR として cdktf: deprecate #166001 がマージされた
  • 2024年4月3日には atlantis: vendor terraform #167948 がこの PR を参照し、マージされた

最終整理とマージ

  • 2024年4月4日、作成者は「すべての依存関係を処理したので、これで問題ない」と伝え、PR を review ready に切り替えた
  • p-linnane は、すでにその状況は発生しているため、未来形の表現 を削除できるとフィードバックした
  • 作成者はこれを反映し、terraform: deprecate and add caveat コミット 1c7b99b でブランチを更新した
  • p-linnane、MikeMcQuaid、chenrui333 が最終変更を承認した
  • 2024年4月5日、PR は merge queue を通じて Homebrew master にコミット 4782218 としてマージされた
  • 同日、terraform: deprecate and add caveat #168090 もマージ済み PR として参照された

1件のコメント

 
GN⁺ 2023-10-09
Hacker News の意見
  • 依存パッケージをすぐに廃止するのではなく、代替品に置き換えられるかを見るために保留中である点が重要
    たとえば Terraform に依存するプログラムは、OpenTofu を代替品として使える可能性が高い
    残念ながら Vault、Consul、Nomad にはオープンソースの代替が出てくるとは思えない。特に Nomad は、HashiCorp が投資をやめるまでは良い製品だったのに、非公開ソースになった以上、採用される可能性はほとんどなさそうで、もはや笑えてくる

    • 誰かが Vault の公開フォークを始めるなら、時間があるときに貢献したい
      追記: https://github.com/hashicorp/vault/graphs/contributors?from=...
    • Nomad はかなり好き。k3s よりもさらに軽量で、自分の低予算プロジェクトにはとてもよく合っていた
      こういう流れになっているのを見ると少し残念
    • Nomad は、この世のあらゆるものを実行しようという目標が過剰すぎた。結局広く定着せず、設定するには Consul も必要だった
      Docker Swarm は Nomad よりシンプルで優れた解決策であり、Docker Engine 自体に組み込まれている
    • 正直、HashiCorp の製品は全体的に本当に良い。ただ、動きが速すぎる症候群に陥ったのだと思う
      上場を強行し、最近の欠陥の多くは株価を上げようとする試みにまでさかのぼれる
      初期の HashiCorp は素晴らしかった。オープンソースの守護者であり、新興の Red Hat や Canonical のように見えた。製品は画期的で、オープンソースエコシステムに大きな価値を加えていた。しかし Terraform が大きく成功したことで他の製品にも注目が集まり、会社が有名になりすぎた
      上場以降は、どんな代償を払ってでも金とエンタープライズ顧客を得ようとする姿勢が明らかになった
      Terraform 自体もバージョン 1 以降はメンテナンスモードのように感じる。Terraform provider は頻繁に壊れ、本番環境では provider をパッチバージョンまで固定すべきだと思う。ここ数年、小さなパッチ更新でも何度も問題があった。HashiCorp に事業上の価値がないオープンソース貢献は拒否し始めたことでも知られている。Terraform が v1 に達してからは、関心のほぼすべてが Terraform Cloud と Terraform Enterprise に向かったようだ。HashiConf ではすべての発表がこれらの製品を押し込む宣伝のように感じられ、今ではそれだけを気にしているように見える
      Nomad はしばらく HashiCorp が大きく期待していた製品だったが、エンタープライズ市場の掌握を追求する過程で道端に捨てられたように思う。おそらく大半の企業が Kubernetes に全振りし、Nomad は動きの速いスタートアップにより有用だと分かった後のことだろう
      Vault は、特にオープンソース領域では優れたツールだった。しかしここ数年で Vault のオープンソース版とライセンス版を大きく分け、オープンソース版は HashiCorp にとって負担のように感じられ始めた。昨年、会社で Vault への移行を真剣に検討し HashiCorp と話したとき、オープンソースのセルフホスト解決策を「本物の Vault」の評価版のように扱っていて、実際そう感じられた。設定中にぶつかったほぼすべての問題に対して、「エンタープライズ版なら大丈夫」というような答えだった
      全体として、製品のオープンソース版をサポートするために必要な最小限の努力だけを残して後退し、しばらく前から完全にエンタープライズ中心の会社だった。稼がなければならないので非難ばかりはできないが、HashiCorp がなり得た姿の例として Red Hat と Canonical を思い浮かべずにはいられない
      今は、子どもが潜在能力を発揮しきれなかったのを見守る親のような気分だ。ほとんどは欲や過剰な野心のせいに見える。HashiCorp を考えると「怒っているのではなく、ただ失望しているだけ」という言葉が浮かぶ。OpenTofu が Terraform の空白を埋めてくれることを期待している。Vault はもう過ぎ去り、大手クラウド事業者のシークレット管理ツールを使っている。はるかに気に入らないが、より安く、より複雑でない。Nomad の代わりに Kubernetes を使っているが、どうせ標準になったのだから問題ない。自分は大丈夫だろうが、HashiCorp には失望した
    • Nomad は本当に非公開ソースになったのか?
  • HashiCorp は独自の tap を維持している
    https://github.com/hashicorp/homebrew-tap
    https://www.hashicorp.com/blog/announcing-hashicorp-homebrew...

    • 参考までに、Homebrew が所有するバージョンはこれらをソースから再ビルドしている: https://github.com/Homebrew/homebrew-core/pull/139538/files#...
      Linux のパッケージングエコシステムでも通常はこの方式だが、普通は依存関係のパッケージングも明示的に併せて扱う。おそらくそのため、ライセンス変更前から Vault などがディストリビューションのパッケージ集に入れなかった可能性が高い
      HashiCorp 側のバリアントはリリースビルドをコピーしている: https://github.com/hashicorp/homebrew-tap/blob/master/Formul...
  • なぜそうなるのか? Homebrew は単なるパッケージマネージャーではないのか? 非自由ライセンスが HashiCorp のツールを含めることをなぜ制限すべきなのか分からない
    それとも、自由ソフトウェアだけを含めるというポリシーがあるのだろうか
    追記: 実際かなり厳格なガイドラインがある: https://docs.brew.sh/License-Guidelines

    • Homebrew には自由ソフトウェアのみを含めるというポリシーがある [1]
      「Debian Free Software Guidelines のライセンスを使っているか、DFSG のパブリックドメインソフトウェア指針に従ってパブリックドメインとして公開された formula のみを homebrew/core に受け入れる」
      [1]: https://docs.brew.sh/License-Guidelines
    • Homebrew は単なるパッケージマネージャーだけではない
      brew というソフトウェア、つまりパッケージマネージャーでもあるが、デフォルトで紐づく homebrew-core パッケージリポジトリでもある。このパッケージリポジトリは慎重に管理され、オープンソースライセンスのみを受け入れる
      好きなリポジトリを brew で tap して使うのは自由だが、この PR は core リポジトリだけを扱っている
    • これは一部だけ正しい
      基本的に Homebrew は homebrew/core と homebrew/casks の 2 つのリポジトリをサポート、つまり Homebrew の用語で tap している
      Core は自由ソフトウェアのみを受け入れ、Homebrew 開発者が直接ビルドし、/opt/homebrew などにインストールされる。Casks は商用ソフトウェアやソースコードのないソフトウェアまで、ほぼ何でも受け入れる。こうしたソフトウェアはたいてい開発者側から直接ダウンロードされ、任意の場所、通常は /Applications にインストールされる
  • Homebrew が提供するサービスはありがたいが、Terraform は brew の外で管理したほうがよい例外の一つだと思う。今は tf-switch が最も人気のある選択肢だと見ている
    Terraform は誤って状態ファイルを更新すると危険になり得るため、特定バージョンに固定しなければならないことが多い。もちろん 1.0 以前の頃に比べれば、Terraform の更新はずっと面倒ではなくなったのは確かだ

    • 私は rtx、つまり rust asdf https://github.com/jdx/rtx を使っている。言語群を 1 つのツールでインストールでき、direnv のようなプロジェクト環境変数も扱える
    • その通り。特定バージョンのパッケージをインストールして簡単に切り替えられる MacPorts の中で管理するのが一番よい
    • 複数の Terraform バージョンをインストールするなら、tfenv も Homebrew で使える
  • 代わりに cask に入ればよい。実務上はあまり大きな影響はない

    • その通り。HashiCorp が Homebrew で配布を続けたいなら、cask でも十分可能だ。ただしそうなるとは思えない。すでにここ数年、サーバーにはバイナリを直接インストールするよう推奨してきたし、Terraform のインストールドキュメントもしばらくその方式だった
      より大きな影響は、ここで見られるように Terraform に依存する他のツールにある: https://github.com/Homebrew/homebrew-core/pull/139538#pullre...
      atlantis や infracost のようなツールも Terraform に依存しているため削除されつつある。そのため、そうした小さなツールの配布が少し難しくなるだろう。幸い、そのスレッドでは OpenTofu が安定したら依存関係を代替品に変更するか、あるいは完全に削除できるよう保留するとされている。だが実際の影響は、こうした周辺ツールにあると思う
  • Homebrew は本当に便利だが、奇妙な設計判断もある。なぜ新しい専用 Python をインストールするのか? そしてなぜその Python は最新版でなければならないのか?
    ところが各 formula が Python バージョンを指定しなければならないため、実際には常に最新版になるわけでもなく、さまざまなバージョンを指定した formula が生まれる。なぜ他のパッケージマネージャーのようにシステム Pythonを使わないのか分からない。すでにインストール済みの Python が多すぎるのに、もう 1 つは要らない。特に何かを正しく動かすために pip パッケージをインストールしなければならないときは、さらに混乱する

    • 最も奇妙な選択まで擁護するつもりはないが、システム Python を使うと普通は問題が増える。macOS にはもうシステム Python がない
      こう使えばよい:
      pythonX.Y -m pip install foo
      曖昧さをなくすにはエイリアスを使ってもよい。仕事のプロジェクトには pyenv と仮想環境を使うとよい
  • 政治的な判断に見える。Homebrew にはもう更新を受け取らないパッケージがたくさんあるが、廃止はされていない

    • アップストリームが新バージョンを出していないため更新されない formula と、ライセンスがもはやオープンソースではないため Homebrew で新しい更新を受け取れない formula は違う
      Homebrew の Cask ではない部分はオープンソースライセンスを要求しており、この場合は後者だ
    • パッケージが死んでいるかどうかとは別の話だ。アップストリームに存在しない更新を Homebrew が魔法のように作ってくれないことは、ユーザーも予想できる
      一方で更新は存在するのに、Homebrew が法的に配布できないため、古く脆弱なバージョンをインストールすることになり得るなら、ユーザーに警告する価値がある
    • Homebrew Core にはオープンソースライセンス、具体的には Debian Free Software Guidelines と互換性のあるライセンスのアプリだけが入る。GPL、Apache、BSD、MIT などが該当する
      https://wiki.debian.org/DFSGLicenses#DFSG-compatible_License...