Firmware is the low-level code that directly controls hardware. It sits between the hardware and higher-level software. Embedded software includes firmware but extends to more complex logic and applications running within a device’s constrained environment (such as an RTOS or embedded Linux). Regular software, by contrast, runs on general-purpose systems like PCs or smartphones, independent of specific hardware components.