Обновить
128K+

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

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

143,45
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности
Формат публикации

Rust 1.100.0: Тип «never», Allocator и DropGuard API

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

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

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

$ rustup update stable

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

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

Читать далее

VPN Admin: от панели для AmneziaWG к визуальному управлению VPN-инфраструктурой

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

Некоторое время назад я тестировал свои наработки, которые изначально не имели к VPN никакого отношения. Мне нужен был реальный сценарий, в котором можно проверить развертывание приложений, передачу конфигурации и управление удаленными серверами. Таким сценарием стал AmneziaWG, а результатом эксперимента - awg-admin.

Предполагалось, что это будет небольшая вспомогательная панель. Инструмент использоваться для решения вполне реальных задач: настройки серверов и интерфейсов, добавления пользователей и построения туннелей. Со временем эксперимент перерос первоначальную задачу, и архитектура awg-admin потребовала переосмысления.

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

Так появился vpn-admin - уже не панель для AmneziaWG, а визуальная система управления VPN-инфраструктурой с поддержкой разных провайдеров, картой серверов и редактором сетевой топологии.

Читать далее

Портируем прошивку PCAN на китайскую плату

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

В данном тексте я выполнил обзор широко известного open source проекта прошивки для PCAN-Pro. Код которой лежит на Github. Мне удалось портировать и завести прошивку на покупной учебной отладочной плате JZ-F407VET6.

В каждой разработке с CAN нужны средства отладки. Я узнал, что в интернете есть открытый проект прошивки для культового прибора PCAN и попробовал его портировать на учебную отладочную плату JZ-F407VET6.

Читать далее

LANDAU: Мы сделали BE-U1000 в QEMU

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

Осталось почти всё.

И это было сделано специально - так как мы не против поделиться славой, ну и, конечно же, работой.

Эта статья для тех, кто:

— готов поучаствовать в разработке эмулятора BE-U1000 для QEMU;
— хочет попробовать разработку под BE-U1000, не имея живой платы, и ищет для этого рабочий инструмент;
— присматривается к проекту LANDAU и хочет понять, что там происходит.

Минимум, который уже есть и позволяет не начинать с нуля: модель SoC BE-U1000 и машина EVU-BA-2.5 с реализованными BR350 (CORE0/CORE1), CLIC, CRU/RESET, MTIMER и базовым UART. BM310 (CORE2) формально присутствует как тип CPU и объект в SoC, но ни изоляции, ни прерываний для него пока нет.

То, что осталось...

Что исполняет C++-программа при пропущенном return после сборки с -O2

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

Рэймонд Чен объясняет: ud2 в коде ставят там, где программа не должна была оказаться, например в конце функции, которая должна вернуть значение, но не возвращает его, и падение на ud2 означает логическую ошибку. Я проверил обратное: если падения на ud2 нет, значит ли это, что ошибки нет. Одна и та же C+±функция прошла через 114 версий GCC и Clang для x86-64 на Compiler Explorer, плюс запуск демонстрационной программы. Без оптимизации ud2 есть у Clang и у свежих GCC. На -O2 программа с пропущенным return у всех четырёх компиляторов в демо исполнила ветку для других входных данных и завершилась с кодом 0, а функцию без единого return Clang 23.1 оставил пустой, и в демо выполнилась соседняя wipe_disk(). Успешное завершение такую ошибку не обнаруживает.

Читать далее

Про Кубернетес, LinuxONE и мэйнфрэймы

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

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

Мой ответ на один такой комментарий к моему, казалось бы, безодидному посту вылился в объем, не вписывающийся в пост. Пришлось оформлять его как статью.

Цитаты ниже на русском языке - это из комментария на мой пост.

Читать далее

Охота на Гуся

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

Проект “Гусь” обречён на холивар. Шутка ли: ИИ написал язык программирования, который быстрее C++ и Rust. Холивар – это в основном про зрелища, и так ясно, who is whoosh. Однако на полях сражений в виде “хлеба” остаются поучительные артефакты, парочку из которых предлагаю рассмотреть.

Невероятно? Невероятно💎

ОС еще не загрузилась, а Python уже работает: зачем мы принесли змею в UEFI

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

В какой-то момент в жизни инженера появляется задача, которая начинается словами: «Нам бы просто автоматизировать прошивку».

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

В департаменте исследований и разработки «Гравитон» мы занимаемся тестированием оборудования. Часть подготовительных действий нужна еще до загрузки операционной системы: получить параметры задания, проверить необходимые условия, организовать обновление прошивки и сохранить результаты диагностики.

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

Так мы начали обживаться в UEFI Shell. А некоторое время спустя у нас появился собственный сборщик Python для этой среды.

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

Читать далее

Проверяем capability-делегирование в стиле ОС Fuchsia средствами Isabelle/HOL

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

Доступ к ресурсам в Zircon, микроядре операционной системы Fuchsia от Google, построен на том, что процесс работает с объектом ядра только через дескриптор, а права этого дескриптора задают, что с объектом можно делать. Такая модель задумана как основа безопасности и модульности системы: ошибка в драйвере не должна превращаться в угрозу целостности ядра.

Допустим, один процесс передаёт другому дескриптор объекта ядра с урезанными правами. Как убедиться, что получатель ни в одном сценарии не окажется с правом, которого не было у отправителя? Для ответа на этот вопрос мы построили в Isabelle/HOL учебную модель фрагмента capability-механизма Zircon и доказали это свойство для всех состояний, достижимых из корректного старта. Модель показывает и предел гарантии: один привилегированный обход через MMIO, прямая запись в память объекта, ломает изоляцию, хотя проверка прав остаётся на месте.

Читать далее

До загрузки ОС: где прячутся уязвимости сервера

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

Всем привет! На HardFest 2026 я рассказывал о безопасности серверов до загрузки ОС. В этой статье разберем, как устроена предзагрузочная среда, какие уязвимости встречаются в UEFI и BMC и что может сделать производитель оборудования, чтобы снизить риски их эксплуатации.

Читать далее

Linux: Логи. Что это такое и справочник по базовым утилитам

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

Эта статья — справочник по утилитам, которые помогают читать логи и быстро находить в них причину проблем. Для одного сервера или домашней лаборатории (homelab) этого набора хватает в большинстве случаев.

Читать

Стерео 44,1 кГц на Nintendo 64 за 4% времени процессора: малоизвестный кодек ULC

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

На Nintendo 64 пятиминутный стереотрек в ADPCM занимал около 12 МБ, а Opus на этой консоли слишком медленный для использования во время игры. Автор форматов QOI и QOA Доминик Шаблевски нашёл кодек ULC из демо для Game Boy Advance и перенёс его на векторный сопроцессор RSP с 4 КБ памяти данных. В статье разобраны упаковка коэффициентов по полубайтам, выбор 16-битной фиксированной точки и то, как Codex помогал писать ассемблер. Итог: стерео 44 100 Гц за 4% времени процессора и 5% времени RSP.

Читать далее

Эмодзи козла — валидный машинный код 8088. Я собрал из эмодзи целые программы

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

Эмодзи козла в UTF-8 занимает байты F0 9F 90 90, и для процессора Intel 8088 это рабочие инструкции: LOCK LAHF и два NOP. Автор эмулятора MartyPC заметил это случайно и проверил, можно ли написать исполняемый COM-файл из одних отображаемых эмодзи. Получилось: программа из 141 байта выводит HELLO прямо в видеопамять, а загрузчик на эмодзи разворачивает в памяти демо для VGA. В статье разобраны листинги, таблица полезных эмодзи и гаджеты, которые склеивают соседние символы в одну инструкцию.

Читать далее

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

Полярные типы данных в Edva

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

В большинстве языков программирования понятия «истина/ложь», «значение есть/значения нет» и «успех/ошибка» живут в разных мирах. Для первого существует примитив bool и конструкции if/else, для второго — Option<T> (Maybe a), для третьего — Result<T, E> (Either a b). У каждого из них свои конструкторы (true/false, Some/None, Ok/Err) и свой набор комбинаторов.

Системный язык программирования Edva, спроектированный без единого ключевого слова, сводит все бинарные исходы к единому примитиву на уровне системы типов — алгебраическим разветвлениям (Algebraic Ramifications, или коротко — Rams).

Погрузиться в заполярье

Перемотка в любой игре: как я научился откатывать память работающего Windows-процесса на Mac

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

В эмуляторах приставок сохранение в любой момент есть лет двадцать. В играх для ПК его нет: игра там не коробка с понятным состоянием, а живой процесс с потоками, файлами, звуком и видеокартой. Пару недель я делал ⌘S и ⌘Z для Windows-игр, которые идут на Mac через слой совместимости и Rosetta. Рассказываю, как устроен откат памяти чужого процесса, какие ловушки Rosetta стоили мне зависаний и почему самым сложным оказался не GPU, а семафоры Mono.

Читать далее

Вывод в терминал тормозит unzip: как заменить построчный буфер сбросом по дедлайну

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

Если в архиве много мелких файлов, unzip тратит бо́льшую часть времени на печать их имён в терминал: при построчной буферизации записей получается намного больше, чем нужно. Разбираем, как её реализуют glibc и CPython и почему вместо сброса на перевод строки хватит идеи из алгоритма Нейгла: сбрасывать буфер, если он простоял около 100 мс.

Читать далее

Как мы приручили SIGSEGV и освободили память фоновых вкладок

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

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

На три последних пункта повлиять сложно. Но что делать с десятками вкладок, которые пользователь открыл, посмотрел и забыл? Не запускать процесс до первого посещения — легко. Гораздо интереснее случай, когда страница уже загрузилась и продолжает занимать память — почти как активная вкладка.

Просто так закрыть её нельзя: страница потеряет состояние, а музыка, видео или фоновая задача могут прерваться. В Chromium уже есть сборка мусора, очистка кешей и другие способы оптимизации — однако память всё равно не всегда возвращается операционной системе надолго.

Чтобы разобраться, почему так происходит, мы в команде Яндекс Браузера собрали собственный профайлер обращений к страницам памяти. Под катом — устройство виртуальной памяти, lock‑free‑структуры внутри обработчика сигнала, профилирование через управляемый SIGSEGV, борьба с kevent64, mach_msg и libdispatch, а также переход от эксперимента на macOS к оптимизации, которая сильнее всего проявила себя на Windows.

Читать далее

Rust и C++: анализ официальных документов CISA, NSA, Google и Microsoft

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

В последние годы вопрос безопасности памяти стал одним из ключевых факторов, определяющих стратегию разработки системного программного обеспечения. В официальных документах таких организаций, как CISA, NSA, а также в технических отчетах Google и Microsoft, прослеживается устойчивая тенденция к переходу на безопасные языки программирования, и Rust рассматривается в качестве основной альтернативы C и C++.

Данная статья представляет собой анализ официальных документов и статистических данных. В ней рассматриваются причины выбора(организаций) в пользу Rust, технические механизмы (такие как система владения и семантика перемещения), обеспечивающие безопасность без потери производительности, а также объективные ограничения и издержки, с которыми сталкиваются компании при миграции. Отдельное внимание уделено ответным мерам со стороны сообщества C++ и прогнозам развития индустрии.

Читать далее

Торвальдс: «Не доверяете ИИ — пишите на ассемблере»

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

13 октября 2026 года Линус Торвальдс ответил в рабочей переписке разработчику, который хотел ограничить ИИ в работе над ядром Linux. Ответ был довольно резким и саркастическим: Торвальдс предложил оппоненту отказаться не только от ИИ, но и от компиляторов.

Читать далее

18 из 20 порядков ломают counter++, а 10 000 запусков на ноутбуке этого не показали

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

Два потока выполняют counter++ по одному разу. Шаги можно чередовать 20 способами, и в 18 из них обновление теряется, но на простаивающем ноутбуке за 10 000 запусков такого не случилось ни разу, а с барьером на старте случилось 4 раза. Фарид Закария, работавший в AWS над RDS, замеряет на этой гонке, сколько порядков реально выполняет обычная машина, простаивающая и загруженная, и сколько их достаёт детерминированная виртуальная машина Rewind VM: под ней обновление теряется в 1371 запуске из 10 000 без барьера и в 2997 с барьером. Заодно он объясняет, почему тесты не видят баги, зависящие от расписания.

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