Escape

What is Escape?

Escape is a UNIX-like microkernel operating system on which I'm working since october 2008. It's implemented in ANSI C, C++ and a bit assembler. Except that I'm using the bootloader GRUB and the libraries that GCC provides (libgcc, libsupc++), I've developed the whole OS by myself.
Escape runs on x86, ECO32 and MMIX. ECO32 is a 32-bit big-endian RISC architecture, created by Hellwig Geisse at the University of Applied Sciences in Gießen for research and teaching purposes. MMIX is a 64-bit big-endian RISC architecture, developed by Donald Knuth as the successor of MIX, which is the abstract machine that is used in the famous bookseries The Art of Computer Programming. More precisely, Escape runs only on GIMMIX, a simulator for MMIX developed by myself in my master thesis (the differences are minimal, but currently required for Escape).

My goal is not to write an OS that can be used productivly some time (although I don't want to exclude that ;)), but the project is rather an experiment to see what works well and what doesn't and to learn much about operating systems, hardware and in particular the x86-architecture. Of course the OS is not finished yet and therefore not all concepts and implementations are stable.

If you have any questions, problems or feedback don't hesitate to contact me: Nils Asmussen

License

I publish the operating system as open-source under the GPL2.

Changelog

Version 0.4 (09/12/2011)

Version 0.3 (03/04/2010)

Version 0.2 (09/16/2009)

Version 0.1 (04/10/2009)

General structure

Escape consists of a kernel, drivers, libraries and user-applications. The kernel is responsible for processes, threads, memory-management, a virtual file system (VFS) and some other things. Drivers run in userspace and work via message-passing. They do not necessarily access the hardware and should therefore more seen as an instance that provides a service.
The VFS is one of the central points of Escape. Besides the opportunity to create files and folders in it, it is used by the kernel to provide information about the system for the userspace (memory-usage, CPU, running processes, ...). Most important, it is used to communicate with devices, which are registered and handled by drivers. That means, each device gets a node in the VFS over which it can be accessed. So, for example an open("/dev/zero",...) would open the device "zero". Afterwards one can use the received file-descriptor to communicate with it.
Basically, the communication works over messages. Escape provides the system-calls send and receive for that purpose. Additionally, Escape defines standard-messages for open,read,write and close, which devices may support. For example, when using the read system-call with a file-descriptor for a device, Escape will send the read-standard-message to the corresponding driver and handle the communication for the user-program. As soon as the answer is available, the result is passed back to the user-program that called read. The same mechanism is used for the "real" file-system, which is realized by the driver "fs". Escape defines messages for that purpose and handles the communication with fs when a user-program accesses a "real" file.
Because of this mechanism the user-space doesn't have to distinguish between virtual files, real files and devices. So, for example the tool cat can simply do an open and use read to read from that file and write to write to stdout.

Features

Escape has currently the following features:

Try Escape

Build/change Escape

The build-process should work with every standard linux system (I'm using Ubuntu 11.04 2.6.38-10-generic x86_64). At first, you need to build the cross-compiler for the architecture you want to run Escape on:
cd cross/<arch>   # Use i586, eco32 or mmix
./download.sh
./build.sh
Note that the source of the cross-compiler will be put into cross/<arch>/src, the build-files into crossbuild/<arch> and the produced binaries into toolchain/<arch>.
Now you can build Escape:
cd ../../source
# ensure that your architecture and build-type is selected in Makefile and build it
./switch <arch> debug|release
Finally, you can run it:
make qemu|eco|mmix|...
Take a look into Makefile to see further options.

Note: The ECO32-cross-compiler isn't available yet. It will follow soon.

Downloads

Version 0.4

Version 0.3

Version 0.2

Version 0.1

Screenshots

Version 0.4

Boot progress:
Boot progress
Dynamic linking:
Dynamic linking
Users and groups:
Users and groups
GUI scrollpanes:
GUI scrollpanes
GUI window moving:
GUI window moving
Kernel debugging console 1:
Kernel debugging console 1
Kernel debugging console 2:
Kernel debugging console 2
Kernel debugging console 3:
Kernel debugging console 3
Maps of a process:
Maps of a process
The shell-language:
The shell-language
SMP support:
SMP support
Listing the running threads:
Listing the running threads
Running on bochs:
Running on bochs
Running on VirtualBox:
Running on VirtualBox
Running on VMWare:
Running on VMWare
Running on real-machine 1:
Running on real-machine 1
Running on real machine 2:
Running on real machine 2
Running on real machine 3:
Running on real machine 3
Running on ECO32 1:
Running on ECO32 1
Running on ECO32 2:
Running on ECO32 2
Running on MMIX 1:
Running on MMIX 1
Running on MMIX 2:
Running on MMIX 2

Version 0.3

ATAPI & ISO9660:
ATAPI & ISO9660
PCI-info:
PCI-info
VBE-info:
VBE-info
Processes:
Processes
dump /dev/random | less:
dump /dev/random | less
Raptor:
Raptor
The shell-scripting-language:
The shell-scripting-language
GUI-shell:
GUI-shell
GUI-controls:
GUI-controls
Resizing of windows:
Resizing of windows

Version 0.2

Colortable piped through cat:
Colortable piped through cat
Read from driver:
Read from driver
The root-directory:
The root-directory
Running processes:
Running processes
Recursive mounting ^^:
Recursive mounting ^^
The GUI:
The GUI
The GUI - combobox:
The GUI - combobox

Version 0.1

After the start:
After the start
Help - part1:
Help - part1
Help - part2:
Help - part2
Running processes:
Running processes
The program ls:
The program ls
Playing with the shell ;):
Playing with the shell ;)
Read information from VFS:
Read information from VFS