I don't want to write a thesis on this, but it's really not that easy. APIs have all sorts of implicit rules that are not obvious at first glance (and undocumented, hence 'implicit'), so even if you write what appears to be a valid drop-in replacement for every individual API function, you may end up with a garbage result. Throw in multi-threaded programming and event-driven GUI programming, and it becomes exponentially more complicated. It's not unusual for a GUI program to rely on a specific order of events received from the OS in order to calculate things like layout, positioning, font sizes, etc., or to make desired features like animation work properly. The events might -always- occur in the expected order on one OS and give all the right answers, but come in differently on another OS or a new release of the same OS. An emulation of one OS by another has to replicate a ton of behavior that you can't predict in advance just by reading the API specifications.