В мире терминалов появился новый игрок — Brush. Это POSIX-совместимый шелл, написанный на Rust, который поддерживает синтаксис Bash. Теперь можно писать скрипты с безопасностью Rust и знакомым синтаксисом. 🔥 Попробуйте — вдруг это ваш новый любимый инструмент?
Технический обзор
Brush (B(o)u(r)n(e) RUsty SHell) — это новый POSIX-совместимый командный шелл, написанный на Rust, с поддержкой синтаксиса Bash. Проект разрабатывается как альтернатива традиционным шеллам (Bash, Zsh) с акцентом на безопасность, производительность и современную экосистему Rust.
Ключевые особенности
- Полная совместимость с POSIX и основными возможностями Bash
- Поддержка интерактивного использования как daily-driver
- Возможность выполнения большинства sh/bash скриптов
- Кросс-платформенность: Linux, macOS, экспериментальная поддержка Windows (включая WSL)
- Современная архитектура на основе асинхронного runtime Tokio
Техническая реализация
Архитектура и ключевые компоненты
Brush построен на нескольких фундаментальных Rust-крейтах:
- Reedline — обеспечивает readline-подобный ввод для интерактивного использования
- Clap — обработка аргументов командной строки
- Tokio — асинхронный runtime для эффективного выполнения команд
- Nix — высокоуровневые API для работы с POSIX-системами
Установка и запуск
Для установки требуется рабочая цепочка инструментов Rust:
cargo install --locked brush-shell
Альтернативные варианты установки:
- Nix:
nix run 'github:NixOS/nixpkgs/nixpkgs-unstable#brush' -- --version - Arch Linux (AUR):
paru -S brush
Совместимость и ограничения
Поддерживаемые функции
- Обработка
.bashrcи других стандартных конфигурационных файлов - Большинство встроенных команд Bash
- Основные опции
setиshopt
Известные ограничения
- Не все опции
set/shoptполностью реализованы (например,set -eвыполняется, но не влияет на выполнение) - Некоторые функции помечены как
TODOили возвращаютerror::unimp() - Экспериментальная поддержка Windows
Тестирование и качество
Проект использует инновационный подход к тестированию:
- 550+ интеграционных тестов, сравнивающих поведение с эталонными шеллами
- Статистическое бенчмаркирование через
criterion.rs - Профилирование производительности с
pprof-rs
Сравнение с альтернативами
| Характеристика | Brush | Bash | NuShell | mvdan/sh |
|---|---|---|---|---|
| Язык реализации | Rust | C | Rust | Go |
| POSIX-совместимость | Полная | Полная | Частичная | Полная |
| Поддержка Bash | Да | — | Нет | Частичная |
| Асинхронный runtime | Tokio | Нет | Да | Нет |
Перспективы и рекомендации
Хотя Brush уже пригоден для повседневного использования, разработчики пока не рекомендуют его для production-сред из-за возможных расхождений в поведении. Проект активно развивается, и сообществу предлагается участвовать в тестировании и разработке.
Для профессионального использования стоит рассмотреть:
- Разработчикам: интеграцию в CI/CD для тестирования кросс-шелл совместимости
- DevOps-инженерам: эксперименты в изолированных средах
- Энтузиастам Rust: участие в развитии экосистемы
Заключение
Brush представляет собой многообещающую попытку модернизации традиционных шеллов с использованием преимуществ Rust. Проект сочетает совместимость с существующей экосистемой и современные подходы к разработке системного ПО. При сохранении текущего темпа развития Brush может стать серьезной альтернативой в нише командных оболочек.