@brouhaha yep NuttX RTOS supports 2 kinds of apps:
(1) For Smaller MCUs (e.g. Arm32): NuttX will Statically Link the App Binary into the Kernel Image. This is called "NuttX Flat Mode", because the Kernel runs in the same Memory Space as the Apps.
(2) For Larger SoCs with MMU (e.g. 64-bit RISC-V SBC): NuttX will compile the App Binary into a ELF File, and bundle into an App Filesystem (ROM FS). At runtime, NuttX will fix up any Relocatable Symbols before executing the app. (It's a bit like "dynamic linking") This is called "NuttX Kernel Mode", because the Kernel and Apps run in different protected Memory Spaces.
I wrote about NuttX Flat Mode vs Kernel Mode here:
https://lupyuen.github.io/articles/rust5#nuttx-flat-mode-vs-kernel-mode
@lupyuen Thanks for explaining!
Professionally, I've developed embedded systems of both types, but I've only used a traditional RTOS on the non-MMU type.