Hacker News Digest

Тег: #qemu

Постов: 12

Making a micro Linux distro (2023) (popovicu.com)

В статье рассматривается создание микро-Linux дистрибутива с нуля, включая сборку ядра Linux и разработку ПО для упаковки. Пример реализован для архитектуры RISC-V (QEMU riscv64 virt), но подход применим и к x86. Автор предупреждает, что это упрощенное представление Linux-дистрибутива, предназначенное для начинающих, и некоторые детали могут быть неточны на 0.1%.

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

by turrini • 25 октября 2025 г. в 13:01 • 170 points

ОригиналHN

#linux#kernel#risc-v#qemu#uefi#pxe#initramfs#cpio#u-root#kexec

Комментарии (28)

  • Обсуждение вращается вокруг создания минимальной Linux-системы: от идеи до практических нюансов (UEFI, cloud-init, PXE, initramfs, cpio, u-root, kexec, Gentoo vs LFS vs Buildroot).
  • Участники делятся опытом, что «маленькая» сборка может быть полезна как для обучения, так и для практического применения (например, как образ для облачных инстансов).
  • Обсуждаются различные инструменты и подходы: от полностью статически слинкованных бинарников до полноценных дистрибутивов, а также варианты с использованием u-root, kexec, initramfs, cpio, PXE и т.д.
  • Участники также обсуждают, что такие мини-дистрибутивы могут быть полезны для обучения, отладки и даже как основа для специализированных образов (например, для RPi или как образ для облачных провайдеров).

Erlang ARM32 JIT is born (grisp.org)

Команда GRiSP достигла ключевого рубежа в портировании JIT-компилятора Erlang BEAM на ARM32: впервые выполнила функцию Erlang через сгенерированный машинный код. Используя эмулятор QEMU, они запустили минимальный модуль hello.erl, который вызывает встроенную функцию erlang:halt/2 с кодом возврата 42. Это подтвердило работоспособность базовой цепочки: загрузка BEAM, инициализация JIT, компиляция и выполнение кода.

JIT инициализирует общие фрагменты кода и модуль erts_beamasm, содержащий критические инструкции для управления процессами, такие как run_process и normal_exit. Модуль hello был помещён в предзагружаемые модули, чтобы обеспечить его выполнение при старте системы. Код доступен в репозитории GitHub, а работа ведётся при поддержке Erlang Ecosystem Foundation.

by plainOldText • 07 октября 2025 г. в 13:00 • 145 points

ОригиналHN

#erlang#beam#jit#arm32#qemu#grisp#erlang-ecosystem-foundation#embedded-systems

Комментарии (17)

  • Обсуждение причин разработки JIT-компилятора для ARM32 в Erlang, включая актуальность 32-битных ARM-микроконтроллеров на рынке встроенных систем.
  • Дебаты о текущем статусе архитектуры ARM32: участники отмечают, что она не устарела и до сих пор поддерживается в новых реализациях (v8-a, v8-m), несмотря на её нишевый статус.
  • Вопросы о целесообразности запуска Erlang на маломощных устройствах: одни видят потенциал, другие сомневаются в необходимости из-за ограничений памяти и производительности.
  • Обсуждение технических деталей: путаница с ESP32 JIT, сравнение с RISC-V, особенности наборов инструкций (Arm/Thumb/Thumb2).
  • Замечание о том, что «более высокая скорость» других языков является субъективной характеристикой («при определенных определениях быстрее»).

Blockdiff: We built our own file format for VM disk snapshots (cognition.ai)

Разработчики создали формат blockdiff для мгновенных снапшотов дисков виртуальных машин, сократив время создания с 30+ минут на EC2 до нескольких секунд — ускорение в 200 раз. Это стало возможным благодаря хранению только изменённых блоков данных, что экономит место и ускоряет операции. Формат работает поверх CoW-механизмов XFS в Linux, обеспечивая нулевые накладные расходы и мгновенное создание снапшотов без полного сканирования диска.

Ключевые применения включают сохранение сред разработки, быстрое пробуждение ВМ из сна и откат изменений. Решение обошло ограничения бинарных диффов и OverlayFS, предложив простую и надёжную реализацию на Rust. Открытый исходный код доступен на GitHub, что позволяет сообществу адаптировать инструмент для схожих задач.

by cyanf • 01 октября 2025 г. в 03:13 • 76 points

ОригиналHN

#rust#xfs#cow#virtual-machines#disk-snapshots#ec2#qemu#lvm#copy-file-range

Комментарии (17)

  • Удивление отсутствием рассмотрения формата QCOW2 и технологии тонкого provisioning VDO с LVM2 для решения аналогичных задач.
  • Вопросы о выборе XFS вместо ZFS/BTRFS, использовании LVM-снимков и возможности интеграции решения с другими гипервизорами и файловыми системами.
  • Обсуждение технических деталей реализации: использование флагов для синхронизации файлов, поддержка copy_file_range в qemu-img, сравнение с OverlayBD.
  • Интерес к применению технологии для ускорения подготовки виртуальных машин в CI/CD и публичном облаке.
  • Замечания о необходимости альтернативного текста для изображений и выбора лицензии для проекта.

VMScape and why Xen dodged it (virtualize.sh)

Новая атака VMScape от ETH Zürich использует уязвимости предсказателя переходов в процессорах AMD Zen 4 и Zen 5 для утечки данных между виртуальными машинами в облачных средах. Она успешно работает против гипервизоров KVM и VMware, позволяя вредоносной гостевой VM атаковать компоненты пользовательского пространства, такие как QEMU, и извлекать конфиденциальную информацию. Это очередное проявление проблем с изоляцией в современных CPU, оптимизированных для производительности.

Xen оказался неуязвим благодаря своей микроядерной архитектуре, где гипервизор минимален, а все дополнительные сервисы, включая эмуляцию устройств, вынесены в отдельную виртуальную машину Dom0. Это решение, принятое два десятилетия назад, сократило поверхность атаки и предотвратило воздействие VMScape на критически важные компоненты. Таким образом, архитектурный выбор Xen обеспечил встроенную защиту без необходимости экстренных исправлений, в отличие от KVM и VMware.

by plam503711 • 28 сентября 2025 г. в 18:19 • 99 points

ОригиналHN

#xen#kvm#vmware#hypervisor#virtualization#microkernel#dom0#qemu#amd-zen#security

Комментарии (22)

  • Архитектура Xen на микроядре с изолированным Dom0 ограничивает утечку данных при атаке vmscape только процессами внутри самого Dom0, что снижает риски.
  • В отличие от KVM, где эмуляция оборудования происходит в пользовательском пространстве хоста, в Xen управление и эмуляция выделены в отдельный Dom0, что обеспечивает дополнительный уровень изоляции.
  • Атака vmscape позволяет утечку данных между виртуальными машинами, но не затрагивает напрямую гипервизор Xen, так как он работает на более привилегированном уровне.
  • Обсуждаются потенциальные преимущества микроядерных архитектур (например, seL4) для дальнейшего ограничения последствий побега из VM.
  • Отмечается, что сама уязвимость остается на аппаратном уровне, и контейнеризация (LXC, SmartOS zones) не обязательно защищает от подобных атак.

Writing an operating system kernel from scratch (popovicu.com) 🔥 Горячее

  • Ядро ОС написано на Zig для RISC-V, одноядерное, с вытесняющей многозадачностью и системными вызовами.
  • Unikernel: приложения линкуются с ядром в один бинарник.
  • OpenSBI обслуживает M-режим; ядро работает в S-режиме, потоки — в U.
  • Потоки статические, бесконечные функции; переключение по таймеру каждые 2 мс.
  • Контекст сохраняется на стеке прерываний; ядро и пользователь разделены.
  • GitHub: popovicu/zig-time-sharing-kernel

by Bogdanp • 14 сентября 2025 г. в 15:44 • 309 points

ОригиналHN

#zig#risc-v#operating-systems#kernels#unikernels#opensbi#qemu#multithreading#system-calls

Комментарии (64)

  • Участники делятся опытом создания минимальных ОС на RISC-V и Zig: кто-то перевёл «ОС в 1000 строк» на Zig, кто-то пишет с нуля.
  • Все сходятся: RISC-V проще x86, нет легаси-багажа, документация и эмуляторы доступны.
  • Железо не обязательно: достаточно QEMU; если нужна «реалка» — Milk-V Duo S за $10 или Pico 2.
  • Миникernel — хороший способ выучить архитектуру и Forth; «не изобретай крипту для продакшена» не отменяет экспериментов.
  • В споре о «кто важнее» вспомнили: Линус начинал как хобби, а Столлман уже с 1984 года готовил инфраструктуру GNU.

Tips for installing Windows 98 in QEMU/UTM (sporks.space)

Советы по установке Windows 98 в QEMU/UTM

  • ACPI вместо PnP BIOS
    SeaBIOS ломает PnP-перечисление. Запускай установку с флагом setup /p j – Windows 98 SE сам перейдёт на ACPI и все устройства определятся корректно.

  • Система
    Выбирай машину pc-i440fx, Q35 не нужен. CPU «pentium2» – оптимально для 9x/NT4.

  • Ввод
    Отключи USB-контроллер, иначе зависает. Мышь/клавиатура только PS/2; курсор захватывается, но на iPad с внешней клавой не критично.

  • Видео
    -vga cirrus – единственный ускоренный вариант с родными драйверами. Есть баги 16/8-бит, но терпимо. Rage 128 пока сыра.

  • Сеть и файлы
    SLiRP-NAT + PCI-NE2000/PCNet/DC2114x = доступ в интернет и SMB-шары без танцев. ISA-NE2000 (300h, IRQ9) – только если очень надо.

  • Звук

    • SB16: PCM работает, MIDI нет.
      SET BLASTER=A220 I5 D1 H5 P330 T5
    • AdLib (OPL2) можно добавить отдельно.

by Bogdanp • 12 сентября 2025 г. в 23:04 • 117 points

ОригиналHN

#qemu#utm#windows-98#virtualization#hardware-emulation#acpi#pci#sb16#dos#networking

Комментарии (25)

  • Пользователи делятся опытом запуска Windows 95/98 в эмуляторах: QEMU, VirtualBox, DOSBox, PCem, x86box, UTM.
  • Проблемы: нет sb16 в virt-manager, AC97 работает нестабильно, Win9x в DOSBox «часто ломается», требуются драйверы для тач-ввода.
  • Для MIDI достаточно встроенного Microsoft GS Wavetable Synth, но DOS-игры, требующие SB16-MIDI, всё равно могут не заработать.
  • PCem/x86box дают высокую точность эмуляции старого «железа», но медленнее; QEMU ориентирован на современные ОС.
  • Win98 не умеет останавливать CPU (нет HLT), поэтому в эмуляторе грузит хост на 100 %.

Hypervisor in 1k Lines (1000hv.seiya.me)

Гипервизор за 1000 строк

Практическое руководство по созданию минимального RISC-V гипервизора, способного загружать Linux. Продолжение книги «ОС за 1000 строк», но теперь на Rust и с нуля (type-1, bare-metal). Используем только важное: сторонние крейты экономят код.
Репозиторий: github.com/nuta/hypervisor-in-1000-lines
Лицензии: текст — CC BY 4.0, код — MIT.

Содержание:
0. Введение

  1. Старт
  2. Загрузка
  3. Hello World
  4. Менеджер памяти
  5. Режим гостя
  6. Страницы гостя
  7. Привет из гостя
  8. Сборка ядра Linux
  9. Запуск Linux
  10. SBI
  11. MMIO
  12. Прерывания
  13. Заключение

by lioeters • 09 сентября 2025 г. в 23:13 • 111 points

ОригиналHN

#hypervisor#risc-v#rust#linux#bare-metal#qemu#sbi#mmio

Комментарии (12)

  • Демо-гипервизор на 1000 строк — интересная техническая игрушка, но без паравиртуальных драйверов и прочей инфраструктуры непригоден для реального использования.
  • Чтобы запустить RISC-V гипервизор на x86, нужен QEMU, потому что это эмуляция другой архитектуры.
  • Желающим увидеть «тот же объём, но на C» скидывают 500-строчный SimpleVisor и репозиторий kvmsample.
  • В дискуссию вмешалась философия: «OS» можно уложить и в 5 строк EFI-кода, если не требовать от неё ничего, кроме «Hello, world».

Using Claude Code to modernize a 25-year-old kernel driver (dmitrybrant.com) 🔥 Горячее 💬 Длинная дискуссия

  • Увлечение — восстановление данных с кассет QIC-80 90-х гг.
  • Драйвер ftape (Linux 2.4) последний раз собирался ~2000 г.; с тех пор приходится держать CentOS 3.5.
  • Привод подключается к контроллеру гибкого диска: дёшево, но 500 Кбит/с и куча «магии» портов/IRQ.
  • Под DOS/Windows есть проприетарные утилиты, но только ftape даёт «сырой» дамп, независимо от формата ПО, которое писало кассету.

Цель: переписать драйвер под современное ядро без боли.
Инструмент — Claude Code (Claude 3.5 Sonnet) в режиме «актов» (акт = автоматический цикл «предложи-отладь-протестируй»).

Ход работы

  1. Запустил claude в каталоге исходников ftape-4.04 (1999 г.).
  2. Первый акт: «сделай модуль для ядра 6.10». Claude выдал:
    • заменил cli/sti на spinlock_t;
    • sleep_onwait_event;
    • register_blkdevblk_mq;
    • kmallockmalloc_array;
    • добавил MODULE_LICENSE/AUTHOR/DESCRIPTION.
      Собралось с десятком предупреждений.
  3. Акт 2: «убери варнинги». Убрал устаревшие ioctl, обернул printk в pr_*, добавил fallthrough;.
  4. Акт 3: «проверь на x86_64». Исправил longint в структурах, выровнял u8/u16 через __packed.
  5. Акт 4: «протестируй на железе». Создал QEMU-образ с контроллером FDC, подключил образ кассеты.
    • первый insmod — kernel oops; Claude добавил BUG_ON(!request_region) и проверку IRQ.
    • второй — ftape видит привод, но «unknown format»; Claude вставил распознавание QIC-80 по ID_CRC.
    • третий — успешный дамп 120 Мб за 40 мин.
  6. Акт 5: «очисти и оформи». Удалил весь #ifdef LINUX_2_0, добавил README.md, Kconfig, Makefile для in-tree сборки.

Результат

  • 2 500 строк C → 1 100; 45 файлов → 12; минус 4 архаичных под-драйвера.
  • Собирается как out-of-tree (6.6–6.12) и как in-tree (патч 30 Кб).
  • Скорость 470 Кбит/с — предел FDC, но стабильно.
  • Поддержаны только QIC-80; QIC-40/3010/3020 выкинуты (никто не просил).

Вывод
Claude Code способен переварить древний драйвер за вечер: сам генерит патчи, тестирует в QEMU и оставляет человеку только катать ленту.

by dmitrybrant • 07 сентября 2025 г. в 23:53 • 832 points

ОригиналHN

#linux#kernel#c#qemu#claudecode#llm#device-drivers#hardware

Комментарии (275)

  • Claude Code и другие LLM-инструменты превращаются в «силовой множитель» для разработчиков: ускоряют работу в знакомых фреймворках и позволяют быстро осваивать новые.
  • Главное — самому понимать, что делаешь: чёткие промты, ключевые слова предметной области и умение сверять результат критически снижают количество багов.
  • Примеры успеха: порт драйвера ftape с Linux 2.4 на 6.8, апгрейд Pydantic V1→V2, inline-ASM под Apple, модернизация 15-летнего PHP-кода — всё за часы вместо недель.
  • Самые ценные фичи: долгие процессы в терминале, автоматическая проверка своего кода, быстрое написание тестов и бенчмарков «на заказ».
  • Безопасность: при работе с sudo-операциями или ядром итерации лучше вести вручную, чтобы LLM не сломала систему.

Writing a Hypervisor in 1k Lines (seiya.me)

Я написал учебник по созданию гипервизора с нуля за 1 000 строк кода: 1000hv.seiya.me. Это тип-1 гипервизор для 64-битного RISC-V с расширением H в QEMU. Подойдёт тем, кто уже прошёл OS in 1 000 Lines.

Код на стабильном Rust — без nightly. Сообщество Rust наконец-то добавило всё необходимое, включая inline-assembly.

Идея книги: гипервизор — это «обработчик событий»:

const vcpu = new VirtualCPU(memory);
while (true) {
    try { vcpu.resume(); }
    catch (e) { handle(e); } // MMIO, прерывания…
}

Он запускает гостевую ОС, перехватывает выходы из VM и возвращается. Это позволяет строить не только классические ОС, но и безопасные среды вроде gVisor или Hyperlight.

Книга уже доступна онлайн. Приятного кодинга!

by ingve • 29 августа 2025 г. в 22:12 • 93 points

ОригиналHN

#rust#hypervisor#risc-v#qemu#virtualization#os#vmware#inline-assembly

Комментарии (9)

  • RISC-V можно полностью виртуализировать методом «ловушка-и-эмуляция» без аппаратного расширения, но обход таблиц страниц будет медленным.
  • @drob518 уточнил: обход таблиц страниц выполняется программно, а не аппаратно.
  • @nerpderp82 спросил, можно ли использовать RVV для обхода таблиц страниц.
  • @anchovy_ попросил литературу по гипервизорам; @dmitrygr дал ссылки на академическую теорию и практику VMware.
  • @TZubiri посоветовал учиться по документации производителей и исходному коду, а не по университетским книгам.

QEMU 10.1.0 (wiki.qemu.org)

  • Удалено: устаревшие устройства sga и xenfv; опция -no-user-config.
  • Новые пометки: -machine dump-guest-core=on, query-cpus-fast, query-cpu-definitions – deprecated.

Архитектуры

  • 68k: поддержка q800 и macos9.
  • ARM: новые SoC imx8mn, stm32h735, xlnx-zynqmp-ep108; машины mps3-an547, raspi5; эмуляция FEAT_SVE2, FEAT_MTE2, FEAT_LSE2.
  • RISC-V: добавлены zacas, sstc, svadu, smstateen; машины spike-1.11, microchip-polarfire.
  • x86: AMD SEV-SNP, Intel AMX, AVX-VNNI; KVM-TCG совместимость.

Устройства

  • ACPI: поддержка SRAT для NVDIMM.
  • Audio: Intel HDA теперь 24-бит.
  • Block: virtio-blk/SCSI – discard=unmap, write-zeroes=unmap.
  • Graphics: virtio-gpu – 3D, virglrenderer 1.0.
  • NVMe: CMB, PMR, ZNS.
  • PCIe: SR-IOV, ARI, ATS, PASID.
  • USB: xHCI – USB 3.2 SuperSpeed+.

Прочее

  • Multi-process: x-vhost-user-fs и vhost-user-vsock теперь в отдельном процессе.
  • Сеть: vhost-vdpa – offloading checksum/TCP.

by dmitrijbelikov • 27 августа 2025 г. в 11:02 • 240 points

ОригиналHN

#qemu#kvm#virtualization#wasm#android#arm#risc-v#x86#nvme#pci-e

Комментарии (38)

  • QEMU восхищает пользователей: «просто работает», хорошо интегрируется и кажется «магией».
  • Его применяют для dev-окружений, запуска ПО на других ОС, разработки новых ОС, а также в облаках.
  • KVM ускоряет QEMU, предоставляя аппаратную виртуализацию через page-tables и trap-механизмы.
  • Появилась экспериментальная сборка в WASM, что открывает онлайн-песочницы для разных архитектур.
  • Поддерживается запуск Android-VM (Cuttlefish, официальный Android-emulator на базе QEMU).
  • Утилиты вроде QuickEMU и UTM упрощают запуск ВМ, а пожертвования идут через Software Freedom Conservancy.

Show HN: I integrated my from-scratch TCP/IP stack into the xv6-riscv OS (github.com)

xv6-riscv-net
Форк MIT xv6 для RISC-V с добавлением стека TCP/IP.
Поддерживаются драйвер RTL8139, DHCP, DNS, ping, telnet-сервер, HTTP-клиент.

Сборка и запуск

make qemu

Внутри QEMU:

$ dhcp
$ ping 8.8.8.8
$ telnetd &
$ http google.com

Сетевые утилиты

  • dhcp – получить адрес
  • ping – проверка связи
  • telnetd – сервер на порту 23
  • http – простой HTTP-клиент

Код

  • kernel/net* – стек TCP/IP
  • kernel/rtl8139.c – драйвер сетевой карты
  • user/{dhcp.c,ping.c,telnetd.c,http.c} – сетевые утилиты

by pandax381 • 26 августа 2025 г. в 06:24 • 107 points

ОригиналHN

#tcp-ip#risc-v#xv6#dhcp#dns#telnet#http#qemu#virtio-net#low-level

Комментарии (5)

  • @Tony_Delco и @dancek восхищаются сложностью и качеством реализации TCP/IP-стека для xv6 с virtio-net и сокетами, подчеркивая, что это «золото» для любителей low-level.
  • @AbbeFaria сообщает, что проходит лабораторные xv6 и сейчас занят mmap и fork.
  • @lesser-shadow интересуется, используются ли RISC-V-расширения и возможностью запуска на bare metal.
  • Все участники благодарят автора за открытость и делятся вдохновением.

Booting 5000 Erlangs on Ampere One 192-core (underjord.io)

Ampere One 192-ядерный сервер, 1 ТБ ОЗУ, цель — запустить максимум виртуальных IoT-устройств на Nerves.

Прошлый раз добрались до 500 экземпляров; теперь с KVM и новым загрузчиком little_loader от Frank Hunleth удалось 5000 одновременных виртуальных ARM64-машин.
little_loader — минимальный ARM64-бутлоадер, читающий переменные u-boot, загружающий ядро Linux и сохраняющий механизмы A/B-обновлений Nerves.

Что изменилось

  • KVM/HVF ускоряет старт до 1-2 с и экономит ≈ 500 МБ ОЗУ на гость.
  • EL1 вместо EL2: EL2 нужен для вложенной виртуализации, нам не требуется.
  • Баг компиляции: release-сборка зависает, debug-версия работает (GCC 15, вероятно, чинит).

Команда запуска (упрощённый пример):

qemu-system-aarch64 \
  -machine virt,accel=kvm \
  -cpu host -smp 1 -m 150M \
  -kernel little_loader.elf \
  -netdev user,id=eth0 \
  -device virtio-net-device,netdev=eth0 \
  -drive if=none,file=disk.img,format=raw,id=vdisk \
  -device virtio-blk-device,drive=vdisk \
  -nographic

Итог: 5000 «эрлангов» на 192 ядрах, 1 ТБ ОЗУ, стартуют за секунды, потребляют по 150 МБ RAM.

by ingve • 10 августа 2025 г. в 11:41 • 207 points

ОригиналHN

#erlang#arm64#kvm#qemu#nerves#iot#cloud#gcc

Комментарии (38)

  • Речь идёт о запуске 5000 узлов BEAM (Erlang-машин), а не процессов — каждая BEAM может держать миллионы лёгких процессов.
  • Сервер с 192 Ampere-ядрами позиционируется как «облачный» или «edge» для телекомов; Hetzner предлагает 80-ядерный Ampere за ~200 $/мес.
  • Пользователи сомневаются в полезности без тестов под нагрузкой и обсуждают, как масштабировать память и шину при таком числе ядер.
  • Всплыли исторические примеры (Azul для Java) и шутки про «ручное ткачество» Erlang-потоков и «фермерский» байт-код.