The software industry has diverged into radically different categories in the past 5-8 years. It used to be that there were very few programming languages that "mattered", and everything was written in "C". Along came Java, and changed everything.
Java is an interpreted language, which means nothing to most people, but it's a synonym for slow. Java is a convenient, addictive, easy-to-use, but ultimately lightweight programming language. It is not used at all for "desktop software". It's rarely used (any more) for "applets" which download and run through your browser. It's very heavily used for server-side software. In fact, essentially all modern web-based "services" are written in Java, or worse, in a scripting language like Perl or Python or PHP. Hmmmm. If it starts with P, maybe it actually is.
But interpreted languages require another program to interpret them, Java requires a runtime, and for server-side software usually an application server like "TomCat" or "JBoss". All this stuff runs on top of a web server, usually "Apache". So your friendly neighborhood web site like, say, Friendster, is a bunch of layers of software running on top of an app server on top of Apache on top of the core OS.
Layers of paint.
When you paint furniture, or your car, after 2 or 3 layers, you're supposed to scrape it all off, down to the bare metal, and start over. In the software industry we use that phrase "down to the metal" to mean going down to the operating system level that everything else sits on top of anyway. It's faster. Better. Simpler. But usually much more difficult. So people don't usually bother. Or they hurt themselves trying.
Programming in C on UNIX or Windows systems is like welding. By contrast, I call Java the hot glue of the internet. A couple of college kids can quickly put a compelling demo together by painting over something else, like making a stage set, and that demo can often attract funding, and then real users, and then it all bogs down and gets slow and sticky or it falls apart. If you've ever hot-glued anything together, a month later you know what I mean.
At Five Across, we started from scratch and wrote our own technology, in C, which runs lightning fast on the bare metal operating system. We think this will become a significant competitive advantage. It also means that our application software is under a megabyte in size, compared with, say, our competitor Groove, which is 50 times larger.
Some say layers and abstractions are good, but although they make things easy, they also limit what is possible because everybody's building on top of the same layers, and they constrain functionality to what the layers make possible (example: you can't do peer-to-peer conversations in a web-based piece of software. At all.)
I say scrape off all that paint and build some real software.