Rust в наших сердцах!
Rust и Linux -
Идеальный тандем.
Свобода и мощь.
( читать дальше... )
Всего сообщений: 15
Rust и Linux -
Идеальный тандем.
Свобода и мощь.
( читать дальше... )
Привет, $username!
Хотел рассказать о своём проекте OpenShield. OpenShield – это фарвол для Linux с контролем сетевой активности отдельных приложений, написанный на Rust. Для управления используется терминальный интерфейс, а фильтрацией пакетов занимается nftables с возможностью переключения на iptables. В режиме обучения программа пропускает исходящий трафик и автоматически создаёт разрешающие правила. Затем можно перейти в режим Enforcing: соединения, для которых нет разрешающего правила, будут блокироваться. Правила можно привязывать к cgroup, пути исполняемого файла и параметрам запуска, дополняя ограничениями по адресам, портам и протоколам. Поддерживаются действия accept, drop и reject, а также временное отключение правил без их удаления.
Идея создать свой аналог OpenSnitch появилась довольно давно, но не было окончательного видения проекта. Когда я понял что должно получиться, закипела работа.
Я написал на GitHub, что OpenShield является форком opensnitch, наверное это не совсем так, поскольку заимствована лишь идея, а код написан заново, отличаются механизмы работы и задачи приложения. Поэтому точнее было бы назвать OpenShield самостоятельной реализацией, вдохновлённой OpenSnitch. В OpenSnitch заметный акцент сделан на интерактивном контроле исходящих соединений через графический интерфейс; также есть управление системным фаерволом и несколькими узлами. В OpenShield я делаю упор на локальную политику защиты хоста и работу через терминал, в том числе на серверах без графического окружения. Основной сценарий — собрать правила в режиме обучения, проверить их и перейти к фильтрации по явно разрешённым соединениям.
Отдельное внимание уделяется поведению при ошибках. В режиме Enforcing невозможность достоверно определить приложение не должна превращаться в разрешение трафика: неоднозначная атрибуция приводит к блокировке соответствующего пакета. При критических сбоях предусмотрен аварийный режим BlockAll. Изменять правила и режим работы может только root, а наблюдение доступно участникам группы openshield. Управление и мониторинг разделены между локальными Unix-сокетами с проверкой учётных данных клиента; сетевого управляющего API нет.
Демон и TUI написаны на Rust, в собственном коде запрещён unsafe. Дополнительно ограничены размеры сообщений, очереди и время обработки запросов, предусмотрены проверки сохранённого состояния и тесты поведения при перегрузке. Это не обещание отсутствия уязвимостей и не утверждение, что OpenSnitch небезопасен, а описание выбранных инженерных приоритетов. Обучение тоже не определяет, заслуживает ли приложение доверия: оно лишь фиксирует наблюдавшуюся активность, поэтому полученные разрешения необходимо проверять перед включением Enforcing.
Довольно продолжительное время было уделено производительности приложения, однако она пока остаётся слабым местом при большом количестве коротких соединений и интенсивном исходящем UDP-трафике, особенно состоящем из множества небольших пакетов. Здесь важнее не столько объём переданных данных, сколько количество пакетов и новых соединений, для которых требуется определить приложение.
Это связано со стоимостью проверки правил, привязанных к приложениям. Обычные сетевые правила — адреса, порты, протоколы и интерфейсы — обрабатываются непосредственно ядром через nftables или iptables. Если же решение требует проверки приложения, пакет передаётся демону через NFQUEUE. Демон устанавливает владельца сокета, проверяет идентичность процесса и сопоставляет её с условиями правила: путём исполняемого файла, cgroup, аргументами запуска и другими заданными признаками. Такая проверка существенно дороже сравнения адреса и порта.
Для TCP предусмотрено ускорение: после авторизации соединения его established-трафик может обрабатываться в ядре через conntrack с проверкой поколения политики. Поэтому длительное разрешённое TCP-соединение обычно обходится дешевле постоянного открытия новых. Для UDP, не разрешённого отдельным сетевым правилом, проверка приложения повторяется для каждого пакета, требующего прикладного решения. Именно этот сценарий особенно чувствителен к PPS: даже небольшой по мегабитам поток способен заметно загрузить демон и увеличить задержки. Используемые кеши ускоряют поиск владельца, но не заменяют проверку актуальности его идентичности безусловным повторным разрешением.
Я представляю первую публичную версию, где представлен основной набор функций приложения, над производительность ещё предстоит работать. В OpenSnitch механизм проверок проще, поэтому его работа не даёт подобной нагрузки на систему, возможно схожий режим появится и в OpenShield.
Приложение собирается для Debian 12 и 13, Ubuntu 22.04, 24.04 и 26.04, Fedora 43 и 44, AlmaLinux 9 и 10, Rocky Linux 9 и 10, openSUSE Leap 16.0, openSUSE Tumbleweed, Alpine Linux 3.23 и 3.24, а также Arch Linux. В зависимости от дистрибутива предусмотрены пакеты для x86_64 (amd64), 32-разрядного x86 (i586/i686), ARMv5, ARMv6, ARMv7, ARM64 (aarch64), PowerPC 64 LE (ppc64le), IBM Z (s390x) и RISC-V 64 (riscv64). Это общий перечень архитектур: не каждая комбинация дистрибутива и архитектуры входит в матрицу сборки.
Предрелизные проверки установки пакетов и функциональные тесты фаервола выполняются:
Всего получается 37 комбинаций дистрибутива и архитектуры. Для каждой проверяются nftables и резервный iptables, включая обучение, переход в Enforcing и применение правил. Отдельный performance gate запускается на openSUSE Tumbleweed x86_64.
Для остальных архитектур пока выполняются сборка, проверка формата исполняемых файлов и пробный запуск --version; полноценного тестирования установки и фильтрации трафика на них нет. Контейнерные проверки также не означают проверку собственного ядра каждого дистрибутива.
Скачать и попробовать приложение можно по последнему актуальному тегу v0.2.4
Сильно не пинайте, буду благодарен за любые отзывы и комментарии.
Спасибо, что дочитали до конца.
По мотивам elio -- ещё один файл-менеджер.
Слева вверху запущена nvtop, показывает характеристики и метрики двух видеокарт rtx 4090 48gb mod, на которых крутятся LLM.
Справа вверху — утилита btop, запущенная на той же машине (с видеокартами): Dual xeon CPU E5-2697 v4, 128GB DDR4, 2TB NVMe (под модели), 128GB SSD (под систему)
Пониже запущен tmux, в котором работает агент pi.dev, через который собственно и производится вайбкодинг (для локальных LLM советую именно pi.dev)
Ну и на первом плане neofetch с моего ноутбука, где запущена графическая среда
Модели, которые кодируют код:
Deepseek v4 flash 0731 IQ3_XXS (хорошо, но к сожалению не умеет CV (компьютерное зрение))
Недавно вышедший Qwen3.8-27B Q8 - тоже хорош, с поддержкой CV, что внезапно оказалось критичном при разработке UI приложений
Стек технологий в тегах.
Продолжается работа над портом движка форума LINUX.ORG.RU на Rust.
Целью изначально было создание полностью совместимого на уровне интерфейсов REST API и доступа к БД порта кода написанного на Java.
Проект казался интересным лично для меня, как с точки зрения изучения работы самого форума, так и реальная работа с большим объемом чужого (открытого) кода с применением GPT.
Первые попытки дали очень скромный, не пригодный ни к чему результат, в виду того, что я не верно оценивал возможности ИИ в контексте разных уровней подписки. Выяснилось, что для подобной задачи не стоит рассчитывать быстрые результаты. Попытка использования начальных уровней подписок привела к перерасходу бюджета. То что удалось получить с базовыми возможностями агентов, было настолько плохо, что я принял решение начать портирование с чистого листа. Так появилась новая ветка в репозитори GitHub
В итоге используя ChatGPT Pro x20, удалось добиться результата, который видно на скриншотах. Более того, такая подписка даже является избыточной.
Работу веду по выходным, достигнутый результат потребовал 4 выходных дня.
Я планирую создать инстанс с запущенным результатом портирования, когда будет уверенность, что ничего не будет ломаться, а самое главное когда пойму зачем мне это нужно. Без попытки набросить, скажу, что иметь форум с анонимными пользователями сейчас большой экзистенциальный риск, а популярность форумов продолжает снижаться.
Преимущества порта которые видны без сложных тестов:
Orhun Parmaksız (сайт заслуживает отдельных слов) настолько впечатлился TempleOS, что написал на Расте Ratty — трёхмерный эмулятор терминала. О чём подробно написал в блоге (видео на youtube).
Для новости он сыроват, а для пятницы в самый раз. :)
Попробовал вкатится в этот ваш вайпкондинг. Мне давно не хватало приличного графического двухпанельного файлового менеджера в духе старого доброго тотала для гнома - gnome commander совсем старый, на gtk2, да и выглядит ужасно. Был еще sunflowerfm, но он на питоне, довольно тормозной и местами криововат. В итоге юзал mc и nautilus.
Решил попробовать claude sonnet на более-менее реальной задаче - сделать двухпанельник мечты с блекджеком и плагинами :)
Естественно, решил использовать всё самое молодежное и хипстерское - gtk4 и rust. Rust выбрал из тех соображений, что компилятор отловит хотя бы часть галлюцинаций.
Получается неплохо - почти сразу sonnet сделал рабочий прототип, который ничего кроме отображения списка файлов не умел, но затем этот прототип был оброщён базовым функционалом. Просто пишешь какой функционал не работает или вообще отсутствует и нейронка быстренько добавляет. Как правило, новые функции заводится после 1-2 итераций сборки и дебага (самой нейросеткой), реже - работает сразу.
Проблемы возникли только с Gtk.ShortcutsWindow (диалоговое окошко со списком хоткеев), оно глючило и крашило все приложение. Починить эту проблему нейросетка не смогла, в итоге она предложила сделать кастомное окно хоткеев, на чем и остановились.
Пока что нет поиска и прогресс-баров при копировании\перемещении, но все кнопочки на экране и хоткеи работают, есть простенький просмотрщик текстовых файлов (а редактирование открывает внешний редактор) - но это все было сделано буквально за вечер!
Возможно допилю его до более-менее приличного состояния и выложу на github. Обозвал софтину соотвественно - grustyfm ;)
Временно вернулся с NixOS обратно на Arch. Причина: в NixOS криво собран glfw и это мешает мне жить T_T.
Ну, в общем, по скриншоту выглядит, как обычная картинка с Unixporn. Обычные тайлы. Но чтобы понять, что из себя представляет Niri (отечественная разработка, кстати :D), нужно увидеть его в действии.
Видео: https://ru.files.fm/u/yaq2ks4w9c (на две недели, подскажите нормальный хостинг).
Тайл в стиле PaperWM (GNOME) – сделан очень качественно. Даже от Hyprland не отстаём – есть возможность скринкаста отдельных окон, встроенная скриншотилка, и даже – возможность «замазать» окна с приватной информацией. Работает с помощью xdg-portal-gnome.
Очень удобно на ноуте – есть жесты с тачпада.
Ссылка на проект: https://github.com/YaLTeR/niri.
WezTerm - GPU-оптимизированный эмулятор терминала и мультиплексор, написанный на языке программирования Rust.
Возможности:
dte (github.com) - консольный редактор текста, написанный на языке C, с минимальными зависимостями. Не использует curses.
Возможности:
Примечание: приведены ссылки на Github-зеркало проекта.
Midnight Commander в рекомендациях не нуждается. :)
Решил попробовать и посмотреть, как там поживает Rust. Ведь все хвалят его. Так что с помощью rustup.rs установил его. Установка пошла успешно. Установщик даже сам прописался в $PATH. Неплохо так.
Потом решил опробовать тайлинговый wm, который тоже создан на Rust. Так что, сделал git clone https://github.com/leftwm/leftwm и cargo build --release. Все установилось. Правда, по дефолту меня встретил чёрный супрематический квадрат (как и в xmonad). Да, я знаю, что фишка этого wm-темы, но я хотел посидеть на дефолте (ненужны мне панельки). Так что, свои программы (feh, compton и setxkbmap -layout) я прописал в .xinitrc. Все завелось, но compton и feh начал плодить зомби. В чем проблема? А в том, что все завязано на так называемых темах. В них присутствуют скрипты, в которых прописанный авто запуск feh и compton, плюс еще что-то по мелочам…и сразу хочется задать вопрос, почему так усложнять жизнь? Все завязано на темах…ну да ладно. Установил я xmobar (данный wm поддерживает lemonbar и polybar), командой создал нужную директорию mkdir -p ~/.config/leftwm/themes, поместил туда темы, и выбрал тему с xmobar-ln -s basic_xmobar/ current. Все заработало. Правда пришлось внести корректировку в файл xmobar-config.hs, отключив кое какие модули. После недельного юзания мой вердикт-работать можно, wm стабильный и предсказуемый, имеет много лайаутов, хорошо дружит в мультимониторной конфигурацией. Мне он понравился.
Также установил эмулятор терминала, под названием wezterm. Терминал хорош, не очень то и прожорлив («кушает» меньше, нежели terminator), gpu-accelerated, хорошо дружит с emoji и другими модными приблудами. Подробнее, можно почитать вот тут (wezfurlong.org). Как запасной вариант еще имеется старый добрый alacritty. Тут я поменял цветовую палитру и шрифты. Смею заметить, что шрифты в wezterm отображаются лучше, нежели в alacritty, хотя последний тоже gpu-accelerated. Как то так.
Другая программа-аналог tmux. Тоже написанная на rust, и по моему субъективному ощущению, работает быстро, имеет кучу опций и настроек
Хочется порекомендовать маленький аналог ls, под названием esa, который выводит информацию, более приятную для глаза, нежели стандартный ls.
Другая cli программа, это простой и легкий клиент irc, под названием tiny. Тоже на rust. Легкая и шустрая, с понятным конфигурационным файлом, приятными цветами и т.п. Пользуюсь на постоянной основе.
Для cat, тоже нашел замену. Название bat (ibb.co). Вещь очень удобная. Комментарии ненужны…
Для замера дискового пространства, использую bat (ibb.co). Это аналог duf, но с более приятным выводом информации.
Использую, (как замену rm) rip. Интересная и удобная утилита, про которую можно почитать вот тут (github.com)
Shell prompt это starship. Он тоже на rust, а за процессами слежу с помощью bottom.
Вместо браузера используется qutebrowser, который установленный в virtualenv, так как в репах Дебиана он старый как мамонт, а в новой версии много чего исправлено. Так я получил отличную комбинацию стабильности и функционала.
С почти полным списком (неофициальным) программ, написанных на rust, можно ознакомится вот тут (github.com).
Приобрёл «новый» восстановленный Thinkpad x260 с i5-6300U, 16Gb DDR 4, SSD 512Гб, 1080p IPS экраном и двумя новыми оригинальными батареями: 68+Втч внешней съёмной и встроенной 24Втч. В результате с арчем и tlp в стандартном рабочем режиме и с нормальной яркостью время работы запросто переходит 15 часов без перезарядки, что значительно превосходит мой прошлый thinkpad x220. Так же приобрёл докстанцию, как и для x220, без них теперь не представляю жизнь.
Обновив ноутбук, решил обновить и окружение. Дистрибутивом остался удобный, верный и надёжный Arch, а вместо проверенных иксов с i3wm перешёл на wayland и sway. Конечно, столкнулся с множеством проблем:
Но, решив все проблемы, я почувствовал преимущества Wayland над иксами, архитектура намного элегантнее и возможностей развития значительно больше.
Дошли у меня руки до пайнфона. Оказалось, что:
plasma-mobile тоже тормозит и падает (точнее, роняет всю систему).Вывод: пора пилить своё DE.
Пришлось пока:
MOZ_ENABLE_WAYLAND=1 firefox. Еще нужен firefox-mobile-config. Без всего этого будет или страшно, или неюзабельно, или с иксами.QT_QPA_PLATFORM=wayland telegram-desktop -scale 80.feature/handy. Ветка, похоже, заброшенная и портировано на libhandy далеко не всё.HandlePowerKey=ignore в /etc/systemd/logind.conf, забиндить кнопку питания на systemctl suspendВ самых близких планах - запилить touch-friendly аналог dmenu.
Одна из адовых проблем - жор батарейки. Я так понял, есть некоторые софтварные проблемы, которые еще починят, но есть и хардварные, которые можно будет починить только новым телефоном :(
Короче, самое главное, что уже можно взять в руки телефон, самостоятельно его подключить к wifi и прочему, а значит, что можно постепенно доделывать и остальные нужные фичи.
Я безумно рад. Сбылась мечта идиота: я ждал этого момента еще с тех пор, как больше 10 лет назад увидел, как запускают линукс (банальные иксы c xclock) на hp ipaq 514. Наконец-то поперло, теперь всё будет.
Привожу в порядок домашнее рабочее место, только что снял мониторы с подставок и повесил на кронштейн — сразу освободилась куча места на столе и я, наконец, смог расположить второй монитор вертикально, как я хотел изначально.
Многие скажут что я дуба рухнул вешать 21:9 монитор вертикально, но для меня такое расположение однозначно выигрывает двум горизонтальным мониторам: я могу вертикально расположить на дополнительном мониторе 2 квадратных окна и не вертеть головой когда мне надо посмотреть на любое из них. Когда монитор стоял горизонтально, дальний его край находился уж очень далеко, было не комфортно, я его почти не использовал. Сейчас же, повернув голову от основного монитора буквально на пару градусов, я могу взглядом окинуть оба окна на втором мониторе.
В будущем хочу его продать и поменять на второй идентичный основному и иметь 4к в оба глаза.
Использую сетап для удаленной работы и кинца с играми, далее по тому что на столе и под столом:
На столе:
Под столом: Фото не будет, там еще срач, не закончил с кабельменеджментом.
На скрине Gnome Builder, Gnome 3 на Wayland и самописный браузер на Webkit2Gtk и Rust (пока что без Client Side Decorations ибо не хочет заводиться нормально).
Попробовать Gnome Builder решился относительно недавно и оказался приятно удивлён, все работает практически из коробки:
Если интересует сам браузер, то можно просмотреть сырцы здесь, но сразу предупреждаю что с Нуво и Вейлендом ютуб не хочет работать нормально, а на иксах вообще бывает что виснет.
Продожительное время не пользовался linux, но пол года назад решил снова поставить и как то незаметно перешел на него полностью. Все стало и заработало «из коробки», пришлось лишь немного кастомизировать большего удобства. Наслаждаюсь удобством и стабильностью.