Go 1.27でmacOS 12のサポートが終了し、macOS 13 Ventura以降が必須になった。
Darwin
概要
Go 1.26のリリースノートで予告されていた通り、Go 1.27はmacOS 13 Ventura以降を必須とする。macOS 12以前のバージョンに対するサポートはGo 1.27で終了した。
導入経緯
Issue #75836にて、@golang/releaseを代表して提出されたproposalが発端。macOS 12が受け取った最後のセキュリティアップデートは2024年7月であり、2026年夏に打ち切るのが妥当と判断された。提案内容は、Go 1.26のリリースノートで終了を事前告知した上で、Go 1.27ではmacOS 12用のビルダーを無効化するというもの。Go 1.26(2027年2月までセキュリティパッチが提供される)が、macOS 12をサポートする最後のリリースとなる。Go telemetryによれば、2025年10月9日時点でmacOS 12(Darwinカーネルバージョン21)からの利用は全体の約0.8%だったことも根拠として挙げられている。
議論のハイライト
- あるユーザーから、OSの非互換性など技術的な理由がない限りサポートを打ち切るべきではないという慎重論が寄せられた。
- これに対しGoチームのメンバーから、この種の「サポート終了」はそのバージョンでのテストを止め動作保証をしなくなることを意味するだけであり、意図的にそのバージョン向けの動作を破壊するものではないという説明があった。実際、直前のmacOS 11サポート終了(#69839)でも、macOS 11を意図的に壊すCLは提出されなかったことが例として示された。
- 議論を経てコンセンサスに変化はなく、likely acceptを経てそのままacceptedとなった。
移行時の注意
影響を受けるのは、macOS 12以前でGoツールチェイン(コンパイラ・リンカ)を動かしているユーザーである。macOS 12を使い続ける必要がある場合は、セキュリティパッチが2027年2月まで提供されるGo 1.26に留まることが推奨される。なお「サポート終了」はテスト対象から外れ動作保証がなくなることを意味し、Go 1.27でビルドしたバイナリがmacOS 12上で即座に動かなくなるとは限らない。
実装解説
macOS向けのリンク処理では、生成するMach-OバイナリのLC_BUILD_VERSIONロードコマンドに書き込むデフォルトの最小OSバージョンがmacOS = macVersionFlag{13, 0, 0}としてリンカにハードコードされている。この値は-macosリンカフラグで上書きできる。cmd/linkのテスト(link_test.go)も、内部リンクモードでビルドしたバイナリのバージョンが13.0.0未満でないことを検証している。