Silverlight 3: closer to what client-side .NET should have been
Microsoft cranks it against Adobe
Review Microsoft has released Silverlight 3, less than four months after unveiling the product and just nine months after finalizing Silverlight 2.0. The pace of development is remarkable, reminiscent of the browser wars in the 1990s, with Adobe System's Flash now playing the competitor role.
Why the urgency? It is a fascinating question but for whatever the reasons Microsoft is delivering a vehicle that enables .NET developers to take their code into the browser and cross-platform for Windows, x86 Mac and eventually Linux.
Silverlight is a 5MB browser plug-in, though some controls get downloaded separately on-demand. It does not require the .NET runtime; or more accurately, it includes the .NET runtime, tuned and cut-down for the purpose. This is in contrast to Sun Microsystems' fledgling JavaFX, for example, which is in effect a feature of the Java Runtime Environment (JRE) installed on the desktop.
Microsoft supplies Silverlight for Windows and Intel-based Mac, while the open source Moonlight project is responsible for Linux, though supplemented by media codecs that come directly from Microsoft. Moonlight is still a work in progress. Microsoft's vice president for the .Net developer platform Scott Guthrie says it is "six to nine months behind", though that seems optimistic. Moonlight 2.0, the first version with .NET support, is still in preview.
Silverlight has two roles. First, it is a media client for Microsoft's IIS Media Services, for streaming video. Version 3.0 catches up with the rest of the industry by supporting H.264 video and AAC audio as well as Microsoft's VC-1 and WMA formats. Digital rights management is available, but not yet for H.264 or AAC, which will limit commercial take-up. A strong feature is Smooth Streaming, which varies the bitrate on the fly according to available bandwidth, though this is really a feature of IIS Media Services and works in Silverlight 2.0 as well as 3.0.
The other Silverlight role is as a development platform for Rich Internet Applications (RIAs). You define a user interface in XAML, Microsoft's declarative language, and write code-behind in C# or other .NET languages. Silverlight applications can also interact with the browser DOM. New in Silverlight 3.0 is a navigation framework that lets you map URIs to Silverlight pages, enabling deep linking and browser back-button support.
Sketchflow, in the Blend 3 design suite, lets you map and design the Silverlight UI...
...while Sketchflow Player lets users run the prototype and add comments
The tools for Silverlight are Visual Studio for coding, and Expression Blend for rich designs. Projects can be round-tripped between Visual Studio and Blend. The current add-in for Visual Studio 2008 has no visual designer. Visual Studio 2010 has proper support, but is currently in beta. For Silverlight 3.0 you need at least beta 2, which is not yet available, while Expression Blend 3 is currently a release candidate.
Blend 3 improves greatly on its predecessor. The two big new features are better Photoshop import, which preserves layers and image elements, and a prototyping feature called SketchFlow. Last year I interviewed Bill Buxton, a design guru who is a principal researcher at Microsoft. He advocates prototyping using sketches, on the grounds that prototypes that look too polished inhibit discussion. His theories are now surfaced in SketchFlow, which is a prototyping tool for Silverlight and Windows Presentation Foundation.
A SketchFlow project starts with a mini site map, where you draw the page flow of the application. You then design the pages, optionally using special "sketch" controls which look home made, and hooking up pages. You can add instant sample data, avoiding the need for a database connection, and add simple interactivity by setting properties.
The next step is to export the project into a SketchFlow package and distribute it for comments. Users can run the prototype in the SketchFlow player, which supports annotation, and return their feedback to the designer. Finally, the designer can export the revised project as a Word document, which includes all the screens ready for working up into a specification. A useful and innovative tool.
Next: behind the scenes
Behind the scenes
What of Silverlight itself? New features include a Bitmap API, 3D perspective transforms, and ClearType text, promising to end problems with blurry text, though it falls short of the elegant Text Layout framework in Flash 10. The Pixel Shader API lets you add effects to visual elements. On the web services side, binary XML offers more efficient transmission of data. There are new data-oriented controls including a DataGrid, DataForm, DataPager, TreeView and built-in form validation.
.NET RIA Services is a server-side piece for ASP.NET. On the server, you define one or more DomainService classes, representing your data and typically hooking into the ADO.NET Data Services object-relational mapper. RIA Services generate matching DomainContext classes on the client, giving Silverlight access to operations such as querying and saving data. When data is updated on the client, the changed are tracked, and sent back as a changeset after a call to SubmitChanges. This succeeds or fails as a unit, providing a kind of transaction support. RIA Services also support authentication, based on the ASP.NET Membership Provider framework.
Although .NET RIA Services provide valuable features, they are currently a Community Technology Preview, and Microsoft warns of significant changes to come, so they are currently aimed at brave or experimental developers.
Silverlight applications can now run offline and out of the browser, sometimes known as SLOOB - or Silverlight Out Of Browser. The mechanism is simple. The developer checks a box and adds some desktop icons, following which the user can install the application by right-clicking a Silverlight applet.
Define an out-of-browser application using Visual Studio
Despite obvious parallels, Microsoft's approach is distinct from Adobe's AIR. Even out of the browser, Silverlight applications have no access to local resources other than isolated application storage. Developers can detect the state of the network and code for offline use, but without any equivalent to AIR's local database engine.
A Silverlight application cannot appear in the notification area and cannot call web services unless they are marked to allow cross-domain access. Twitter is a well-known case that does not. Another Silverlight limitation versus AIR is that there is no WebKit to render HTML; your app has to be pure Silverlight.
The gain here is that a SLOOB requires no elevated permissions. Guthrie says this was a customer request. "Unless you are a top 20 site, customers won't install anything that is full trust," he told a .NET user group last week. Despite limitations, a SLOOB is a convenient means of running an applet without first navigating to a web page. Guthrie says that future versions are likely to have more options for extending the sandbox.
Silverlight 3.0 has plugged many gaps that existed in past versions of the player, but not all. There is no rich text editor, while access to local devices such as webcams, microphones, bar code readers or printers is weak.
Microsoft says it is working on all these things, which at the current rate of progress one can easily believe. That still leaves the question: is Silverlight really necessary, given that we have Flash, Java and AJAX, all of which have better cross-platform credentials and broader support?
The answer is that Silverlight makes great sense for Microsoft-platform sites aiming to visualize data, take .NET applications cross-platform, or extend web applications in ways that are difficult using AJAX. Tool support is not quite there, but once Blend 3.0 and Visual Studio 2010 are available, the company will have a great end-to-end RIA story.
The attraction for those outside the Microsoft camp is less clear. The development tools may be better, but SketchFlow aside, Adobe's Creative Suite is in a league of its own for designers.
Silverlight adoption is growing, with riastats.com reporting around 30 per cent installed base of active browsers, rising to over 40 per cent in certain counties such as the UK. That is a 50 per cent increase since March. On the other hand, Flash is more than 95 per cent, and Google even named Adobe a partner for its forthcoming Chrome OS. On mobile devices, Silverlight has yet to get started.
Despite these reservations, Silverlight is shaping up to be what client-side .NET should have been from the beginning: lightweight, high-performance, cross-platform, and supported by a rich GUI framework that takes a sane approach to layout. There is room for this alongside Flash. ®