There’s an interesting article by Tim O’Reilly titled “What is Web 2.0?”
I seem to be the only one who is strictly opposed to and, in some ways, outright scared by the idea that web applications could be the future of computing. One day, I should probably write a larger article about this topic, but for now I’d just like to quote three paragraphs from the article to illustrate some points.
“RSS is the most significant advance in the fundamental architecture of the web since early hackers realized that CGI could be used to create database-backed websites. RSS allows someone to link not just to a page, but to subscribe to it, with notification every time that page changes.”
Of the whole Web 2.0 stuff, RSS is one of the few things that are going in the right direction, though that probably is for different reasons than most web developers think.
For me, the real significance of RSS is that it makes semantic data available to the computer. I could have written a browser that regularly checks a user’s favorite web sites for updates years ago. But before RSS, these web sites were nothing but a mess of HTML tags with no meaning.
Since the introduction of RSS, a web page can be understood by the computer as an ordered list of resources, each with a title, a short summary, an author, a date of creation, and a link to further content. That’s the important thing about RSS: it lets the computer understand something about the content of a web page. Once the computer understands something, it can do amazing things that weren’t possible before, like aggregating, sorting and filtering all news items from all blogs you are subscribed to.
“AJAX is also a key component of Web 2.0 applications such as Flickr, now part of Yahoo!, 37signals' applications basecamp and backpack, as well as other Google applications such as Gmail and Orkut. We're entering an unprecedented period of user interface innovation, as web developers are finally able to build web applications as rich as local PC-based applications.”
AJAX is a combination of various technologies to allow live-updating web applications (think Gmail) where you don’t have to reload the page every time to perform some action.
No doubt that is a great advance in web technology, but think again about what this paragraph says. After many years, we are finally able to do things with web applications that we could have been doing with native applications for years. And this is innovation? No, web applications will always be playing catch-up with native apps, simply because web applications can only use technologies that are available in most web browsers, while a native application written for a specific platform can use the most advanced features available on its target platform.
Right now, you are sitting in front of a computer that can do amazing things if you give it the right input. However, all of this processing power is wasted if your data is locked up on a remote server and hidden behind a meaningless (to a computer) HTML interface with some JavaScript glue to make it look like an actual application.
Many, many years ago, some people thought that thin clients were a great idea—dumb computers which served no other purpose than to display pre-processed data generated somewhere on a central server. With web applications, our computers are once again downgraded to thin clients. I believe this is a very bad idea. I believe that program logic should concentrated where the user sits. And even more so, I believe that data owned by me should be located on a computer owned by me, so I can access it all the time and process it with Perl scripts or whatever tool that comes to my mind.
The e-mails in my Gmail account may be safe for now, and I can even access and download them through a protocol like POP3, but what if Google ever changes their policy? My LiveJournal posts may be available today, but will LiveJournal still exist in ten years from now—and what will happen to my posts when LiveJournal goes down?
“The race is on to own certain classes of core data: location, identity, calendaring of public events, product identifiers and namespaces. In many cases, where there is significant cost to create the data, there may be an opportunity for an Intel Inside style play, with a single source for the data. In others, the winner will be the company that first reaches critical mass via user aggregation, and turns that aggregated data into a system service.”
I find this scary, because it clearly shows how web applications will be the next step towards even more restrictive computing. Even worse, the battle between Open Source and Closed Source may soon become irrelevant. While web applications may (or may not) be Open Source, they are usually Closed Data. Let me demonstrate what this means.
In the good old days, if you didn’t like a certain proprietary application, you could write an open source replacement. All you needed to do was duplicate the logic of the application, and make the new app able to read the old app’s data (think of mail clients or databases, for example). With web applications, you can’t do that, because your data is safely locked away inside a server owned by the company whose product you are trying to replace. The only path to that data is through the company’s web application. Sure, you can “decrypt” their JavaScript mess of code and try to emulate the way their web application talks with their server, but the company will be able to stop you with a minimum of effort by changing their internal API or filtering incoming requests.
Now, I don’t think that all web applications should be banned, or that they represent Pure Evil™. A big advantage of today’s web applications is that they are available from everywhere: you can write posts in your LiveJournal even if you are on the opposite side of the planet; and they look and work the same whether you are using Windows, Linux, or a Mac. But for me, a web application is just a workaround for missing functionality in current native applications. There is nothing you can do in a web app that you couldn’t do in a native app, but there are lots of things you can do in native apps that you cannot do in web apps.
Well, I don’t have it yet. But I think the first and very important step towards making web apps obsolete is for everyone to have a reliable, generic data storage that can be accessed from everywhere on the internet. (That’s a really fancy way of saying: everyone should have some web space.)
Once you have a place to store information, you can build distributed web applications. Currently, my personal IMDB movie ratings are stored and locked up on the IMDB servers. I can only access them through the IMDB web page, and nobody else can see them. In the future, I would like to put these ratings in a very small and simple XML file on my web site (the format doesn’t really matter—any XML format can be transformed into any other format with an XSLT stylesheet), and just give IMDB a link to it. I could also give the same link to another, more open movie database. Everyone would be free to collect and parse this data, and do with it whatever they want. And it would be my data; I could access, change and delete it at any time, without being at the mercy of a random company.
Of course, in the future, I wouldn’t really sit down with a text editor and create an XML file by hand. I would use a nice little application for managing my movies that would generate the XML file and put it somewhere on my web site. If I wanted to add my movie ratings to a public database, I would go to their site, drag-and-drop my movie ratings file (which would result in a URL being passed to their server), and click the submit button. The movie database would occasionally spider all known rating files, updating its vote summaries as it goes.
That’s the future of the internet as I would like to see it. Data libre!