Обновить
64K+

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

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

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

Работают ли запреты внутри песочницы ИИ-агента?

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

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

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

Читать далее

Новости

Rust 1.99.0: функции с переменным числом аргументов, информация о схеме размещения типа

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

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

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

$ rustup update stable

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

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

Читать далее

Часы Unix тикали от розетки: откуда взялся 1970 год и что сломается в 2038-м

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

Первое издание Unix Programmer's Manual датировано 3 ноября 1971 года, и на странице про системный вызов time в нем написано, что система хранит время в шестидесятых долях секунды, прошедших с полуночи 1 января 1971 года. Я наткнулась на эту строчку, когда пыталась ответить себе на вопрос, который, по-моему, хоть раз возникал у каждого, кто видел в логах загадочное 1 января 1970 года: почему именно этот день. Выяснилось, что поначалу Unix собирался считать время с другого года и в других единицах, а тикали его часы от электрической розетки.

Вторая половина истории про будущее. Во вторник, 19 января 2038 года, в 06:14:07 по Москве закончится 32-битный счетчик секунд, и программы, которые на него полагаются, проснутся в пятнице, 13 декабря 1901 года. Я проверила это на C, на JavaScript и на ext4, где файл, датированный 2040 годом, у меня уехал в 1903-й, а заодно выяснила, что кое-где 2038 год наступил уже двадцать лет назад.

Читать далее

Особенности разработки встраиваемого программного обеспечения. Часть 1

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

В этой статье пойдет речь о немаловажных особенностях разработки встраиваемого программного обеспечения (далее ВПО) для микроконтроллеров (далее МК) с низким уровнем абстракции аппаратного обеспечения.

Это не полноценный гайд по написанию кода ВПО, которых на просторах интернета сегодня тьма, а лишь нюансы, которые помогут писать хороший код.

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

Читать далее

ч2: Разбор. Как мы закрывали утечку через tun0 в AmneziaVPN

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

Приложение, которое вы исключили из VPN на Android, может привязать сокет к tun0, пройти через ваш туннель и узнать адрес сервера. Летом мы взялись закрыть это в AmneziaVPN (issue #2457). Сама проверка в AmneziaWG уместилась в одну строчку цикла, который читает пакеты из tun:

if uidfilter.Supported && !device.tun.uidGate.AllowOutboundPacket(elem.packet, device) { continue }

Вокруг неё набралось полтысячи строк Go и столько же тестов, мост через JNI и три раунда ревью. В статье — почему ядро пропускает такие пакеты, почему «владелец неизвестен» у нас значит отказ, как одно приложение могло остановить весь туннель и какую ошибку мы нашли уже после ревью в собственном мосту. На телефоне с фильтром до сервера доходит 0 попыток обхода из 6, без него все 6. Но улучшать ещё есть что, и разбор мы пишем для двух целей: чтобы другим клиентам было проще закрыть ту же дыру и чтобы собрать критику. Если увидите у нас слабое место, напишите.

Читать далее

Собираем полигон для пилота — или тестовая среда для РЕД АДМ в песочнице

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

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

Чтобы техноересь не попала в прод, мы отлавливаем её в тестовой среде. И сегодня я расскажу вам, как собрать песочницу для проведения ритуалов очищения пилотирования РЕД АДМ Промышленной редакции.

Читать далее

Platinum One OS на базе Samsung M52 звонки, смс, Vulkan, Misa

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

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

После перезагрузки экран может остаться чёрным. Модем обнаруживает SIM, но не регистрируется в сети. DSP сообщает, что запущен, а ALSA по-прежнему не видит звуковых карт. Трёхмерная модель ассистента отображается, но стоит в T-позе.

На Samsung M52 я прохожу именно этот этап разработки Platinum OS One: превращаю загружающуюся Linux-систему в устройство, которым можно пользоваться как смартфоном. На момент этой статьи на телефоне работают оболочка с Vulkan, сенсорный ввод, Wi-Fi и SSH. SMS, звонки и USSD я проверил на самом устройстве. Misa получила трёхмерный аватар и подключение к своему диалоговому серверу.

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

Ubuntu userspace и аппаратная платформа Samsung

Platinum OS One строится вокруг Ubuntu Base 26.04 LTS и собственных компонентов. Samsung M52 — одна из целевых платформ. Сборочная система должна оставаться общей для разных устройств, а аппаратные особенности приходят из конфигурации платы, ядра, Device Tree и firmware.

На M52 используется vendor-ядро Samsung на базе Linux 5.4. Здесь это практический выбор: значительная часть поддержки дисплея, модема, аудио и камер связана с downstream-драйверами Qualcomm и Samsung.

Читать далее

Терпение. Или как один зависший кадр заставил меня построить ещё полсистемы;‑)

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

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

Читать далее

Я написал верификатор eBPF для микроконтроллера. А потом ядро Linux объяснило мне, где я неправ

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

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

Нормальный человек собирает из этого термостат за вечер. Я собрал термостат, посмотрел на него и подумал: а неприятно же будет каждый раз лезть с кабелем, если я захочу поменять порог с 22 на 23 градуса.

Дальше мысль поехала не туда, и в итоге на плате оказался интерпретатор eBPF со своим верификатором байткода. Логика управления теперь заливается по Wi-Fi обычной программой на C, скомпилированной clang -target bpf. А потом я взял десять маленьких программ и прогнал каждую через свой верификатор и через верификатор ядра Linux, чтобы посмотреть, кто из нас двоих что думает.

Сошлись шесть из десяти. Про оставшиеся четыре и написана статья — они оказались интереснее, чем сам проект.

Читать далее

Разработка Platinum OS на базе Samsung M52

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

Начал портировать свою операционную систему Platinum OS на Samsung Galaxy M52. В основе — Ubuntu 26.04 LTS, собственная графическая оболочка, службы и пакеты приложений. Разблокируемый загрузчик телефона позволяет запускать модифицированные загрузочные образы и экспериментировать с Linux на настоящем устройстве.

Читать далее

Свежий OpenWrt на Xiaomi BE7000 без UART, или как три бага в драйвере Ethernet притворялись мёртвой платой

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

У меня есть Xiaomi BE7000, и железо там вполне приличное (IPQ9554, коммутатор QCA8084 на четыре порта 2.5G, QCN9274 на 5 ГГц, гигабайт памяти и 128 МБ NAND), а вот стоковая прошивка мне быстро стала тесной. Хотелось поставить нормальный OpenWrt из main с ядром 6.18, причём не через kexec поверх стока, а чтобы он грузился прямо с флеша.

Порт под этот роутер уже делает kravasuper в своей ветке xiaomi_be7000, так что я собрал его как есть и прошил, после чего получил быстро мигающий белый диод и полное отсутствие сети, Wi-Fi и SSH, а через четыре включения питания загрузчик сам вернул сток. В обсуждении порта на такое жалуются и другие владельцы, и обычно всё списывают на ревизию платы.

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

Читать далее

Ускорение Python-сервиса с CinderX: JIT и статическая типизация

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

У любого ускорителя Python есть число: во сколько раз он быстрее. Меряют его на ядрах - сортировка, обход дерева, арифметика в цикле. Сервис устроен не так: обработчик ходит в базу, считает в numpy, сериализует ответ, и байткода, к которому это число применимо, в нём может почти не остаться. CinderX ускоряет байткод, и за пределы байткода это число не распространяется. Доля байткода в вашем сервисе - свойство вашего кода, а не расширения, и пока она не посчитана, «ставить или нет» решается угадыванием.

Читать далее

Статьи по Go, которые стоит почитать

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

Если посмотреть на самые обсуждаемые публикации Go‑сообщества последних месяцев, можно заметить любопытную закономерность. Среди них почти нет материалов про новые конструкции языка, generics или очередные изменения синтаксиса.

Зато много статей про диагностику утечек горутин, профилирование памяти, внутреннее устройство рантайма, особенности современных процессоров и эксплуатацию высоконагруженных PostgreSQL‑кластеров.

В 2026 году экосистема Go значительно «повзрослела». Сама спецификация языка уже стабилизировалась, и фокус инженерного внимания сместился в сторону эксплуатации (Production Engineering) — предсказуемости памяти, автоматической диагностики рантайма, управлению ресурсами железа и устойчивости баз данных под высокой нагрузкой.

На связи команда Golang‑инженеров Авито, а ниже — несколько публикаций, которые хорошо показывают этот сдвиг.

Читать далее

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

Связь времён: Кронос в WASM

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

А помните, был такой проект "Кронос" на закате "союза", на заре "перестройки"? Профессиональная 32-битная графическая рабочая станция на собственном железе и собственной ОС и собственной инженерной школой. Вроде был Кронос, а вроде и не был его, сколько с тех пор воды утекло.

[вспомнить всё]

А точно ли вы знаете, чем занят ваш агент в песочнице?

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

Агент отработал полчаса и остановился. У вас спрашивают, что он делал.

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

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

Читать далее

Я добавил монитор, которого не существует. EvertyDisplay и пространство за краем экрана

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

С Вами Артур Валиев V.

Когда-то давно я начинал писать музыку на пятнадцатидюймовом ЭЛТ-мониторе. Кажется, это был какой-то старенький 550S — огромная тяжёлая коробка с выпуклым стеклом, занимавшая приличную часть стола.

А ещё у меня был диск.

Один из тех дисков из далёкого и уже почти забытого компьютерного прошлого: сборник программ, который мой брат когда-то купил на Горбушке. Я не знаю, зачем он его купил. Диск несколько лет лежал среди игр, драйверов и прочего компьютерного хлама, пока однажды после игр, учёбы и обычной подростковой суеты мне просто не стало скучно.

Я достал его и начал устанавливать всё подряд. Среди программ оказалась FL Studio, кажется, третья версия. Поставил совершенно случайно, открыл, ничего особенно не понял и начал стучать по барабанам.

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

Зачем я вообще начинаю статью про системное приложение для Windows с какого-то старого диска и ЭЛТ-монитора?

Потому что эта статья на самом деле не столько про мониторы.

Она про пространство.

Читать далее

Как QEMU исполняет чужой код: изучаем Tiny Code Generator изнутри

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

QEMU — это не просто виртуализация с KVM. Его главная cуперсила — способность запускать программы, скомпилированные для одной архитектуры, на совершенно другом процессоре. Безо всякой поддержки со стороны хоста. Например, запустить прошивку для ARM-микроконтроллера на x86-ноутбуке.

Как это работает? Под капотом QEMU скрывается JIT-компилятор под названием TCG (Tiny Code Generator). В этой статье мы разберем его устройство на практических примерах для RISC-V и посмотрим, как инструкции превращаются из одного машинного кода в другой, как формируются блоки трансляции, и зачем там нужны longjmp и цепочки блоков.

Читать далее

Чужой сенсор на чужом SoC: что не работает, когда «общий API» общий не до конца

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

Подключаем модуль камеры Raspberry Pi (Sony IMX708) к камерному SoC Rockchip RV1106. Делаем это в рамках разработки носимой камеры в ITSupportMe. Готового драйвера для IMX708 нет ни в дереве Rockchip, ни в мейнлайне — он живет только в форке Raspberry Pi под другое ядро и другую архитектуру видеотракта.

Формально subdev-API ядра единый: переноси код и пользуйся. Но на практике общего между двумя вендорскими деревьями осталось ровно столько, сколько каждый разработчик сохранил в своем форке. Где именно разошлись пути Rockchip и Raspberry Pi, пришлось выяснять в процессе отладки.

Во-первых, вызов STREAMON намертво падал из-за одного слова, которое в двух кодовых базах отвечало за противоположные вещи. Во-вторых, строка embedded-данных для работы фазового автофокуса (PDAF) оказалась высотой ровно в четыре линии по причине, которую не описывает ни один даташит. В-третьих, нашлось четвертое место в конфигурации, где обязательно нужно прописать новый сенсор, но об этом нет ни слова ни в одном руководстве Rockchip.

Разбираем по порядку, как решались эти проблемы, и как в итоге заставить железо работать вместе.

Читать далее

Положил http:// в строку, и ассемблер молча собрал 0 байт

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

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

Нельзя: вторая заплатка ломает то, что починила первая.

Куда делись байты?

Я хотел сделать быстрый сжатый диск для macOS. А в итоге научился не верить собственным бенчмаркам

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

Полгода назад я начал писать сжатую файловую систему для macOS. Идея была довольно простой. В macOS уже существует decmpfs — встроенный механизм прозрачного сжатия файлов. Приложение продолжает видеть обычный файл, хотя физически его содержимое может храниться в сжатом виде. Но у этого подхода есть неприятное для моей задачи свойство: после изменения файла сжатие может исчезнуть.

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

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