Обновить
128K+

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

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

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

Операционная Система на C без знаний C

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

Всем привет! Давно не писал статей и вот наконец решил вернуться.

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

Читать далее

Новости

Безопасность микроядра: где заканчивается трюизм и начинается инженерия

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

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

Меня зовут Анна Мелехова, я старший архитектор ПО в «Лаборатории Касперского». Вместе с командой занимаюсь разработкой микроядерной KasperskyOS.

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

В этой статье, основанной на моем докладе для OS DevConf 2025, разберем, почему механизмы харденинга могут эффективнее работать в микроядре, чем в монолите; как «закрутить гайки» при передаче данных из user space; и насколько отличаются защитные механизмы в микроядерной архитектуре и в монолитной.

Читать далее

Летняя встреча Go-сообщества: системное и embedded-программирование

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

Если список литературы по Go на лето уже прочитан, пора переходить от теории к живым кейсам. 23 июля собираемся в Москве и онлайн на встрече Go-сообщества от YADRO и Postgres Professional. Начинаем в 19:00 — подключайтесь к трансляции и слушайте тех, кто работает с Go каждый день.

Отменяем summertime sadness

Странные машины: как хакеры собирают процессор из данных

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

Как часто нам приходится читать в бюллетенях безопасности «Уязвимость... позволяющая нарушителю выполнить произвольный код с помощью специально сформированного запроса». Но что на самом деле скрывается за этой фразой? Что это за специальные запросы и как наша программа может выполнять чужой код, если мы досконально знаем в ней каждую строчку и каждую библиотеку?

И почему тогда Apple платит до двух миллионов долларов за одну найденную уязвимость и выстраивает многоуровневую аппаратную защиту — а айфоны всё равно взламывают по нажатию одной кнопки?

Всё дело в том, что сами атаки стали другими. Когда инженеры перекрыли большинство очевидных ходов, хакерам пришлось изменить сам подход к взлому. Вместо поиска лазеек они научились брать легитимные вычисления программы и строить поверх них... виртуальный процессор. Даже стандартную функцию вывода текста printf удалось превратить в Тьюринг-полный интерпретатор — то есть вычислитель, способный выполнить любой алгоритм.

Перед нами — Data-Only атаки, где взлом превращается в программирование на «невидимом» процессоре. Процессоре, команды которого — лишь побочный эффект работы нашей собственной программы.

Но чтобы понять, как мы здесь оказались, придётся вернуться на двадцать лет назад.

Читать далее

Rust 1.97.0: манглинг символов, вывод линкера и поддержка запрета предупреждений в Cargo

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

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

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

$ rustup update stable

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

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

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

MIK32 Амур + PlatformIO: пошаговый гайд по настройке среды разработки на Windows

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

MIK32 Амур (К1948ВК018) — первый российский 32-битный микроконтроллер на ядре RISC-V от АО «Микрон». Для работы с ним разработчики предлагают связку VS Code + PlatformIO. Казалось бы, всё просто — но на практике сталкиваешься с множеством неочевидных шагов, которые нигде не собраны в одном месте. В этой статье я пошагово покажу, как развернуть полноценную среду разработки для MIK32 Амур на Windows.

Читать далее

Выкручиваем сложность пароля на 150-200% в РЕД АДМ Промышленная редакция (с помощью ePSO)

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

Привет, Хабр! На связи Дмитрий, инженер по инфраструктурным решениям в компании РЕД СОФТ. Сегодня будем расширять парольные политики в РЕД АДМ — минимум теории, больше практики. Покажу, как подготовить инфраструктуру, создать и применить расширенную политику, а также расскажу, какие нюансы стоит учитывать при работе со схемой. Даже самый требовательный офицер безопасности будет вами гордиться.

Читать далее

Пишем мобильную ОС на Rust. Часть 3. Путь от bare-metal эксперимента к capability-based микроядру

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

В первой части мы загрузили своё ядро на настоящий телефон, вывели «Hello world» в UART и нарисовали квадратик на экране. Во второй — научили ядро управлять памятью и завели кучу.

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

В этой статье разберёмся, что такое capability и handle и при чём здесь seL4 и Zircon, запустим свой процесс-"калькулятор" на телефоне и поговорим с ним по IPC, а под конец напишем userspace-драйвер часов для устройства, про которое в ядре нет ни строчки.

Получить хэндл на статью

awg-admin: почему я написал свой менеджер для управления Amnezia(WG)-серверами

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

Недавно друг попросил помочь с настройкой VPN. Казалось бы, обычная задача. Но когда я посмотрел, что у него уже развернуто, удивился.

Для управления четырьмя vpn-клиентами использовался полноценный многопользовательский веб-сервис на PHP с MySQL, который требовал отдельного сервера.

История о том, как я перебрал популярные панели управления WireGuard и написал свою.

Читать далее

Паттерны доступа к данным, которые выбесят ваш процессор

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

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

Читать далее

T-Shaped специалист: эволюция или ловушка современного IT?

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

Привет, Хабр! Меня зовут Александр, я работаю в IT с 2006 года, последние годы занимаюсь системным анализом и управлением командами аналитики.

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

Для кого-то T-Shaped — это специалист, который понимает систему шире своей основной области и умеет эффективно взаимодействовать со смежными ролями. Для кого-то — тот, кто должен «уметь всё понемногу». А иногда под этим термином вообще начинают подразумевать сотрудника, который фактически совмещает несколько ролей одновременно. Короче говоря, с T-Shaped все далеко не так однозначно.

Читать далее

Рейтинги языков программирования в 2026 году с учётом ИИ-агентов и нейрослопа

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

Выбор языка программирования (ЯП) отражает стиль мышления разработчика. Однако если какой-то язык называют «популярным», это вовсе не значит, что он самый перспективный и единственно достойный глубокого изучения. Просто в данный момент он чаще на слуху по разным причинам. Это может быть следствием лёгкости освоения, востребованности в какой-то быстро растущей и специфической отрасли, ошибкой интерпретации статистических данных или просто хайпом. В этой статье вместе с разработчиками и исследователями компании «Криптонит» мы проследим динамику рейтингов ЯП, разберёмся, что скрывается за всплесками интереса к разным языкам, какие из них действительно востребованы и почему.

Для понимания общей картины рассмотрим подробнее, что говорят о популярности ЯП в источниках с разной методологией и оценим динамику.

Читать далее

Разработка драйвера сетевого адаптера для Linux. Часть 2

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

Вашему вниманию предлагается вторая часть статьи “Разработка драйвера сетевого адаптера для Linux”. Первая часть была опубликована очень давно, по некоторым обстоятельствам не было возможности продолжить работу над статьей. Но в итоге вторая часть готова, надеюсь материал будет полезен тем, кто интересуется темой разработки для Linux.

далее

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

Загружаем bitstream из Linux через FPGA Manager на Zynq-7000

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

Добрый день!
В прошлой статье мы подготовили кастомную плату на Zynq-7000 для загрузки Linux: Buildroot, U-Boot SPL, device tree и минимальная rootfs уже работают. Но PL-часть при этом оставалась почти пустой.

На первых этапах bring-up это нормально: bitstream обычно шьют через JTAG или кладут в BOOT.BIN, чтобы FPGA конфигурировалась ещё до старта Linux. Но для реального проекта такой подход быстро становится неудобным: иногда нужно менять PL-логику уже после загрузки системы.

В этой статье разберём, как загрузить bitstream в Zynq-7000 из Linux через FPGA Manager, какие параметры ядра для этого нужны, и как завернуть загрузку в небольшую C++ утилиту.

Читать далее

Создал хранилище данных в одном зашифрованном файле

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

В прошлой статье я рассказывал про свой пет-проект qrrot. Тогда это была in memory база данных на Go с TCP-интерфейсом и встроенным ИИ-ассистентом. Идея казалась забавной, но на практике оказалась бесполезной вещью, поэтому я просто продолжил ее ковырять и пробовать сделать из нее что то интересное и быстрое. В процессе ковыряния в своем проекте я полностью перевернул его суть и идею, и вышло это.

Читать далее

Move‑семантика в C++: пять задач, в которых легко ошибиться

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

В C++ часть ошибок выглядит слишком безобидно, чтобы сразу насторожиться: std::move в return, emplace_back «для скорости», перемещение из const, move‑конструктор без noexcept. Код компилируется, тесты могут проходить, а потом внезапно появляются лишние копирования, просадки производительности и странное поведение объектов.

Разберём пять типичных ловушек move‑семантики на небольших задачах и посмотрим, где именно ожидания разработчика расходятся с тем, что реально делает язык.

Разобраться в move

Как мы приручили vGPU до режима авто без проблем

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

Привет, Хабр! На связи снова команда виртуализации платформы Astra Cloud. Решили рассказать, как мы укрощали тяжелую графику — от первых экспериментов до полноценного релиза.

Запрос от заказчиков звучал железобетонно: «Хотим тяжелую графику в виртуализации, как на рабочей станции, но чтобы управлялось централизованно». Мы ответили: «Сделаем». Как будто были другие варианты, ха!

Читать далее

Как на самом деле работает .await: пишем свой async-рантайм на Rust с нуля

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

Каждый раз, когда вы пишете .await, происходит не магия, а вполне конкретный механизм: Future, Waker и опрос состояния. Чтобы увидеть это своими глазами, я написал собственный async-рантайм на Rust с нуля - с executor, reactor на epoll и рабочим TCP-эхо-сервером. По пути разобрался, как именно tokio будит ваши задачи, и нашёл баг, который тихо висел у меня в проде. Внутри - весь код целиком и объяснение без отсылок к чёрным ящикам.

Читать далее

ACPI: тайна взаимодействия прошивки и ОС

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

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

Одним из ключевых механизмов такого взаимодействия является ACPI (Advanced Configuration and Power Interface). Эта спецификация определяет, каким образом прошивка платформы описывает аппаратную конфигурацию системы, а операционная система получает возможность управлять устройствами, питанием и событиями платформы без необходимости знать все детали конкретной реализации материнской платы или SoC.

Читать далее

Свободное или несвободное ПО: кто платит за Open Source

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

Сколько существует ПО, столько админы и программисты спорят о свободном и несвободном ПО.  Тема эта древняя и, казалось бы, все участвующие в споре стороны давно определились с лагерем, за который они “топят».

И так бы все и продолжалось, если бы в 2022 году картинка радикально не поменялась. Такие привычные и понятные продукты ушли из России, оставив многих перед необходимостью искать альтернативы. На встречах с заказчиками я начал снова все чаще слышать старые вопросы: «А объясните мне, что такого плохого в OpenSource?» и «Почему вы мне рекомендуете платное, если есть прекрасная бесплатная альтернатива?». Если на этом месте сразу захотелось прекратить читать и нажать на крестик, я дам быстрые ответы: между Open Source и проприетарным ПО гораздо больше общего, чем принято считать, а выбор по принципу «платное ПО или нет» – абсолютно неверная стратегия.

Если вы еще читаете, то давайте разбираться.

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