My favorite example of this is to look at all the hoops Wine has to jump through to get decent performance for locks. Apparently many developers writing for Windows default to using a locking primitive that can wait for a list of locks (specified by handles), and those locks can be shared between processes. That primitive frequently gets used even for waiting on a single lock confined within a single process, but Wine usually still has to go through the incredibly expensive emulation to handle the general case.