Russian Fedora

cообщество русскоязычных участников
международного проекта Fedora

История одного бага

Это архивная статья

Как мы уже говорилине раз), одна из серьезных техническиx проблем, стоящих перед коммьюнити Fedora, это наша строгая политика насчет обновлений GCC - любое большое обновление ведет за собой пересборку всего дерева пакетов. Повторимся, это очень непросто - с первой попытки порой не получается скомпилировать около 10% пакетов, и мэйнтейнеры самостоятельно или с помощью разработчиков upstream пишут патчи. Между прочим, это порядка тысячи патчей с каждой пересборки, отправленных в upstream проекты, в полном согласии с другим нашим правилом - "уведомлять проекты о том, какие изменения мы вносим". Некоторые маргинальные дистрибутивы пропускают этот этап, считая, что достаточно увеличить номер версии GCC в дистроспецифичном "рецепте сборки", чтоб публично объявить, что "в нашем настраиваемом под себя дистрибутиве уже давно самый свежий GCC, а вы только его включаете". Наоборот, включение нового GCC (да и вообще нового ПО) в Fedora происходит куда более технически грамотно и гораздо более основательно.

Очень мало только просто собрать сам GCC, мало и пересобрать все ПО с новым GCC - надо еще исправить проблемы, которые возникнут. Тут все зависит от квалификации коммьюнити. В нашем сообществе, в отличие от маргинальных дистрибутивов, люди крайне высокой квалификации (и этой магией они с удовольствием поделятся с вами - приходите к нам, на темную сторону Силы! бросайте ваши уютные самосборные дистрибутивы - у нас есть печеньки!) - ключевые участники основных Open Source проектов, люди с богатым опытом разработки, и просто способная молодежь, которая запросто переписывает аудио- и init-подсистемы. Некоторые ошибки исправляются легко, небольшими патчами, что под силу и небольшому коммьюнити вокруг самосборного дистрибутива из нерадивых студентов, у которых полно свободного времени, а некоторые - с большим трудом. Что бывает, когда баг требует квалифицированного вмешательства признанных специалистов мы сейчас расскажем.

Пользователи Fedora на PowerPC / PPC64 столкнулись с неприятной проблемой - Firefox, начиная с версии 10, быстро зависает на первой же странице (или даже при старте, если у вас много дополнений). О проблеме нам сообщил в середине апреля 2012 года инженер IBM и участник Fedora PPC, Gustavo Luiz Duarte (ранее бывший участником коммьюнити Ubuntu). Заявку тут же подобрал мэйнтейнер продуктов Mozilla Foundation в Fedora Martin Stránský и отправил в MoFo bugzilla. Почти сразу там указали на возможную проблему и предложили патч. Несмотря на то, что патч действительно решил одну из ошибок, она оказалась не относящейся к обсуждаемой проблеме.

Спустя еще неделю разработчик Mozilla, Terrence Cole сделал предположение, что ошибка происходит в модуле регулярных выражений. После подтверждения от Martin, что ошибка имеет место лишь на Fedora 17 (на тот момент еще не вышедшая), Gustavo определил, что она возникает лишь в Firefox и Xulrunner, скомпилированных GCC 4.7.0, причем на тот момент, ситуация не изменялась, если использовать последний снапшот GCC (т.е. она не была исправлена). Еще через пару дней, Gustavo сумел создать минимальный test-case, приводящий к ошибке и поиграв с опциями компилятора определил, что если использовать опцию gcc --disable-optimize, то как минимум проходятся unit-тесты. Стало понятно, что проблема определенно в новом GCC, но где именно? Прошла еще неделя, и Gustavo с коллегами по IBM сумел создать минимальный патч, который позволяет обойти проблему. С этим уже можно обращаться в багтрекер GCC, что и было сделано в тот же день инженером IBM William J. Schmidt. О причине ошибки почти ту же сделал предположение инженер Cavium Networks Andrew Pinski, которое оказалось правильным. Незамедлительно, инженер SuSE/Novell Richard Guenther предложил патч, который проверил William и подтвердил, что он исправляет ошибку. Патч был добавлен в master-бранч на следующий день, а бэкпортирован в ветку 4.7.0 спустя еще неделю.

Одновременно с приемом патча в ветку gcc 4.7.0 был успешно пересобран для платформ PowerPC/PPC64 Xulrunner с патчем из bugzilla MoFo, и Firefox наконец-то заработал.

Это, на самом деле, типичная история для нашего сообщества. По результатам многочисленных сборок и разборок были закрыты две ошибки в двух разных известных Open Source проектах и предложен один временный workaround, что пойдет на пользу всем дистрибутивам, а не только Fedora.

Конечно, у нас еще много незакрытых ошибок (нас все еще слишком мало, чтоб реагировать оперативно на все проблемы, плюс на некоторые проблемы мы вообще не можем прореагировать, в том числе и из-за несовершенства нашей инфраструктуры, работа над улучшением которой ведется), конечно, вы можете легко нагуглить и печальные истории о том, как заявки в багзилле не закрываются месяцами и даже годами, но мы и исправляем огромное количество непростых ошибок. Нас действительно порой называют бета-тестерами, пытаясь этим уязвить и почему-то полагая, что сообщать и исправлять ошибки в открытом ПО, это что-то постыдное и оскорбительное (на наш же взгляд, бета-тестеров надо, как минимум, благодарить). Но если уж мы и правда тестеры, то всего опенсорса, в том числе и вашего дистрибутива. То, с чем столкнулись мы, скорее всего вы больше не увидите, получая спустя полгода-год-полтора отлаженное ПО.

А в коммьюнити вашего дистрибутива какие бывают истории? Ну, конечно, если ваш главарь публично сообщает, что ваше коммьюнити не интересуется низкоуровневой разработкой (все, кроме нескучных обоев и дизайна окошек), то может возникают какие-нибудь загадки при переносе кнопок слева направо или справа налево?

Комментарии