Escape

What is Escape?

Escape is a 32-Bit Microkernel Operating System for X86, on which I'm working since october 2008. It's implemented in ANSI C, C++ and a bit assembler and most parts of it are UNIX-like. Except that I'm using the bootloader GRUB and some functions for 64-division and -modulo which I borrowed from GCC, the whole OS is developed by myself.
The characteristic of Escape is IMO that the kernel provides a VFS (virtual filesystem) that is used for many things. You can get information about the state of the OS (statistics, CPU, memory-usage, ...), access the "real" filesystem, communicate with drivers/services and use pipes. The userspace can't really distingish between virtual files and real files, so the user-applications don't need to worry about the difference.

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.

The name

The name has no real meaning. It came to my mind during the development and I thought it's not bad (at least better than "hrniels-OS" or similar ;)), so I kept it.

License

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

Changelog

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, that is responsible for processes, threads, memory-management, interrupt-handling, the VFS and so on, services and user-applications. There are three kind of services:
  1. Drivers: The only difference is that they are found at /dev/<name> instead of /services/<name> and that their message-interface is fixed. That means they have to implement this interface in a specific way and the kernel will talk to them via messages. This way the file-operations open,read,write,ioctl and close are passed as messages by the kernel to the corresponding driver, so that the user-applications can use drivers as "normal" files.
  2. FS: This is a special service because the interface is fixed, too, but different from drivers. Because we need commands like mkdir, rmdir etc., which the drivers don't need. ATM there can be just one of it, which manages mounts, multiple filesystem-types and so on. I not sure if I will change that some time...
  3. Services: The default ones. They have a custom message-interface and should not be architecture-dependend (ok, ATM there are some that violate this rule, but I'm going to change that ^^). An example is "env" that manages environment-variables for all processes.

Features

Escape has currently the following features:

Try Escape

If you just want to try it, all you need is a X86-virtualisation/-emulation-software (or a real machine, of course). For example VirtualBox, VMWare, Qemu, Bochs, ...
You simply give them the disk- or cd-image and the fun can begin ;)
I have tested Escape in Bochs, Qemu, VMWare, VirtualBox and several real machines.

Qemu

You can start it with Qemu in the following way (or similar):
qemu -hda escape-hdd.img
qemu -cdrom escape-cd.img

VirtualBox / VMWare

You have to create a virtual machine and use the VDMK-image or CD-image.

Compile/change Escape

Linux or similar is required for it (I'm using Ubuntu 9.10 2.6.31-19-generic). You need the following tools:
gcc, nasm, ld, make, gawk and probably some more that I've forgotten :)
You can build and start it with:
make qemu
or:
make bochs
and so on. Take a look at the Makefile for further options.

Downloads

Version 0.1

Version 0.2

Version 0.3

Screenshots

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

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 (oops..the mouse-pointer is not mine :)):
The GUI (oops..the mouse-pointer is not mine :))
The GUI - combobox:
The GUI - combobox

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