Emulators are hardware and/or software which replicate the operation of one computer or system on another.
This usually involves creating hardware/software which is capable of executing code which would ordinarily run on another computer system. For example, an emulator which is able to execute software written for a long obsolete mainframe server on a modern day smartphone, or an emulator which is capable of playing games originally designed for dedicated games consoles on a general purpose home computer. There are two main types of emulation, high and low level. High level emulation provides just enough framework for the software running within it to execute and behave as expected, whereas low level emulation is more in-depth and attempts to emulate the behavior of the hardware itself. High level emulation is often faster at the cost of a potential decrease in compatibility, but low level emulation is capable of duplicating any behaviour the original hardware could, and as such could run non-standard operating systems which high level emulation would not be designed to emulate. Architectures of the host system and that of the system being emulated can often be vastly different and the computational cost of emulation, particularly in software, can be very high.
One very important application for emulation is to preserve the legacy of computers or computerised machines far beyond the period they were intended to exist for, which enables historical record and preservation of the software written for them. Old computers are increasingly difficult to find, maintain and repair, which will eventually result in their extinction, and emulation can play a very strong role in preserving their part in the development of computers and the culture they exist within.