Goランタイムの32ビット組み込みシステムでのバグを追跡
Hunting Down a Go Runtime Bug on 32-Bit Embedded Systems

Goで書かれたアプリケーションが32ビットARM組み込みLinuxシステムで不定期にクラッシュするという報告を受け、その原因を調査しました。エラーメッセージは「runtime: netpoll: eventfd ready for something unexpected」で、Goのnetpollメカニズムの内部仮定が崩れたことを示していました。調査の結果、32ビットリトルエンディアンシステムでは、ev.Dataフィールドに生ポインタとタグ付きポインタを混在させることが原因で、fdseqタグがnetpollEventFdのアドレスとエイリアスし、ソケットfdをイベントfdと誤認することが判明しました。この問題はGo 1.14で導入され、2026年に修正されました。
このバグは2020年のGo 1.14でランタイムに紛れ込み、2025年3月の最初の報告まで気づかれず、2026年にようやく修正されました。推測するしかありませんが、これはGoogle自身がもはや32ビットのGoプログラムを実行していないことを示唆しています。そうでなければ、私たちよりずっと前に彼ら自身がこのバグに遭遇していたはずです。
HNでの議論
15- budman1
これは、ソフトウェア開発者が日常的にやっていることではないでしょうか?
- ReactiveJelly
つまり、GoとLinuxの境界にもっと強い型システムがあれば、これを捕捉できたということですか?
- dlopes7
非常に興味深い記事ですね。本番環境で長時間経過した後にしか発生しないバグは、トラブルシューティングが最も難しいものです。