Обновить
128K+

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

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

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

Как Rust обманывает процессор. Часть 2: niche сквозь крейты, dropck, Pin и провенанс указателей

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

Как Rust обманывает процессор. Часть 2: niche сквозь крейты, dropck, Pin и провенанс указателей

В первой части мы обсуждали niche-оптимизацию, drop flags, MIR, Stacked Borrows и async-стейт-машины. В комментариях справедливо заметили (спасибо, Mingun): про niche рассказано в простой форме - Option<&T> и NonZeroU8.

А что происходит, когда enum живёт в одном крейте, оборачивается в newtype в другом, и оба варианта внешнего enum хранят один и тот же внутренний? У такого внешнего типа всего четыре состояния, байта должно хватить. Хватит ли? Зависит от того, как rustc считает layout. Об этом и поговорим.

Во второй части идём глубже: niche сквозь границы крейтов, variance, Pin и самоссылающиеся футуры, dropck с #[may_dangle], Tree Borrows вместо Stacked Borrows и strict provenance. Без этого половина unsafe-кода в экосистеме держится на честном слове.

Читать далее

Новости

44 CVE в uutils: что Rust ловит, а что нет на границе с системой

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

В апреле 2026 года Canonical раскрыла 44 CVE в uutils. Это переписанная на Rust версия GNU coreutils, которая в Ubuntu идёт по умолчанию с 25.10. Раскрытие пришло из внешнего аудита, заказанного перед релизом 26.04 LTS. Большую часть уязвимостей нашли обычным ревью кода. Ни borrow checker, ни проверки clippy, ни cargo audit не поймали ни одной.

Этот аудит, пожалуй, самый чёткий из существующих примеров того, что Rust ловит, а что нет. Самый внятный разбор списка сделал Маттиас Эндлер в посте «Bugs Rust Won’t Catch» от 29 апреля. Эндлер ведёт консалтинг corrode и подкаст Rust in Production; недавно у него в гостях был Джон Сигер, вице-президент по инженерии в Canonical. Пост построен как разбор того самого раскрытия: 44 CVE распределены по восьми категориям; к большинству приложен git diff фикса.

Ниже разберу каркас Эндлера и добавлю два аргумента сверху. Первый: один из мейнтейнеров GNU coreutils в HN-треде показал бенчмарк, на котором рекомендованный Эндлером фикс не выживает. Второй: структурный аргумент про то, что 40 лет наслоённых POSIX-шрамов делают с любой переписью, независимо от языка.

Читать далее

Универсальный Task для C++20 coroutines: тип результата, политика запуска и владение coroutine state

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

Разбор минимального пользовательского Task для C++20 coroutines: выбор promise_type для void и value-результата, политики initial_suspend(), хранение coroutine_handle, final_suspend(), сохранение результата и исключения, а также границы текущей реализации.

Читать дале

Buffer Pool и Clock-sweep: как мы боремся с cache pollution и p99 latency

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

Один аналитический запрос способен испортить p99 latency всего OLTP-трафика — на время, пока горячий рабочий набор не прогреется заново с диска. Это cache pollution, и с ним рано или поздно сталкивается любая СУБД с честным LRU.

Разбираем, как мы решили эту проблему в нашем OLTP-движке: почему выбрали Clock-sweep вместо LRU, как BufferRing изолирует полные сканы от горячих данных, и почему no-steal — это не стилистический выбор, а требование корректности recovery. С кодом, инвариантами и честными оговорками про то, что ещё не сделано.

Читать далее

Реализация модульной архитектуры прошивки методом ручной динамической линковки на примере STM32

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

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

Читать далее

В чем реальная проблема внедрения видеоаналитики на предприятиях?

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

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

Нейросеть не ищет в своей памяти «похожую картинку», как это делал бы человек. Вместо этого она выделяет в кадре набор математических признаков (например: «объект круглой формы находится в верхней части другого объекта»). На основе миллионов заранее обученных весов (параметров) сеть вычисляет вероятность: «это каска — 96%», «это человек — 98%».

Откуда берутся весы? База знаний нейросети наполняется вручную на этапе обучения. Специалисты-разметчики показывают модели тысячи кадров, выделяя на них людей, каски, инструменты и другие нужные объекты.

Читать далее

«Брус-16»: учебная игровая приставка с оригинальной минималистичной архитектурой

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

«Брус-16» — это новая игровая приставка. За полтора месяца мы спроектировали ее архитектуру, а также создали виртуальную машину, компилятор и аппаратную реализацию на FPGA. Специально для Брус-16 написано более 10 игр. Если вам интересны “серьезные” темы системного программирования, компьютерных архитектур и цифровой схемотехники, а также темы “несерьезные” – разработка игр в духе ретро-инди, демосцена и эстетика минимализма, то читайте дальше. Кстати, картинка выше состоит ровно из 64 прямоугольников. Это важно. Впрочем, обо всем по порядку!

Читать далее

Pragmata взломали за два дня до релиза. Шесть слоёв защиты Denuvo и как их обходят через гипервизор

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

15 апреля 2026 года Pragmata, новый sci-fi экшен от Capcom, появилась на пиратских ресурсах. Игра официально вышла 17 апреля. Платящие клиенты ждали разблокировки в Steam, а пираты уже бегали по лунной станции. Денуво, который должен был защитить хотя бы первые недели — самые продажные дни, ради которых эту защиту и покупают — пробит через hypervisor bypass от команды DenuvOwO. И это не аномалия: с декабря 2025-го Denuvo проигрывает каждую неделю. Persona 5 Royal, Borderlands 4, Resident Evil: Requiem, Crimson Desert, теперь Pragmata.

Под капотом — модифицированный open-source отладчик HyperDbg, EfiGuard как UEFI-bootkit, патчинг PatchGuard через паттерн-матчинг Zydis, спуфинг CPUID и KUSER_SHARED_DATA через EPT. Технически — kernel rootkit, юридически — пакет «play & restore» из закрытого Telegram-канала. Денуво живёт в Ring 3, обход — в Ring -1, между ними четыре уровня привилегий: detection из user-mode принципиально невозможен.

В статье разбираю шесть слоёв защиты, которые приходится снять, чтобы загрузить пиратский гипервизор: Secure Boot, PatchGuard, DSE, CPUID/RDTSC, KUSER_SHARED_DATA, Steam ownership. Что держит — HVCI. Что может сделать Irdeto и почему все варианты плохи. И на закуску — voices38, который через 40 дней после релиза Resident Evil: Requiem опубликовал классический crack: +5% FPS и работа под Proton на Linux, чего hypervisor-метод никогда не умел.

Читать далее

OptimaOS: архитектура Rust-ядра, которое загружается на реальном железе

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

Центральная идея: одно ядро, runtime-профили

Проблема, которую решает OptimaOS — фрагментация через форкинг. Android — форк Linux. Embedded-дистрибутивы — форки с кастомными патчами под каждый SoC. AI-стеки — отдельные кодовые базы. Каждый форк — это отдельный security-аудит, отдельная команда и свой накапливающийся регресс.

Читать далее

Что скрывается в корпоративной рассылке: очевидные вещи, которые обычно не делают

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

Большинство компаний уже умеют делать «нормальные» рассылки: есть шаблон, темы писем, календарь и какие‑то метрики. На этом уровне всё обычно и останавливается: письма что‑то рассказывают, но слабо влияют на процессы и не используют свой потенциал. Внутри всё выглядит прилично: open rate «нормальный», люди иногда переходят по ссылкам, новая политика безопасности или свежий релиз продукта формально донесены до адресатов. Но ощущение такое, будто рассылка живёт сама по себе, а жизнь компании — сама по себе.

В этой статье я соберу несколько нетривиальных методик корпоративных рассылок — не про то, «как правильно верстать в таблицах» или «почему нужен SPF/DKIM/DMARC», а про вещи, которые лежат чуть глубже. Как использовать прехедер и автоответы как инструмент, превратить статистику в личные письма, не бояться ошибок в рассылках, заставить письма двигать внутренние процессы, подружиться с отпиской и оживить самые скучные служебные уведомления. Каждый кейс дальше можно будет развернуть в отдельную статью, а сейчас — обзор с небольшими анонсами.

Читать далее

Своя почта против Gmail

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

В первой статье я рассказывал историю «деда из деревни», который вместе с внуком поднял свой почтовый сервер вместо Gmail — на обычном VPS, с доменом, DNS‑записями и всеми сопутствующими приключениями. Эта иллюстрация продолжает ту линию: дед‑айтишник и внук уже не просто радуются первому письму, а разбираются, что происходит с их маленьким сервером в большом почтовом мире.

Читать далее

Визуализатор структуры адреса на Си для Linux и Termux: Попасть в «Голову» кеш-линии

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

В 47 мои увлечения стали Си, Radare2 , Биты, Логика, Память. Изучая память зацепился за адреса. На адрес 0x7ffe10b284 можно смотреть бесконечно долго. Трудно сказать с ходу насколько удачно ваши данные легли в память. Влезают они в одну кеш-линию или размазаны по двум. Чтоб не заниматься битовой арифметикой в уме, я написал утилиту на Си для Linux и Termux. Она раскладывает младшие 12 бит адреса на 4 строки визуализации. Теперь сразу видно, попали мы в "Голову" или застряли в "Хвосте" кеш-линии.

Утилита максимально легковесная. Вам не нужны сложные дебаггеры, достаточно gcc. Работает, как на десктопном Linux, так и в Termux на Android. Можно проверить выравнивание даже лёжа на диване.

Читать далее

Внутреннее устройство ОС RT-11: копаемся в исходом коде. Часть первая

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

RT-11 — это операционная система из 1970-х годов для популярного в то время мини-компьютера PDP-11 фирмы DEC. В СССР известна под именами Электроника 60, ДВК, БК 0011М. Для тех, кто любит изучать чужой код в поисках инженерной эстетики — дальнейшее изложение.

Читать далее

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

Почему ваш софт тормозит: принципы Mechanical Sympathy для разработчиков

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

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

Эта статья — о mechanical sympathy, подходе, который помогает смотреть на производительность как на следствие понимания базовых ограничений и привычек железа: от строк кэша и ложного разделения до принципа одного писателя и естественной пакетной обработки. Для тех, кто строит или эксплуатирует highload‑системы, это хороший способ заново посмотреть на причины тормозов там, где код вроде бы уже давно «нормально работает».

К сути статьи

Не просто OpenBMC: как мы сделали свой BMC

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

Привет, Хабр! Летом мы рассказывали о сложном, но очень интересном пути в создании UEFI-загрузчика для серверных продуктов компании OpenYard. Теперь хочется перейти к его постоянному спутнику ― BMC, без которого сегодня трудно представить полноценную серверную платформу. 

Читать далее

ICMP-туннель на уровне ядра Linux: передаём TCP/UDP-трафик через эхо-запросы

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

Недавно я наткнулся на статью о том, что в ICMP-пакеты можно вставлять произвольные данные. Сразу возникла мысль: а почему бы не попробовать загнать весь трафик через ICMP (да, о существовании ICMP-туннеля я тоже ничего не знал). Так появился проект — ICMP?туннель на уровне ядра, который:

Читать далее

Управление фазой аппаратного PWM сигнала на STM32 (или таймер на ошейнике)

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

На микроконтроллерах STM32 можно генерировать аппаратные PWM сигналы. Это всегда применяют для регулирования яркости свечения, управления температурой нагревателей, управления крутящим моментом на электрических моторах.

При этом на STM32 обычно очень легко регулировать частоту, заполнение и инвертировать фазу меняя полярность.

Однако как непрерывно регулировать фазу PWM?

В этом тексте я написал четыре способа управлять фазой PWM сигнала.

Читать далее

Как одна буква в ассемблере стоит 3× производительности

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

Я хочу показать вам, как одна буква в ассемблере может стоить 3× производительности. Не в теории — на живых замерах. По дороге мы заглянем внутрь процессора: Register Alias Table, partial register merge, scheduler, latency vs throughput, и даже обнаружим, что делитель выдаёт остаток раньше частного.

Но начнём с основ. Приготовьтесь: кроличья нора окажется глубже, чем кажется.

Читать далее

Rust 1.95.0: макрос cfg_select!, if-let guards в match-выражениях

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

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

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

$ rustup update stable

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

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

Что вошло в стабильный 1.95.0

Rust 1.94.0: метод array_windows у массива, ключ include в конфигурационных файлах, поддержка TOML 1.1

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

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

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

$ rustup update stable

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

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

Что вошло в стабильный 1.94.0
1
23 ...