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
- Phantom OS Programmer's guide
- Phantom Architecture in English
- Short article in English - TheRegister
- Big article in Russian - Open Systems Magazine
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
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
oldtree/kernel/phantom
- kernelphantom
- libs and unix userland (user/apps)plib/sys/src
- native phantom userland coderun
- QEMU run/test environmenttools/plc
- phantom language compiler / java bytecode translator
Go on and 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:
- Persistent memory garbage collector. Suppose we're in a 64 bit world and persistent memory size is some 20 Tb. The current GC is incomplete.
- If we touch memory too much, the snapshot engine will spend a lot of IO to store the difference. A fast and good allocator can reduce IO load. There is one, but it could be better.
- There's need for a fast alpha-blending image transfer (bitblt) code.
- The Unix subsystem is very limited. There is no signal delivery, for example. It waits for the one who will implement the missing parts.
- It is theoretically possible to implement a persistent Unix environment. Quite challenging.
- Drivers - current set is minimal, The AHCI driver is not complete, USB needs optimization, some more must be ported or written.
- It would be interesting to add a Python frontend to the Phantom compiler. Are you a Python fan? Can help?
- Phantom bytecode supports classes, inheritance, but does not support interfaces. It is not really trivial to implement interfaces in an efficient way.
- Even a simple JIT engine will help a lot.
- The TCP stack is not ideal and needs someone to lend a hand.
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
- There is a need for a good CI setup which can run system in a specific configurations and following special scenarios.
- Bytecode engine needs to be tested with random garbage execution.
- It is a good idea to keep a set of tools that for sure build a correct OS kernel.
cc
,binutils
,qemu
, etc. - Need setup to build an ISO image of the system to run on different machines and emulators.
- There is a real need to do CI on a real hadrware. Need corresponding scripts.
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.
Badges
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, [email protected]