Обновить
30.99

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

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

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

Решаем архитектурную проблему nginx с HTTP/3: опыт Angie и магия eBPF

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

Для пользователя может показаться, что переход с HTTP/2 на HTTP/3 — это просто замена TCP на UDP в конфиге. Но для серверного ПО с многопроцессной архитектурой этот шаг превращается в настоящую «головную боль». Классическая схема с accept(), на которой годами строилась работа с TCP‑соединениями, в мире QUIC попросту не существует. Пакеты летят в UDP‑порт, и ядро ОС больше не знает, какому именно рабочему процессу их отдать.

В оригинальном nginx это привело к тому, что поддержка HTTP/3 уже долгое время остается «экспериментальной» и ограниченной: она страдает от проблем с обрывами сессий и деградации сервиса при обновлении конфигурации. Для многих это стало стоп‑фактором для внедрения протокола в реальный продакшен.

В этой статье мы расскажем, как в Angie 1.11 нам удалось устранить эти фундаментальные недостатки. Мы не просто добавили поддержку протокола, а пересмотрели механику взаимодействия с ядром. Путь от простых хешей до создания полноценного аналога accept() для QUIC с помощью BPF‑программ позволил нам заявить: реализация HTTP/3 в Angie закончена, лишена «детских болезней» nginx и полностью готова к эксплуатации в высоконагруженных средах.

Добро пожаловать под капот современного транспорта данных.

Читать далее

Новости

Под капотом ACPI. Современное управление питанием

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

Как-то при разработке UEFI мне посчастливилось разбираться с таблицами описания системы в исходниках ASL (ACPI Source Language). Тема оказалась не тривиальная и моего багажа в несколько лет опыта, достаточно плотной embedded-разработки, не хватало для полного понимания работы подсистемы ACPI (Advanced Configuration and Power Interface). Поэтому пришлось исследовать доступные материалы на тему. 

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

Читать далее

Почему мы терпим факс в эпоху ИИ: Манифест Суверенной Инфраструктуры

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

Неделю назад мы опубликовали статью «Почему финтеху нужен капитальный ремонт„, а до этого „От стартапа к протоколу: Почему мы решили написать свой „PostgreSQL для финансов“„. Мы получили много комментариев — от умеренных до резко критических. И я хочу начать с благодарности.“““»

Спасибо тем, кто нашел баги в нашем UI (мы всё поправили). Спасибо тем, кто писал «зачем это нужно, если есть PostgreSQL?». Спасибо даже тем, кто называл проект «велосипедом„.“»

Именно ваша критика заставила нас пересмотреть приоритеты и за неделю реализовать то, что мы откладывали месяцами: Atomic PvP (атомарный обмен валют) и ISO 20022 "в ядре".

Мы поняли, что не смогли донести главную мысль. Qazna - это не просто "еще один леджер". Это попытка ответить на вопрос, который IT-сообщество почему-то боится задавать.

Читать далее

Unsafe Rust для FFI: безопасные обёртки над C-библиотеками без утечек памяти

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

Rust хорош своей безопасностью, но рано или поздно приходится выйти за пределы уютного мирка borrow checker. Нужно подключить проверенную C-библиотеку, использовать системный API или просто переиспользовать существующий код. И тут начинается unsafe.

Правильно приготовленный unsafe позволяет создать безопасный API поверх небезопасного кода, сохранив все гарантии Rust для пользователей библиотеки.

Разберём, как писать FFI-обёртки, которые не подтекают и не падают.

Читать далее

Rust 1.93.0: обновление встроенного musl, глобальный аллокатор и tls, cfg в asm

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

Команда Rust рада сообщить о новой версии языка — 1.93.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.

Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.93.0 вам достаточно выполнить команду:

$ rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.

Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

Что стабилизировано в 1.93.0

Make DLL Hijacking Great Again

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

DLL hijacking - техника, которая может дать множество преимуществ: повыситься до NT AUTHORITY/SYSTEM, получить исполнение от лица привилегированного пользователя, действовать от лица легитимного приложения и т. д.

Естественно, перед тем как ее осуществить, нужно найти подходящее приложение и библиотеку, которую можно подменить.

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

Цель статьи - описать подход, который позволит реализовать средство автоматической диагностики приложения и подмены библиотек.

Читать далее

Программный съем трафика на скорости 400G: сравнение методов обработки и неочевидные бутылочные горлышки

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

Меня зовут Юрий Морозов, я главный архитектор компании «Гарда».

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

Читать далее

Мастер таблицы по Сетевым Моделям и Протоколам

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

Это руководство объединяет две методологически таблицы - одну для концептуальных моделей (OSI и TCP/IP) и одну для конкретных протоколов и технологий. При обнаружении ошибок / неточностей - сообщите в комментариях, после проверки действительно ли есть ошибки / неточность - информация дополниться.

Обновлено 20.01.2026

Читать далее

NetBSD и NVIDIA Optimus

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

Чтобы задать уровень выдаваемой дичи сразу на весь 2026 год вперед, я написал эту замечательную статью.

Читать далее

Вот что я понял за 4 месяца написания ОС

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

Споры о самом сложном проекте во всем IT будут продолжаться вечно. Некоторые будут говорить что тяжелее всего написать ОС, другие скажут игровой движок, может еще попасться драйвер.

В этой статье я постараюсь подробно расписать свой опыт в написании ОС.

Читать далее

ISO 7816-4: пишем файловую систему

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

Стандарт ISO 7816 состоит из 15 частей и главным образом нацелен на приведение к общему виду тех отраслей, что используют смарт-карты. Четвертая часть документа описывает логическую структуру файловой системы, получившую широкое распространение: ее можно встретить в идентификационных документах, средствах криптографической защиты информации, в банковском секторе и телекоме.

Читать далее

Open Source: Зачем тебе это на самом деле?

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

Когда речь заходит об open source, многие сразу думают: «Это для энтузиастов».
Контрибьют в Open Source это способ расти как разработчик, завести полезные связи и заявить о себе.

Разбираемся, как найти свой проект, использовать AI для чтения кода и сделать первый контрибьют без боли!

Начать Опенсорсить

Встраиваемые системы для начинающих. Часть 1: Устройство

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

Привет, Хабр! В этом цикле статей я попытаюсь наглядно и сжато объяснить устройство встраиваемых систем на базе Rockchip. Пройдусь по всем шагам загрузки, начиная с первой инструкции и заканчивая разворачиванием всей системы. Для демонстрации я выбрал плату Orange Pi R1 Plus LTS на базе Rockchip RK3328 SoC, ARM Cortex-A53 64-Bit Processor.

Читать далее

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

restrict в C: оптимизация на честном слове

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

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

Сегодня поговорим про один из самых незаметных, но любопытных моментов языка C. Если вы пишете на C, скорее всего вы никогда не использовали ключевое слово restrict. А зря — этот квалификатор указателя может дать вашему коду неплохой прирост производительности. Правда, для этого придётся дать компилятору честное слово насчёт своих указателей.

Читать далее

CIMCO Edit для Windows 7

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

Windows 10 нинужон!

Запускаем 3D симуляцию самого популярного в мире редактора УП для станков с ЧПУ CIMCO Edit 2025 (2025.01.25) в операционной системе Microsoft Windows 7. И ещё переводим на русский язык саму программу.

Читать далее всё это безобразие...

История поиска бага в ядре Linux длиной в год, или нежданные нули из XFS'а

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

Наверняка у вас тоже было такое, что сервис работает себе спокойно, радует пользователей своей стабильностью и производительностью, а вас зелёным мониторингом. А в следующий момент хлоп - и нет его. Вы на панике смотрите в логи ошибок, а там или невнятный сегфолт, или просто ничего. Что делать – непонятно, и вообще надо прод спасать, поэтому вы поднимаете его обратно и всё работает как и раньше. Вы ещё пытаетесь разобраться в причинах случившегося, но со временем переключаетесь на другие задачи, а этот случай отходит на дальний план или вообще забывается.

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

В этой статье описано наше исследование длиною в год,  из которого вы узнаете, почему PostgreSQL(и любое другое приложение) может падать из-за бага в ядре Linux, причём тут XFS и почему очистка памяти может быть не так полезна, как вы о ней думали.

Читать далее

Надежное программирование — часть 6. Неудачники, выросшие и перспективные языки

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

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

Читать далее

Минимальный планировщик с eBPF, sched_ext и C

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

Планировщик Linux долгое время оставался зоной, куда можно было заглянуть, но почти невозможно вмешаться без пересборки ядра. С появлением sched_ext эта граница сдвинулась: теперь логику планирования можно описывать кодом на C и загружать в ядро через eBPF. В статье разберём минимальный рабочий планировщик, посмотрим, как он взаимодействует с ядром, и обсудим, какие новые возможности это открывает для экспериментов и диагностики поведения системы под нагрузкой.

Вникнуть в ядро

Создание легкого shell на си

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

Многие начинающие разработчики которые начинаю писать на языке C сталкиваются с проблемой : Какой 1 пет-проект написать на C ? И вопрос то логичный ведь проекты на C никогда не славились легкостью по сравнению с проектами на python или JavaScript . И как по мне отличная идей написать shell ведь там не надо знать ассемблер или иметь глубокие знание в работе OC , и он относительно легок в понимании .

В этой статье мы с вами подробно разберем написание shell на языке C , как он устроен ,в чем отличия bash shell и cmd. И напишем свой shell на 450 строк кода

Начнем пожалуй с самыx базовых вопросах .

Читать далее

Идемпотентность в скриптах

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

Привет, Хабр! Как часто Ваш скрипт падает при повторном запуске? Или, может, портит конфиги, создавая дубли? Я с этим сталкивался не раз, особенно в начале своего пути автоматизации.

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

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

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