Repository navigation
RouterForge Stable
RouterForge 0.12.1
Сначала важное: как вообще обновиться
В 0.12.0 мы случайно сделали так, что официальное обновление RouterForge зависит от разрешения на непроверенные источники. Исправление этой ошибки находится… в обновлении, которое из-за этой ошибки нормально не ставится.
Поэтому для перехода на исправленную версию нужно временно включить непроверенные источники, обновить RouterForge Core, а потом это разрешение можно снова выключить.
Да. Чтобы получить версию, которая больше не требует включать эту настройку, сначала нужно включить эту настройку.
Мы сделали замок, положили ключ внутрь и теперь официально рекомендуем залезть через окно.
После обновления этот цирк заканчивается.
Пользователи тоже решили поучаствовать
В патчноуте 0.12.0 мы написали:
«Если после исправления одного бага появятся ещё десять — считайте, что вы получили десять новых возможностей для будущих обновлений».
Это была шутка.
Пользователи проверили.
Не шутка.
Часть багов прилетела нам практически сразу после релиза. Что вообще очень удобно. Мы только успели закончить длинный текст о том, сколько всего прекрасно работает, а люди уже начали присылать доказательства обратного.
Это полезная особенность реальных пользователей.
Они не читают архитектуру.
Они нажимают кнопку.
И если после нажатия кнопки происходит хуйня, им почему-то совершенно не интересно, насколько красиво у нас всё устроено внутри.
Очень токсичная аудитория.
RouterForge 0.12.0 теперь действительно содержит RouterForge 0.12.0
Мы выпустили RouterForge 0.12.0.
А Core внутри оказался 0.11.0.
Снаружи новая версия. Внутри старая. Посередине — уверенность разработчиков.
В приличной компании это назвали бы «рассинхронизацией версий компонентов».
Это прекрасный термин. Он превращает фразу «мы забыли поменять цифру» в проблему, для которой почти нужен комитет.
Публичные пакеты исправлены. Теперь RouterForge 0.12.0 действительно содержит Core 0.12.0.
Да, мы тоже считаем, что это должно было работать именно так с самого начала.
Обновление было. Кнопки не было.
Центр приложений умел определить новую версию. Показывал:
DNS 0.10.0 → 0.10.1
Показывал значок «ОБНОВЛЕНИЕ».
Знал пакет.
Знал источник.
Знал контрольную сумму.
Кнопку «Обновить» не показывал.
Это был очень современный интерфейс: программа предоставляет пользователю всю необходимую информацию и оставляет действие на усмотрение Вселенной.
Причина оказалась ещё лучше. Обновление официальных компонентов RouterForge зависело от разрешения на установку непроверенных сторонних программ.
То есть RouterForge говорил:
«Да, это наш DNS. Да, это наш пакет. Да, мы сами его выпустили. Но сначала скажи: готов ли ты доверить root неизвестному Васе из интернета?»
Вася, кстати, ни о чём не просил.
Теперь официальные компоненты обновляются без этого разрешения.
Если обновление есть — кнопка есть.
Инженерия иногда поражает своей смелостью.
Потом появилась кнопка. И RouterForge всё равно сказал «нет»
После первого исправления кнопка появилась.
Мы нажали.
RouterForge потребовал принять соглашение о рисках непроверенного стороннего кода.
Для обновления официального RouterForge Core.
Это примерно как прийти в официальный сервис менять масло и получить бумагу:
«Я понимаю риски покупки двигателя у неизвестного мужика возле гаражей».
— Но я же у вас масло меняю.
— Подпишите. Система требует.
Оказалось, правильная проверка уже существовала. Она умела отличать официальный пакет от стороннего. Но перед ней стояла старая проверка, которая никого не пускала вообще.
Мы построили паспортный контроль.
А перед ним посадили деда, который всем говорит: «Нельзя».
Деда убрали.
Паспортный контроль оставили.
Теперь официальный RouterForge обновляется как официальный RouterForge, а непроверенный сторонний код по-прежнему не получает root просто потому, что у него хороший README.
Телеметрия устройства теперь наконец зависит от устройства
В боковой панели есть CPU, RAM, температура и процессы.
Называется это «Телеметрия устройства».
До 0.12.1 всё было интереснее.
Monitoring работает — данные есть.
Monitoring выключен — данных нет.
Monitoring удалили — часть данных может внезапно вернуться через Admin.
Admin тоже удалили — опять пусто.
Это не телеметрия.
Это лотерея.
Особенно прекрасно было с выключенным Monitoring: RouterForge видел, что он установлен, и считал вопрос закрытым. То, что он не работает и ничего не отвечает, считалось мелкой технической деталью.
Очень корпоративный подход.
Человек числится в отделе?
Значит работает.
Теперь базовую телеметрию собирает сам Core. CPU, RAM, температура и процессы больше не зависят от Monitoring и Admin.
Мы ненадолго рассматривали вариант построить ещё один слой резервных источников, таблицу приоритетов, настройки таблицы, менеджер источников и отдельный модуль управления менеджером источников.
Потом решили не быть долбоёбами.
Иногда лучший рефакторинг — это просто перестать усложнять очевидную вещь.
План обновления теперь хотя бы не врёт
Можно было работать на Stable, увидеть обновление Stable, открыть подробности и увидеть там Beta.
Само обновление при этом могло идти правильно.
То есть программа делала одно, а пользователю рассказывала другое.
Обычная практика.
Банки, операторы связи и политики используют её годами.
Причина была проста: интерфейс показывал старый план первоначальной установки вместо реального плана обновления.
Теперь Stable показывает Stable, Beta показывает Beta, Dev показывает Dev.
Это настолько базовая логика, что особенно неприятно писать её в разделе «Что исправлено».
Мы написали телеметрию и забыли включить её в сборку
Эта ошибка до пользователей не добралась. Её поймал CI.
Но она слишком хороша, чтобы скрывать.
Мы написали core_telemetry.go. Подключили его. Добавили тесты. Добавили интерфейс. Закоммитили.
Сборка сказала:
undefined: coreTel
undefined: readCoreTelemetry
Файл был.
Код был.
Функции были.
В программу файл не входил.
Идеальный корпоративный сотрудник: в штате есть, в документах есть, презентация про него есть, на результат не влияет.
CI посмотрел на это всё и фактически сказал:
«Ты файл забыл добавить, гений».
Добавили.
Спасибо, машина.
Что в итоге
0.12.1 — это не новый большой релиз. Тут нет искусственного интеллекта, блокчейна, Web3, машинного обучения и кнопки AI Optimize Router, которая меняет MTU и отправляет телеметрию в Калифорнию.
Мы просто сделали менее модную вещь:
исправили то, что уже обещали в 0.12.0.
Теперь Core соответствует своей версии. Официальные компоненты нормально обновляются. Соглашение для непроверенного кода больше не мешает обновлять наш собственный код. Телеметрия живёт в Core. План обновления показывает настоящий канал. Кнопка «Обновить» иногда даже обновляет.
В большой компании это назвали бы:
«повышением надёжности и улучшением пользовательского опыта после масштабного функционального релиза».
Красиво.
Почти невозможно понять, что это значит:
«Мы выпустили большую версию, пользователи начали нажимать кнопки и быстро показали нам, где насрано».
В 0.12.0 мы обещали новые баги.
Пользователи помогли их найти.
Мы помогли их исправить.
Командная работа.
RouterForge 0.12.1.
Если после релиза вам кажется, что всё работает идеально — не переживайте.
Пользователи скоро проверят.