[インデックス 18221] ファイルの概要
このコミットは、Go言語のsyscall
パッケージがOpenBSDシステムにおけるABI(Application Binary Interface)の変更に対応するために行われたものです。具体的には、OpenBSDのシステムコール番号、定数、およびデータ構造の定義が変更されたことに伴い、GoのAPI互換性チェックファイルであるapi/except.txt
とapi/next.txt
が更新されています。
コミット
commit 8aaca37383e4cf4157b999e117216006841978aa
Author: Joel Sing <jsing@google.com>
Date: Sat Jan 11 20:16:39 2014 +1100
api: update except.txt and next.txt to reflect openbsd system ABI break
Update #7049
R=golang-codereviews, minux.ma, mikioh.mikioh
CC=golang-codereviews
https://golang.org/cl/49470052
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/8aaca37383e4cf4157b999e117216006841978aa
元コミット内容
このコミットは、OpenBSDのシステムABIの変更を反映するために、api/except.txt
とapi/next.txt
を更新するものです。これは、Goのsyscall
パッケージがOpenBSD上で正しく機能し続けるために必要な変更です。
変更の背景
Go言語の標準ライブラリ、特にsyscall
パッケージは、各オペレーティングシステム(OS)のシステムコールや低レベルのAPIと直接連携します。OSのバージョンアップやパッチ適用によって、これらのシステムコールやデータ構造の定義(ABI)が変更されることがあります。OpenBSDでは、特定のバージョンアップにおいてシステムABIに破壊的な変更(ABI break)が発生しました。
このようなABIの変更が発生すると、Goのコンパイラやランタイムが期待するシステムコール番号、構造体のサイズ、フィールドのオフセットなどが実際のOSと食い違い、プログラムがクラッシュしたり、予期せぬ動作をしたりする原因となります。Goプロジェクトでは、このようなOS固有のABI変更に追従し、Goプログラムが異なるOSバージョンでも安定して動作するように、api/except.txt
とapi/next.txt
というファイルを管理しています。
このコミットは、OpenBSDのABI変更に対応し、Goのsyscall
パッケージがOpenBSDの新しいABIに適合するように、これらの互換性チェックファイルを更新することを目的としています。これにより、GoプログラムがOpenBSDの最新環境でも問題なく動作することが保証されます。
前提知識の解説
ABI (Application Binary Interface)
ABIは、オペレーティングシステムとアプリケーション、またはアプリケーションの異なるモジュール間でのバイナリレベルのインターフェースを定義するものです。具体的には、関数呼び出しの規約(引数の渡し方、戻り値の受け取り方)、データ構造のメモリレイアウト(構造体のサイズ、フィールドのオフセット、アライメント)、システムコール番号、レジスタの使用方法などが含まれます。
ABIが変更されると、古いABIでコンパイルされたバイナリは新しいABIのOS上で正しく動作しない可能性があります。これは、OSが期待するシステムコール番号やデータ構造のレイアウトが、バイナリが期待するものと異なるためです。
Go言語のsyscall
パッケージ
Go言語のsyscall
パッケージは、OSの低レベルな機能(システムコール)に直接アクセスするためのインターフェースを提供します。ファイル操作、ネットワーク通信、プロセス管理など、OSが提供する多くの機能はシステムコールを通じて行われます。syscall
パッケージは、GoプログラムがこれらのOS固有の機能を利用できるように、C言語の標準ライブラリ(libc)を介さずに直接システムコールを呼び出すためのラッパーを提供します。
api/except.txt
とapi/next.txt
Goプロジェクトでは、GoのAPI互換性を維持するために、api/except.txt
とapi/next.txt
という特殊なファイルを管理しています。
api/except.txt
: このファイルには、Goのリリース間でAPIの互換性が意図的に破壊された変更(breaking changes)が記録されます。通常、Goの新しいメジャーリリース(例: Go 1.x から Go 1.y)ではAPIの互換性が維持されますが、特定の理由(セキュリティ修正、バグ修正、パフォーマンス改善など)で互換性を破る必要がある場合に、その変更がこのファイルに記載されます。このファイルに記載された変更は、GoのAPI互換性チェックツールによって許容されます。api/next.txt
: このファイルには、次のGoのメジャーリリースで導入される予定のAPI変更が記録されます。これは、開発中のGoバージョン(master
ブランチなど)でAPIが変更された際に、その変更が将来のリリースで正式に導入されることを示すものです。このファイルもAPI互換性チェックツールによって参照され、開発中のAPI変更が意図されたものであることを確認します。
これらのファイルは、GoのAPI互換性チェックツール(go tool api
など)によって使用され、GoのAPIが意図せず変更されたり、互換性が損なわれたりすることを防ぎます。OSのABI変更に対応するためにsyscall
パッケージの定義を更新する場合、それはGoのAPIから見ると変更とみなされるため、これらのファイルにその変更を記録する必要があります。
技術的詳細
このコミットは、OpenBSDのシステムABI変更に対応するため、Goのsyscall
パッケージがOpenBSDの386
アーキテクチャ(32ビット)およびamd64
アーキテクチャ(64ビット)の両方において、CGO(C言語との連携)の有無にかかわらず、多数の定数と構造体定義を更新しています。
具体的には、以下の種類の変更が含まれています。
-
システムコール番号の変更:
SYS_CLOCK_GETRES
,SYS_CLOCK_GETTIME
,SYS_CLOCK_SETTIME
などの時間関連のシステムコール番号。SYS_FSTAT
,SYS_FSTATAT
,SYS_FSTATFS
,SYS_FHSTATFS
などのファイルシステム関連のシステムコール番号。SYS_GETDIRENTRIES
,SYS_GETFSSTAT
などのディレクトリおよびファイルシステム統計関連のシステムコール番号。SYS_GETITIMER
,SYS_SETITIMER
,SYS_GETRUSAGE
,SYS_GETTIMEOFDAY
,SYS_SETTIMEOFDAY
などの時間およびリソース使用量関連のシステムコール番号。SYS_KEVENT
(kqueueイベント通知システム)、SYS_NANOSLEEP
(高精度スリープ)、SYS_SELECT
(I/O多重化) などのシステムコール番号。SYS_UTIMENSAT
,SYS_UTIMES
(タイムスタンプ更新)、SYS_WAIT4
(プロセス待機)、SYS___THRSLEEP
(スレッドスリープ) などのシステムコール番号。api/next.txt
では、SYS_GETDENTS
(ディレクトリエントリー取得)、SYS_PPOLL
,SYS_PSELECT
(I/O多重化の拡張)、SYS_UTRACE
(トレース機能) など、より新しいシステムコール番号が追加されています。
-
ネットワーク関連の定数変更:
BIOCGRTIMEOUT
,BIOCSRTIMEOUT
(BPFタイムアウト関連)。IPV6_FAITH
,IPV6_OPTIONS
,IPV6_RTHDR_STRICT
,IPV6_SOCKOPT_RESERVED1
(IPv6ソケットオプション関連)。RTF_FMASK
,RTM_VERSION
(ルーティングテーブルメッセージ関連)。SIOCBRDGDADDR
,SIOCBRDGGPARAM
,SIOCBRDGSADDR
(ブリッジデバイス関連)。SIOCGIFGENERIC
,SIOCSIFGENERIC
(汎用インターフェース情報関連)。api/next.txt
では、IPPROTO_DIVERT_INIT
,IPPROTO_DIVERT_RESP
,IPV6_RECVDSTPORT
,IP_DIVERTFL
,TCP_NOPUSH
などの新しいネットワークプロトコルやソケットオプション関連の定数、SIOCGETVLAN
,SIOCSETVLAN
,SIOCGIFHARDMTU
,SIOCGLIFPHYTTL
,SIOCSLIFPHYTTL
,SIOCGSPPPPARAMS
,SIOCSSPPPPARAMS
,SIOCGVNETID
,SIOCSVNETID
などのインターフェース設定関連の定数が追加されています。
-
構造体定義の変更:
SizeofIfData
,SizeofIfMsghdr
,SizeofRtMetrics
,SizeofRtMsghdr
といった構造体のサイズ変更。Dirent
構造体のFileno
フィールドがuint32
からuint64
に変更され、Off
フィールドやパディングフィールドX__d_padding
が追加。FdSet
構造体のBits
フィールドが[32]int32
から[32]uint32
に変更。Kevent_t
構造体のData
フィールドがint32
からint64
に変更され、Ident
フィールドがuint32
からuint64
に変更(amd64の場合)。Mclpool
構造体のGrown
フィールドがuint32
からint32
に変更。RtMetrics
構造体のExpire
フィールドがuint32
からint64
に変更され、Pad
フィールドが追加。Stat_t
構造体のIno
フィールドがuint32
からuint64
に変更され、Lspare0
,Lspare1
,Qspare
などのパディングフィールドが変更または追加。Statfs_t
構造体のF_ctime
フィールドがuint32
からuint64
に変更され、F_mntfromspec
やパディングフィールドPad_cgo_0
,Pad_cgo_1
が追加。Timespec
構造体のSec
フィールドがint32
からint64
に変更され、パディングフィールドPad_cgo_0
が追加。Timeval
構造体のSec
フィールドがint32
からint64
に変更。
これらの変更は、OpenBSDのカーネルAPIが進化し、特に64ビットシステムでのデータ型の拡張(例: uint32
からuint64
への変更)や、新しいシステムコール、ネットワーク機能の追加が行われたことを示しています。Goのsyscall
パッケージは、これらの変更に追従することで、OpenBSD上でのGoプログラムの安定性と互換性を確保しています。
コアとなるコードの変更箇所
このコミットで直接変更されているのは、Goのソースコードリポジトリ内の以下の2つのファイルです。
api/except.txt
api/next.txt
これらのファイルは、GoのAPI互換性チェックのためのメタデータファイルであり、Go言語の実際のGoコード(.go
ファイル)ではありません。しかし、これらのファイルに記載された内容は、Goのsyscall
パッケージがOpenBSDのABI変更にどのように対応しているかを示す重要な情報を含んでいます。
コアとなるコードの解説
api/except.txt
とapi/next.txt
の変更は、Goのsyscall
パッケージがOpenBSDの特定のバージョン(このコミットの時点での最新版、または将来のバージョン)のABIに適合するように、Goのビルドシステムに指示を与えるものです。
これらのファイルのエントリは、以下の形式で記述されています。
pkg <パッケージ名> (<OS>-<アーキテクチャ>), <要素の種類> <要素名> = <値>
pkg <パッケージ名> (<OS>-<アーキテクチャ>), <要素の種類> <要素名> <追加情報>
pkg <パッケージ名> (<OS>-<アーキテクチャ>), type <型名> struct, <フィールド名> <型>
例:
pkg syscall (openbsd-386), const BIOCGRTIMEOUT = 1074283118
- これは、
syscall
パッケージのopenbsd-386
環境において、定数BIOCGRTIMEOUT
の値が1074283118
であることを示しています。
- これは、
pkg syscall (openbsd-amd64), type Stat_t struct, Ino uint32
- これは、
syscall
パッケージのopenbsd-amd64
環境において、Stat_t
構造体のIno
フィールドがuint32
型であることを示しています。
- これは、
このコミットでは、api/except.txt
とapi/next.txt
の両方に、OpenBSDの386
およびamd64
アーキテクチャ(CGOの有無を含む)向けのsyscall
パッケージに関する多数のエントリが追加されています。
except.txt
に追加されたエントリは、OpenBSDのABI変更によってGoのsyscall
パッケージの既存の定義が変更されたことを示しています。これは、GoのAPI互換性チェックにおいて、これらの変更が意図されたものであるため、エラーとして扱わないようにするためのものです。
next.txt
に追加されたエントリは、OpenBSDのABI変更によってGoのsyscall
パッケージに新しい定数や構造体フィールドが追加されたことを示しています。これは、GoのAPI互換性チェックにおいて、これらの新しい要素が将来のGoリリースで導入される予定であることを示すものです。
これらのファイルが更新されることで、GoのビルドシステムはOpenBSDの新しいABIに対応したsyscall
パッケージを生成できるようになり、GoプログラムがOpenBSDの最新環境で正しく動作することが保証されます。
関連リンク
- Go issue #7049: https://github.com/golang/go/issues/7049
- このコミットが解決するGoのIssueです。OpenBSDのABI変更に関する議論や背景情報が含まれている可能性があります。
- Go Code Review 49470052: https://golang.org/cl/49470052
- このコミットに対応するGoのコードレビューページです。詳細な変更内容やレビューコメントが確認できます。
参考にした情報源リンク
- Go言語の
api/except.txt
とapi/next.txt
に関する公式ドキュメントやGoプロジェクトの慣習に関する情報源(Goの公式ブログ、Goのソースコードリポジトリ内のドキュメントなど)。 - OpenBSDのABI変更に関する情報源(OpenBSDのリリースノート、開発者メーリングリストのアーカイブなど)。
- システムコール、ABI、Goの
syscall
パッケージに関する一般的な技術解説。 go tool api
コマンドに関する情報。BIOCGRTIMEOUT
,SYS_CLOCK_GETRES
,RTM_VERSION
などの特定の定数やシステムコールに関するOpenBSDのmanページやドキュメント。
[インデックス 18221] ファイルの概要
このコミットは、Go言語のsyscall
パッケージがOpenBSDシステムにおけるABI(Application Binary Interface)の変更に対応するために行われたものです。具体的には、OpenBSDのシステムコール番号、定数、およびデータ構造の定義が変更されたことに伴い、GoのAPI互換性チェックファイルであるapi/except.txt
とapi/next.txt
が更新されています。
コミット
commit 8aaca37383e4cf4157b999e117216006841978aa
Author: Joel Sing <jsing@google.com>
Date: Sat Jan 11 20:16:39 2014 +1100
api: update except.txt and next.txt to reflect openbsd system ABI break
Update #7049
R=golang-codereviews, minux.ma, mikioh.mikioh
CC=golang-codereviews
https://golang.org/cl/49470052
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/8aaca37383e4cf4157b999e117216006841978aa
元コミット内容
このコミットは、OpenBSDのシステムABIの変更を反映するために、api/except.txt
とapi/next.txt
を更新するものです。これは、Goのsyscall
パッケージがOpenBSD上で正しく機能し続けるために必要な変更です。
変更の背景
Go言語の標準ライブラリ、特にsyscall
パッケージは、各オペレーティングシステム(OS)のシステムコールや低レベルのAPIと直接連携します。OSのバージョンアップやパッチ適用によって、これらのシステムコールやデータ構造の定義(ABI)が変更されることがあります。
OpenBSDは、その設計思想として、ABI互換性を頻繁に破壊する方針を採用していることで知られています。これは、開発者がオペレーティングシステムを迅速に改善・洗練させることを可能にする意図的な選択です。LinuxやWindowsのようなOSが長期的なバイナリ互換性の維持に努めるのとは異なり、OpenBSDはプラットフォーム開発者の体験を優先します。これにより、API変更の柔軟性が高まり、古く、効率の悪いAPIを維持する負担が軽減されます。この方針の結果として、ABIが変更されるたびに、すべてのサードパーティ製パッケージやアプリケーションは、新しいOpenBSDリリースで正しく機能するためにソースから再コンパイルされる必要があります。
このコミットは、OpenBSDのこのようなABI変更に対応し、Goのsyscall
パッケージがOpenBSDの新しいABIに適合するように、これらの互換性チェックファイルを更新することを目的としています。これにより、GoプログラムがOpenBSDの最新環境でも問題なく動作することが保証されます。
前提知識の解説
ABI (Application Binary Interface)
ABIは、オペレーティングシステムとアプリケーション、またはアプリケーションの異なるモジュール間でのバイナリレベルのインターフェースを定義するものです。具体的には、関数呼び出しの規約(引数の渡し方、戻り値の受け取り方)、データ構造のメモリレイアウト(構造体のサイズ、フィールドのオフセット、アライメント)、システムコール番号、レジスタの使用方法などが含まれます。
ABIが変更されると、古いABIでコンパイルされたバイナリは新しいABIのOS上で正しく動作しない可能性があります。これは、OSが期待するシステムコール番号やデータ構造のレイアウトが、バイナリが期待するものと異なるためです。OpenBSDのようにABIを意図的に変更するOSでは、アプリケーション開発者はOSのアップデートに際して、Goのような言語で書かれたプログラムであっても、そのOS固有のシステムコールを扱う部分については再コンパイルやコードの調整が必要になる場合があります。
Go言語のsyscall
パッケージ
Go言語のsyscall
パッケージは、OSの低レベルな機能(システムコール)に直接アクセスするためのインターフェースを提供します。ファイル操作、ネットワーク通信、プロセス管理など、OSが提供する多くの機能はシステムコールを通じて行われます。syscall
パッケージは、GoプログラムがこれらのOS固有の機能を利用できるように、C言語の標準ライブラリ(libc)を介さずに直接システムコールを呼び出すためのラッパーを提供します。
api/except.txt
とapi/next.txt
Goプロジェクトでは、GoのAPI互換性を維持するために、api/except.txt
とapi/next.txt
という特殊なファイルを管理しています。
api/except.txt
: このファイルには、Goのリリース間でAPIの互換性が意図的に破壊された変更(breaking changes)が記録されます。通常、Goの新しいメジャーリリース(例: Go 1.x から Go 1.y)ではAPIの互換性が維持されますが、特定の理由(セキュリティ修正、バグ修正、パフォーマンス改善など)で互換性を破る必要がある場合に、その変更がこのファイルに記載されます。このファイルに記載された変更は、GoのAPI互換性チェックツールによって許容されます。api/next.txt
: このファイルには、次のGoのメジャーリリースで導入される予定のAPI変更が記録されます。これは、開発中のGoバージョン(master
ブランチなど)でAPIが変更された際に、その変更が将来のリリースで正式に導入されることを示すものです。このファイルもAPI互換性チェックツールによって参照され、開発中のAPI変更が意図されたものであることを確認します。
これらのファイルは、GoのAPI互換性チェックツール(go tool api
など)によって使用され、GoのAPIが意図せず変更されたり、互換性が損なわれたりすることを防ぎます。OSのABI変更に対応するためにsyscall
パッケージの定義を更新する場合、それはGoのAPIから見ると変更とみなされるため、これらのファイルにその変更を記録する必要があります。
技術的詳細
このコミットは、OpenBSDのシステムABI変更に対応するため、Goのsyscall
パッケージがOpenBSDの386
アーキテクチャ(32ビット)およびamd64
アーキテクチャ(64ビット)の両方において、CGO(C言語との連携)の有無にかかわらず、多数の定数と構造体定義を更新しています。
具体的には、以下の種類の変更が含まれています。
-
システムコール番号の変更:
SYS_CLOCK_GETRES
,SYS_CLOCK_GETTIME
,SYS_CLOCK_SETTIME
などの時間関連のシステムコール番号。SYS_FSTAT
,SYS_FSTATAT
,SYS_FSTATFS
,SYS_FHSTATFS
などのファイルシステム関連のシステムコール番号。SYS_GETDIRENTRIES
,SYS_GETFSSTAT
などのディレクトリおよびファイルシステム統計関連のシステムコール番号。SYS_GETITIMER
,SYS_SETITIMER
,SYS_GETRUSAGE
,SYS_GETTIMEOFDAY
,SYS_SETTIMEOFDAY
などの時間およびリソース使用量関連のシステムコール番号。SYS_KEVENT
(kqueueイベント通知システム)、SYS_NANOSLEEP
(高精度スリープ)、SYS_SELECT
(I/O多重化) などのシステムコール番号。SYS_UTIMENSAT
,SYS_UTIMES
(タイムスタンプ更新)、SYS_WAIT4
(プロセス待機)、SYS___THRSLEEP
(スレッドスリープ) などのシステムコール番号。api/next.txt
では、SYS_GETDENTS
(ディレクトリエントリー取得)、SYS_PPOLL
,SYS_PSELECT
(I/O多重化の拡張)、SYS_UTRACE
(トレース機能) など、より新しいシステムコール番号が追加されています。
-
ネットワーク関連の定数変更:
BIOCGRTIMEOUT
,BIOCSRTIMEOUT
(BPFタイムアウト関連)。IPV6_FAITH
,IPV6_OPTIONS
,IPV6_RTHDR_STRICT
,IPV6_SOCKOPT_RESERVED1
(IPv6ソケットオプション関連)。RTF_FMASK
,RTM_VERSION
(ルーティングテーブルメッセージ関連)。SIOCBRDGDADDR
,SIOCBRDGGPARAM
,SIOCBRDGSADDR
(ブリッジデバイス関連)。SIOCGIFGENERIC
,SIOCSIFGENERIC
(汎用インターフェース情報関連)。api/next.txt
では、IPPROTO_DIVERT_INIT
,IPPROTO_DIVERT_RESP
,IPV6_RECVDSTPORT
,IP_DIVERTFL
,TCP_NOPUSH
などの新しいネットワークプロトコルやソケットオプション関連の定数、SIOCGETVLAN
,SIOCSETVLAN
,SIOCGIFHARDMTU
,SIOCGLIFPHYTTL
,SIOCSLIFPHYTTL
,SIOCGSPPPPARAMS
,SIOCSSPPPPARAMS
,SIOCGVNETID
,SIOCSVNETID
などのインターフェース設定関連の定数が追加されています。
-
構造体定義の変更:
SizeofIfData
,SizeofIfMsghdr
,SizeofRtMetrics
,SizeofRtMsghdr
といった構造体のサイズ変更。Dirent
構造体のFileno
フィールドがuint32
からuint64
に変更され、Off
フィールドやパディングフィールドX__d_padding
が追加。FdSet
構造体のBits
フィールドが[32]int32
から[32]uint32
に変更。Kevent_t
構造体のData
フィールドがint32
からint64
に変更され、Ident
フィールドがuint32
からuint64
に変更(amd64の場合)。Mclpool
構造体のGrown
フィールドがuint32
からint32
に変更。RtMetrics
構造体のExpire
フィールドがuint32
からint64
に変更され、Pad
フィールドが追加。Stat_t
構造体のIno
フィールドがuint32
からuint64
に変更され、Lspare0
,Lspare1
,Qspare
などのパディングフィールドが変更または追加。Statfs_t
構造体のF_ctime
フィールドがuint32
からuint64
に変更され、F_mntfromspec
やパディングフィールドPad_cgo_0
,Pad_cgo_1
が追加。Timespec
構造体のSec
フィールドがint32
からint64
に変更され、パディングフィールドPad_cgo_0
が追加。Timeval
構造体のSec
フィールドがint32
からint64
に変更。
これらの変更は、OpenBSDのカーネルAPIが進化し、特に64ビットシステムでのデータ型の拡張(例: uint32
からuint64
への変更)や、新しいシステムコール、ネットワーク機能の追加が行われたことを示しています。Goのsyscall
パッケージは、これらの変更に追従することで、OpenBSD上でのGoプログラムの安定性と互換性を確保しています。
コアとなるコードの変更箇所
このコミットで直接変更されているのは、Goのソースコードリポジトリ内の以下の2つのファイルです。
api/except.txt
api/next.txt
これらのファイルは、GoのAPI互換性チェックのためのメタデータファイルであり、Go言語の実際のGoコード(.go
ファイル)ではありません。しかし、これらのファイルに記載された内容は、Goのsyscall
パッケージがOpenBSDのABI変更にどのように対応しているかを示す重要な情報を含んでいます。
コアとなるコードの解説
api/except.txt
とapi/next.txt
の変更は、Goのsyscall
パッケージがOpenBSDの特定のバージョン(このコミットの時点での最新版、または将来のバージョン)のABIに適合するように、Goのビルドシステムに指示を与えるものです。
これらのファイルのエントリは、以下の形式で記述されています。
pkg <パッケージ名> (<OS>-<アーキテクチャ>), <要素の種類> <要素名> = <値>
pkg <パッケージ名> (<OS>-<アーキテクチャ>), <要素の種類> <要素名> <追加情報>
pkg <パッケージ名> (<OS>-<アーキテクチャ>), type <型名> struct, <フィールド名> <型>
例:
pkg syscall (openbsd-386), const BIOCGRTIMEOUT = 1074283118
- これは、
syscall
パッケージのopenbsd-386
環境において、定数BIOCGRTIMEOUT
の値が1074283118
であることを示しています。
- これは、
pkg syscall (openbsd-amd64), type Stat_t struct, Ino uint32
- これは、
syscall
パッケージのopenbsd-amd64
環境において、Stat_t
構造体のIno
フィールドがuint32
型であることを示しています。
- これは、
このコミットでは、api/except.txt
とapi/next.txt
の両方に、OpenBSDの386
およびamd64
アーキテクチャ(CGOの有無を含む)向けのsyscall
パッケージに関する多数のエントリが追加されています。
except.txt
に追加されたエントリは、OpenBSDのABI変更によってGoのsyscall
パッケージの既存の定義が変更されたことを示しています。これは、GoのAPI互換性チェックにおいて、これらの変更が意図されたものであるため、エラーとして扱わないようにするためのものです。
next.txt
に追加されたエントリは、OpenBSDのABI変更によってGoのsyscall
パッケージに新しい定数や構造体フィールドが追加されたことを示しています。これは、GoのAPI互換性チェックにおいて、これらの新しい要素が将来のGoリリースで導入される予定であることを示すものです。
これらのファイルが更新されることで、GoのビルドシステムはOpenBSDの新しいABIに対応したsyscall
パッケージを生成できるようになり、GoプログラムがOpenBSDの最新環境で正しく動作することが保証されます。
関連リンク
- Go issue #7049: https://github.com/golang/go/issues/7049
- このコミットが解決するGoのIssueです。OpenBSDのABI変更に関する議論や背景情報が含まれている可能性があります。
- Go Code Review 49470052: https://golang.org/cl/49470052
- このコミットに対応するGoのコードレビューページです。詳細な変更内容やレビューコメントが確認できます。
参考にした情報源リンク
- Go言語の
api/except.txt
とapi/next.txt
に関する公式ドキュメントやGoプロジェクトの慣習に関する情報源(Goの公式ブログ、Goのソースコードリポジトリ内のドキュメントなど)。 - OpenBSDのABI変更に関する情報源(OpenBSDのリリースノート、開発者メーリングリストのアーカイブなど)。
- システムコール、ABI、Goの
syscall
パッケージに関する一般的な技術解説。 go tool api
コマンドに関する情報。BIOCGRTIMEOUT
,SYS_CLOCK_GETRES
,RTM_VERSION
などの特定の定数やシステムコールに関するOpenBSDのmanページやドキュメント。- OpenBSDのABI互換性に関する情報: