О, этот прекрасный open source...

| ~3 мин.

Или как один коммит в ядро Linux чуть не испортил мой рабочий день

Я, кажется, вспомнил, почему у меня порой горит от open source.

Не так давно я решил переехать на Ubuntu Budgie 18.04 LTS. Когда система успешно прикатилась ко мне на ноутбук, я с удивлением обнаружил, что наконец-то в Linux решили проблему с драйверами для моего Wi-Fi модуля RTL8723BE. До этого мне приходилось делать кучу шаманских взмахов руками, чтобы адаптер начал ловить сети, но сейчас не об этом.

Итак, 5 дней до микрокатастрофы. Я занимаюсь своими делами и между делом обновляю пакеты, которые система мне предлагает. Спустя какое-то время я закрываю крышку ноутбука и отправляюсь на работу. Приезжаю, феерично провожу свой день, закрываю крышку ноутбука и уезжаю домой. Всё отлично.

4 дня до микрокатастрофы. Всё ровно то же самое.

3 дня. То же самое.

2 дня. Начинаются выходные. Я почти не трогаю свой ноутбук. Он благополучно теряет весь свой заряд и выключается.

День микрокатастрофы. Я, отстояв гигантскую пробку, приезжаю в офис, открываю ноутбук и вижу, что он ловит только сети, что находятся в радиусе метра. Такое же поведение я наблюдаю при установке системы без дополнительных вмешательств. Конечно, я начал гуглить по самым разным запросам, в которых есть слова “Ubuntu” и “RTL8723BE”. Ничего. Все советуют сделать те же шаманства, что я уже сделал. Я дошел до того, что наткнулся на какой-то французский форум, на котором тоже люди зашли в тупик и не очень понимают, что происходит.

Я нервничаю и завариваю кофе. В голове крутится мысль, что мне стоит поехать домой (а в тот день были пробки и в обратную сторону тоже!) и настроить свой стационарный компьютер для работы, а на следующий день привезти его в офис. Эта мысль меня совсем не радует, потому что стационарник – это ещё и моя потенциальная творческая станция.

В конце концов, я ещё раз перефразировал свой запрос и наткнулся на ветку stackoverflow, название которой слишком обыденно описывает проблему: приемник не ловит сети. Я был готов предсказать ответ, который там содержится, но когда я открыл ветку, я обнаружил невероятное.

Автор ответа утверждает, что дело такое: адаптер видит сети в том случае, если версия ядра операционной системы linux меньше определенной, а именно 4.15.0-32. Конечно же, я проверил гипотезу, перезагрузившись в систему со старым ядром и попутно вспомнив, что пять дней назад я нажал кнопочку “Обновить систему” в приветлевом GUI, но с тех пор ни разу не перезагружал компьютер, пока тот не вырубился сам от нехватки заряда. Автор ответа был чертовски прав, всё заработало, но меня не устроило это, мне нужны причины происходящего. Я пошел гуглить, какого же, собственно, хрена здесь происходит.

Спустя 5 минут неловкого гугления я натыкаюсь на ветку в баг-трекере Ubuntu, где товарищи рассказывают про некий коммит, который всё ломает, и что этот коммит попал в ядро 4.15.0-33. Я пошел смотреть, что за ядро у меня используется прямо сейчас. Моя система работала под управлением ревизии ...-34, т.е. уже прошло какое-то время с тех пор, как злополучный коммит раскатился по миру.

Автору коммита показалось что-то неинтуитивным, и он решил вмешаться, попутно дописав ещё некоторого кода, который, очевидно, некорректен. Его вмешательство в моем случае вылилось в возню длинною в час с попытками наладить работу адаптера. Я перепробовал вообще всё, что можно, чтобы понять, что случилось с сетью, но без ответа в случайном топике на stackoverflow я бы вообще ничего не добился.

Из-за какого-то интересного товарища, который решил внести чуть больше ясности в код, я чуть не потратил кучу времени впустую, стоя в пробке домой и накатывая на свой домашний ПК всё, что нужно для работы.

Мораль этой истории очень проста:

  1. Если у вас возникла проблема и вы не знаете, как её решить, не бойтесь заходить в вопросы с кликбейтовыми заголовками, даже если знаете, какой ответ там скорее всего содержится;
  2. Если вы пишете что-то для open source, ради всего святого, поймите свою социальную значимость. Нельзя просто так влезть в код и не протестировать то, что вы делали. В моём случае всё обошлось, но у кого-то, кто не наткнулся бы первоисточник проблемы, скорее всего не заладился день как таковой. Да, это всего лишь адаптер для приема wi-fi, но я встречал ровно такое же наплевательское отношение и среди мейнтейнеров куда более популярных штук. Чего только стоит инцидент с npm… Пожалуйста, включайте свою голову и осознайте, какая ответственность на вас лежит, когда вы вносите свои изменения в систему, которой пользуются люди.