a life of coding

Monday, August 10, 2009

Google Wave isn't Email, it's Facebook (and Twitter, and AIM)

Google Wave is an upcoming product form Google, and has been described as a replacement for email. In the demo at Google I/O, real-time interaction was pervasive. Data in the format of emails, instant messages, tweets, and individual chat keystrokes were shared between multiple people at the same time. Participants were added in very granular ways - a whole chat, a paragraph of an email, an ongoing conversation starting from a specific point. Everyone proclaimed that Google Wave was The New Emailâ„¢, and would be used as such.

Possibly, but Wave is far more powerful than that. At the heart of Wave is Jabber (XMPP), a technology that few people know the importance of. Some people might recognize it as the transport for Google Chat, but the real killer application of Jabber has been secure, real-time, in-house chat at financial and government organizations. Jabber is an efficient way for people to selectively share information with lots of people without needing a central server owned by an untrusted company.

Jabber has not been a breakout success, likely because it cannot be used via a web browser, and instant messaging has a strong network effect. Google Wave exposes Jabber to web browsers via a custom Jabber server, AJAX, and the Google Web Toolkit. To combat the network effect, Google integrated their email service and then showed how two people using Wave would have an improved email experience. This embrace and extend approach will probably be the primary growth mechanism for Wave as a technology, and Google as featured API's for embedding Wave into existing web pages, and providing external services to Wave users.

With a web browser interface, a Jabber back-end, and well documented extension API's, Wave is extremely useful. Write a robot for Twitter (which Google has already demonstrated as Twave), Flickr, and Blogger (also demonstrated by Google), and you recreate the core features of social media sites like Facebook. In fact, all that you would need to finish your proto-Facebook is some access permissions on the data (already part of Wave) and a mechanism for managing who has access to which data. Any data stored out on the external services (Twitter, Flickr, etc) will have their own permissions schemes, but data stored in Wave will be visible to people that you choose, just like Facebook.

Your friends might not even have an account on the same Wave server, but due to Jabber federation, thats okay. One convenient reason for telling people that Wave is like email, is that people will add their server name when giving out their account, just like an email address: ynniv@ynniv.com, or ynniv@mac.com. GMail users are used to giving out their email address for all sorts of things: email, instant messaging, voice and video chat, document collaboration.

If Wave turns out to be as important as I hope, people will stop differentiating their social networking account from their email account, and help break up the centralized control of personal information in the process. Back before the bubble, we thought that the Internet was going to be a decentralizing, democratizing force. Everyone on the Internet could send or receive data from anyone else. Email, and the web were products of this vision. Social networking and instant messaging has taken that away from us, placing all the control and everyone's private data in just a few hands. Jabber was created with that original decentralized vision, but never overcame the strong network effect in the instant messaging world. Google Wave could be the sugar to help the medicine down, finally bringing decentralization to the social web.

The Wave Way IS the Web Way

Anil Dash at Lifehacker recently wrote that Wave would face difficult adoption due to complex and rigid APIs. He says that the web has incremental upgrades, has a "weekend-sized" barrier to entry, has value independent of the network effect, and is easy to understand an explain (a duplicate of the second point, really). By comparison, he thinks that wave is big and complicated. It is my opinion that Wave applications will be similarly sized, similarly complex, and not require your friends to join at all.
He starts off by saying that Wave is composed of the following technologies:
  • Federation (XMPP)

  • The robot protocol (JSONRPC)

  • The gadget API (OpenSocial)

  • The wave embed API (Javascript)

  • The client-server protocol (As defined by GWT)

and that "combining all of these pieces would just be the starting point" to development. This sounds to me like claiming that developing a Google Maps application involves working with NavTeq and writing tile rasterizers, or that making a website requires writing an OS, a web server, and a web browser. Here's what people will use to develop with Google Wave:
  • Make a wave view appear in your web page via the embed API (Javascript)
and / or
  • Make a view or interface in Wave using the gadget API (OpenSocial)
and / or
  • Provide outside data or services to Wave with the robot API (JSONRPC)

All of them will have demo code that you can understand "in a weekend on your couch with a beer", or however else he thinks that people develop Web 2.0 apps.
Dash instead advocates a different API that does actually require you to host your own servers and federate over XML-RPC. The reasoning is that its easier for people to write their own server with XML-RPC than XMPP. XML-RPC is less efficient than Jabber (XMPP), so for intensive applications, should we be worried about performance? From the pushbutton page:
Scaling issues? There will inevitably be some learning to do about how to scale the resource-intensive hub layer of a Pushbutton system. But because the hubs live on cloud systems that make enormous amounts of computing resources easily available, because the coders creating the reference implementations of the hub software have great experience making web-scale systems, and because it's relatively simple to introduce new hubs as needed, this will likely not be a gating factor for adoption of Pushbutton. Worry? No

I think that last statement should read, "Worry? YES". Instead of using a properly written, efficient server, we should all run home brew, inefficient servers on huge clouds, because computing power is free! Google is going to release the Wave server open source, and its going to be really easy for you to run theirs on your hardware. Web programmers don't worry about writing web servers, and Wave programmers should not worry about writing a Wave server either.

Wave Is The Web

Wave actually is the web, and people should stop comparing it to email. The Wave interface that Google demonstrated was a web page. It communicated with the browser via AJAX. A Wave interface element ("gadget") can be embedded into any web page, providing immediate functionality to anyone visiting that page, no account required. You will get additional functionality by creating an account, but there is still inherent value in receiving fresh data, and interacting with services in real-time, anonymously. There is no intrinsic network effect at play here. I predict that Wave is going to show up embedded in web pages everywhere in the form of live Twitter feeds and real-time collaborative features. No one has to know, they just keep doing what they're doing.