Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 12558] ファイルの概要

このコミットは、Go言語のディストリビューションツールにおけるmacOS (Darwin) 向けのパッケージ生成に関する変更です。具体的には、生成されるGoバイナリパッケージの最小ターゲットOSバージョンをMac OS X 10.5から10.6に引き上げています。これは、GoプロジェクトがMac OS X 10.5のサポートを終了したことに伴う、パッケージング設定の整合性維持を目的としています。

コミット

commit 0c74d867c5e5c008c7043e3549fb2b30b0d43506
Author: Shenghou Ma <minux.ma@gmail.com>
Date:   Mon Mar 12 13:20:25 2012 +1100

    misc/dist: minimum target requirement is 10.6 for Darwin
         As we've dropped support for Mac OS X 10.5, I think the generated .pkg
         should reflect that decision.
         But this CL make it impossible to generate pkg on Mac OS X 10.6, at least
         for me.
    
    R=adg, bradfitz
    CC=golang-dev
    https://golang.org/cl/5798051

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/0c74d867c5e5c008c7043e3549fb2b30b0d43506

元コミット内容

misc/dist: minimum target requirement is 10.6 for Darwin
     As we've dropped support for Mac OS X 10.5, I think the generated .pkg
     should reflect that decision.
     But this CL make it impossible to generate pkg on Mac OS X 10.6, at least
     for me.

R=adg, bradfitz
CC=golang-dev
https://golang.org/cl/5798051

変更の背景

この変更の背景には、Go言語プロジェクトがMac OS X 10.5 (Leopard) のサポートを終了したという決定があります。ソフトウェアプロジェクトでは、古いオペレーティングシステムバージョンのサポートを継続することは、テスト、デバッグ、および特定のOSバージョンに特化したコードの維持にコストがかかるため、しばしば行われます。Goプロジェクトも例外ではなく、開発リソースをより新しいOSバージョンに集中させるために、Mac OS X 10.5のサポートを打ち切ったと考えられます。

このコミットは、そのサポート終了の決定を、Goのバイナリディストリビューション(特にmacOS向けの.pkgインストーラ)の生成プロセスに反映させるためのものです。つまり、Goの公式パッケージが、もはやMac OS X 10.5で動作することを保証しない、あるいは意図しないということを明示的に示すために、パッケージの最小ターゲットOSバージョンを更新する必要がありました。

コミットメッセージには「But this CL make it impossible to generate pkg on Mac OS X 10.6, at least for me.」という記述があり、この変更がコミッター自身の環境(Mac OS X 10.6)でパッケージ生成に問題を引き起こした可能性を示唆しています。これは、ターゲットOSバージョンを引き上げることによって、ビルド環境の要件も暗黙的に変化する可能性があるという、開発プロセスにおける潜在的な課題を示しています。しかし、このコミットの主要な目的は、サポートポリシーの変更をパッケージングに反映させることでした。

前提知識の解説

Go言語のディストリビューション

Go言語は、そのコンパイラと標準ライブラリを含むツールチェイン全体が配布されます。ユーザーは通常、公式ウェブサイトからOSごとのバイナリパッケージ(macOSでは.pkgファイル、Windowsでは.zipファイル、Linuxでは.tar.gzファイルなど)をダウンロードしてインストールします。これらのパッケージは、Goプロジェクトのmisc/distディレクトリにあるスクリプトやツールによって生成されます。

misc/distディレクトリ

Goプロジェクトのソースコードリポジトリには、misc/distというディレクトリが存在します。このディレクトリには、Goの公式バイナリディストリビューションを生成するためのユーティリティやスクリプトが含まれています。これらは、Goのリリースプロセスにおいて、様々なプラットフォーム向けのインストーラやアーカイブを作成するために使用されます。

macOSのパッケージングと--targetフラグ

macOSでは、ソフトウェアのインストールに.pkg(パッケージ)ファイルがよく用いられます。これは、インストーラアプリケーションによって実行されるアーカイブ形式です。.pkgファイルを生成する際には、そのパッケージが動作する最小のmacOSバージョンを指定することが一般的です。これは、パッケージのメタデータに埋め込まれ、古いOSバージョンでインストールしようとすると警告が表示されたり、インストールが拒否されたりする原因となります。

このコミットで変更されている--targetフラグは、おそらくmacOSのパッケージングツール(例えばpkgbuildproductbuildのようなコマンドラインツール、あるいはそれらをラップしたGoの内部ツール)に渡される引数であり、生成されるパッケージがサポートする最小のmacOSバージョンを指定するために使用されます。

  • Mac OS X 10.5 (Leopard): 2007年10月にリリースされたmacOSのバージョン。
  • Mac OS X 10.6 (Snow Leopard): 2009年8月にリリースされたmacOSのバージョン。10.5の後継であり、主にパフォーマンス改善とバグ修正に焦点を当てたバージョンでした。

Goプロジェクトが10.5のサポートを終了し、10.6を最小要件としたということは、Go 1.0(このコミットの時点でのバージョン)以降のGoバイナリは、Snow Leopard以降のmacOSで動作することを前提としていることを意味します。

技術的詳細

このコミットは、Go言語のソースコードリポジトリ内のmisc/dist/bindist.goファイルに対して行われた変更です。このファイルは、Goのバイナリディストリビューションをビルドするプロセスの一部を担っています。

具体的には、bindist.go内のDo()関数(Build構造体のメソッドと推測される)が、macOS向けのパッケージを生成する際に使用するコマンドライン引数を設定している箇所が変更されています。

変更前は、macOS向けのパッケージをビルドする際に、--targetフラグに"10.5"という値が渡されていました。これは、生成されるGoの.pkgインストーラがMac OS X 10.5以降のシステムで動作することを意図していることを示していました。

変更後は、この--targetフラグの値が"10.6"に変更されました。これにより、新しく生成されるGoの.pkgインストーラは、Mac OS X 10.6以降のシステムでのみ動作することを明示的に示すようになります。これは、GoプロジェクトがMac OS X 10.5のサポートを正式に終了したというポリシー変更を、配布されるバイナリパッケージのメタデータに反映させるための、直接的かつ必要な技術的調整です。

この変更は、Goのビルドシステムが、特定のOSバージョン向けのパッケージを生成する際に、そのOSのパッケージングツール(例: pkgbuild)に適切な最小OSバージョン情報を渡すように設定されていることを示唆しています。--targetフラグは、macOSのインストーラパッケージのLSMinimumSystemVersionなどのプロパティに影響を与える可能性があります。これにより、古いOSバージョンでの誤ったインストールや、互換性のないバイナリの実行を防ぐことができます。

コアとなるコードの変更箇所

変更はmisc/dist/bindist.goファイルの一箇所のみです。

--- a/misc/dist/bindist.go
+++ b/misc/dist/bindist.go
@@ -203,7 +203,7 @@ func (b *Build) Do() error {
 			"--id", "com.googlecode.go",
 			"--title", "Go",
 			"--version", "1.0",
-			"--target", "10.5")
+			"--target", "10.6")
 		targs = append(targs, targ)
 	case "windows":
 		// Create ZIP file.

コアとなるコードの解説

上記のコードスニペットは、misc/dist/bindist.goファイル内のfunc (b *Build) Do() error { ... }メソッドの一部です。このメソッドは、Goのバイナリディストリビューションをビルドする際の主要なロジックを含んでいます。

変更された行は、macOS (Darwin) 向けのパッケージを生成する際に、パッケージングコマンドに渡される引数を定義している部分です。

			"--id", "com.googlecode.go",
			"--title", "Go",
			"--version", "1.0",
			"--target", "10.5") // 変更前

この部分では、Goのパッケージングツールに対して、以下の情報を引数として渡しています。

  • --id, "com.googlecode.go": パッケージの一意な識別子。
  • --title, "Go": インストーラのタイトル。
  • --version, "1.0": パッケージのバージョン。このコミットの時点ではGo 1.0がターゲットでした。
  • --target, "10.5": この変更の核心部分。 生成されるパッケージが動作する最小のmacOSバージョンを指定します。

この行が以下のように変更されました。

			"--target", "10.6") // 変更後

これにより、--targetフラグに渡される値が"10.5"から"10.6"に更新されました。この小さな変更が、Goの公式macOSインストーラがサポートする最小OSバージョンをMac OS X 10.5から10.6に引き上げるという、重要なポリシー変更を反映しています。

このコードは、Goのビルドシステムが、特定のプラットフォーム(この場合はmacOS)向けのディストリビューションを作成する際に、そのプラットフォームの特性(この場合はOSの最小バージョン要件)を考慮して、適切なメタデータをパッケージに埋め込むように設計されていることを示しています。

関連リンク

  • Go言語公式ウェブサイト: https://go.dev/
  • Go言語のダウンロードページ: https://go.dev/dl/ (現在のGoのmacOSサポート状況を確認できます)

参考にした情報源リンク