In a way you never do with Linux. Because its design is generic. It’s meant to run programs for you. But when’s the last time it’s memory model got in your way?
mremap is super broken because it returns EINVAL if you try to use it on multiple VMAs but the kernel does not reliably merge compatible VMAs.
I have a simple test case involving switching to PROT_NONE and back where it fails to merge them, and then mremap will return EINVAL...