56,966 blogs · [
{
"id": "01a087c6-d4b2-7035-884f-ae8cb15561b0",
"title": "Writing your first compiler",
"url": "https://popovicu.com/posts/writing-your-first-compiler/",
"published_at": "2026-01-18T21:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb1df9874",
"title": "How to use Linux vsock for fast VM communication",
"url": "https://popovicu.com/posts/how-to-use-linux-vsock-for-fast-vm-communication/",
"published_at": "2025-11-27T16:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb2a8d55b",
"title": "How to reverse engineer USB HID on Linux",
"url": "https://popovicu.com/posts/how-to-reverse-engineer-usb-hid-on-linux/",
"published_at": "2025-11-08T15:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb39bab4c",
"title": "How KVM and QEMU run VMs in Linux",
"url": "https://popovicu.com/posts/how-kvm-and-qemu-run-vms-in-linux/",
"published_at": "2025-11-02T16:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb40ed29c",
"title": "PC cooler control with a $2 microcontroller, no development board",
"url": "https://popovicu.com/posts/pc-cooler-control-with-2-dollar-microcontroller-no-development-board/",
"published_at": "2025-10-04T14:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb45b0d7b",
"title": "Writing an operating system kernel from scratch",
"url": "https://popovicu.com/posts/writing-an-operating-system-kernel-from-scratch/",
"published_at": "2025-09-13T16:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb4c7db0d",
"title": "Custom CPU simulation and testing",
"url": "https://popovicu.com/posts/custom-cpu-simulation-and-testing/",
"published_at": "2025-09-07T17:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb582021a",
"title": "Running Go tools in a browser",
"url": "https://popovicu.com/posts/running-go-tools-in-browser/",
"published_at": "2025-09-06T17:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb6560041",
"title": "RTL generation for custom CPU Mrav",
"url": "https://popovicu.com/posts/rtl-generation-for-custom-cpu-mrav/",
"published_at": "2025-08-23T17:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb66e9ddf",
"title": "Mrav custom CPU software tooling",
"url": "https://popovicu.com/posts/mrav-custom-cpu-software-tooling/",
"published_at": "2025-08-16T17:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb711cff2",
"title": "Embedded bare-metal C with Bazel and AVR",
"url": "https://popovicu.com/posts/embedded-c-bazel-avr/",
"published_at": "2025-08-15T02:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb7171346",
"title": "Creating an assembler for a custom CPU",
"url": "https://popovicu.com/posts/assembler-for-custom-cpu/",
"published_at": "2025-08-10T19:15:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb79c5499",
"title": "Making a custom CPU",
"url": "https://popovicu.com/posts/making-a-custom-cpu-mrav/",
"published_at": "2025-08-02T22:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb834497c",
"title": "Simple Lua integration in Go",
"url": "https://popovicu.com/posts/simple-lua-integration-in-go/",
"published_at": "2025-07-20T20:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb928233b",
"title": "Cross-compiling C and Go via cgo with Bazel",
"url": "https://popovicu.com/posts/cross-compile-cgo-bazel/",
"published_at": "2025-05-31T17:15:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb92f6c4a",
"title": "Linux VM without VM software - User Mode Linux",
"url": "https://popovicu.com/posts/linux-vm-without-vm-software-user-mode/",
"published_at": "2025-05-24T19:15:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb96976f3",
"title": "Machines build machines - AI creates a bootable VM",
"url": "https://popovicu.com/posts/ai-creates-bootable-vm/",
"published_at": "2025-05-17T17:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb9acc59e",
"title": "Bare metal JavaScript on RISC-V",
"url": "https://popovicu.com/posts/bare-metal-javascript-riscv/",
"published_at": "2025-05-15T05:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cb9dd2f59",
"title": "Bare metal printf - C standard library without OS",
"url": "https://popovicu.com/posts/bare-metal-printf/",
"published_at": "2025-04-26T19:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbabe506f",
"title": "Making my first embedded Linux system",
"url": "https://popovicu.com/posts/making-my-first-embedded-linux-system/",
"published_at": "2024-06-15T18:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbb26e2ad",
"title": "Make your own USB storage device using embedded Linux",
"url": "https://popovicu.com/posts/make-your-own-usb-storage-embedded-linux/",
"published_at": "2024-06-09T16:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbb8f9ad5",
"title": "Making USB devices - end to end guide to your first gadget",
"url": "https://popovicu.com/posts/making-usb-devices/",
"published_at": "2024-06-01T16:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbc360326",
"title": "OCI containers with Bazel in one command",
"url": "https://popovicu.com/posts/containers-bazel-one-command/",
"published_at": "2024-04-27T16:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbd1a2fba",
"title": "Go gRPC servers with Bazel in one command",
"url": "https://popovicu.com/posts/go-grpc-servers-with-bazel/",
"published_at": "2024-04-20T18:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbd6f9fd2",
"title": "Easy to build and deploy Go servers with no tooling and external dependencies",
"url": "https://popovicu.com/posts/easy-to-build-and-deploy-go-servers/",
"published_at": "2024-04-20T18:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbd828b1f",
"title": "How files in Linux work",
"url": "https://popovicu.com/posts/how-files-in-linux-work/",
"published_at": "2024-04-13T19:15:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbdc2289d",
"title": "Run mainline Linux on $5 dollar hardware",
"url": "https://popovicu.com/posts/run-mainline-linux-on-5-dollar-hardware/",
"published_at": "2024-04-06T18:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbe04b894",
"title": "<50 lines of code for a custom generative AI flow in Google Slides with Google Gemini",
"url": "https://popovicu.com/posts/50-lines-of-code-for-custom-generative-ai-in-google-slides/",
"published_at": "2024-01-28T04:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbe68d424",
"title": "Making a mini computer from scratch with Raspberry Pi and Linux",
"url": "https://popovicu.com/posts/making-a-mini-computer-from-scratch-with-raspberry-pi-and-linux/",
"published_at": "2023-12-10T01:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbecb2407",
"title": "Cross compiling C and C++ with Bazel",
"url": "https://popovicu.com/posts/cross-compiling-c-with-bazel/",
"published_at": "2023-10-17T00:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbf3dc495",
"title": "Take full control of Raspberry Pi! 10 MB mainline Linux image for embedded",
"url": "https://popovicu.com/posts/10-mb-raspberry-pi-mainline-linux-image-for-embedded/",
"published_at": "2023-10-15T16:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cbfee499d",
"title": "Building multiplatform Linux initramfs with one command in Bazel",
"url": "https://popovicu.com/posts/building-multiplatform-linux-initramfs-with-one-command-in-bazel/",
"published_at": "2023-10-12T23:39:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cc0aea053",
"title": "Build all software in one command with Bazel",
"url": "https://popovicu.com/posts/build-all-software-in-one-command-with-bazel/",
"published_at": "2023-10-11T18:15:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cc0e0a3e6",
"title": "RISC-V interrupts with a timer example",
"url": "https://popovicu.com/posts/risc-v-interrupts-with-timer-example/",
"published_at": "2023-10-09T21:20:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cc1491350",
"title": "Bare Metal Rust on RISC-V With Dynamic Memory",
"url": "https://popovicu.com/posts/bare-metal-rust-risc-v-with-dynamic-memory/",
"published_at": "2023-10-05T02:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cc1ddbdf4",
"title": "789 KB Linux Without MMU on RISC-V",
"url": "https://popovicu.com/posts/789-kb-linux-without-mmu-riscv/",
"published_at": "2023-10-04T17:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cc2be76d8",
"title": "Making a micro Linux distro",
"url": "https://popovicu.com/posts/making-a-micro-linux-distro/",
"published_at": "2023-09-22T02:30:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cc39d95bd",
"title": "RISC-V SBI and the full boot process",
"url": "https://popovicu.com/posts/risc-v-sbi-and-full-boot-process/",
"published_at": "2023-09-10T04:00:00+00:00"
},
{
"id": "01a087c6-d4b2-7035-884f-ae8cc40ddfcd",
"title": "Bare metal programming with RISC-V guide",
"url": "https://popovicu.com/posts/bare-metal-programming-risc-v/",
"published_at": "2023-09-09T19:05:00+00:00"
}
] posts Claim your blog