Политика совместимости

Путь обновления

Перед обновлением на следующую мажорную версию система должна быть обновлена до последней минорной версии для текущей мажорной.

Обновление между минорными версиями может делаться с пропусками.

Пример. Существуют v12.34.0, v12.34.1, v12.34.2, v12.35.0, v12.35.1.

  • Будет работать:

    • v12.34.2 → v12.35.0 (минорная версия v12.34 — последняя)
    • v12.34.2 → v12.35.1 (то же, минорную версию v12.35.0 можно пропустить)
    • v12.34.0 → v12.34.2 (минорную версию v12.34.1 можно пропустить)
  • Может не работать:

    • v12.34.0 → v12.35.x (минорная версия .0 не последняя для v12.34)
    • v12.34.1 → v12.35.x (аналогично)

Если при обновлении меняется формат настроек, гарантируется их миграция в новый формат с сохранением смысла, если соответствующая логика сохраняется.

Пример. Вплоть до v20.02 ключ MCR задавался как base64 в API и как текст в UI. Начиная с v20.06, ключ задается как hex-строка. При обновлении байты существующих ключей переводятся в новый формат.

Пример: см. раздел «Пороги автодетектирования».

Backend API

В пределах мажорной версии гарантируется обратно-совместимый формат запросов.

Несовместимые изменения между мажорными версиями описываются в changelog.

Пример: все запросы для v12.34.0 работают с v12.34.1.

Пример: некоторые запросы для v12.34.2 могут не работать в v12.35.0, описание изменений приводится в разделе «Changelog v12.35.0».

Пороги автодетектирования

Если имена порогов меняются в новой версии, гарантируется, что значения старых порогов будут перенесены в новые пороги при обновлении, кроме случаев, когда старая логика удаляется.

Пример. В версии v12.34 был порог Threshold, при пересечении которого контрмера включалась или выключалась, ему было настроено значение 100. В версии v12.35 контрмера включается по порогу Threshold.On, выключается по Threshold.Off. При обновлении порог Threshold будет удален, вместо него будут созданы Threshold.Off и Threshold.On со одинаковыми значениями 100.

Программы BPF

Бинарный код в объектном файле работает через бинарный интерфейс MITIGATOR (application binary interface, ABI). При изменении ABI старые скомпилированные программы могут перестать загружаться или работать некорректно.

ABI может меняться только при выпуске новой мажорной версии (vXX.YY.0). Об изменении ABI сообщается в changelog.

Исходный код на C работает через API в mitigator_bpf.h. При изменении API старые программы могут прекратить компилироваться, но скомпилированные программы продолжают работать.

Изменения API, влияющие на старые программы, делаются только при выпуске новой мажорной версии.

Пример. В версии v21.04 добавлена поддержка IPv6, изменены некоторые типы данных. Версия ABI изменилась, поэтому старые объектные файлы прекратили загружаться. API также изменилось, поэтому старый код прекратил компилироваться. Об этом было объявлено в changelog.