mirror of https://github.com/ospab/ostp.git
623 lines
22 KiB
Markdown
623 lines
22 KiB
Markdown
# OSTP Клиенты — Детальный анализ (ostp-client, ostp-gui, ostp-flutter)
|
||
|
||
**Дата анализа:** 2026-06-17
|
||
|
||
---
|
||
|
||
## 📊 СРАВНИТЕЛЬНАЯ ТАБЛИЦА
|
||
|
||
| Параметр | ostp-client (Rust CLI) | ostp-gui (Tauri) | ostp-flutter (Mobile) |
|
||
|----------|:---:|:---:|:---:|
|
||
| **Язык** | Rust | Rust + TypeScript | Dart |
|
||
| **Строк кода** | 3,433 | 912 | ~1,500 |
|
||
| **Платформы** | Windows, Linux, macOS | Windows, macOS, Linux | iOS, Android |
|
||
| **Unwrap вызовов** | 21 | 20 | 0 (Dart не имеет unwrap) |
|
||
| **TUN поддержка** | ✅ Windows/Linux | ✅ Windows (via helper) | ✅ iOS/Android |
|
||
| **SOCKS5 прокси** | ✅ | ✅ | ❌ |
|
||
| **UI** | TUI (terminal) | GUI (Tauri) | Mobile (Flutter) |
|
||
| **Архитектура** | В процессе | в процессе + отдельный helper | Native bridge |
|
||
| **Стабильность** | 7.5/10 | 6.5/10 | 6.0/10 |
|
||
|
||
---
|
||
|
||
## 🖥️ 1. OSTP-CLIENT (CLI + TUI)
|
||
|
||
### 📏 Размер и структура
|
||
```
|
||
ostp-client/src:
|
||
3,433 строк (основной код)
|
||
- app.rs (119 строк) — UI состояние
|
||
- bridge.rs (26 строк) — Метрики
|
||
- runner.rs (74 строк) — Основной loop
|
||
- config.rs (314 строк) — Конфиг парсинг
|
||
- logging.rs (118 строк) — Логирование
|
||
- sysproxy.rs (278 строк) — Windows proxy
|
||
- tunnel/router.rs (155 строк) — Маршрутизация
|
||
- tunnel/process_lookup.rs (195 строк) — Windows/Linux process lookup
|
||
- tunnel/inbounds/tun.rs (300 строк) — TUN interface
|
||
- tunnel/inbounds/local_proxy.rs (224 строк) — SOCKS5 прокси
|
||
- transport/xhttp.rs (394 строк) — HTTP transport
|
||
```
|
||
|
||
### ✅ Сильные стороны
|
||
|
||
1. **Хороший контроль ошибок**
|
||
- Только 21 unwrap/expect (самый низкий показатель)
|
||
- Использует `?` оператор для пропагации ошибок
|
||
|
||
2. **Полнофункциональность**
|
||
- Поддержка TUN (Windows/Linux)
|
||
- SOCKS5 прокси
|
||
- Маршрутизация по доменам/IP/процессам
|
||
- Исключения (bypass)
|
||
|
||
3. **Хороший logging**
|
||
- setup_panic_hook() для crash logs
|
||
- Полная поддержка трассировки
|
||
- Работает с файлами и stderr
|
||
|
||
4. **Cross-platform**
|
||
- Windows API (process lookup, sysproxy)
|
||
- Unix/Linux поддержка
|
||
- macOS совместимость
|
||
|
||
5. **Оптимизации**
|
||
- Buffer pooling в TUN I/O
|
||
- Async/await с tokio
|
||
- Rate limiting
|
||
|
||
### ❌ Критические проблемы
|
||
|
||
1. **Backup файлы**
|
||
```
|
||
❌ ostp-client/src/bridge.rs.bak (115,500 строк!)
|
||
❌ ostp-client/src/runner.rs.bak (15,289 строк!)
|
||
```
|
||
- Не удалены неиспользуемые файлы
|
||
- Занимают дисковое пространство
|
||
- Могут вызвать путаницу при работе
|
||
|
||
2. **Performance Issues в hot paths**
|
||
- **router.rs:50-67**: `to_lowercase()` для каждого SNI matcher
|
||
```rust
|
||
let d = d.to_lowercase(); // ❌ На каждый чек
|
||
```
|
||
- **router.rs:67**: String allocation в process match
|
||
```rust
|
||
proc.contains(&p.to_lowercase()) // ❌ Выделение памяти
|
||
```
|
||
|
||
3. **UDP Handler incomplete**
|
||
```rust
|
||
// ostp-client/src/tunnel/outbounds/ostp.rs:93
|
||
Err(anyhow!("OSTP UDP handler not yet fully migrated"))
|
||
```
|
||
- UDP поддержка неполная
|
||
- Это критично для производительности!
|
||
|
||
4. **Platform-specific issues**
|
||
- **TODO: detect physical interface index for bypassing** (runner.rs)
|
||
- Windows: Неправильное определение интерфейса для bypass
|
||
|
||
5. **TUN buffer configuration**
|
||
```rust
|
||
// ostp-client/src/tunnel/inbounds/tun.rs:56-58
|
||
.stack_buffer_size(1024) // ❌ Маленький буффер!
|
||
.tcp_buffer_size(1024)
|
||
.udp_buffer_size(1024)
|
||
```
|
||
- 1024 bytes буффер ОЧЕНЬ маленький для throughput
|
||
- Должно быть 32KB-64KB минимум
|
||
|
||
6. **Memory leak в process lookup**
|
||
- Windows API вызывает `vec![0u8; 1024]` без переиспользования
|
||
- При высокой активности может быть проблемой
|
||
|
||
7. **Connection state tracking**
|
||
- Нет rate limiting на reconnects
|
||
- Может привести к DoS при частых сбоях
|
||
|
||
### 📈 Оценка: 7.5/10
|
||
|
||
| Метрика | Оценка | Примечание |
|
||
|---------|:---:|----------|
|
||
| Стабильность | 7/10 | Хороший error handling, но UDP incomplete |
|
||
| Скорость | 8/10 | Async/await хорошо, но буферы маленькие |
|
||
| Пропускная способность | 7/10 | Много allocations в hot paths |
|
||
| Кодовое качество | 7/10 | Чистый код, но backup файлы и TODO |
|
||
|
||
### 🔧 Рекомендации
|
||
|
||
**КРИТИЧНЫЕ (Неделя 1):**
|
||
1. ❌ Удалить bridge.rs.bak и runner.rs.bak
|
||
2. ⬆️ Увеличить буферы TUN:
|
||
```rust
|
||
.stack_buffer_size(32768) // 32KB
|
||
.tcp_buffer_size(32768)
|
||
.udp_buffer_size(32768)
|
||
```
|
||
3. ✅ Реализовать UDP handler полностью
|
||
4. 🎯 Добавить rate limiting на reconnects
|
||
|
||
**ВЫСОКИЕ (Неделя 2-3):**
|
||
5. 🔤 Кэшировать `to_lowercase()` в router
|
||
6. 📍 Реализовать physical interface detection
|
||
7. 🔄 Переиспользовать буферы в process lookup
|
||
8. 📊 Добавить metrics для buffer utilization
|
||
|
||
---
|
||
|
||
## 🎨 2. OSTP-GUI (Tauri + TypeScript)
|
||
|
||
### 📏 Размер и структура
|
||
```
|
||
ostp-gui/src-tauri/src:
|
||
912 строк (Rust backend)
|
||
- lib.rs (843 строк) — Основная логика
|
||
- main.rs (69 строк) — Entry point
|
||
|
||
ostp-gui/src:
|
||
TypeScript + React/Svelte
|
||
- Файлы не включены в анализ
|
||
```
|
||
|
||
### ✅ Сильные стороны
|
||
|
||
1. **Хороший UI/UX**
|
||
- Tauri для native feel
|
||
- Поддержка tray icon
|
||
- Single instance lock
|
||
- Autostart на Windows
|
||
|
||
2. **Безопасность**
|
||
- Tokenization для UAC elevation
|
||
- Temp file для auth token (не в argv!)
|
||
- Platform-specific elevation (UAC, pkexec, osascript)
|
||
|
||
3. **Multi-mode поддержка**
|
||
- In-process режим (прокси)
|
||
- Helper режим (TUN с привилегиями)
|
||
- Hot-reload конфига
|
||
|
||
4. **Хороший error handling**
|
||
- Обработка паник
|
||
- Dialog для отображения ошибок
|
||
- Логирование в файл
|
||
|
||
5. **Кроссплатформенность**
|
||
- Windows (UAC, registry)
|
||
- macOS (osascript, osascript)
|
||
- Linux (pkexec)
|
||
|
||
### ❌ Критические проблемы
|
||
|
||
1. **20 unwrap/expect в коде**
|
||
- Выше, чем хотелось бы
|
||
- Примеры:
|
||
```rust
|
||
// lib.rs:536
|
||
listener.local_addr().unwrap()
|
||
|
||
// lib.rs:559
|
||
serde_json::to_string(&mapped).unwrap_or_default()
|
||
|
||
// lib.rs:365
|
||
serde_json::to_string(&core_cfg).unwrap()
|
||
```
|
||
|
||
2. **Процесс управления TUN слишком сложный**
|
||
- Запуск отдельного helper с UAC
|
||
- IPC через JSON lines
|
||
- Потенциальные race conditions
|
||
- Temp файлы не гарантированно удаляются
|
||
|
||
3. **Отсутствие timeout для helper connection**
|
||
```rust
|
||
// lib.rs:544-551
|
||
timeout 60 секунд для подключения к helper
|
||
// ❌ Слишком долго! Пользователь ждёт.
|
||
```
|
||
|
||
4. **Process list loading может зависнуть**
|
||
```rust
|
||
// lib.rs:162-219
|
||
Синхронный вызов tasklist/ps каждый раз
|
||
// ❌ Может блокировать UI в процессе сканирования
|
||
```
|
||
|
||
5. **Memory leaks в HelperPipeState**
|
||
- Нет cleanup для temp файлов auth token
|
||
- Нет гарантированного kill helper процесса при выходе
|
||
|
||
6. **Token validation отсутствует**
|
||
```rust
|
||
// lib.rs:557-559
|
||
Отправляет конфиг в plain text через pipe
|
||
// ❌ Нет шифрования между GUI и helper!
|
||
```
|
||
|
||
7. **Config migration хрупкая**
|
||
```rust
|
||
// lib.rs:282-284
|
||
Полагается на комментарий в JSON
|
||
// "// OSTP Configuration v0.3.1"
|
||
// ❌ Может сломаться при форматировании
|
||
```
|
||
|
||
8. **Нет версионирования для IPC**
|
||
- Если helper и GUI из разных версий — crash
|
||
- Нет fallback механизма
|
||
|
||
### 🔄 Процесс запуска TUN (ОЧЕНЬ сложный!)
|
||
|
||
```mermaid
|
||
GUI: Нажимаем "Connect"
|
||
↓
|
||
→ Читаем config.json
|
||
→ Проверяем wintun.dll
|
||
→ Находим ostp-tun-helper.exe
|
||
→ Генерируем random token
|
||
→ Пишем token в temp file
|
||
↓
|
||
→ Вызываем ShellExecuteW с UAC
|
||
↓
|
||
Helper: Запускается с привилегиями
|
||
→ Слушает на TCP 127.0.0.1:port
|
||
→ Ждёт подключения GUI
|
||
↓
|
||
GUI: Подключается к helper (retry 200мс × N)
|
||
→ Отправляет JSON: {cmd: "start", config, token}
|
||
↓
|
||
Helper: Парсит JSON
|
||
→ Запускает tunnel
|
||
→ Отправляет status JSON каждый tick
|
||
↓
|
||
GUI: Получает JSON lines
|
||
→ Обновляет UI state
|
||
→ Показывает метрики
|
||
```
|
||
|
||
**Проблемы:**
|
||
- 🔴 Если helper не запустится — зависает на 60 сек timeout
|
||
- 🔴 Если temp file удалится — helper не сможет прочитать token
|
||
- 🔴 IPC не зашифрована
|
||
- 🔴 Нет graceful shutdown helper
|
||
|
||
### 📈 Оценка: 6.5/10
|
||
|
||
| Метрика | Оценка | Примечание |
|
||
|---------|:---:|----------|
|
||
| Стабильность | 6/10 | Helper IPC может сломаться |
|
||
| Скорость | 6/10 | 60сек timeout, процесс list синхронно |
|
||
| Пропускная способность | 7/10 | OK, но зависит от helper |
|
||
| Удобство | 8/10 | Хороший UI |
|
||
| Кодовое качество | 5/10 | Много unwraps, IPC не безопасна |
|
||
|
||
### 🔧 Рекомендации
|
||
|
||
**КРИТИЧНЫЕ (Неделя 1):**
|
||
1. 🔐 Зашифровать IPC между GUI и helper (AES-256)
|
||
2. ⏱️ Снизить timeout с 60 до 15 сек
|
||
3. 🗑️ Гарантировать cleanup temp файлов
|
||
4. 🔄 Добавить версионирование для IPC messages
|
||
|
||
**ВЫСОКИЕ (Неделя 2-3):**
|
||
5. ❌ Заменить все unwrap на Result
|
||
6. 🔀 Async process list loading (не блокировать UI)
|
||
7. 🎯 Добавить graceful shutdown helper
|
||
8. 📊 Добавить heartbeat между GUI и helper
|
||
|
||
**СРЕДНИЕ (Месяц 1):**
|
||
9. 🔔 Notification system для helper ошибок
|
||
10. 📝 Version migration guide для config
|
||
|
||
---
|
||
|
||
## 📱 3. OSTP-FLUTTER (Mobile)
|
||
|
||
### 📏 Размер и структура
|
||
```
|
||
ostp-flutter/lib:
|
||
~1,500 строк (Dart)
|
||
- main.dart (42 строк) — Entry point
|
||
- ui/home_screen.dart (~300 строк) — Основной UI
|
||
- ui/settings_screen.dart
|
||
- ui/logs_screen.dart
|
||
- ui/qr_scanner_screen.dart
|
||
- models/connection_state_enum.dart
|
||
```
|
||
|
||
### ✅ Сильные стороны
|
||
|
||
1. **Нативный мобильный опыт**
|
||
- Flutter для iOS/Android
|
||
- Native bridge (MethodChannel)
|
||
- Platform-specific implementations
|
||
|
||
2. **Хороший UI/UX**
|
||
- Material 3 design
|
||
- Animations (pulse, spin)
|
||
- Dark theme
|
||
- QR scanner для конфига
|
||
|
||
3. **Отсутствие паник**
|
||
- Dart не имеет unwrap()
|
||
- Тип safety гарантирует?/null checks
|
||
- try-catch для error handling
|
||
|
||
4. **Сохранение состояния**
|
||
- SharedPreferences для settings
|
||
- Auto-reconnect механизм
|
||
- Uptime tracking
|
||
|
||
5. **Удобная конфигурация**
|
||
- Введение вручную
|
||
- QR code сканирование
|
||
- Сохранение в SharedPreferences
|
||
|
||
### ❌ Критические проблемы
|
||
|
||
1. **Отсутствие SOCKS5 прокси**
|
||
- Только TUN поддержка
|
||
- Нельзя использовать как прокси для браузера
|
||
- Нет split tunneling по приложениям (нативно)
|
||
|
||
2. **Native bridge не зашифрован**
|
||
```dart
|
||
// home_screen.dart:24
|
||
static const platform = MethodChannel('com.ospab.ostp/vpn');
|
||
// ❌ Нет шифрования между Dart и native!
|
||
```
|
||
|
||
3. **Polling механизм неэффективен**
|
||
```dart
|
||
_pollTimer = Timer.periodic(Duration(seconds: 1), (_) {
|
||
platform.invokeMethod('getStatus');
|
||
});
|
||
// ❌ Каждую секунду IPC вызов!
|
||
```
|
||
- 60 вызовов в минуту
|
||
- Потребление батареи и CPU
|
||
- Сеть может быть дорогой на мобильных
|
||
|
||
4. **Отсутствие проверки версии**
|
||
- Нет версионирования между Dart и native
|
||
- Если native code разные версии → crash
|
||
|
||
5. **Config parsing уязвимость**
|
||
```dart
|
||
// home_screen.dart:79-130
|
||
Парсит JSON без валидации
|
||
// Большой JSON может привести к OutOfMemory
|
||
```
|
||
|
||
6. **Hardcoded localhost**
|
||
- Привязка к 127.0.0.1 в конфиге
|
||
- Невозможно подключиться к удалённому серверу
|
||
- Нет мультисерверной поддержки
|
||
|
||
7. **DNS переопределение на Android**
|
||
```dart
|
||
final effectiveDnsServer = (dnsServer == null || dnsServer.isEmpty)
|
||
? '1.1.1.1' : dnsServer;
|
||
// ❌ Жёсткий fallback, нет системного DNS
|
||
```
|
||
|
||
8. **Логирование отсутствует**
|
||
- debugPrint() только для ошибок
|
||
- Нет файлового логирования
|
||
- Сложно диагностировать проблемы на production
|
||
|
||
9. **Memory leak в animations**
|
||
```dart
|
||
_pulseController = AnimationController(vsync: this);
|
||
_spinController = AnimationController(vsync: this);
|
||
// ❌ Контроллеры не dispose в некоторых путях
|
||
```
|
||
|
||
10. **Отсутствие rate limiting**
|
||
- Пользователь может спамить "Connect"
|
||
- Может привести к множественным соединениям
|
||
|
||
### 📊 Traffic calculations issues
|
||
|
||
```dart
|
||
// home_screen.dart:130-150
|
||
final configMap = {
|
||
"download_speed": int.parse(_download.replaceAll(RegExp(r'[^\d]'), '') ?? "0"),
|
||
"upload_speed": int.parse(_upload.replaceAll(RegExp(r'[^\d]'), '') ?? "0"),
|
||
// ❌ Неправильный парсинг! "10.5 MB" → "105"!
|
||
};
|
||
```
|
||
|
||
### 📈 Оценка: 6.0/10
|
||
|
||
| Метрика | Оценка | Примечание |
|
||
|---------|:---:|----------|
|
||
| Стабильность | 6/10 | Нет crash detection, memory leaks |
|
||
| Скорость | 6/10 | Excessive polling, animations heavy |
|
||
| Батарея | 5/10 | Continuous polling, animations |
|
||
| Пропускная способность | 5/10 | Только TUN, нет контроля |
|
||
| Кодовое качество | 6/10 | Нет logging, парсинг хрупкий |
|
||
|
||
### 🔧 Рекомендации
|
||
|
||
**КРИТИЧНЫЕ (Неделя 1):**
|
||
1. 🔐 Зашифровать native bridge (TLS / AEAD)
|
||
2. 📢 Заменить polling на event-based updates (callbacks)
|
||
3. 🛡️ Добавить crash handler (Sentry/Firebase)
|
||
4. 🔢 Исправить traffic parsing
|
||
|
||
**ВЫСОКИЕ (Неделя 2-3):**
|
||
5. 📝 Добавить файловое логирование
|
||
6. 🎯 Добавить rate limiting на кнопки
|
||
7. 🗑️ Dispose animations в cleanup
|
||
8. 📌 Добавить версионирование для native bridge
|
||
|
||
**СРЕДНИЕ (Месяц 1):**
|
||
9. 🌐 Поддержка удалённых серверов
|
||
10. 🔄 Система DNS fallback (система → custom → 1.1.1.1)
|
||
|
||
---
|
||
|
||
## 🎯 СРАВНЕНИЕ КЛИЕНТОВ
|
||
|
||
### По Стабильности
|
||
```
|
||
ostp-client ████████░░ 7.5/10 ← Лучше
|
||
ostp-gui ██████░░░░ 6.5/10
|
||
ostp-flutter ██████░░░░ 6.0/10 ← Хуже
|
||
```
|
||
|
||
### По Скорости
|
||
```
|
||
ostp-client ████████░░ 8.0/10 ← Лучше (буферы маленькие, но быстрый)
|
||
ostp-gui ██████░░░░ 6.0/10 (тяжёлый UI overhead)
|
||
ostp-flutter ██████░░░░ 6.0/10 ← Хуже (polling + UI lag)
|
||
```
|
||
|
||
### По Пропускной способности
|
||
```
|
||
ostp-client ███████░░░ 7.0/10 ← Лучше
|
||
ostp-gui ███████░░░ 7.0/10
|
||
ostp-flutter █████░░░░░ 5.0/10 ← Хуже (только TUN)
|
||
```
|
||
|
||
### По Удобству использования
|
||
```
|
||
ostp-client █████░░░░░ 5.0/10 ← CLI/TUI
|
||
ostp-gui ████████░░ 8.0/10 ← Лучше (красивый GUI)
|
||
ostp-flutter ███████░░░ 7.0/10
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 UNIFIED ISSUES (ОБЩИЕ ДЛЯ ВСЕХ)
|
||
|
||
### 1. **Отсутствие IPC шифрования**
|
||
- ostp-gui: JSON без шифрования между GUI и helper
|
||
- ostp-flutter: Native bridge без шифрования
|
||
- **РИСК:** MITM атаки, утечка конфига
|
||
|
||
### 2. **Config migration хрупкая**
|
||
- Все клиенты используют JSON с комментариями
|
||
- Парсинг может сломаться при форматировании
|
||
- Нет версионирования
|
||
|
||
### 3. **Нет graceful shutdown**
|
||
- Может привести к потере конфига
|
||
- Незаконченные операции I/O
|
||
|
||
### 4. **Logging недостаточный**
|
||
- ostp-client: OK
|
||
- ostp-gui: File logging, но неполный
|
||
- ostp-flutter: Только debugPrint
|
||
|
||
### 5. **Отсутствие crash reporting**
|
||
- Нет сбора информации о падениях
|
||
- Сложно диагностировать production issues
|
||
|
||
---
|
||
|
||
## 🏆 ИТОГОВЫЕ ОЦЕНКИ
|
||
|
||
| Клиент | Стабильность | Скорость | Пропускная способность | **Общая** | Рекомендация |
|
||
|--------|:---:|:---:|:---:|:---:|---------|
|
||
| **ostp-client** | 7/10 | 8/10 | 7/10 | **7.3/10** | ✅ Production-ready (с исправлениями) |
|
||
| **ostp-gui** | 6/10 | 6/10 | 7/10 | **6.3/10** | ⚠️ Beta (нужны исправления) |
|
||
| **ostp-flutter** | 6/10 | 6/10 | 5/10 | **5.7/10** | 🔴 Alpha (много работы) |
|
||
|
||
---
|
||
|
||
## 🚀 ФАЗА УЛУЧШЕНИЙ
|
||
|
||
### **НЕДЕЛЯ 1** (Критичные)
|
||
```
|
||
ostp-client:
|
||
- ❌ Удалить .bak файлы
|
||
- ⬆️ Увеличить TUN буферы 32KB
|
||
- ✅ Реализовать UDP handler
|
||
|
||
ostp-gui:
|
||
- 🔐 Зашифровать IPC (AES-256)
|
||
- ⏱️ Timeout 60→15 сек
|
||
- 🗑️ Cleanup temp files
|
||
|
||
ostp-flutter:
|
||
- 🔐 Зашифровать native bridge
|
||
- 📢 Polling → Event-based
|
||
- 🔢 Исправить traffic parsing
|
||
```
|
||
|
||
### **НЕДЕЛЯ 2-3** (Высокие)
|
||
```
|
||
ostp-client:
|
||
- 🔤 Кэшировать to_lowercase()
|
||
- 📍 Physical interface detection
|
||
|
||
ostp-gui:
|
||
- ❌ Все unwrap → Result
|
||
- 🔀 Async process list
|
||
|
||
ostp-flutter:
|
||
- 📝 File logging
|
||
- 🎯 Rate limiting buttons
|
||
```
|
||
|
||
### **МЕСЯЦ 1** (Средние)
|
||
```
|
||
Все:
|
||
- 🔔 Crash reporting (Sentry)
|
||
- 📊 Telemetry & metrics
|
||
- 🧪 Integration tests
|
||
- 📖 Documentation
|
||
```
|
||
|
||
---
|
||
|
||
## 💡 АРХИТЕКТУРНЫЕ РЕКОМЕНДАЦИИ
|
||
|
||
### Для ostp-client
|
||
```
|
||
Текущая: CLI → bridge → tunnel → TUN/SOCKS5
|
||
Нужна: CLI → async bridge → thread pool → buffered I/O
|
||
```
|
||
|
||
### Для ostp-gui
|
||
```
|
||
Текущая: GUI → JSON IPC → helper → tunnel
|
||
Проблема: Нет безопасности, нет версионирования
|
||
Нужна: GUI → Encrypted RPC (protobuf/msgpack) → versioned helper
|
||
```
|
||
|
||
### Для ostp-flutter
|
||
```
|
||
Текущая: Dart → polling → native → tunnel
|
||
Проблема: Неэффективно, нет logging
|
||
Нужна: Dart ← events → native (callback-based)
|
||
+ File logging + Sentry
|
||
```
|
||
|
||
---
|
||
|
||
## 📌 ФИНАЛЬНЫЙ ВЕРДИКТ
|
||
|
||
### ostp-client: **7.3/10** ✅
|
||
**Лучший выбор для production после небольших исправлений**
|
||
- Проблемы: Маленькие буферы, UDP incomplete, backup файлы
|
||
- Срок исправления: 1 неделя
|
||
- Потом готов к production
|
||
|
||
### ostp-gui: **6.3/10** ⚠️
|
||
**Хороший UI, но нужна безопасность**
|
||
- Проблемы: IPC не зашифрована, timeout 60сек, unwraps
|
||
- Срок исправления: 2-3 недели
|
||
- Опасна для использования в public networks
|
||
|
||
### ostp-flutter: **5.7/10** 🔴
|
||
**Ещё в разработке**
|
||
- Проблемы: Polling excessive, no logging, parsing bugs
|
||
- Срок исправления: 1 месяц
|
||
- Пока только для личного использования
|
||
|