Обновить
47.11

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

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

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

Пишем свою OS на Zig: Первый релиз с многоядерностью, FAT32 и скриптами

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

11 000 строк кода, 95% Zig, 0% стандартной библиотеки: история создания NovumOS с поддержкой SMP, FAT32 LFN и Huge Pages.

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

Меня зовут Антон, и я хочу поделиться историей создания своей собственной операционной системы.

Это моя первая статья и первый серьезный релиз системы (v0.20). Многие разработчики мечтают написать свою операционную систему. Обычно этот путь заканчивается на выводе "Hello World" в VGA-буфер. Я тоже начинал с малого (C# COSMOS), потом уходил в Ассемблер, бросал, возвращался... Но в этот раз я решил пойти до конца.

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

Встречайте NovumOS...

Читать далее

Новости

Изучаем, как работает клавиатура в Linux, и пишем шуточный модуль ядра

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

Часто в учебной литературе по Linux приведены скучные и неинтересные примеры написания модулей ядра. Я решил исправить этот пробел и показать, что разработка небольшого модуля — это задача под силу многим, если понимаешь базовые принципы разработки программ.

Читать далее

Пишем свою мобильную ОС с нуля на Rust. Часть 2. Менеджер памяти

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

В прошлой части мы загрузили своё мобильное ядро, вывели "Hello world" в UART и нарисовали квадратик на экране.

В этой части я покажу, как улучшилось ядро за это время: поддержка новых устройств (запуск и отладка в QEMU и Raspberry Pi 5), разбиение на модули, и, наконец, полноценный менеджер памяти. В этом нам очень поможет система типов Rust.

Читать далее

Как я пытался внедрить IOCP в libcoro, выгорел на полгода, но вернулся с планом «Б»

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

Что делать, если в твоём очередном самописном движке внезапно понадобилась сеть, да ещё и на корутинах из C++ 20, а подходящая библиотека не поддерживает Windows? Правильно - лезть под капот, разбираться что такое epoll, почему он несовместим с IOCP, затем вкатиться в Open Source, сделав огромный PR, выгореть на полгода, чтобы потом вернуться и начать делать нормально.

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

Читать далее

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

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

Для пользователя может показаться, что переход с 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 мин
Охват и читатели8K

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

Команда 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.7K

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

Уровень сложностиСредний
Время на прочтение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.9K

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

Сегодня поговорим про один из самых незаметных, но любопытных моментов языка 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 и почему очистка памяти может быть не так полезна, как вы о ней думали.

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