Обновить
64K+

Системное программирование *

Обеспечение работы прикладного ПО

100,13
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Удобный SSH клиент на Rust и собственном UI‑движке EvertyUI

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели12K

Я много работаю с серверами. Разрабатываю EvertyDesk Next, экспериментирую с сетевыми протоколами, поднимаю контейнеры, собираю приложения, иногда просто захожу посмотреть, почему опять что-нибудь перестало работать.

Для всего этого нужен SSH.

Много лет для подобных задач существует PuTTY. Программа хорошая, проверенная, выполняет свою работу. Но лично меня она постепенно начала раздражать.

Открываешь одно соединение, потом второе. Где-то ошибка подключения, где-то соединение оборвалось. Где-то требуется вспомнить команду, которую выполнял вчера. Где-то снова заниматься ключами.

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

Мне не нужен комбайн. Я хочу открыть приложение, выбрать сервер и работать.

И если соединение оборвалось, это не должно превращаться в маленькую катастрофу.

В какой-то момент я подумал: а почему бы не написать собственный SSH-клиент?

Тем более что у меня уже есть Rust и собственный интерфейсный движок EvertyUI.

Так появился EvertySSH.

Читать далее

Новости

Пишем свой immutable‑логгер на Python: как защитить данные на edge‑устройствах без облаков и SIEM

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели4.9K

Привет, Хабр!

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

Одна из ключевых проблем таких систем — обеспечение целостности логов. Если устройство попало в аварию или было скомпрометировано, традиционный текстовый файл system.log не является доказательством: его можно незаметно отредактировать, удалить строки или изменить порядок событий.

Корпоративные SIEM-системы (вроде ELK) слишком тяжелы для К сожалению, данная публикация не сможет пройти модерацию, в соответствии с п.4 Правил ресурса.в с ограниченной памятью и вычислительной мощностью. Облачные решения неприменимы из-за отсутствия связи.

В этой статье я расскажу, как я реализовал легковесный, не требующий внешних зависимостей модуль на чистом Python, который создает криптографически неизменяемую цепочку записей (по аналогии с блокчейном), и покажу, как он обнаруживает любые попытки подделки.

Читать далее

OptimaOS: продолжаем работу

Уровень сложностиСложный
Время на прочтение11 мин
Охват и читатели6.4K

Полгода назад я показывал ядро OptimaOS — Rust-ядро, которое загружается на реальном x86_64. С тех пор вокруг него появились собственная файловая система (ФС), установщик внутри прошивки, формат исполняемых файлов и модель приёмки, где доказательство можно проверить машинно.

Первая статья собрала много вопросов. Зачем ещё одна операционная система (ОС), чем она отличается от Linux, почему GPL, как относиться к коду, написанному с помощью LLM (large language model, большая языковая модель). Постараюсь ответить на все вопросы.

Читать далее

Шифровать нельзя доверять: как защитить биометрию вен ладони на пути от сенсора до сервера СКУД

Время на прочтение37 мин
Охват и читатели9.7K

Мы не будем рассматривать, как строится вектор вен ладони и как работают алгоритмы компьютерного зрения. Не будет ни слова про длины волн ИК излучения, ни про обработку liveness. Статья про информационную безопасность. Мы возьмем упрощённую, но актуальную модель угроз для биометрических систем контроля и управления доступом (СКУД) и спроектируем сквозную защиту данных на пути от оптического сенсора до сервера. Решение должно выстоять даже в том случае, если сам терминал окажется в руках зловреда. Сразу рассмотрим худшие случаи: нарушитель с физическим доступом к считывателю и инсайдер, который сидит прямо в корпоративной сети потребителя или на предприятии-изготовителе.

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

Отдельно разберём заблуждение «повесим TLS и всё безопасно».

Читать далее

Русский язык в программировании. РУСИ++

Уровень сложностиСложный
Время на прочтение53 мин
Охват и читатели18K

Статья посвящена системному программированию на русском языке с C-подобным синтаксисом. Компилятор для языков программирования РУСИ, РУСИ++ и объектный-РУСИ создан путём модификации и пересборки компилятора GCC 14й версии с превращением его в полноценный русско-английский билингвальный компилятор. Отдельно дана инструкция модификации русской раскладки клавиатуры для добавления в неё фигурных, угловых и квадратных скобок - дабы не переключаться и не терять поток.

Читать::Далее();

Микроядро seL4, Ada/SPARK и 185 модулей: разбор проекта

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.4K

185 модулей ядра, not‑proved: 0. Сеть и хранилище в Ring 3, TCP работает на железе. Разбор проекта Schild TCB: формальная верификация, изоляция периферии и то, где я упёрся. С честными границами — что доказано, что только в QEMU, а что на реальном ноутбуке.

Читать далее

Режимы работы x86-процессора

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели5.4K

Я пишу свою ОС и загрузчик для x86_64, параллельно изучая в CS и низкоуровневую разработку. Эта статья — подробный обзор, где я разбираю основу, на которой держится вся архитектура x86: как процессор оперирует битами, механика его работы в 16-битном, 32-битном и 64-битном режимах, с углублением в каждый из них.

Читать далее

Заводим C++ корутины на микроконтроллере

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели12K

Мне давно было интересно попробовать запустить корутины на микроконтроллере, но стандарт С++ совершенно не учитывает мир embedded с его ограничениями и не даёт возможности создать корутину в статической памяти.

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

И тут я понял - чего бы не попробовать сделать своё расширение для clang с корутинами, которые гарантированно не используют аллокации и поверх этого реализовать небольшую операционную систему на корутинах для микроконтроллера.

Читать далее

GoOS: от любопытства к собственному ядру

Уровень сложностиСложный
Время на прочтение32 мин
Охват и читатели9K

Ещё в школе, когда я впервые начал писать на Pascal, меня заинтересовал вопрос: что именно происходит, когда запускается программа? Программа читает клавиатуру, выводит текст, выделяет память. Но кто её запускает? Кто выделяет ей процессорное время? Почему она не может прочитать память другого процесса? Как нажатие клавиши превращается в событие для приложения? И что происходит между включением компьютера и первым приглашением командной строки? Вместо того чтобы ограничиться прикладным программированием, я полез разбираться в загрузчиках, памяти и работе процессора.

Но теперь у этой истории истории есть своё собственное имя - GoOS. Если вам интересно почитать об этом подробнее - добро пожаловать!

Читать далее

Оптимизация компиляции: как мы приближали производительность кода на PL/I к C

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели4.1K

Можно ли написать программу на PL/I и получить скорость выполнения, сравнимую со скоростью аналогичной программы на C или быстрее? Именно это мы попытались реализовать в нашем компиляторе pli-llvm.

Мы сравнивали 21 небольшую программу - от сортировки и математических вычислений до работы со строками и файлами. Для каждой задачи были реализации на PL/I и C. Итоговая оценка была посчитана как геометрическое среднее отношений времени выполнения PL/I к C на -O2: 1,0x означает паритет, меньше 1,0x - PL/I выполнился быстрее. Результат на свежих сборках и медиане семи запусков - 0,8x на -O2. До начала этой работы компилятор уже примерно сравнялся с C: результат был около 0,9x. Задача состояла в том, чтобы пройти путь от паритета к устойчивому преимуществу - и выяснить, за счёт чего оно достигается.

Читать далее

Make Perl Great Again. Часть 1: Hello World

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели9.6K

Все знают, что любая книга по программированию начинается с приведения примера программы hello world. Я тоже не буду оригинальничать и покажу, как надо писать hello world. Но в отличие от других авторов, которые очень быстро переходят от этой программы к каким-то очень высоким материям, философским обоснованиям, паттернам программирования и шаблонам проектирования (чтобы это всё ни значило), я ограничусь только hello world. Кто-то же должен заполнить пробел между hello world и… веб-сервером :-).

Читать далее

Дизассемблер для arm64, x86-64, i386, WebAssembly, .NET и Java — в одном HTML-файле

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели8.2K

Всем уже надоели клоны (их есть у меня) и спекуляция на чужом имени — хочется увидеть что-то по-настоящему новое и полезное.

Встречайте дизассемблер для ARM64, 32-битного ARM, x86-64, i386, WebAssembly, .NET (CIL) и байт-кода Java: файлы Mach-O, ELF, PE, APK и IPA из macOS, iOS, Linux, Android и Windows. Один HTML-файл, работает без сети, ничего не отправляет — скачиваете на дискету, и этот инструмент с вами навсегда. Всё уместилось в 1,22 МБ.

Читать далее

Сломанный Ctrl+C — сначала гасла VM, а потом не прерывался sleep: Java, KVM и Linux

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели9.3K

Обычный Ctrl+C оказался для моей Java VM неожиданной проблемой: сначала он завершал саму виртуальную машину, а после исправления перестал останавливать команды внутри Linux. Чтобы разобраться, пришлось пройти весь путь от host terminal через UART и KVM до гостевого TTY и Unix-сигналов. В статье разберём не только причину, но и метод диагностики, который пригодится далеко за пределами виртуализации.

Разбираемся, куда пропал Ctrl+C

Ближайшие события

Современное веб-приложение на C: CGI, SQLite и один бинарник

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели6.8K

Автор оригинала выпустил коммерческий веб-продукт с аккаунтами, оплатой через Stripe и письмами через Postmark на технологии 1994 года: CGI-программа на C, OpenBSD httpd и файл SQLite. Без фреймворка, шаблонизатора, контейнера и JavaScript, с тремя зависимостями. В статье: как устроен стек BCHS, чем CGI удобен сегодня (отладка в шелле, минимальный риск цепочки поставок, выкатка заменой одного файла) и чего в нём не хватает.

Читать далее

Дерево, Лес или DAG? Как мы строили модель данных для цифрового офиса сотрудника

Время на прочтение10 мин
Охват и читатели8.1K

Предметное поле банковского приложения для сотрудников: как его визуализировать — как лес, дерево или граф? Я Валерий Разномазов, тимлид команды системных аналитиков проекта «Цифровой офис сотрудника», в рамках которого мы создаем приложение для сотрудников Россельхозбанка. В этой статье я рассказываю, как мы строили модель данных для приложения «Цифровой офис сотрудника» в РСХБ и почему отказались от классического «дерева» в пользу ориентированного ациклического графа (Directed Acyclic Graph, DAG).

Дерево, Лес или DAG?

Свой переключатель раскладки на Delphi, от низкоуровневого хука до скоринга n‑грамм

Время на прочтение19 мин
Охват и читатели16K

Знакомая картина. Пишешь на автомате сложный однострочник в терминале или строчку кода в любимой IDE, нажимаешь клавишу – и с тоской наблюдаешь, как вместо команды на экране появляется россыпь кракозябр вроде git ghjvjnt или docker compose гз (примеры – для примера). Шелл ожидаемо выдает ошибку, пальцы по привычке зажимают Ctrl+Backspace или долбят клавишу удаления, а рабочий настрой разбивается о банальный язык ввода.

Хуже этого может быть только поведение так называемых «умных помощников», которые вроде бы призваны эту боль лечить. Начинаешь набивать пароль в консоли – утилита радостно лезет переводить скрытые символы. Объявляешь в коде переменную user_name – программа бодро режет ее по нижнему подчеркиванию и превращает хвост в кириллицу. Запускаешь терминальную утилиту со сложными ключами – переключатель решает проявить инициативу прямо посреди флагов сборки. В итоге ловишь себя на том, что тратишь больше сил на борьбу с самодеятельностью программы, чем на саму опечатку, и в приступе раздражения просто выгружаешь ее из трея (или вносишь в исключения). Прекрасно, круг замкнулся.

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

Казалось бы, тема автоматического переключения раскладки исследована вдоль и поперек еще в нулевых. Есть ветеран Punto Switcher, доживающий свой век под крылом Яндекса, есть минималистичная Caramba Switcher от того же автора, есть комбайны вроде EveryLang с переводчиками и распознаванием текста, есть узкоспециализированные Aml Maple и Key Switcher, а для любителей открытого кода – Mahou.

Читать далее

Генератор парсеров ISPA

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели9.4K

Этот пост написан для тех, кто глубоко погружён в разработку компиляторов или DSL, часто сталкивается с задачами парсинга, строит сложные конфигурации или движки с нуля. Этот инструмент предназначен для разбора большинства контекстно-свободных языков с минимальными усилиями. Он не претендует на то, чтобы генерировать код, который невозможно превзойти по производительности, — добиться более высокой производительности в написанном вручную парсере всё же сложнее.

Следует философии:

1. Статическая генерация. Никакой генерации в рантайме
2. Отсутствие зависимостей — сгенерированный парсер должен легко настраиваться
3. Вывод на несколько языков
4. Семантические действия и обработка ошибок прямо в грамматике, без её раздувания
5. Гибкость использования как в тривиальных, так и в очень крупных проектах
6. Простой в использовании API

Читать далее

Vodka, или почему nginx.exe у нас в шесть раз быстрее, чем под Wine

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели17K

Всем привет!

Вторая статья про революционный проект Vodka, где будут реальные замеры производительности nginx.exe. А ещё на этот раз я более подробно расскажу про архитектуру проекта. И даже покажу, как это, установить Windows на Linux!

Читать далее

Особенности разработки встраиваемого программного обеспечения. Часть 2

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели8.5K

В предыдущей части статьи я рассказал об особенностях реализации многозадачности для ВПО. Однако, какой бы ни был выбран подход к многозадачности, архитектура самих задач напрямую влияет на эффективность работы всей встраиваемой системы.

Для достижения оптимальной работы системы, задачи необходимо проектировать по принципу эффективного использования процессорного времени. Т.е. задача должна использовать процессорное время исключительно для полезной нагрузки. Данный принцип выполняет 2 основные функции: Улучшение отзывчивости системы и эффективного потребления электроэнергии.

Читать далее

От RISC‑V до pull request в open source: что сделали участники летней школы СПбГУ за месяц

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели6.8K

В начале августа завершилась Летняя проектная школа программирования СПбГУ. 30 студентов, в том числе обучающиеся на образовательных программах ТОП ИТ СПбГУ, якорным партнером которых выступает YADRO, работали над задачами в области системного программирования, архитектуры RISC-V, разработки компиляторов, использования ПЛИС и оптимизации ПО с открытым исходным кодом. На итоговой защите выступили 29 участников. Помимо подготовки учебных отчетов, участники находили ошибки в проектах с открытым исходным кодом, готовили сообщения об ошибках (bug reports) и запросы на включение изменений (pull requests), профилировали приложения и оптимизировали библиотеки.

Школа проходила с 6 июля по 1 августа. В ее основе лежало проектное обучение: студенты осваивали новые технологии и инженерные подходы, работая над практическими задачами вместе с наставниками. Отдельное направление было посвящено RISC-V. О проектной работе и ее результатах рассказываем в этом материале.

Читать далее
1
23 ...