Virtual machines

Last updates: Mon Aug 1 15:43:28 2005 ... Mon Mar 22 18:40:06 2021                Valid HTML 4.0! Valid CSS!

Quick start

If you are just looking for a list of available virtual machines, you can find it later in this document.

Introduction

The July 2004 issue of ACM Queue contained two interesting articles on virtual machines, and gave me an incentive for looking deeper into the topic. I was both surprised and pleased to find that there are several different implementations of virtual machines, and they are good enough to run operating systems and compilers. Indeed, with the considerable advances in microprocessor technology, a virtual machine for a historical architecture runs several times faster on a modern desktop workstation than the original hardware ever did. This speed can make it practical to use virtual machines for software development and testing, and for running old software that has not been, or cannot be, ported to newer platforms.

I have made extensive use of one of these virtual machines for revisiting an important platform in the development of the Internet, the DEC PDP-10, and I have written about it in an detailed article, The design of TeX and METAFONT: A retrospective, presented as the keynote address at the Practical TeX 2005 conference in Chapel Hill, NC, USA, 14--17 June 2005, and given again at the TUG 2005 conference in Wuhan, China P.R., August 23--25, 2005.

It is not just for historical computers that virtual machines have been written: all modern processors are extensively emulated with virtual machines before a design is committed to silicon chips. Designing and producing a successful new CPU today generally requires an investment of hundreds of millions to billions of dollars. A workable virtual-machine simulator can be written by an expert programmer in a few tens of thousands of lines of code in a few months. What makes a project of this size possible for a single programmer, or a small team of programmers, is the regularity of most computer instruction sets. Each instruction can usually be simulated independently of others, and the common work of instruction decoding and effective address generation can be done once and then shared for almost all instructions. In addition, hardware reference manuals usually give a fairly precise description of what each instruction does, although as the authors of the ACM Queue articles point out, there are sometimes nasty undocumented model-dependent subtleties that must be handled.

Simulators for new architectures have usually not been made available outside the chip-designer's development labs. One notable exception to this, however, is the Hewlett-Packard Native User Environment (NUE) simulator, which provides access to the IA-64 (Itanium, Itanium-2) architecture via software running on GNU/Linux on IA-32. Other exceptions include the commercial VMware IA-32 emulator, which supports multiple operating systems on IA-32 and AMD64 hardware, and the apparently no-long-sold SoftPC emulator from Insignia Solutions.

Virtual machines may be the wave of the future, as suggested in this comprehensive recent book:

@String{pub-MORGAN-KAUFMANN     = "Morgan Kaufmann Publishers"}
@String{pub-MORGAN-KAUFMANN:adrsf = "San Francisco, CA, USA"}

@Book{Smith:2005:VMV,
  author =       "James E. (James Edward) Smith and Ravi Nair",
  title =        "Virtual machines: versatile platforms for systems and
                 processes",
  publisher =    pub-MORGAN-KAUFMANN,
  address =      pub-MORGAN-KAUFMANN:adrsf,
  pages =        "xxii + 638",
  year =         "2005",
  ISBN =         "1-55860-910-5",
  ISBN-13 =      "978-1-55860-910-5",
  LCCN =         "QA76.9.V5 S54 2005",
  bibdate =      "Thu Jul 21 08:04:00 2005",
  bibsource =    "z3950.loc.gov:7090/Voyager",
  URL =          "http://books.elsevier.com/us/bookscat/search/details.asp?country=United+States&community=mk&imprint=Morgan+Kaufmann&isbn=1558609105",
  acknowledgement = ack-nhfb,
  subject =      "Virtual computer systems; Computer architecture;
                 System design",
}

Indeed, the entire Java programming language is defined in terms of an underlying virtual machine that is normally provided in software, but has also been implemented in hardware in the Sun PicoJava chips.

More recently, Microsoft began the .NET Framework, which provides a virtual-machine layer that facilitates easy communication between programs written in several different programming languages. The Java-like C# language is compiled into code for the .NET virtual machine.

The free-software and open-source community responded to .NET by launching the Mono Project and the DotGNU Project to reimplement that environment.

I maintain an extensive bibliography of publications about virtual machines here. Included in its entries are all of the papers from a special issue of the Intel Technology Journal on hardware support for virtualization.

At my academic department, since about 2004, we maintain a growing collection of virtual machines, some running on VMware/ESX on the bare hardware of a pool of multiprocessor servers, and others running on QEMU KVM + VirtManager on my HP Z440 desktop workstation (16 cores and 64GB DDR-4 RAM).

It has been a great surprise, and pleasure, that the overhead of almost 70 virtual machines on that workstation is rarely noticeable, and that even with simultaneous software builds, my desktop remains reponsive and eminently usable.

Our collection of about 500 virtual machines makes a superb software development and testing environment, as well as giving us the opportunity to learn about the software offerings, and management practices, of many different operating systems from the BSD, GNU/Hurd, GNU/Linux, Minix, and Solaris UNIX-like families, as well as Bell Labs Plan 9, and Microsoft Windows 10 and ReactOS, a clean-room reimplementation of Windows.

Regrettably, the licensing requirements of Apple Mac OS X (renamed macOS with version 10.12 in 2016) do not permit running that operating system on hardware not purchased from Apple; we support a few dozen Mac OS X systems running on Apple laptops, servers, and workstations. The reverse is not true: I legally run the GNU/Linux Ubuntu system on an Apple deskside system.

One important application of the test laboratory is the porting and testing of TeX Live 2016 to 104 different operating systems.

Why might you want a virtual machine?

There are several good reasons why a virtual-machine environment may be preferable to a physical machine:

Three book series on architecture

If you are interested in using a virtual machine to help you learn about computer architecture, there are several important books on current and historical architectures that you should know about. They are classics in the field, and deserve to be on the bookshelf of every programmer:

@String{pub-AW                  = "Ad{\-d}i{\-s}on-Wes{\-l}ey"}
@String{pub-AW:adr              = "Reading, MA, USA"}

@String{pub-MORGAN-KAUFMANN     = "Morgan Kaufmann Publishers"}
@String{pub-MORGAN-KAUFMANN:adr = "Los Altos, CA 94022, USA"}
@String{pub-MORGAN-KAUFMANN:adrnew = "2929 Campus Drive, Suite 260, San
                                  Mateo, CA 94403, USA"}

@String{pub-MORGAN-KAUFMANN-ELSEVIER = "Morgan Kaufmann\slash Elsevier"}
@String{pub-MORGAN-KAUFMANN-ELSEVIER:adr = "Waltham, MA, USA"}

@Book{Blaauw:1997:CAC,
  author =       "Gerrit A. Blaauw and Frederick P. {Brooks, Jr.}",
  title =        "Computer architecture: concepts and evolution",
  publisher =    pub-AW,
  address =      pub-AW:adr,
  pages =        "xlviii + 1213",
  year =         "1997",
  ISBN =         "0-201-10557-8",
  ISBN-13 =      "978-0-201-10557-5",
  LCCN =         "QA76.9.A73 B57 1997",
  bibdate =      "Wed Jul 09 17:22:33 1997",
  price =        "US\$59.95",
  acknowledgement = ack-nhfb,
}

@Book{Hennessy:1990:CAQ,
  author =       "John L. Hennessy and David A. Patterson",
  title =        "Computer Architecture -- a Quantitative Approach",
  publisher =    pub-MORGAN-KAUFMANN,
  address =      pub-MORGAN-KAUFMANN:adr,
  pages =        "xxviii + 594",
  year =         "1990",
  ISBN =         "1-55860-069-8",
  ISBN-13 =      "978-1-55860-069-0",
  LCCN =         "QA76.9.A73 P377 1990",
  bibdate =      "Mon Jan 31 08:47:46 1994",
  bibsource =    "http://www.math.utah.edu/pub/tex/bib/master.bib",
  acknowledgement = ack-nhfb,
}

@Book{Hennessy:1994:COD,
  author =       "John L. Hennessy and David A. Patterson",
  title =        "Computer Organization and Design --- The
                 Hardware\slash Software Interface",
  publisher =    pub-MORGAN-KAUFMANN,
  address =      pub-MORGAN-KAUFMANN:adrnew,
  pages =        "xxiv + 648",
  year =         "1994",
  ISBN =         "1-55860-281-X",
  ISBN-13 =      "978-1-55860-281-6",
  LCCN =         "QA76.9 .C643 P37 1994",
  bibdate =      "Wed Feb 2 00:08:32 1994",
  bibsource =    "http://www.math.utah.edu/pub/tex/bib/master.bib",
  price =        "US\$74.75",
  acknowledgement = ack-nhfb,
}

@Book{Hennessy:1996:CAQ,
  author =       "John L. Hennessy and David A. Patterson",
  title =        "Computer Architecture --- a Quantitative Approach",
  publisher =    pub-MORGAN-KAUFMANN,
  address =      pub-MORGAN-KAUFMANN:adr,
  edition =      "Second",
  pages =        "xxiii + 760 + A-77 + B-47 + C-26 + D-26 + E-13 + R-16
                 + I-14",
  year =         "1996",
  ISBN =         "1-55860-329-8",
  ISBN-13 =      "978-1-55860-329-5",
  LCCN =         "QA76.9.A73P377 1995",
  bibdate =      "Mon May 20 10:01:59 2002",
  bibsource =    "http://www.math.utah.edu/pub/tex/bib/master.bib",
  price =        "US\$69.95",
  acknowledgement = ack-nhfb,
}

@Book{Hennessy:2003:CAQ,
  author =       "John L. Hennessy and David A. Patterson",
  title =        "Computer Architecture --- a Quantitative Approach",
  publisher =    pub-MORGAN-KAUFMANN,
  address =      pub-MORGAN-KAUFMANN:adr,
  edition =      "Third",
  pages =        "xxi + 883 + A-87 + B-42 + C-1 + D-1 + E-1 + F-1 + G-1
                 + H-1 + I-1 + R-22 + I-44",
  year =         "2003",
  ISBN =         "1-55860-596-7",
  ISBN-13 =      "978-1-55860-596-1",
  LCCN =         "QA76.9.A73 P377 2003",
  bibdate =      "Thu Sep 12 15:26:03 2002",
  bibsource =    "http://www.math.utah.edu/pub/tex/bib/master.bib",
  price =        "US\$89.95",
  URL =          "http://www.mkp.com/books_catalog/catalog.asp?ISBN=1-55860-596-7;
                 http://www.mkp.com/CA3",
  acknowledgement = ack-nhfb,
}

@Book{Patterson:2004:COH,
  author =       "David A. Patterson and John L. Hennessy",
  title =        "Computer Organization: The Hardware\slash Software
                 Interface",
  publisher =    pub-MORGAN-KAUFMANN,
  address =      pub-MORGAN-KAUFMANN:adrnew,
  edition =      "Third",
  pages =        "xvii + 621",
  year =         "2004",
  ISBN =         "1-55860-604-1",
  ISBN-13 =      "978-1-55860-604-3",
  LCCN =         "QA76.9.C643 H46 2004",
  bibdate =      "Mon Nov 15 16:01:50 2004",
  price =        "US\$64.95",
  acknowledgement = ack-nhfb,
}

@Book{Hennessy:2006:CAQ,
  author =       "John L. Hennessy and David A. Patterson and Andrea C.
                 Arpaci-Dusseau and others",
  title =        "Computer Architecture: a Quantitative Approach",
  publisher =    pub-MORGAN-KAUFMANN,
  address =      pub-MORGAN-KAUFMANN:adrbo,
  edition =      "Fourth",
  pages =        "xxvii + 423 + 349",
  year =         "2006",
  ISBN =         "0-12-370490-1 (paperback), 0-08-047502-7 (e-book),
                 0-12-373590-4",
  ISBN-13 =      "978-0-12-370490-0 (paperback), 978-0-08-047502-8
                 (e-book), 978-0-12-373590-4",
  LCCN =         "QA76.9.A73 P377 2006",
  bibdate =      "Sat Sep 2 10:10:32 MDT 2006",
  bibsource =    "http://www.math.utah.edu/pub/tex/bib/master.bib;
                 z3950.loc.gov:7090/Voyager",
  URL =          "http://www.loc.gov/catdir/enhancements/fy0665/2006024358-d.html;
                 http://www.loc.gov/catdir/toc/ecip0618/2006024358.html",
  acknowledgement = ack-nhfb,
  subject =      "Computer architecture",
}

@Book{Patterson:2008:COD,
  author =       "David A. Patterson and John L. Hennessy",
  title =        "Computer organization and design: the hardware\slash
                 software interface",
  publisher =    pub-ELSEVIER-MORGAN-KAUFMANN,
  address =      pub-ELSEVIER-MORGAN-KAUFMANN:adr,
  edition =      "Fourth",
  pages =        "xxv + 703 + A-77 + B-83 + I-26",
  year =         "2008",
  ISBN =         "0-12-374493-8",
  ISBN-13 =      "978-0-12-374493-7",
  LCCN =         "QA76.9.C643",
  bibdate =      "Mon Nov 17 13:31:21 MST 2008",
  bibsource =    "http://www.math.utah.edu/pub/tex/bib/master.bib;
                 z3950.gbv.de:20011/gvk",
  acknowledgement = ack-nhfb,
  subject =      "computer organization; computer engineering; computer
                 interfaces",
}

@Book{Hennessy:2012:CAQ,
  author =       "John L. Hennessy and David A. Patterson",
  title =        "Computer Architecture: a Quantitative Approach",
  publisher =    pub-MORGAN-KAUFMANN-ELSEVIER,
  address =      pub-MORGAN-KAUFMANN-ELSEVIER:adr,
  edition =      "Fifth",
  pages =        "xxvii + 493 + 325",
  year =         "2012",
  ISBN =         "0-12-383872-X (paperback)",
  ISBN-13 =      "978-0-12-383872-8 (paperback)",
  LCCN =         "QA76.9.A73 P377 2012",
  bibdate =      "Wed Feb 15 07:46:38 MST 2012",
  bibsource =    "http://www.math.utah.edu/pub/tex/bib/master.bib;
                 z3950.loc.gov:7090/Voyager",
  note =         "With contributions by Krste Asanovi{\'c}, Jason D.
                 Kabos, Robert P. Colwell, Thomas M. Conte, Jos{\'e}
                 Duato, Diana Franklin, David Goldberg, Norman P.
                 Jouppi, Sheng Li, Naveen Muralimanohar, Gregory D.
                 Peterson, Timothy M. Pinkston, Parthasarathy
                 Ranganthan, David A. Wood, and Amr Zaky.",
  acknowledgement = ack-nhfb,
  subject =      "Computer architecture",
  tableofcontents = "1: Fundamentals of Quantitative Design and Analysis
                 \\
                 2: Memory Hierarchy Design \\
                 3: Instruction-Level Parallelism and Its Exploitation
                 \\
                 4: Data-Level Parallelism in Vector, SIMD, and GPU
                 Architectures \\
                 5: Thread-Level Parallelism \\
                 6: Warehouse-Scale Computers to Exploit Request-Level
                 and Data-Level Parallelism \\
                 A: Instruction Set Principles \\
                 B: Review of Memory Hierarchy \\
                 C: Pipelining: Basic and Intermediate Concepts \\
                 D: Storage Systems \\
                 E: Embedded Systems \\
                 F: Interconnection Networks \\
                 G: Vector Processors in More Depth \\
                 H: Hardware and Software for VLIW and EPIC \\
                 I: Large-Scale Multiprocessors and Scientific
                 Applications \\
                 J: Computer Arithmetic \\
                 K: Survey of Instruction Set Architectures \\
                 L: Historical Perspective and References \\
                 References \\
                 Index",
}

@Book{Patterson:2012:COD,
  author =       "David A. Patterson and John L. Hennessy",
  title =        "Computer organization and design: the hardware\slash
                 software interface",
  publisher =    pub-MORGAN-KAUFMANN-ELSEVIER,
  address =      pub-MORGAN-KAUFMANN-ELSEVIER:adr,
  edition =      "Fourth (revised)",
  pages =        "xxv + 703",
  year =         "2012",
  ISBN =         "0-12-374750-3 (paperback)",
  ISBN-13 =      "978-0-12-374750-1 (paperback)",
  LCCN =         "QA76.9.C643 H46 2012",
  bibdate =      "Wed Feb 15 07:46:17 MST 2012",
  bibsource =    "http://www.math.utah.edu/pub/tex/bib/master.bib;
                 z3950.loc.gov:7090/Voyager",
  note =         "With contributions by Perry Alexander, Peter J.
                 Ashenden, Javier Bruguera, Jichuan Chang, Matthew
                 Farrens, David Kaeli, Nicole Kaiyan, David Kirk, James
                 R. Larus, Jacob Leverich, Kevin Lim, John Nickolls,
                 John Oliver, Milos Prvulovic, and Parta Ranganthan.",
  series =       "The Morgan Kaufmann series in computer architecture
                 and design",
  abstract =     "Presents the fundamentals of hardware technologies,
                 assembly language, computer arithmetic, pipelining,
                 memory hierarchies and I/O.",
  acknowledgement = ack-nhfb,
  subject =      "Computer organization; Computer engineering; Computer
                 interfaces",
  tableofcontents = "1: Computer Abstractions and Technology \\
                 2: Instructions: Language of the Computer \\
                 3: Arithmetic for Computers \\
                 4: The Processor \\
                 5: Large and Fast: Exploiting Memory Hierarchy \\
                 6: Storage and Other I/O Topics \\
                 7: Multicores, Multiprocessors, and Clusters \\
                 A: Graphics and Computing GPUs \\
                 B: Assemblers, Linkes, and the SPIM Simulator \\
                 C: The Basics of Logic Design \\
                 D: Mapping Control to Hardware \\
                 E: A Survey of RISC Architectures for Desktop, Server,
                 and Embedded Computers",
}

The first of those covers architectures from the early 1800s (Charles Babbage) up to about 1980. The editions of the others cover from about 1980 to the present. The earlier editions of those books are quite different from one another, and cover different modern architectures, so they all are of interest.

Ancient filesystems

With virtual machines, filesystems are normally supplied as a single large file in the host operating system, and most virtual-machine implementations allow those files to have holes, so that they can start out initially small, then grow to some maximum size specified when the virtual machine is created. However, the internals of those files are usually unknown to the host. The Ancient Unix File Systems site provides tools that allow host access to those internals for numerous early variants of Unix filesystems as far back as Bell Labs Unix version 1 from the early 1970s. That greatly facilitates getting files into, and out of, virtual machines for operating systems that predate network connections.

Many older operating systems support serial terminal connections, but suffer from tiny input buffers that are easily overflowed by fast type-in, or by cut-and-paste of text. The solution for some of them is the venerable Kermit system that provides reliable terminal and network connections with flow control, character set translation, and file transfer.

Available virtual machines

For more information on most of the processors emulated by these virtual machines, consult articles in the Wikipedia free online encyclopaedia. That compendium also contains a useful article comparing virtual machines.

Here is a mini table of contents for the virtual-machine sections below:

Acorn System/1 emulator

This emulates the MOS Technologies MPS6502 8-bit microprocessor, introduced in 1975, and incorporated in the Acorn System/1 in 1979.

AlphaVM

AlphaVM is a virtual machine that:

Amiga Emulator (UAE)

From its Web page: ``UAE is a mostly complete software emulation of the hardware of the Commodore Amiga 500/1000/2000. A Commodore Amiga, for those who don't know, is a 16/32 bit computer system based on the Motorola 680x0 CPU and a few specially designed custom chips that provide very good graphics and sound capabilities. Its first incarnation, the A1000, appeared in 1985, followed by the highly successful A500 and A2000 models.''

There is a Wikipedia article here .

Apple Boot Camp

Boot Camp provides a way to run Windows XP on Apple Intel-based Macintoshes (2005--). It is not really a virtual machine, because it requires rebooting to switch betweeen operating systems.

Apple IIgs

The Apple IIgs desktop computer, introduced in 1986, used the Western Digital 65816 16-bit microprocessor. The virtual machine is written in Microsoft ActiveX, and requires Microsoft Windows and the Internet Explorer Web browser. There are more than 1100 disk images available at the distribution site.

AppStream

From its Web site: ``Thinstall is an Application Virtualization Platform that enables complex software to be delivered as self-contained EXE files which can run instantly with zero installation from any data source. The core of Thinstall VS is the Virtual Operating System, a small light-weight component which is embedded with each `Thinstalled' application.''

ARAnyM

From its Web site: ``ARAnyM is a software virtual machine (similar to VirtualBox or Bochs) designed and developed for running 32-bit Atari ST/TT/Falcon operating systems (TOS, FreeMiNT, MagiC and Linux-m68k) and TOS/GEM applications on any kind of hardware - be it an IBM clone (read it as "PC" :-), an Apple, an Unix server, a graphics workstation or even a portable computer.''

Ardence

From its Web site: ``Using Ardence's software-streaming technology, any x86-based computer --- desktop, server, or device --- can be provisioned, or re-provisioned, with a Microsoft Windows OS or Linux OS from bare metal to production in minutes.''

Atari ST

There are many emulators for this once-popular system:

AXPbox (Alpha)

From its Web site at https://github.com/lenticularis39/axpbox: ``AXPbox is a fork of the discontinued es40 emulator. It could theoretically used for running any operating system that runs on the OpenVMS or Tru64 PALcode (e.g. OpenVMS, Tru64 UNIX, Linux, NetBSD), however as of now only OpenVMS and some versions of NetBSD can be installed.'''

Basilisk II: An Open Source 68K Macintosh Emulator

From its Web page: ``... it allows you to run 68k MacOS software on your computer, even if you are using a different operating system. However, you still need a copy of MacOS and a Macintosh ROM image to use Basilisk II.''

AT&T 3B1

This is an emulator that boots and runs AT&T on the 3B1 , also known as the PC7300 or Unix PC, which is based on the Motorola MC68010 CPU, and was marketed in the mid 1980s. According to its Web site, the emulator is still in early stages (spring 2014), and the C compiler does not yet run successfully.

AT&T 3B2/400

This project adds yet another virtual machine to the SIMH system, described at the project Web site as a ``small, multi-user UNIX computer developed by AT&T in 1985. It was part of the larger 3B family of UNIX computers based on the Western Electric WE32000 and WE32100 series of CPUs and peripherals. What makes the 3B2 historically interesting was its use as the primary porting platform for AT&T UNIX System V Release 3.''

Bliss Alpha Emulator Project

From its Web page: ``Bliss is a complete Alpha AXP simulation toolkit. Support for Linux/Alpha and OSF/Alpha binary formats ... Free and open licensing.''

Bochs IA-32 Emulator Project

From its Web page: ``Bochs is a highly portable open source IA-32 (x86) PC emulator written in C++, that runs on most popular platforms. It includes emulation of the Intel x86 CPU, common I/O devices, and a custom BIOS. Currently, Bochs can be compiled to emulate a 386, 486, Pentium, Pentium Pro or AMD64 CPU, including optional MMX, SSE, SSE2 and 3DNow! instructions. Bochs is capable of running most Operating Systems inside the emulation including Linux, Windows® 95, DOS, and Windows® NT 4.''

In Fall 2006, the FreeDOS Project released an open-source reimplementation of MS-DOS/PC-DOS, with a recommendation to run it on an IA-32 virtual machine. Bochs is a suitable candidate.

Burroughs 5500 MCP XIII

Source code for Burroughs 5500 MCP XIII operating system and associated compilers is available here with associated files at the Retro Burroughs B5500 Mark XIII System Software Web site. The software is available under a hobbyist license from Unisys.

CDC 6600 emulator

The CDC 6400, 6600, and 7600 were high-end mainframe computers of the late 1960s and early 1970s, and I spent three-and-a-half pleasant years working on a CDC 6400 with the SCOPE and KRONOS operating systems. One of the chief architects of those machines was the late Seymour Cray, who went on to found Cray Research in 1972 and produce a succession of Cray supercomputers, the first of which shipped in 1976.

Historical note: About 1978, then-graduate-student Joseph Fisher and his advisor Ralph Grisman built a CDC-6600 emulator called PUMA (Processing Unit with Microprogrammed Arithmetic) at the Courant Institute in New York City. This experience led Fisher to invent the idea of very-long-instruction-word (VLIW) processors, first implemented in the Multiflow Trace supercomputer which came out of Fisher's research group at Yale University. That work later led to the EPIC (Explicitly Parallel Instruction-set Computer) architecture co-designed by Intel and Hewlett-Packard, and implemented in the Intel IA-64 (Itanium and Itanium-2) processors.

The DtCYBER project at http://members.iinet.net.au/~tom-hunter/ offers a simulator for several CDC models, but the operating system and associated software, such as Fortran compilers, must come from another source.

CHARON-AXP (Alpha)

This is a commercial emulator of the Alpha architecture. From its Web page: ``The CHARON-AXP family of products are Alpha computer replacement systems, running as a software package that creates a hardware abstraction layer (HAL) on industry standard servers. The HAL provides to Alpha software an exact copy of an Alpha hardware system. This permits to run unmodified OpenVMS/Alpha, its layered software and the user applications. The compatibility is so exact that we run the Alpha CPU verification software and some of the original Alpha hardware diagnostics during the design.''

The vendor also offers feature- and performance-restricted versions for evaluation and personal use.

CHARON-TB (PDP-11)

This is a commercial emulator of the PDP-11 architecture. From its Web page: ``CHARON-TB is a software application running on 32-bit Windows and providing a hardware abstraction layer for both VAX and PDP-11. The hardware abstraction allows the unmodified binary VAX or PDP-11 code --- the operating system and the applications --- to run as before. CHARON-TB directly executes binary VAX or PDP-11 instructions and does not require the source code or a code conversion process.''.

The vendor also offers feature- and performance-restricted versions for evaluation and personal use.

CHARON-VAX

This is a commercial emulator of the VAX architecture. From its Web page: ``The CHARON-VAX family of products are VAX replacement systems, running as a software application on industry standard systems. They present to the VAX software the exact copy of a VAX hardware system, and will run unmodified VAX operating systems, layered software and applications. The compatibility is so exact that we run the original VAX hardware diagnostics during the design, and the CHARON products were certified using the original AXE hardware verification test suite of Digital Equipment Corporation's VAX engineering group.''

The vendor also offers feature- and performance-restricted versions for evaluation and personal use.

CrayCore

From its Web page: ``A simulator for the CPU used in the CRAY YMP-EL 92, intended to become a full-scale CRAY emulator.''

Data General Nova

This site includes Web access to boot and run a Nova emulator, complete with blinking control panel lights, and Teletype keyboard.

DEC Alpha emulation

The Web site at http://www.avanthar.com/healyzh/decemulation/Alpha.html contains links to several projects for the emulation of the Alpha processor.

DEC PDP-8 emulator

This is a 2002 research paper that describes a DEC PDP-8 emulator that runs on MS-DOS.

DEC PDP-10 KLH10 simulator

This excellent simulator is capable of running TOPS-20 and possibly others of the dozen or so operating systems that ran on the PDP-10. Importantly, when the O/S is idle, the KLH10 virtual machine is too, so it only consumes CPU time when you are actually using the O/S.

Once the virtual machine is running (ours is started during the boot process on the underlying GNU/Linux AMD64-based Sun V40z host), it is just another Internet host that you can telnet to and login on. There is no secure-shell implementation for TOPS-20, since the ssh technology came years after PDP-10 manufacturing ceased, so we run TOPS-20 on a more secure internal network that is not accessible outside our local network.

DEC PDP-10 running MIT ITS

In the 1970s and 1980s, MIT ran their own Incompatible Timesharing System (ITS) on one or more DEC PDP-10 computers. The title link leads to a simulator for the ITS environment.

DEC Pro 350 simulator

From its Web page: ``Xhomer is a machine emulator for the Digital Equipment Corporation (DEC) Pro 350 computer, a PDP-11-based machine that was sold in the early to mid-'80's. Xhomer is based on the PDP-11 CPU core from the SIMH simulator, and is written entirely in C.''

Denali project

From its Web page: ``The Denali project seeks to enable an array of new networking and distributed middleware applications by designing and implementing lightweight protection domains, focusing in particular on the use of lightweight virtual machines and monitors. A virtual machine monitor (VMM) is a thin virtualization layer between hardware and `guest' operating systems, enabling hosts to safely execute untrusted applications and guest OS's inside a VM.''

DMD 5620

From the Web site: ``The DMD 5620 was the commercial version of the Blit terminal, which came out of earlier research done by Rob Pike and Bart Locanthi Jr. at AT&T Bell Labs. It was a portrait display, bitmapped graphics terminal with a keyboard and a mouse as a pointing device.''. The site offers source and binary distributions of the terminal emulator, and describes in history and influences.

Emulators International Personal Alpha

This Alpha emulator product is related to the CHARON-AXP, is limited to 32-bit addressing, and is available only in a version for Microsoft Windows XP on Intel IA-32.

ES40 emulator project

This emulator of the DEC Alpha processor was stopped in 2008, but remains available in source form . Development continues in the FreeAXP project.

FreeAXP --- A Free Virtual Alpha

FreeAXP is a free Avanti virtual Alpha technology demonstrator. It provides a virtual AlphaServer 400 equipped with 1 CPU, 128MB memory, 7 disk drives, two NICs, and two virtual serial ports. It is hosted on Windows 32-bit* and 64-bit systems and includes an unrestricted usage license.

FreeVMS

The FreeVMS project aims to implement a free version of the DEC/Compaq/HP VMS operating system that originally ran on DEC VAX and DEC Alpha processors. While this is not a virtual-machine project, like other entries in this document, it is nevertheless of interest because it separates the operating system from the underlying hardware, and thus, virtualizes it.

Frodo Commodore 64 emulator

The Commodore 64 was an early personal computer introduced in 1982, and based on the MOS Technology 6510 8-bit microprocessor.

Gameboy emulators

Nine implementations of the Ninentdo Gameboy (8MHz Z80 CPU).

GXemul for MIPS64

From its Web page: ``The best supported guest operating system right now is NetBSD running on an emulated DECstation 5000/200 (`3MAX'), but OpenBSD, Linux, Ultrix, and even obscure things such as Sprite can run in GXemul.''

Hercules simulator for IBM S/370, ESA/390, and z/Architecture

From its Web page: ``Hercules is an open source software implementation of the mainframe System/370 and ESA/390 architectures, in addition to the new 64-bit z/Architecture. Hercules runs under Linux, Windows 98, Windows NT, Windows 2000, Windows XP, and Mac OS X 10.2 and later.''

Hewlett-Packard Native User Environment (NUE) for IA-64

The NUE distribution includes a complete GNU/Linux IA-64 system that runs on the widely available GNU/Linux IA-32 platform.

Honeywell H6180

This is the machine family that ran the Multics operating system (1964--2000). Multics source code is available at http://web.mit.edu/multics-history/source/Multics_Internet_Server/Multics_sources.html and there is a Multics Web site at http://www.multicians.org/multics.html. Manuals for the GE 600 and Honeywell 6000 systems can be found at http://www.bitsavers.org/pdf/ge/ and http://www.bitsavers.org/pdf/honeywell/series6000/.

Java HotSpot virtual machine

Just-in-time compiler and virtual machine for Java.

Kronos Research Group 32-bit workstation

The first Russian 32-bit workstation.

MAME (Multiple Arcade Machine Emulator)

Kernel-based Virtual Machine (KVM)

KVM is supported by GNU/Linux kernel versions 2.6.16 (fall 2006) and later. It is integrated with the O/S, and requires very recent hardware to support its operations. KVM is a slight modification of the QEMU virtual machine.

From its Web page: ``You will need an x86 machine running a recent Linux kernel on an Intel processor with VT (virtualization technology) extensions, or an AMD processor with SVM extensions (also called AMD-V).''.

KX10 PDP-10 emulator

[No documentation or description available, but code uses GNU autoconfiguration. There are about 14,700 lines of C code in the distribution in early 2018.]

Mac-on-Linux

From its Web page: ``Mac-on-Linux is a linux/ppc program which makes it possible to run Mac OS in parallel with Linux.'' [that is, GNU/Linux on PowerPC].

MESS (Multiple Emulator Super System)

In early 2011, this emulator supports more than 450 (yes, that many) historical processor models. MESS is a set of patches to MAME, which must be unpacked first before unpacking MESS in the same directory tree.

Microsoft SoftGrid

From its Web page: ``Microsoft SoftGrid application virtualization and streaming. Turn any Windows application into a dynamic centrally managed service.''

MiSTer

This is a field-programmable gate array (FPGA) project that reimplements a large number of classical computers, including the EDSAC, DEC PDP-1, Apple I and II+, Atari 800XL, and Commodore PET.

MIT CADR Lisp Machine

Implementation of a 1980-vintage Lisp(-only) workstation.

MMIX

This is a modern virtual machine used in recent volumes of Donald Knuth's famous book series The Art of Computer Programming.

Some versions of the GNU C compiler can be built with support for MMIX; see http://bitrange.com/mmix/gcc/ for details.

The books' author has a MMIX Web site.

Parallels

This company offers a virtual machines for Intel-based Apple Macintosh systems.

PearPC

PearPC is a PowerPC emulator for Intel IA-32 systems. Darwin, Apple MacOS X, and Mandrake Linux 9.1 for PowerPC all run on it.

Primos Georgia Tech Software Tools Subsystem for Prime Computers

This site contains a newly (mid-2019) recovered collection of compilers and software tools described in the 1976 book, Software Tools, by Brian W. Kernighan and P. J. Plauger, Addison-Wesley, ISBN 0-201-03669-X. It requires a simulator for the Prime hardware; the site's README.md file in its Links of Interest section points to suitable candidates.

Primos, and its filesystem and character encoding, were unlike any other competing operating system at the time. The Georgia Tech tools greatly expanded on those in the Kernighan & Plauger book, making Primos comparable to v6 Unix in its capabilities, and command-line comfort. They also influenced the design of the later Apollo systems with their Aegis operating system, later renamed DOMAIN OS. Apollo workstations were among the earliest powerful desktop systems, first marketed in April 1981.

PSIM

PSIM is a PowerPC emulator available under the GNU Public License (GPL). Its Web page says that it can run PowerPC programs for Linux, NetBSD, and Solaris.

QEMU

Emulators for ARM, IA-32, AMD64, MIPS R4000, Motorola 68K, PowerPC, and Sun SPARC. QEMU can run IA-32 applications in native hardware mode if it is augment with the free, but closed source, kqemu add-on package. There is an open-source alternative to kqemu in development: QVM86. It has a home page here.

There is a port of QEMU to Mac OS X PowerPC systems that is known as Q. It has a home page here.

Another port of QEMU to Mac OS X PowerPC and Intel systems is the commercial, but low-cost, iEmulator system. It has a home page here.

Finally, the FreeOsZoo project seeks to provide many different bootable O/S images for use with QEMU. It has a home page here. Because QEMU does not require O/S modifications, it seems likely that these images would also be usable on other IA-32 virtual machines described in this Web pages, but the author of this document has as yet no personal experience with QEMU.

SIMH simulator for DEC PDP-10 and many others

SIMH is highly portable multi-system simulator for these historical architectures:

There is a mirror of its master archive in case the Web site link from the section header is unreachable.

Unlike the KLH10 simulator for the PDP-10, the SIMH simulator does not idle when the emulated CPU is idle: it can require 100% of the host CPU time. I have therefore run it with manual starting and stopping, providing access to early versions (V3, V4, and V5) of Unix on PDP-11 systems, and Unix V7 on the Interdata and VAX. However, SIMH lowers its own priority, so even though it uses all of an idle CPU, it does not compete seriously with processes running at normal priority. For example, on a single-CPU machine (3.06GHz Pentium 4) with hyperthreading enabled, and two SIMH VAXes running on top of GNU/Linux, there is no apparent delay in processing commands in the base operating system, even though the top process-activity utility shows each VAX consuming 99.8% of the CPU.

SIMICS

The SIMICS simulator is available under a no-cost license to academic sites. Commercial licenses are available from the vendor, Virtutech. It runs on multiple operating systems, and implements at least the Alpha, AMD64, ARM, IA-32, MIPS, PowerPC, and UltraSPARC CPUs.

SINGLIX

The SINGLIX operating system is a rewrite of UNIX version 1 (1969--1972) from PDP-11 assembly language to Intel 8086 assembly language, done by Erdogan Tan in Istanbul, Turkey. It runs on Microsoft Windows.

SPIM simulator for MIPS32 architecture

The SPIM simulator runs assembly-language programs for the MIPS32 architecture family. Hundreds of millions of MIPS processors have been manufactured, and the MIPS CPU is the one used for examples throughout the outstanding books by Hennessy and Patterson cited earlier.

[John Hennessy is the chief architect of the original MIPS processor, and the current President of Stanford University, an institution in which much of California's Silicon Valley has its roots. David Patterson is the researcher who coined the widely used terms RISC and RAID, and whose research group developed the Berkeley RISC machine that evolved into the Sun SPARC processor.]

The MIPS assembly language and SPIM are described in Appendix A of their Computer Organization and Design book, which is not printed in the book, but is present on its CD-ROM, which supplies 1379 additional pages of material for the book, including a programmer's reference manual for the MIPS architecture. The CD-ROM contains executable versions of SPIM for Microsoft Windows, and source code that allows building the simulator on various Unix systems. However, the link from the title of this section points to a newer version of SPIM.

Squeak

The squeak implementation of the smalltalk language developed at Xerox PARC in the 1970s and 1980s runs on a virtual machine. There is more detail at the Web document A Tour of the Squeak Object Engine

Sun Da Vinci Machine

The Da Vinci Machine is an emerging technology from Sun Microsystems to extend the Java Virtual Machine to host languages other than Java, much as the Microsoft .NET Project makes it possible to run multiple languages on the CLI (Common Language Infrastructure) virtual machine with the CLR (Common Language Runtime) library environment facilitating interlanguage calls.

SVISTA for IA-32

From its Web page: ``Serenity Virtual Station (SVISTA) enables you to run `virtual personal computers' on your PC. By creating these virtual machines, users can run multiple copies operating systems at the same time. For example, a user could run Microsoft Windows XP (r), a copy of Microsoft NT4, and even a copy of IBM's OS/2 on a PC which is `running Linux'.
Serenity Virtual Station has support for the broadest set of operating systems in the industry. Supported host including Linux, FreeBSD, Windows, and IBM OS/2 - eComStation. Guest operating systems support includes Linux, Windows, and IBM OS/2 - eComStation.''.

Tachyon Assembler Workbench

From its Web page: ``The Tachyon Assembler Workbench provides a way for you to assemble, execute and debug System/370, 370-XA, ESA/370, ESA/390 and z/Architecture assembler language programs on workstation machines. You can even execute and debug programs written in other languages, such as C.''

Thinstall

This system provides application virtualization. From its Web page: ``Thinstall is a client-less application virtualization solution that allows [Microsoft Windows] applications to be packaged into simple EXE files that run in user-mode isolated from the host PC without installation or changes to the local desktop's registry and file system.''

Transitive

From its Web page: ``QuickTransit hardware virtualization technology allows software compiled for one processor/operating system to run on a system with a different processor/operating system without any source code or binary changes. QuickTransit dynamically translates processor instructions and operating system calls as an application is running ...''. In particular, it allows running Sun Solaris SPARC and GNU/Linux PowerPC binaries on GNU/Linux on IA-32, AMD64, and IA-64 hardware.

UCSD p-System

The University of California, San Diego, p-System provided a portable virtual machine for a Pascal compiler that generated p-Code, helping to making Pascal widely available on many different hardware and O/S platforms in the 1970s. For more information, see the Wikipedia article.

V7/x86

From its Web page by its developer Robert Nordier in Durban, South Africa: ``The first public release of V7/x86, a port of UNIX Version 7 to the x86 (IA-32) based PC, is now available. Most of the source code is under a Berkeley-style license.''.

V7/x86 is also available as a virtual machine for Bochs, VMware Player, and Sun/Oracle VirtualBox.

VICE

From its Web page: ``ICE is a program that ... executes programs intended for the old 8-bit computers. The current version emulates the C64, the C128, the VIC20, almost all PET models, the PLUS4 and the CBM-II (aka C610).''

VirtualBox

This x86 virtual machine is available under the GNU Public License (GPL). From its Web page: ``VirtualBox runs on Windows, Linux and Macintosh hosts and supports a large number of guest operating systems including but not limited to Windows (NT 4.0, 2000, XP, Server 2003, Vista), DOS/Windows 3.x, Linux (2.4 and 2.6), and OpenBSD.''

In early 2008, Sun Microsystems purchased VirtualBox, and there is an expectation that it will become a supported part of the Solaris operating system. See http://www.sun.com/software/products/virtualbox/index.jsp.

Virtual Iron

A virtual machine for recent AMD and Intel 64-bit chips that is based on the Xen system. See the supported servers Web site for details. Both commercial and open-source products are available.

Virtual PC

This simulator of the IA-32 architecture is a commercial product developed by Connectix, and then later acquired by Microsoft. It runs on both Microsoft Windows and Apple Mac OS X systems, and can be used to run most operating systems for the IA-32 platform.

Macintosh users who need Microsoft Windows as well may find this a decently performing solution, despite its need to simulate the IA-32 instruction set on PowerPC.

Virtuozzo

From its Web page: ``The only true VPS technology. Virtuozzo creates multiple isolated partitions or Virtual Private Servers (VPSs) on a single physical server to share hardware, software licenses and management effort with maximum possible efficiency. Each VPS performs and executes exactly like a stand-alone server.''

vMac Project

From its Web page: ``Mac is a Macintosh emulator that currently emulates a Motorola 68000 based Apple Macintosh Plus. A ROM image from a Plus is required, we plan to implement other 68000 machines, such as SEs and II series. Currently System 7.5.5 is the latest vMac can boot, which is the latest System a real MacPlus can boot.''

VMware

The superb VMware system runs on IA-32 and AMD64 hardware, providing native-execution speed for almost the entire IA-32 instruction set. How it does so is described in Chapter 8 of the Smith & Nair book noted earlier.

Versions of VMware are available for Microsoft Windows, GNU/Linux, and bare IA-32 and AMD64 hardware. At our site, we run VMware on GNU/Linux on IA-32, hosting at least these guest operating systems: Microsoft Windows XP, FreeBSD, NetBSD, OpenBSD, Bell Labs Plan 9, and Sun Solaris 9 x86.

In 2006, the VMware vendor made certain members of the product line cost free, though still under license. new-material icon

We have run several VMware virtual machines continuously since 2002 on our systems, and recommend it highly.

vtAlpha

Virtualization of an AlphaServer, supporting OpenVMS 7.1-2 and Tru64 4.0F, and clustering of both operating systems.

WinUAE

Port of the UAE Amiga Emulator to the Microsoft Windows platform.

Xen

Researchers at Cambridge University developed Xen, an emulator of the Intel IA-32 architecture. Unlike VMware, Xen requires code modifications in the guest operating systems, but can provide very high performance. See also the Wikipedia article.