Valix - Experiment in Design
Posted: Mon May 23, 2011 1:15 am
This will be the official thread for my OS project, Valix. I am pleased to announce that, due to recent progress, I plan to release a pre-alpha version by July 1st. The first part of this post will be written in an FAQ format, and anything after that edited to add more information as things progress.
What is the goal of Valix?
The goals of Valix are, by my observation, quite different from the goals of most other hobby OS projects. A quick look through some other projects, you see things like "POSIX compatibility", "super stable and super fast", "cross platform", or specific uses like "webserver". The philosophy behind Valix, though, can really be summed up by one phrase: Experimentation in Design. So far that means we've made some very counter-intuitive but interesting design choices.
What's the biggest difference between Valix and your usual OS?
Right now, the biggest obvious difference is the way applications will be ran. There is a compiler and interpreter, written in C inside of the Valix kernel. The compiler makes bytecode that the interpreter then interprets. The language is a dynamic, object-oriented language similar to python, ruby, or smalltalk, but of my own invention. It doubles as both the system language and the system shell. It's the language that applications should be written in, as well as configuration files, and it's the language that a user might use in a system command line. The kernel doesn't need to handle any binaries at all, and in fact things like task state segments or protection rings can be ignored completely.
Other differences?
Smaller differences aren't so obvious to an end-user or application programmer. Valix doesn't use any paging or other memory protection schemes, as the kernel is the only binary running directly on the CPU. The system call interface is also simplified, since the interpreter is itself part of the kernel. Currently we are debating whether device drivers should all be written in C (for speed) or in the interpreted language (for debugging, design, and simplicity).
This is barely the beginning though. Some other design experiments are planned or in planning, including a completely tag-based file system. We hope to be creative with the graphical user interfaces as well. There are a lot of interesting, perhaps untested ideas out there that need implementing.
What stage is Valix at?
Currently, Valix has a multi-threading system, memory manager, and working compiler/interpreter. The compiler and interpreter are not complete, but they do work, and most of the hard work is done. Currently basic statements such as "a = 2. b = 3. Console print: a * b." work as expected. Due to the setup with GRUB2, Valix boots directly into 800x600 VESA mode, and stays there. There are some video routines but they're nothing interesting, and currently in disuse. All output is currently read from the serial port, so testing is done either on Virtualbox or Qemu.
What do I care?/How can I help?
Okay, so maybe this project isn't exciting enough for you do contribute to. On the off-chance it is, feel free to contact me on xmpp at [email protected] or send me email to the same address. Otherwise, you can do any of several simple things right now. You could suggest a new idea to implement. You can come back in July when we plan to distribute a pre-alpha CD image for testing. You can check out the code, which is temporarily at http://gitorious.org/valixos/. Or you can just discuss Valix here. Thanks for reading my post :)