Difference between Simulator and Emulator:As for their general English meanings, emulation is “the endeavor to equal or to excel another in qualities or actions“, while simulation is “to model, replicate, duplicate the behavior, appearance or properties of”. Simulation: Every aspect of the real system is only MODELLED by some code and/or mathematics. Simulation attempts to accurately reproduce the behaviour (or predict it) of the real system, but only APPROXIMATE it. A simulation is a model constructed of something else which reproduces some of that thing’s features and leaves others out – obviously you want to preserve the features relevant to your query, and leave out the irrelevant ones. Emulation: As opposed to simulation, it does not APPROXIMATE the behaviour of the real system, it COPIES the behaviour of the real system. An emulator may be software or hardware. E.g. you get these software EMULATORS for old game consoles like the Sega Genesis. That is an emulator because it COPIES the real genesis functionality so much so that you can run the original Genesis code in the emulator. A genesis simulator would not be able to run the original code, it would only APPROXIMATE its behaviour, producing similar results, depending on how good the models of the original system were. An emulator is a model of a system which will accept any valid input that that the emulated system would accept, and produce the same output or result. So your software is an emulator, only if it reproduces the behavior of the emulated system precisely. The Simulator tries to duplicate the behavior of the device. The Emulator tries to duplicate the inner workings of the device. You use an emulator when you care mostly about what a system does, and a simulator when you care about how it does it. An emulator is an alternative to the real system but a simulator is used to optimize, understand and estimate the real system. The key difference is that: With an emulator, you want the output exactly(precisely) match what the object you are emulating would produce. With a simulator, you want certain properties of your output to be similar to what the object would produce.