Memory protection.
It's not that preemptive multi-tasking is expensive, or hard. It's not. It's easy. It costs (canor can cost) costs, essentially, the same as cooperative multitasking. You have to save process state in both cases.
But what was holding back the older systems was their early reliance on systems without inherent memory protection, and those legacy'slegacies lasted long past the availability of hardware that actually had supported Memory Management Units (MMUMMUs).
Take the Mac, for example. It'sIts legacy was the 68000, which haddid not have direct MMU support.
It was not long before the Mac cameMacs started coming out with 68020 based machinesCPUs (which DIDdid have such support). But the OS has to run not just on the newnew hardware, but also on the old hardware, and the. The two systems are quite incompatible. Plus the actual impact on software design on those systems.
When you start from scratch, like (like OS/2,) then, yeayes, "it's easy"it's easier.
MacOS heritage held it back for a long, long time before they were able to replace it with with MacOS X via it's Carbon compatibility layer for the software in the new, Unix-ish environment.
The OS for the Apple IIGS was actually a "better" MacOS in somewayssome ways, notably in process management and memory management. MacOS 2.0.
Windows suffered similarly. Recall early Windows ran on the 8088. Not the 80286, the 8088. That legacy also burdened it for quite sometimesome time.
Code has momentum, choices have consequences. Be amazed they worked at all.