Охота на баг в рантайме Go на 32-битных встраиваемых системах
Hunting Down a Go Runtime Bug on 32-Bit Embedded Systems

Инженеры sigma-star нашли и исправили давний баг в рантайме Go, из-за которого приложения периодически падали на 32-битных ARM и i386 системах. Проблема была в netpoll: на little-endian системах хранение сырого указателя на eventfd в поле ev.Data приводило к конфликту с тегом fdseq, из-за чего сокет ошибочно принимался за eventfd. Баг проявлялся только в долго работающих программах после миллионов переиспользований pollDesc. Исправление, заменяющее сырой указатель на tagged nil pollDesc, уже вмержено в Go.
Мы можем только предполагать, но это говорит о том, что Google больше не запускает 32-битные программы на Go. Иначе они бы наткнулись на этот баг задолго до нас.
- dlopes7
Очень интересное чтение, эти баги, которые проявляются только спустя долгое время в продакшене, труднее всего диагностировать.
- nasretdinov
Go родился в эпоху 64-битных систем, я помню, что видел гораздо больше багов, которые проявляются только на 32-битных системах. Я почти уверен, что наблюдение из статьи верно: никто в Google не тестирует Go на чём-либо, кроме 64-битных ARM/x86 Linux.
- ReactiveJelly
Значит, более сильная система типов на границе между Go и Linux поймала бы это?