Phantom Time

This article was written as an answer to comments to a big SlashDot discussion. It was an attempt to answer a lot of questions about.

"The Register", "OS News" and "Slashdot" articles about Phantom OS brought a lot of comments. Some good, some bad, some 'you are not first' ones, and most comments show me that not a lot of people understood, what I'm going to achieve with Pahntom. That's bad. But – some readers got an idea, and that means hope is not lost. :)

Well, generally, I'm used to it. Publishing information about Phantom in Russia brought me nearly the same kinds of replies – from "You're idiot" to "it is done already" to "there's something" to "brilliant". Most comments of the first kind (telling me that i'm idiot) later turned to some better perception of Phantom idea. Usually it happened after reading some of my texts about Phantom. But – most of those texts are in Russian, and foreighn readers can't read them due to this fact. So I decided to write this article and try to explain in not native for me language, what and why Phantom.

The original article presented you the very basic ideas of Phantom, and was quite correct technically – indeed, Phantom is a system with a single huge address space, which is persistent.

This is the most obvious point of Phantom and is most discussed one. Lets look at the usual comments.

People say: "this is like hibernate". Of course it is not. Hibernate is innatural for the system it saves, hibernate is to be done manually, and, due to this fact, hibernate (and any other "let's save all memory in file" solutions) can't be relied upon.

You guys look at the obvious direct use of Phantom's immortality – ability to restart your work after power loss. This is very pleasant thing, and, possibly, main Phantom's advantage for casual user, but it is not critical as an end user feature. You can live without it.

Where immortality really rules is on programmer's side. It – excuse me my excitement, really changes the way programmer thinks and works.

Let me cite one of the comments to the original article: "I can't remember the exact figure, but it was 80% of code is devoted to transforming data from a version useful for storage into a form useful for processing – and vice versa."

Look – 90% of programmer's work just need not to be done in Phantom! Well, to me 90% is a bit too much – my own estimations are between 30 and 75% of code, but even 30% is really a lot. We can create software spending 30% less money, isn't it a goal to fight for?

Let me, a communist country son, show you, the capitalists, one simple example. Imagine you can produce some car spending 30% less? Aha? Now do you feel the money? :)

Ok, so Phantom is not an attempt to wonder in the programmers' garden of Eden, tasting one good idea and another and trying to do something just interesting. Motivation behind Phantom is VERY straight and practical – to build an environment which will let to produce software in a more effective way. Faster. Easier. Cheaper. (I'm not just programmer, I'm software company owner, I know what man–hour means how it translates into the 'expenses' term.)

Now to the second group of whinings in the comments: "you're not new, we've seen it all in 1913".

And I did. I mean, I know computer world's history. Both western and Russian. And I know it better than you, I bet. For example, do you know that Russians created the only ternary computer in the world? Well, hardly. Ok, lets return on the west side – do you know that Intel created not only 286–s, but 432–s as well? I do. Not just I know – I'm sitting in that history "with a big spoon", picking the best ideas and using them in Phantom. Nearly everything in Phantom is not new. But carefully selected and naturally integrated.

A lot of things, very good per se, can't be combined easily. Salted cucmbers are tasty, and milk shake is tasty not less. But try to combine them, and tell me about the results. But don't show. Please.

Phantom is an attempt to select a few orthogonal principles and create system as simple as possible, but powerful due to combinatory effect. By the way, back in 70s, Unix was just the same – very clear and simple combination of existing ideas, put together well. What I'm doing is the next step in the same direction, but from today's ground.

So, basically, Phantom is not about "new features". It is about cleaning old junk off the house. Once I was talking about Phantom on a conference section, and some few hundreed young programmers were sitting in the auditory. Talking about complexity of the nowadays systems I asked – who knows about Windows OLE technology? Some 30 hands went up. (I suppose the other people were pure Unix guys...;) The next question was – who really used this really handy technology in their programs? You know what? Three guys pretended they did, and only one of them, I think, really did. Why OLE is not used bt programmers? Nobody needs OLE? Why – everybody needs, it is very handy to be able to combine documents from different programs. So why OLE is not so widespread? Because it is a real pain in the butt to work with it. That's in Windows. In Unix – sorry, you can't even think about this level of software integration.

That is, by the way, why I say that Unix – not Linux personally, is technologically weak. Believe me, I'm a very Unixish guy myself. Being young programmer in 1985 I put a lot of effort bringing Unix to Soviet Union, and I really love that elegant and simple OS. That. I mean – K&R V7 Unix. Todays Unix is unnecessarily complex, still ugly and – sorry – is way behind the Windows, if we're judging not only by ability to run Apache.

Lets look at the enterprise software domain. Look – everything there is either Java running on the app server (if it is Unix) or some Windows solution. (I simplificate a bit, sure.) So what's Unix does in this picture? It is an app server bootloader, guys. The REAL life goes on inside your Tomcat, or Jboss or even Websphere, god save the IBM. Unix – as a SYSTEM – plays a very poor part in here. Like MSDOS in 90–s was a bootloader for the Doom operating system :), Unix loads app server, and stands still aside.

What is wrong with that? Just everything. First, the role of OS is to let programs communicate, cooperate, extend eachother, play together. Look at old Unix idea: we have 100 simple one–task text–processing tools and can combine them to do complex and clever things. See see the point? Having two combineable programs you can do three or four operations. Having three – 12 or more, and so on and so on. But what was good in 70s doesn't help today. We need to combine not just text processing tools, and not just with pipes.

One can ask – but if we already have app servers and they are good at serving as a place for a complex programs and their combinations to live, why new OS? Do we have it all already? Answer to this question is above: effectiveness. If Unix, lying below the app server plays no significant role, lets get rid of it – simple things work better. But you need an example, you don't believe me, I susplect. :)

Ok, here is one: how many context switches it is needed in unix/tomcat pair to reply to a HTTP request? And why all these switches, if all the app code is living in one tomcat process? And who pays for all of them? And when you set up an ugly and wild in–kernel httpd to serve pictures without context switches, what operating system this https works in, and who is protecting the rest of OS from its bugs?

Unix was simple and clear. Now it is cumbersome and strange. Come on, it's time to repaint this picture from scratch. Phantom time.

PS: Visit our WIKI for some more more information. And, maybe, offer a hand.


Basically, most of code we 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 decisions are final, so it is of no use to finalize all the implementation desisions now as well.