I was recently thinking about the way Silverlight was designed and deployed to the world. Contrary to most Microsoft products, Silverlight is fully supported among the mainstream operating systems like Windows, Mac and even Linux. Silverlight is also just under 2 megabytes to download and install fairly quickly. Once you have Silverlight installed you can now go to any site that uses Silverlight as apart of their web platform. But the interesting part about Silverlight is in its architecture, more specifically it's client-side architecture.
Silverlight includes an embed CLR that is roughly 2mb in size. When an application is developed using Silverlight it is packaged into a .xap with a manifest, markup and code files. The package is downloaded and the main visual is loaded from the app.xaml page in the Silverlight app. Any code that was included in the package is executed on the client-side. What this means is that any logic performed against the interaction, web service calls..etc are executed right there on the client without having to perform constant post-backs. This leaves the server available to do it's primary role - serve.
On the development side, Silverlight supports all .NET languages as well as a few dynamic languages like Python and Ruby. Whenever you do happen to use any one of these languages you get the full benefits of Visual Studio, Intellisense and a wonderful interactive designer like Expression. But what I have myself concerned with at the moment is on how Silverlight applications are being accessed versus how they could be accessed and viewed.
The Desktop
A desktop application, in a traditional sense, is a anything that must follow the following steps to be used:
- Download program installer
- Run installer (or create a build file and run that)
- Choose where it should be installed to
- Find the program on your system
- Run the program
A web application, in the traditional sense as well, is anything that must follow the following steps to be used:
- Search for content (or enter bookmark)
- Use web application
- Isolated storage for application content
- Stateful and consistent interaction (although not always : P )