I do not doubt that emulators can be useful for some things. Indeed, I use them myself when real hardware isn't available.
but emulators have limits -- invariably they are written to emulate certain things accurately (albeit imperfectly, because all programmers make mistakes) while other things deemed less important are emulated less accurately, or simply substituted with ideal mathematical constructs. lately, I've been running a PDP-11 emulator that doesn't even bother to simulate memory errors -- every byte of memory in the simulated system is error-free, and therefore parity error traps are never generated (and the parity trap handler in the operating system is therefore never exercised). you are not going to track down a cache coherency bug using an emulator that doesn't attempt to emulate cache *incoherency*. really, in order to know whether emulation is going to be useful, you need to consult an expert in the particular part of the system you're trying to emulate. this means, if you're looking for bugs in an operating system, you need to talk to people who write operating systems, because they are the experts on the hardware behaviors that actually matter. some things that an emulator faithfully reproduces probably aren't that important to an operating system, while other things the emulator doesn't bother to accurately simulate may be critically important. how can we tell the difference? if only we had someone with years of experience doing this type of work who could tell us whether emulation is adequate in this situation or not. -ken