dzavalishin / phantomuserland

Phantom: Persistent Operating System
GNU Lesser General Public License v3.0
901 stars 62 forks source link
bytecode kernel operating-system virtual-machine

Welcome to Phantom OS

Phantom OS is a persistent operating system. Its primary goal is to provide environment for programs thatsurvive OS reboot. Such an environment greatly simplifies software development and makes it possible to write programs that for example do not need a filesystem.

Nevertheless, Phantom supports filesystems and all of the modern OS features.

For the details please refer to the Phantom OS Programmer's guide.

For the questions and discussion please visit chat or Google Group.

What Phantom OS is

Basically, most of code we (the original team) upload is very straighforward and, sometimes, dumb. That, to some extent, is on purpose. We want to have a working system first and polish it next. Besides, not all the concepts and design desicions are final, so it is of no use to finalize all the implementation desisions now as well.

Code is known to compile successfully with cygwin/linux gcc 4.3.4. Only the IA32 target is most complete and stable, the ARM port is in active development but very unstable, the MIPS port has just been started - compiles and can breathe for a second :), the amd64 port is incomplete and does not compile at all.

Current state

See the changelog, have a look at screenshots. Here is the last one:

More screenshots: https://github.com/dzavalishin/phantomuserland/wiki/ScreenShots

Docs

Documentation Status

Web Documentation and PDF, and there's a lot of info in the Wiki

Building

Set the PHANTOM_HOME environment variable to the path of the Phantom repository root directory and make all there.

On Windows you will need Cygwin to do that. Select at least: gcc4, subversion, binutils, make, gdb (see etc/cygwin_get.cmd)

See also TOOLCHAIN

Running

Run phantom.cmd/phantom.sh in /run

See doc/RUNNING for more details

Debugging

Run QEMU (see above) and then - gdb in /oldtree/kernel/phantom

Kernel console is logged to /run/serial0.log

Kernel is able to send logging info to syslogd by UDP. Currently syslogd address is hardcoded in net_misc.c.

Directories

Go on and take part!

How to take part

The kernel and the compiler

Creating an unusual operating system is a very interesting thing to do. There are challenges on each and every step. Just to start with:

Porting Phantom

Ports to ARM and MIPS were started, but long time no progress. I'm looking for one who can help with that.

Bringing it to 64 bit Intel/AMD is actual task too.

Current kernel is basically SMP ready, but SMP support is not finished completely.

Userland

There's a need to implement demo applications for Phantom - even simple ones will help.

More serious task is to bring in some simple HTML renderer and get a basic browser working.

Build and CI

If you feel interested to take part in the project, please leave me a note. An issue on a GitHub is the ideal communications channel.

Issues to start with

Badges

Codacy Badge

Build Status

Code coverage

Communications

The easiest way is to Write AN e-mail to Dmitry Zavalishin

Or leave a message in the Google group

Or leave an issue in the tracker

There is a Phantom Website, but since you're here you better look at the Wiki.


Best regards, Dmitry Zavalishin, dz@dz.ru