Soon after Skype for Windows Phone beta came out (and went gold months thereafter), users were dismayed to discover the app didn’t work, well, like Skype. That is, it couldn’t run in the background to receive phone calls or IMs from friends and family. Circulating reports suggested that perhaps “push notifications were too slow” or that the problem was a result of “[…] how Skype works and how the Windows Phone OS works.”
The real reason? Well, it’s complicated…
Skype is a peer-to-peer (P2P) Voice over IP (VoIP) client. P2P meaning that each Skype user – like you – is part of an intertwined graph of other users throughout the world. But not all users are equal. Some users on the network are “super nodes”, an ornate term assigned to a user that acts as a broker, moving data around on behalf of its locally connected peers and Skype. It is this decentralization of network responsibility that lets Skype maintain such high stability and simultaneous user counts – 35 million as of last count in March. (Startup competitor Tango isn't nearly as complex; it simply uses a client-to-server model based on the open XMPP protocol.)
Here’s how a piece of that network would look visualized with cute circles and lines:
In the figure above, Skype users -- you and I -- are represented by the smaller circles. We’re connected to a super node with lots of CPU power and bandwidth. The line connecting us to Skype’s login servers is present to demonstrate that some data aren’t sent through local super nodes. In this case, super nodes don’t handle login requests for obvious security reasons.
Let’s move on to how a Skype call is made.
First, for the sake of brevity, let’s assume that you already added John Doe to your Skype client’s contact list. Generally speaking, the software found John’s details via a complex traversal of the Skype P2P network. The important take away here is that your local super node helped you find John and passed on all the details needed (e.g. IP address) to make a successful call.
Let’s give him a ring.
In this figure, a Skype user – you – is initiating a direct connection with John Doe; he receives the call and you both chat for 12 hours about favorite cookie recipes. It’s important to note here that call routing isn’t performed through Skype servers at all. In most cases, direct communication is possible and utilized. In other rare cases, Skype may use an intermediate node, e.g. the super node, to relay traffic.
Cue Windows Phone.
You probably know by now that Windows Phone 7.5 “Mango” ushered in support for fast application switching (multitasking) and background agents, little bits of code that can be programmed to run in the background. However, none of these agents support running for an indefinite amount of time or have the ability to maintain persistent network connections. That means that the application couldn’t possibly run in the background let alone receive calls from other users. But that’s where notifications swoop in and save the day, right?
Well, no. Remember when we called John Doe in an earlier example? That call was direct; Skype client to Skype client. There wasn't a Skype server in the middle of that transaction, just two users waving each other down and having a chat. Where would you install a Windows Phone notification server? On a super node? Nope, most calls are direct, remember? What about a server at Skype headquarters? Won’t do any good there either. The only option is to notify the user at receipt of an actual call, something the Skype for Windows Phone client can only do if it’s running in the foreground.
You see the dilemma now.
With Skype for Windows Phone having been announced all the way back at the Microsoft MIX conference in 2011, the anticipation (and vitriol) levels for app availability were off the charts. Not to mention all the other platforms had Skype already. So Microsoft had no choice: They worked with Skype to push out a “1.0” application knowing damn well they’d piss off half of their user base. But they delivered the application with the promise that users could expect a better version in the future.
And from what we’ve heard of the next version of Windows Phone “Apollo”, Microsoft and Skype will make good on that promise too. Back in February, it was reported that Skype would become a first class citizen on Windows Phone. So with Apollo nearing, it’s not long before all this becomes a hazy memory of Windows Phone’s growing pains.
[It's important to note that Microsoft is working with Skype to change how their network operates, specifically the way super nodes are created and operate; the network is evolving as you read this. So while I tried to remain as accurate as possible, there may be errors.]