Ahem. Nerd alert.
RAMDoubler for MacOS functionality had nothing to do with MacOS’s pre-emptive multitasking capabilities (or lack thereof) and everything to do with the odd way in which RAM was allocated in Classic Mac OS. In fact, to be totally accurate, MacOS 8.6 and newer did have some limited pre-emptive abilities for Carbon applications, but still retaining the odd memory allocation scheme.
The odd memory allocation scheme was that it was manual. The developer of the software specified the memory range to be allocated in advance (overridable by the user) and the application took as much unfragmented memory as it could up to the maximum value specified by the developer. If it couldn’t get the minimum specified then it wouldn’t launch.
The upshot of this was that programs might have oodles of unused RAM but that RAM couldn’t be freed for use by something else. Additionally, you could have sufficient free memory, but fragmented, and the application still wouldn’t launch.
Another side effect of this was that virtual memory, as implemented by classic MacOS was spectacularly inefficient. And slow.
Connectix RAMDoubler on the Mac worked by a) defragmenting memory on the fly, b) allowing unused memory allocated for one program to be used by another and c) implementing an efficient virtual memory system. In other words, it just did what Apple should have implemented in the first place. RAM wasn’t doubled - but it wasn’t wasted either.
/nerd-mode