State of the web in 2013
Kapil Kapre | Tuesday, Jan 1, 2013

For whatever reason it has been really bothering me thinking about how the internet has progressed recently. And I think I've been following it long enough to have an opinion on it which is not just "random". I cut my teeth on a modem dialing up a local UNIX shell account provider sixteen odd years ago to get text mode access to the net. This isn't going to be a "good old days" rant. In fact, I'm an eternal optimist, I think the best is yet to come.

Now unlike a lot of people who've been online for over a decade and experienced the way web content has trended, what I am definitely not bothered by is what people use the web for. People can do what they like. I have no opinion on that matter whatsoever. What I am annoyed by is the entire standardization process and all standards bodies involved in supposedly 'improving' the web. Lets take a look at some basic components under their purview - namely HTML and CSS. These two standards are the *worst* possible standards that could *ever* exist to govern layout and presentation of any type of content during *any* period of time. Is there any objective way to think about standards? I think there is. The aim of any standards body is to put forth a design that (1) can be implemented fully (2) allows for validated & repeatable results (3) does not allow for any alternate interpretations (4) accomplishes all of the things that the current standard (if) being replaced can do. The HTML and CSS standards failed on all counts. I challenge you to create a reference implementation for any of the HTML or CSS standards without running into ambiguous standardese. Am I being unfair on the W3C Here? I don't think so. Lets take a look at other popular document layout technologies - .PDF and .DOC. How is it.. that I can have a PDF file that is rendered *exactly the same* on almost every single PDF reader out there? It is quite likely that given the amount of implementations - engineers both good and bad worked on them. Why then, is it apparently so 'easy' to create an implementation that just works? Reading the DOC format spec is like shining a flashlight onto the timeline of computing. I think if someone simply took a dump of a word processors memory to save state it would make much more sense than the DOC format spec. There are so many hacks and oddities in the spec that I would make you upset, if not angry, if I told you to implement it. And yet, .. there exist multiple .DOC readers that manage to render the file's contents in the exact same way. Also keep in mind that some of those were written by reverse engineering the spec before MS was forced to open it. Let that sink in for a while. A spec created by reverse engineering a closed source binary document format allowed for an implementation by multiple different entities that is just as good as the original. Really, read that again. Now tell me if I'm crazy.

The second point I want to make is of over-engineering. We're approaching such an insane amount of abstraction from the CPU that getting any reasonable performance out of our hardware is becoming harder and harder. Lets take a look at the back-end first. One of the main culprits here is Virtualization. By that I mean running an entire OS instance in a VM for "nice" features like "high availability", "failover" and "migration". Anyone who knows anything about operating systems knows that this is a stupid, wasteful and idiotic way to solve a problem that needs to be solved by the OS itself. The OS itself should provide system environments to run software in sandboxes via existing memory & CPU protection mechanisms. *Which means only one OS kernel instance should exist*. Its hard to believe that people think VMs are a good idea without even realizing what VMs actually are. Okay, so I'm not saying VMs are completely useless - they do have their uses - for testing, development and other process specific requirements. But using them as a cheap means of host compartmentalization is bafflingly stupid. Not only do you lose out on performance (Hello..all you cloud people.. $/KiloWatt .. does anyone care?) but you now create additional problems. Consider the case of backups. Since VMs also abstract out storage for their guest OS, you now are unable to take backups/snapshots because the guest OS is the one controlling the virtual HDD image and it has to be communicated with (or turned off) so that we don't end up with a dirty backup. Ridiculous !

On the front end, things are not going so great either. There is an ever-increasing race to bundle what was typically client OS domain functionality into the browser. It started with JavaScript, NPAPI, ActiveX then was followed by Flash, Java and more recently WebGL, NaCl, WebSockets. I've left out a bunch of stuff but these are the more egregious examples of feature creep. As I sit here writing this, Chrome happily eats up about a gigabyte of memory whilst showing me what can be modestly described as "one pdf" worth of content - rendered inaccurately, while simultaneously exposing me to browser and browser-plugin vulnerabilities, eating up CPU cycles on flash advertisements and other generally shitty things.

Is this what the web amounts to now?