uBlock Origin development: как устроена разработка блокировщика

Разработка uBlock Origin ведётся в открытом репозитории на GitHub под учётной записью gorhill, и любой желающий может склонировать исходный код, собрать расширение локально или предложить свои изменения через pull request. Проект написан преимущественно на JavaScript и не требует сложной инфраструктуры: для сборки достаточно установленного Python и инструментов командной строки, которые есть в большинстве систем.

В этой статье разберём, как устроен процесс разработки uBlock Origin: от клонирования репозитория и сборки до отладки собственных фильтров и отправки исправлений автору. Материал будет полезен как тем, кто хочет внести вклад в проект, так и пользователям, желающим собрать расширение из исходников самостоятельно.

Структура репозитория и технологический стек

Исходный код uBlock Origin расположен в репозитории uBlockOrigin/uBlock на GitHub. Основная логика расширения написана на чистом JavaScript без использования крупных фреймворков — автор проекта сознательно избегает тяжёлых зависимостей, чтобы сохранить контроль над производительностью и размером кода.

Ключевые директории репозитория включают src/ с основным кодом, platform/ с платформозависимыми частями для Chromium и Firefox, а также tools/ со скриптами сборки. Файлы локализации лежат в каталоге src/_locales/, и именно туда вносятся переводы интерфейса на разные языки.

  • 📁 src/js/ — ядро блокировщика, движок фильтрации и логика интерфейса
  • 📁 platform/ — специфичный код для браузеров Chromium и Firefox
  • 📁 tools/ — скрипты сборки и вспомогательные утилиты
  • 📁 assets/ — встроенные списки фильтров и их метаданные

Сборка расширения из исходников

Для сборки uBlock Origin из исходного кода потребуется установленный Python 3 и утилита git. Сначала клонируйте репозиторий и перейдите в его директорию:

git clone https://github.com/gorhill/uBlock.git

cd uBlock

Сборка выполняется скриптом из каталога tools/. Для версии под Chromium используется команда:

tools/make-chromium.sh

Готовое расширение появится в директории dist/build/uBlock0.chromium/. Для Firefox есть отдельный скрипт tools/make-firefox.sh, который формирует пакет в формате XPI. Точные имена скриптов и их параметры могут меняться между версиями, поэтому перед сборкой стоит заглянуть в файл tools/README.md в актуальной версии репозитория.

⚠️ Внимание: расширение, собранное из исходников, не будет автоматически обновляться через магазин браузера. При выходе новой версии сборку придётся повторять вручную, иначе вы рискуете остаться на устаревшей версии с неактуальными исправлениями безопасности.

☑️ Проверка перед первой сборкой

Выполнено: 0 / 4

Режим разработчика и отладка

В самом uBlock Origin есть встроенные инструменты, полезные при разработке и диагностике. На вкладке настроек расширения можно включить опцию «Я опытный пользователь», после чего становятся доступны динамические правила фильтрации и расширенная панель управления. Дополнительно в разделе скрытых настроек (advanced settings) доступны параметры, меняющие поведение движка.

Для отладки кода расширения используйте стандартные инструменты браузера. В Chromium откройте страницу chrome://extensions, включите режим разработчика и нажмите «Проверить представления» рядом с нужной страницей расширения. В Firefox аналогичная возможность доступна через about:debugging. Так вы получите доступ к консоли, точкам останова и инспектору фонового скрипта.

Разработка и тестирование собственных фильтров

Значительная часть «разработки» вокруг uBlock Origin — это создание и поддержка списков фильтров. Синтаксис фильтров uBlock Origin совместим с Adblock Plus, но расширен собственными возможностями: процедурными косметическими фильтрами, скриптлетами и расширенными сетевыми модификаторами.

Собственные правила добавляются на вкладке «Мои фильтры» в панели управления. Перед добавлением правила в публичный список его стоит проверить через логгер: убедиться, что оно блокирует целевой запрос и не ломает функциональность сайта. Для проверки косметических фильтров удобно использовать средство выбора элементов (element picker) — оно подсвечивает, какие узлы страницы попадут под правило.

Тип правилаНазначениеПример синтаксиса
Сетевой фильтрБлокировка запроса к домену или URL||example.com/ads/
Косметический фильтрСкрытие элемента на страницеexample.com##.banner
СкриптлетВнедрение JS для нейтрализации антиблокировщиковexample.com##+js(nostif, ...)
ИсключениеОтмена действия существующего фильтра@@||example.com/needed.js
⚠️ Внимание: при тестировании фильтров сначала отключайте сторонние списки и проверяйте правило в изоляции. Конфликт двух списков — частая причина ложных срабатываний, и без изоляции вы не поймёте, какой именно фильтр ломает страницу.
📊 Что вам интереснее в разработке uBlock Origin?
Сборка расширения из исходников
Создание собственных фильтров
Участие в разработке ядра
Перевод интерфейса на русский язык

Участие в разработке проекта

Вклад в uBlock Origin возможен в нескольких форматах. Самый доступный — сообщения об ошибках через GitHub Issues, но здесь есть важный нюанс: прежде чем создавать issue, нужно воспроизвести проблему с настройками по умолчанию и без сторонних списков. Автор проекта строго следит за качеством репортов, и шаблон issue требует заполнения всех диагностических пунктов.

Исправления кода принимаются через pull request. Перед отправкой убедитесь, что изменение минимально, не ломает существующее поведение и сопровождается понятным описанием причины. Переводы интерфейса вносятся через платформу Crowdin, а не прямыми правками файлов локализации в репозитории.

  • 🐛 Сообщения об ошибках — только с полной диагностикой по шаблону
  • 🔧 Pull requests — минимальные, сфокусированные изменения
  • 🌐 Переводы — через Crowdin, а не напрямую в git
  • 📋 Фильтры — проблемы с ложными срабатываниями решаются в отдельном репозитории uAssets
Почему автор отклоняет многие pull requests

Проект придерживается философии минимализма: каждое изменение увеличивает поверхность для ошибок и стоимость поддержки. Поэтому предложения новых функций часто отклоняются, даже если они технически грамотны. Перед серьёзной работой над фичей стоит обсудить идею в issue и получить обратную связь.

Manifest V3 и проект uBOL

Отдельное направление разработки связано с переходом Chrome на Manifest V3, который ограничивает возможности классических блокировщиков. В ответ на это автор создал отдельный проект — uBlock Origin Lite (uBOL), который работает в рамках нового API declarativeNetRequest. Его исходники также открыты и развиваются параллельно с основным проектом.

uBOL отличается архитектурно: фильтрация выполняется браузерным движком, а не кодом расширения, что снижает гибкость, но соответствует новым требованиям платформы. В Firefox оригинальный uBlock Origin продолжает работать на прежней модели, и разработка классической версии не прекращается.

Часто задаваемые вопросы

Нужно ли знать фреймворки для участия в разработке uBlock Origin?

Нет. Кодовая база написана на ванильном JavaScript без React, Vue и подобных инструментов. Достаточно уверенного владения JavaScript, понимания WebExtensions API и готовности читать существующий код проекта.

Можно ли установить собранную из исходников версию в Chrome?

Да, через страницу chrome://extensions с включённым режимом разработчика — кнопка «Загрузить распакованное расширение». Учтите, что браузер будет периодически напоминать о расширениях в режиме разработчика, а автообновления из магазина работать не будут.

Куда сообщать о ложной блокировке сайта?

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

Как перевести интерфейс uBlock Origin на свой язык?

Переводы вносятся через платформу Crowdin, где у проекта есть официальная страница. Прямые правки файлов в src/_locales/ через pull request не принимаются, так как локализации синхронизируются автоматически.

Будет ли классический uBlock Origin работать в Chrome после перехода на Manifest V3?

Google поэтапно отключает поддержку Manifest V2 в Chrome, и точные сроки зависят от канала браузера и корпоративных политик. Для пользователей Chrome автор проекта развивает uBlock Origin Lite, а полная версия остаётся доступной в Firefox и браузерах, сохраняющих поддержку MV2.