Espressif's ESP32-S31 is a microcontroller with an unusually Linux-friendly feature set: two 320 MHz RISC-V cores, 512 KB of on-chip SRAM, support for up to 64 MB of external PSRAM, gigabit Ethernet, USB 2.0 host support, two SD slots, and camera and display interfaces. That combination explains the Raspberry Pi comparison, but the chip remains much smaller and more constrained than a typical single-board computer.

The hardware block diagram clarifies the Raspberry Pi comparison by placing the two RISC-V cores, SRAM, PSRAM, Ethernet, USB, storage, camera, and display interfaces in one view.
The important architectural change is the memory-management unit (MMU), which translates virtual addresses using page tables and enables separate privilege levels. The S31 implements RISC-V's Sv32 two-level paging scheme plus machine, supervisor, and user modes. In plain terms, that lets Linux run in supervisor mode, applications run separately in user mode, and lower-level firmware retain machine-level control.

The stack illustrates how user processes, the Linux kernel, and OpenSBI firmware use separate privilege modes while sharing the Sv32 address-translation path.

The comparison pinpoints the architectural change behind Linux support: separate page-table levels replace the single memory map used by earlier Espressif designs.
Espressif's Linux board-support package (BSP)—the hardware-specific kernel, bootloader, device-tree, and root-filesystem pieces—packages those components into a flash image. Its repository says the ESP32-S31 branch is a developer preview intended for evaluation and is not recommended for production. A separate community port reports Linux 6.18 booting natively, with a stable Buildroot root filesystem and console but experimental support for many peripherals, including Ethernet, USB, wireless, and storage.
The central trade-off is memory. The article reports 16 MB or 32 MB in-package PSRAM variants and a 64 MB ceiling, versus 512 MB in the Milk-V Duo S example. Because PSRAM is scarce, the community port executes Linux's text from flash and keeps writable state in RAM. The result is a usable terminal or embedded experiment—not enough headroom for a conventional desktop, and not yet dependable enough for production hardware.