# Видение проекта: Pupoxide
## Общее описание
**Pupoxide** — это современная, высокопроизводительная и безопасная замена для систем управления конфигурациями (таких как Puppet), написанная на языке Rust. Проект нацелен на обеспечение максимальной скорости работы, безопасности памяти и легкости развертывания инфраструктуры "одной кнопкой".
## Технический стек
- **Язык программирования**: Rust (последняя стабильная версия)
- **Runtime**: Tokio (асинхронность по умолчанию)
- **База данных**: PostgreSQL (через SeaORM для типобезопасности)
- **Архитектура**: Модульный монолит / Чистая архитектура (Domain, Infrastructure, Application)
## Ключевые возможности
### 1. Декларативное управление конфигурациями
- Описание желаемого состояния системы через ресурсную модель.
- **Идемпотентность**: повторное применение конфигурации не изменяет систему, если она уже находится в нужном состоянии.
- Поддержка основных дистрибутивов Linux (Ubuntu, Debian, RHEL) "из коробки".
### 2. Динамический инвентарь (Facts & Inventory)
- Сбор фактов об узлах в реальном времени.
- Гибкая группировка узлов на основе тегов и системных атрибутов.
- Интеграция с внешними источниками данных через плагины.
### 3. Производительность и Безопасность
- Нулевая стоимость абстракций благодаря Rust.
- Отсутствие внешних зависимостей (Ruby, JVM, Python) на целевых узлах.
- Параллельное выполнение задач без риска состояния гонки (Data Race Safety).
## Технические особенности
- **Compiled Manifests**: Проверка корректности конфигурации на этапе компиляции или подготовки (dry-run).
- **Single Binary**: Все компоненты (сервер, агент, CLI) поставляются в одном бинарном файле.
- **TLS by Default**: Все коммуникации между узлами шифруются по умолчанию.
## Цели проекта
1. **Скорость**: Обработка манифестов и применение изменений в разы быстрее аналогов.
2. **Надежность**: Использование системы типов Rust для минимизации runtime-ошибок.
3. **Простота**: Легкий старт и интуитивно понятный CLI.
## Принципы разработки
### KISS & DRY
- Простота реализации важнее избыточной универсальности.
- Переиспользование логики через общие доменные модели.
### Fail Fast & Explicit Errors
- Ошибки должны обнаруживаться как можно раньше.
- Каждая ошибка должна иметь понятный контекст и предлагать путь решения.
### Static & Type Safe
- Максимальное использование типов Rust вместо строк и динамических структур.