It's a spectrum, really. If you have something that runs in binary form on another system of its same processor architecture, and all you need to do is handle its system calls, that's more of a compatibility layer than emulation (though in a sense you are emulating the target OS, but not completely.) If, say, it uses a different ABI for some reason (say, it uses trap instructions instead of subroutine calls for system functions,) and you have to do more lower-level translation, you're inching closer to emulation territory. Then there's situations where, say, the application isn't running natively because it's on a different architecture, but the system is the same, like Mac OS X on Intel running PowerPC software through Rosetta - that's emulation of the code, but the system calls are copied straight across. At the far end is full system emulation, where the whole machine, OS, and application are running in emulation on an entirely different system. Suffice to say that "it's complicated."
If you're running it on a PDP-11/40, what it is is kickass.