UML simulator
Hosted by Logo
Download Mailing list Documentation Links

umlsim extends user-mode Linux (UML) with an event-driven simulation engine and other instrumentation needed for deterministically controlling the flow of time as seen by the UML kernel and applications running under it.
umlsim is currently under development, and will be useful for a wide range of applications in research and kernel development, including simulations involving the networking code, regression tests, proof of race conditions, validation of configuration scripts, and also performance analysis.
The umlsim package contains wrappers and modifications to the UML kernel and to UML's user-space tools, and an environment for controlling simulations. Simulations are described in a scripting language that combines elements from C and Perl.

This project started in 2002 as a prototype study, continued in 2003 as part of the FAST project at Caltech, has then become one of my spare time activities, and parts of it are currently being developed in a project for Philips Research, Eindhoven.

The current version is umlsim-67 (343 kB), released 30-DEC-2004.

Changes since the previous version:

  • removed old $obj->$var code
  • instance variables now have to be marked as "public" (tests/public; updated tests/ooarg, tests/oocall, tests/ooeval, tests/oomisc, tests/ooself, tests/ooselfinst, and tests/oovar)
  • -> now allows instance variables names to be reserved words (tests/ooinstrsv)
  • disksim.include: should now also work when using multiple kernels
  • disksim.include: removed usage example
  • disk simulation now detects attempts to register a disk multiple times or to add zones after registration
  • documented functionality of disksim.umlsim
  • include/*: removed superfluous use of $__ for the dummy function that "uses" other functions
  • removed unused function op.c:do_eq
  • objects and functions can now be compared for (non-)equality, and used as array index and case labels (tests/fncmp, tests/objcmp)
  • "print" can now also print functions and objects (test/printfnobj)

Older versions can be found here.

 Mailing list
General discussion of umlsim takes place on the umlsim mailing list. Also announcements of new versions are posted to this list.
The mailing list is archived at

Usage information:
Documentation is included in various README files inside the umlsim package. A first impression of umlsim's capabilities can be obtained by looking at the scripts in the umlsim/run/ directory.


  • "UML Simulator", Ottawa Linux Symposium, July 2003
    (Postscript: gziped)
  • "umlsim - A UML-based simulator", Linux-Kongress, October 2003
    (Postscript: gziped)
  • "umlsim - A UML-based simulator", Linux.Conf.Au, January 2004
    (Postscript: gziped)

Related material:
  • umlsim is based on the User-mode Linux kernel
  • Older versions of umlsim (the kernel changes only) can be found here
  • The data-dumping functions of umlsim were originally developed for the networking blackbox project.
  • NCTUns is a network simulator on FreeBSD, which re-uses most of the original kernel code, like umlsim does.
  • ReVirt, part of the CoVirt project, implements instruction-level logging and replay for Linux systems.
  • ns-2 can be considered the prototypical network simulator and enjoys huge popularity for TCP/IP research.

Last update: 30-DEC-2004   Werner Almesberger