Обновить
45.41

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

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

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

Анализ дампа: с чего начать

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

Всем привет! Меня зовут Виктор, и я программист. Восемь лет работаю в команде Т-Банка и все это время вместе с коллегами занимаюсь проектом «Т-Телефония». Моя команда разрабатывает сервисы, которые обеспечивают голосовую коммуникацию внутри и вне банка. 

Звонки — один из основных способов связи с нами, поэтому система критична для бизнеса с высоким требованием к доступности. Она обрабатывает более 2 млн звонков в день. Если происходит сбой в любой пользовательской системе и нашим клиентам плохо, количество звонков сразу увеличивается, а нагрузка на систему повышается в два-три раза.

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

В статье покажу, что такое дампы, какие есть инструменты для работы с ними и какие у них особенности, покажу наши примеры проблем, расскажу, как мы их решали.

Читать далее

Systemd-rc — мост для тех кто привык к Systemd

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

Мост для тех кто привык к Systemd. Без эмуляции, без Systemd-зависимостей. Только переводит команды.

Читать далее

Решение проблемы двойного букинга: паттерны проектирования систем

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

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

Технологические компании наподобие Ticketmaster, BookMyShow, Airbnb, Delta Airlines и так далее сделали бронирование делом одного клика, позволившим покупать билеты из дома.

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

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

Поэтому важно создать надёжное решение классической задачи — двойного букинга.

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

Мы рассмотрим различные архитектурные паттерны и разберёмся в их плюсах и минусах. Статья поможет вам обрести глубокое понимание и наработать знания в системном мышлении.

Читать далее

Мой первый pet-проект: процесс-менеджер synd3

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

Всем привет!

Пишу этот пост, чтобы поделиться своим опытом и получить критику или советы от людей с большим опытом.

Мне 22 года, я из Латвии. По образованию я судовой механик, но уже около 4 лет увлекаюсь программированием. Долгое время это оставалось хобби: пробовал сайты, простые игры — но они не приносили настоящего удовольствия. Я считал, что в программировании нужно было разбираться ещё со школы, и долго не верил, что могу найти себя в этой сфере.

Переломный момент наступил, когда я заинтересовался системным программированием. Каждый раз, когда узнаю, как работает низкоуровневая часть ОС, у меня будто открывается новый мир. Особенно зацепила тема процессорного планирования: все говорят «железо, CPU, видеокарта», но на практике даже реализация планировщика процессов может заметно влиять на производительность.

Читать далее

QuasarLinux: когда хочется свободы и удобства

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

OpenRC + AUR + Wine с DXVK/VKD3D + модульный TUI-установщик. Всё это — QuasarLinux, основанный на Artix, но независимый от него.

Читать далее

Экспериментальная сборка ReactOS

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

Последняя релизная версия ReactOS 0.4.15 выпущена 21 марта 2025 г.
А в начале октября 2025 Вадим Галянт выпустил экспериментальную сборку ReactOS, предназначенную для отработки загрузки операционной системы на реальном железе. Сборка должна быть совместима с железом, предназначенным для загрузки Windows XP (NT5.x). На более новом железе система скорее всего грузиться не будет.

В конце статьи приведены ссылки на скачивание и порядок создания загрузочной флешки.

Читать далее

Закройте сокет, даже если он не открылся

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

Немного странно такую заметку писать, вроде что-то очень банальное и возможно многие скажут "да я с пеленок это знаю" - но вот опять сталкиваемся с тем что такая ошибка в достаточно важной ситуации наглядно портит кровь.

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

Если вы создали сокет, попытались его открыть и отвалились по таймауту - не переиспользуйте его! Для новой попытки обязательно создавайте новый сокет!

Это не вполне очевидно и в документации порой лишь вскользь упомянуто, либо не упомянуто вообще. Ниже немного подробностей с кодом, но в общем вся суть в этой фразе. Не переиспользуйте!

Читать далее

QEMU: как организовать прозрачное взаимодействие с I2C-устройствами

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

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

Виртуализация позволяет отлаживать драйверы и приложения в идеально воспроизводимых условиях, параллельно работать над разными фичами и начинать писать код еще до того, как готово физическое устройство. Особенно это актуально при разработке и тестировании embedded-решений, где часто требуется работа с периферией — например, I2C-устройствами: датчиками температуры, давления, влажности, EEPROM-памятью и другими компонентами.

Читать далее

Управляем зависимостями Cи и C++ через Nix

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

Рассказ о самой полезной части Nix — управление пакетами из репозитория nixpkgs.

Я использовал и использую разные языки. В Rust есть прекрасный пакетный менеджер cargo и инсталлятор rustup, для JavaScript — npm. Мне также нравится conda в мире Python.

Мне всегда не хватало чего-то подобного для проектов на Си и C++. Пакетные менеджеры для этих языков часто оставляют желать лучшего. Даже если они работают, в их репозиториях может не быть нужных библиотек. Даже если вроде всё работает хорошо, может оказаться, что для работы бинарного кэширования нужно прилагать усилия, а когда это что-то вроде разных версий Qt — собирать всё на машине разработчика неприятно.

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

Поэтому я расскажу, как использовать Nix в качестве пакетного менеджера для Си и C++.

Читать далее

Rust + C++ через FFI: как подружить два мира и не сойти с ума

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

Сегодня Rust активно используется не только как язык для написания приложений, в том числе системных, но и как язык для написания библиотек, которые подключают к существующим проектам на C и C++. Это удобно: новую функциональность можно писать на Rust, но при этом не переписывать весь код на нём.

В омут FFI

«LLVM для AI». Крис Латтнер и язык программирования Mojo

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

Крис Латтнер (Chris Lattner) — создатель CPU-компилятора LLVM и соавтор Swift — предложил новый язык программирования Mojo, спроектированный для одновременного программирования CPU, GPU и TPU (тензорные ядра, оптимизированные для матричного умножения, а это и есть инференс LLM), без всяких лишних библиотек типа CUDA, ROCm и XLA.

Mojo — это надмножество Python с производительностью С и потенциальная замена Rust. Код на нём легко переносится между различными GPU, при этом платформа Modular быстрее обновляется под новые модели GPU, чем сама Nvidia выпускает обновления для своего софта (новые attention kernels).

Простой и мощный язык для написания и деплоя LLM-приложений независимо от оборудования (AMD, Nvidia, Intel и проч.), с метапрограммированием во время компиляции и прочими штуками. Что-то вроде единой «LLVM для AI». Унифицированная программная платформа, которая запускается на любом железе. Это ещё и самый простой способ ускорить Python-приложение в 10−1000 раз, не переписывая его фрагменты на Rust или C++ (что по сути делают NumPy и PyTotch).

Читать далее

Kernel-hack-drill и новый эксплойт для CVE-2024-50264 в ядре Linux

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

Некоторые уязвимости, связанные с повреждением памяти, невероятно сложны для эксплуатации. Они могут вызывать состояния гонки, приводить к сбоям системы и накладывать разные ограничения, которые усложняют жизнь исследователя. Работа с такими «хрупкими» багами требует значительно больше времени и усилий. CVE-2024-50264 в ядре Linux — как раз одна из таких сложных уязвимостей, которая получила премию Pwnie Award 2025 в категории «Лучшее повышение привилегий» (Best Privilege Escalation). В этой статье я представлю свой проект kernel-hack-drill и покажу, как он помог мне разработать прототип эксплойта для уязвимости CVE-2024-50264.

Поехали!

Python и Go — идеальный набор (высокоуровневых языков)

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

Перед вами - известное письмо Линуса Торвальдса, где он написал, что если бы единственная причина использовать С, а не С++, была в том, чтобы отпугивать программистов на С++ - это уже была бы весомая причина.

Питон в последнее время завоевал лидирующие позиции в дата саенс и машинном обучении, что меня как разработчика на нём не может не радовать. В данной статье вы узнаете, почему, следуя духу минимализма из указанной цитаты, нужно использовать го в тех областях, где лидерство питона не так очевидно. А в питоне - не заморачиваться с async/await, фреймворками и прочей ерундой.

Читать далее

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

Линус Торвальдс жёстко отверг поддержку big-endian RISC-V

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

Линус Торвальдс в своём классическом стиле категорически высказался против предлагаемой поддержки режима big-endian для архитектуры RISC-V в ядре Linux. Всё началось с вопроса в рассылке о том, смогут ли патчи для RISC-V BE попасть в текущий цикл разработки ядра.

Читать далее

NE-Executable | Разбор деталей часть 4 (Импорты)

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

Эта статья завершает цикл статьей про формат сегментных NE файлов
для Microsoft Windows 1.x-3x и OS/2 1.x.
Эта часть содержит значительно больше информации, о несостыковках
с официальными документами. Это не только обзор, сколько
попытка открыть глаза на то, что "Не все так просто, как кажется на первый взгляд."

Читать далее

NE-Executable | разбор деталей Часть 3 (Экспорты)

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

Эта заметка или статья является продолжением цикла о формате
Новых исполняемых (ориг. "NE") файлов для Windows 1.x-3x и OS/2 1x.
В этот раз речь пойдет о таблицах резидентных и не резидентных имён,
будет разбор типов экпортируемых записей и много интересных наблюдений
за Microsoft LINK.EXE.

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

Читать далее

NE-Executable | Разбор деталей часть 2 (Таблица сегментов и релокаций)

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

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

Читать далее

NE-Executable | Разбор деталей часть 1 (Части заголовка)

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

Формат "Новых исполняемых" файлов называют сегментным. Даже в официальной документации Microsoft её заголовок это "Сегментный Новый Исполняемый формат" (ориг. "Segmented NEW Executable Format").

Этот сегментный формат программ поддерживал

Сегментную модель памяти;

Защищенный режим Intel 286+

Динамичкую компановку (Dynamic Linking);

Управление ресурсами;

Возможность экспорта и импорта определенных процедур.

Читать далее

NE-Executable | Разбор деталей часть 1

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

Формат "Новых исполняемых" файлов называют сегментным. Даже в официальной документации Microsoft её заголовок это "Сегментный Новый Исполняемый формат" (ориг. "Segmented NEW Executable Format").

Этот сегментный формат программ поддерживал

Сегментную модель памяти;

Защищенный режим Intel 286+

Динамичкую компановку (Dynamic Linking);

Управление ресурсами;

Возможность экспорта и импорта определенных процедур.

Читать далее

Пишем и запускаем свой исполняемый файл на Linux

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

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

Больше ничего интересного не будет :-)

Интересненько...

Вклад авторов