The purpose in any OS (as they all have a kernel).
The Kernel loads all the relevant drivers and hardware for the system. That’s the basic construct of the kernel is to be the “middleman” between the interface(s) and the rest of the computer.
The Kernel’s job, essentially, is to pass the information to and from the relevant needed components whether it be Sound, RAM, HDD, CPU, or otherwise.
It’s what get’s loaded to RAM as the system is booting.
The way linux handles devices is during load up of the kernel it’s detecting the systems components and making the relevant connections between those devices on how to interpret and work with those items.
Once the OS is loaded, it already knows about the rest of the system because it was detected at load out. Those connections (in the linux world) are created as nodes or devices in /proc, /sys, and/or /dev. These items are linked (in a different manner but similar) to as “files” as everything in a *nix system is related to as a file object.
Windows operates similarly. Except everything is done, usually, from the registry and RAM. The “devices” and “registers” are loaded into the Registry. In the case of SYSPREP, it removes all the non-relevant and possibly changing aspects of the registry and places it in a point where the first boot loads all the devices and items into the Registry during the bootup process.
This is where Windows and Linux varies (I think) in the most dramatic of ways.
While a linux system can have the hdd moved around from one system to a another, and typically still operate with little to no issues, a Windows system cannot do this because the components recognized vs. the components actually available may not match.
Having the drivers embedded in a Windows system can help, but won’t work 100% of the time. This is kind of the point behind sysprep though. Clean out the registry and system so it can readily receive new item.
Hopefully this will help clarify things.
Am I 100% correct? Probably not, this is just a means to express the simple differences.