For the last three years I've been doing presentations all over the world on what I call the "XAML-based technologies"—Windows Presentation Foundation (WPF), Silverlight, and Surface. I especially enjoy doing a presentation on declarative programming where I compare and contrast the three. Until recently, in these presentations I'd say "Silverlight doesn't have this" and "Silverlight doesn't have that." I had the content in the slides to back it up. At some point I'd say, "Now I'm not trying to make this a Silverlight-bashing session. It's just that there's only so much you can pack into a lightweight 4.2MB download that runs inside the browser." I explained how Silverlight could never be bigger than 4.2MB because it competes against Flash. And that's the size of the Flash runtime.

And then I'd explain how large WPF is and how it's almost like Win32 when you compare it to other places in .NET (like ASP.NET and Silverlight). I'd talk about WPF's beautiful elegance and depth, and how Silverlight will never get parity with WPF because of its runtime download limitation. Then I'd get a lot of somber looks, questions, and comments from developers. Because let's face it, the Microsoft developer marketing muscle is all about Silverlight, and this can be sobering news for those who haven't jumped into Silverlight yet.

Well, that was then and this is now. That was Silverlight 2 back in October of 2008. When Silverlight 3 first went to beta around March 2009, I listened to the most interesting discussion among the InterKnowlogy developers. They said that with "Silverlight 3 there aren't many things that you couldn't do in either WPF or Silverlight. And in WPF, there are always 10 ways to do something and you're never really sure what the best way is even if you are an absolute expert. In Silverlight there's typically just one way to code a task. And because of that, you could argue that Silverlight is elegant in its simplicity." Silverlight is elegant?! I'm the "rich client" guy, and they were right. I was floored with the reality that Silverlight 3 was a revolutionary release. Now I understood the reason that Silverlight was the most widely and quickly adopted developer technology in Microsoft history.

At the time of this writing (a full three months before you are reading this) I've now had the privilege to be involved in a Silverlight 4 project for almost two months. That's two months before a beta or even a community technical preview (CTP) version that the public gets to see. And I'm shocked at how good the features are. I really didn't expect much because Silverlight 3 was so revolutionary for the developer community. But, Out of Browser fully trusted? Are you kidding me?! With my Silverlight app I can get to all the USB devices like the camera or microphone. I can call out to Office and integrate my Outlook Calendar or anything Excel right in my Silverlight app. I have an outside and inside the firewall story in the same codebase without the burdensome install that the enterprise infrastructure folks hate so much.

Silverlight 4 is so good and so feature-rich that it brings up an interesting dilemma for me and for you. With the perception and realities of Silverlight gaining serious traction in parity with WPF, I know I am going to get the question in my audiences: "So, what do I need WPF for?" And because I know I am going to get that question, I know that the solution architecture decisions are going to be that much more difficult for you.

At InterKnowlogy, we'll continue to build functional rich client apps with user experience in WPF. The work we do in 3D is a great example of that. And large, complex applications that solely run inside the firewall are another good example of that. But, we're also going to continue to build a large amount of LOB applications in Silverlight 4. We started seeing the demand for LOB apps in Silverlight 3, and it's going to explode with Silverlight 4. It's a Silverlight world and we are just living in it. It's a pretty fun world to live in.

Tim Huckaby (TimHuck@InterKnowlogy.com) is founder and CEO of InterKnowlogy—experts in Microsoft .NET and Microsoft Platforms. Tim has worked on and with product teams at Microsoft for years, has authored books and several publications, and is a frequent conference speaker.