...
It's
beyond my expertise, but my assumption about emulators was
always that the guts don't really change across (modern) platforms -
it's mainly the graphics layer that will be tightly coupled to the OS.
The PCB layout software that I use (called, oddly enough, "PCB") runs
on UNIX platforms with X11. Some time ago, DJ Delorie (of DJGPP fame,
also has a project featured on the front cover of this month's Circuit
Cellar Ink) did a huge amount of work to decouple the innards of PCB
from the GUI. He calls the result "HID" (Human Interface Device) and it
has been used to create instances of PCB with a Motif GUI, a GTK+ GUI,
and someone (Der Mouse, is he here?) is even working on a raw X11 GUI.
That sort of abstraction is nontrivial to achieve, but it is possible.
Have a look at Qt. Have a look at wxWidgets (which is what I use).
There is no need to write separate interfaces; in my experience, 98% of
the code is the same across windows and osx (I haven't attempted to get
a linux port running)
I do agree that reengineering the model/view abstraction after the fact
is a lot of work, but that error is easily avoided.