メインコンテンツへスキップ

Go Proposal Weekly Digest

Go言語のproposal更新を毎週お届け

#78090accepted

cmd/go: delete bzr support

ステータス変更: likely_accept accepted

要約

AIによる要約であり、誤りを含む場合があります。

概要

cmd/go から GNU Bazaar(bzr)のバージョン管理システムサポートを削除するproposalです。Bazaarプロジェクト自体が実質的に死滅しており、Goモジュールエコシステムでの利用もほぼ皆無となったため、保守コストの観点から削除が提案されました。

ステータス変更

likely_accept -> accepted
2026年3月25日のProposal Reviewミーティングで「likely accept」に設定され、2026年4月8日のミーティングでコンセンサスに変化なしとして正式に「accepted」となりました。Go Command Working Groupからも全員一致の支持が表明されており、反対意見は一切出ませんでした。

技術的背景

現状の問題点

GNU Bazaarは2016年を最後にリリースがなく、開発リポジトリへの最後のコミットは2017年、バグトラッカーへの最後の投稿は2023年です。唯一のパブリックなBazaarホスティングサービスであったCanonicalのLaunchpad.netも、2025年末にBazaarサポートを終了する計画を発表しています(記事執筆時点では依然アクセス可能ではあるものの)。
Homebrewにはbzrのパッケージが存在しないため、macOSでのインストール手段すら失われています。
proposalの提案者(@rsc)は、モジュールプロキシのキャッシュデータを用いて2022年後半以降のVCS別フェッチ数を調査しました。結果は以下の通りです。

git    30,726,669
hg          1,123
fossil      1,021
bzr            46
svn             1

46件のbzrフェッチのうち、最新のものは2023年の launchpad.net/kjvonly-bql であり、それ以外は2015年以前のコードです。

提案された解決策

cmd/go からBazaarのVCSサポートを丸ごと削除します。これはGo 1.27(2026年8月リリース予定)が最短の実施タイミングです。
影響を受けるユーザーへの緩和策として、プロキシ(proxy.golang.org)経由での既存のbzrホストモジュールの取得は引き続き可能です。オープンソースライセンスを持つモジュールはプロキシに無期限にキャッシュされているため、実質的な影響は限定的です。

これによって何ができるようになるか

この変更は機能追加ではなく機能削除です。開発者への直接的なメリットは以下の通りです。

  • cmd/go のコードベースが簡素化され、VCSサポートに関わるメンテナンス負担が軽減されます
  • 死んだソフトウェアへの依存がなくなることで、将来の開発(#77897のような関連機能)が容易になります
  • 事実上使われていない機能の除去により、セキュリティ上のリスクも低減されます

コード例

// Before: GOVCS環境変数でbzrを明示的に許可できた
// GOVCS=*:git,hg,bzr,svn,fossil
// After: bzrは無効なVCS指定となる
// GOVCS=*:git,hg,svn,fossil
// (bzrを指定してもエラーになる)

なお、プロキシ経由での取得は変更なし(プロキシがすでにbzrリポジトリのコピーを保持している)。

議論のハイライト

  • Subversion(svn)は削除対象外: 46件のbzrに対し、svnはわずか1件(svn.riouxsvn.com/shad.svn)のみだが、svnはエンタープライズ内部での非公開モジュール向けに引き続き意義があると判断された
  • Mercurialとfossilは削除対象外: フェッチ数は少ないものの、どちらも現在も活発に保守されており、状況はbzrと根本的に異なる
  • テレメトリデータの不足: #76801(VCSのテレメトリ計測提案)が未実装であり、プライベートモジュールでのbzr利用状況が不明だが、bzrプロジェクト自体が10年前に実質死亡していることから、プライベート利用も「なし」と安全に仮定できるとのこと
  • 関連Issue #29790: かつてgithub.com/influxdata/platformがbzrモジュールに依存していたことで発生したエラーが報告されていたが、現在はGo 1.17のプルーニングモジュールグラフ、プロキシのデフォルト有効化、そしてリポジトリ自体の削除という三重の解決により問題は解消済み
  • Go Command Working Groupが全員一致で支持: チーム内で反対意見は皆無だった

関連リンク