Движение 0deps: Локальные зависимости и неизменяемые контракты

Разработчики программного обеспечения часто устанавливают сотни внешних библиотек. Современные фреймворки полагаются на тысячи транзитивных зависимостей. Это означает, что ваше приложение запускает код, написанный незнакомцами.

Это создает риск для цепочки поставок программного обеспечения.

Каждая зависимость увеличивает вашу поверхность атаки. Она может:

  • Привносить уязвимости.
  • Стать целью атак на цепочку поставок.
  • Быть заброшенной мейнтейнерами.
  • Изменить свой публичный API.
  • Нарушить обратную совместимость.

Движение 0deps задает простой вопрос: что, если ваше приложение будет полагаться только на код, который вы контролируете?

В модели 0deps вы встраиваете необходимые зависимости непосредственно в репозиторий вашего проекта. Вы перестаете скачивать их динамически во время сборки. Все, что нужно для работы приложения, с самого начала находится в репозитории.

Такой подход обеспечивает:

  • Воспроизводимые сборки.
  • Меньшую зависимость от внешних реестров.
  • Централизованный аудит безопасности.
  • Более высокую предсказуемость.

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

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

  • authenticate()
  • createSession()
  • verifyPasskey()

Эти функции определяют контракт. Контракт никогда не меняется. Вы можете переписать код за ним или полностью заменить библиотеку. Остальная часть вашего приложения не заметит изменений.

Когда появляется уязвимость, вы обычно сталкиваетесь с двумя проблемами:

  1. Исправление уязвимости.
  2. Проверка того, не сломает ли обновление ваше приложение.

В архитектуре 0deps вторая проблема исчезает. Вы обновляете внутреннюю реализацию, в то время как публичный API остается прежним. Ваше приложение продолжает работать без изменений в коде.

Вы изолируете внешние интеграции с помощью внутреннего адаптера: Приложение -> Публичный интерфейс -> Адаптер -> Реализация

Если библиотека исчезнет завтра, вам нужно будет изменить только адаптер. Никакая другая часть вашего приложения не сломается.

0deps не делает программное обеспечение идеальным. Оно снижает риски цепочки поставок. Оно предотвращает такие проблемы, как вредоносные пакеты, компрометация реестров и подмена зависимостей (dependency confusion).

Проекты существуют десятилетиями. Библиотеки и фреймворки меняются. С 0deps ваше приложение продолжает использовать одни и те же стабильные контракты, независимо от того, как развивается экосистема.

Source: https://dev.to/fullagenticstack/movimento-0deps-dependencias-locais-contratos-imutaveis-e-seguranca-por-design-4coo