Honeymoon is over

Friday, October 27, 2006 by darco
Posted in ,

NOTE: Most of the issues pointed out in this post have been addressed and corrected. Thus, this post remains available for historical reasons.

I don't want to seem unappreciative, so I'll start out with some good points. Google Talk has energized Jabber/XMPP to a level of activity that is unprecedented. Think about all of the things that have happened since Google Talk went beta: how much of it is a direct or indirect result of Google choosing to use XMPP as the protocol for their IM service? I don't want to minimize this point. Google Talk has been one of the best things to happen to the Jabber community in recent memory. And kudos to them.

Ever since Google Talk flipped the switch to enable server-to-server communications, Google Talk has become my default recommendation for anyone looking to get a ‘jabber account’. Back then, jabber.org was still having stability problems (as it was still running jabberd 1.4), and my own server was also less than reliable. Google Talk also came with several useful features, such as the chat client built right into gmail.

However, I have recently realized that Google Talk is not the ideal, stable jabber server that I thought it would be. Read on to find out why.

UPDATE: (2006-11-01) Google Talk now supports offline message delivery!

Nitpicking

Google Talk, as a jabber service, is lacking many features that "standard issue" on most other jabber servers: real vcard-temp support and private xml storage are sorely missed in Google's implementation. This is in and of itself forgivable—both are marked as historical implementations and never officially sanctioned as a standard.

Those are annoying issues, but no big deal. If that was my sole complaint, I wouldn't be writing this blog post. The worst offenses are documented below:

No Offline Message Delivery

Fixed!

On pretty much every jabber server implementation to date, sending someone a message when they are offline will queue it until the next time they log in—except Google Talk. Google Talk, on the other hand, will archive the message silently. XEP-0160: Best Practices for Handling Offline Messages states how things should work:

The RECOMMENDED process flow is as follows:

  1. Sender generates XMPP message stanza [3] for delivery to a recipient such as an IM user or other node, where the 'to' address is of the form <node@domain> or <node@domain/resource> (see RFC 3921 for rules regarding server handling of such XMPP message stanzas).

  2. Recipient's server determines that the intended recipient has no available resources that have specified non-negative presence priority. [4]

  3. Recipient's server does not return a <service-unavailable/> error but instead stores the message stanza for later delivery.

  4. When the recipient next sends non-negative available presence to the server, the server delivers the message to the resource that has sent that presence. (Alternatively, the server may support Flexible Offline Message Retrieval [5], although that functionality is not described herein.)

Why Google decided to do otherwise is beyond me.

Multi-User Chat Invitations Don't Work

Fixed!

While the official Google Talk client does not (yet?) support Multi-User Chat (MUC), many other clients do. By using a different client, it is possible to join chat rooms and participate in discussions using a google talk account—but only if you explicitly join the chat room. I say that because it is impossible to invite someone using their Google Talk account into a chat room. Invitations are broken. This has proven to be extraordinarily frustrating, because I then have to explain to the person I want to invite how to join the chatroom from their software. These are not tech-savy people, they expect it to "just work". This is not the first time I have mentioned this problem.

The reason that MUC invitations do not work is quite simple: it has to do with Google's [mandatory] "I won't let you talk to me until I talk to you" policy. You see, MUC invitations are actually sent from the room you are inviting the person to—they are not sent directly from your client. From Google's server perspective, the invitation looks like an unsolicited message from somewhere, and blocks it. Thus, no invitation. Horrible.

Google Talk is iChat Hostile

Fixed!

Google Talk works horribly with Apple iChat. This opinion is not based on one single incident, but many repeated attempts to "make everything just work" for my friends and family. Whether these issues are Google's problem or Apple's, I'm not really sure. I'm sure that a healthy portion of the blame lies with Apple for not making a robust enough client, However iChat seems to work fine with most other jabber servers and Google Talk is the exception. This is what I'm talking about:

  1. When I start a chat with a Google Talk user from my account on my own server, their reply will pop up in a new window. I can only imagine that this has something to do with the <thread> element, but that's just a guess. Another side effect is that when I send messages to them in this new window, all of the XHTML is stripped out—even if they are using a client which supports XHTML-IM(like, for example, iChat). Sending messages from the original window does not strip out the XHTML.

  2. If you are logged into your Google Talk account with iChat, and then check your gmail with Camino or FireFox, bad things will happen. Your iChat Jabber roster will collapse. No, you are not disconnected, but your roster is now unavailable. You will have to either restart iChat, or log out and log back in to get your roster back. Very frustrating, but not entirely Google Talk's fault: iChat has a bug where if you receive a message from yourself (on a different resource) that it causes the roster to collapse. I'm asuming that the gmail web client is sending a <message> stanza to iChat for some reason, and iChat can't cope with the horror.

  3. The next one is more bizarre and even more frustrating. If you are using your Google Talk account with iChat, your ability to see other google talk users who are online is inconsistent and frustrating. Other Google Talk users will disappear from the roster when they come online. As in, when they are off-line, you can see them in the roster (greyed-out as offline), and when they come online: poof, gone. Now, the other Google Talk user (who is not using iChat as a client) will be able to see that the other person is online just fine. My hypothesis is that Google Talk is adding some attributes to some element that boggles iChat. This does not happen with other jabber servers.

  4. There have been many times where my girlfriend would give me a call and she'd ask me why I wasn't online. Confused, I would point out that I am in fact online. I'd then "change my status", and she would point out that it looked like I just came online. It looks like Google Talk is dropping packets somewhere, but who really knows, right? It could be my server that is dropping the presence packets. Whatever the reason, it seems to happen with my google talk contacts more often than everyone else.

No Support for Privacy Lists

Privacy Lists, the feature of jabber which allows users to hide-from and ignore other users, is not implemented in Google Talk. Instead, they implement some proprietary system for handling permissions—which is only supported by their proprietary client. Thus, if you are using a different client (like Psi), there is no easy way to hide-from or ignore people. So much for privacy being one of the strong-points of jabber.

Conclusion

Earlier this year, I swore off other proprietary IM services (like AIM, ICQ, YIM, and MSN) in an effort to encourage my friends and family to start using Jabber. Most of these people are not tech-heads, and quite simply do not care about open protocols and public federated IM networks. To them, two things matter:

  1. The Network Effect: "Are my friends using it?"

  2. The User Experience: "How easy to use is it?", "How stable is it?", "What does it let me do?", "How is this better than what I'm already using?", "Does it 'just work'?"

I am already fighting an up-hill battle with respect to the network effect, and when I'm helping some first-time jabber user set up iChat to use their Google Talk account, the last thing I need to happen is for it to start acting flakey. First impressions are scarce.

Here's the bottom line: It doesn't really matter if Google Talk is at fault or if iChat is at fault, what matters is that all of these problems will go away by simply using a different Jabber server instead of Google Talk. This is why I will no longer be recommending Google Talk to friends and family, nor anyone else who is looking for a jabber account. I just hope that when Google Talk gets out of beta things will be better.