Joel on Linkers

Joel Spolsky has an article called Please Sir May I Have a Linker that I half agree with and half disagree with.

 

I agree with him that it would be excellent if I could somehow build a .NET application that didn’t require the runtime.  There is actually a product by Remotesoft called Salamander that sort of makes your .NET app install and run without the framework, but it does so by bundling a stripped down framework with your application, which seems like a pretty big hack to me (and you’ll miss out on any updates to the framework).

 

However, the number of systems that have the framework on it is increasing steadily, and it is becoming less of a problem.  We shipped ZIM SMS Chat recently, a .NET based app, and users seem to be doing a fine job of downloading it and running it.  I looked into this a little while ago and found some good statistics, including:


  • 60 percent of new systems sold come pre-loaded with the framework.

  • The framework is included (though not installed by default) with Microsoft Office 2003, and is installed when you install some optional parts of Office, so many users have it that way.

  • There have been something like 19 million downloads of the framework from Windows Update.

Apps built with .NET are generally tiny, since the framework includes so much code that you can leverage.  In Joel’s example, his application might go from 9mb to 2mb or 3mb if built with the .NET framework. 

 

His other point is that when Microsoft ships a new version of the runtime, everyone must download it.  This is bogus – SMS Chat runs on 1.0 or 1.1 of the framework just fine.  If you have 1.0, you don’t have to download 1.1 to run it, but if you do have 1.1 and not 1.0, that’s fine.

 

Microsoft does seem to live in this dream world where everyone has the framework installed, or has broadband, and it’s true that getting it onto a user’s system is a pain, but IMHO this is more than made up for by the ease of development that the framework provides, and the fact that there’s a huge set of code that you can use without having to locate and install yet another third party DLL.

 

Think about it.  You’re writing a little app and you want to store your settings in an XML file.  Normally, it’s not worth the pain of bundling the MSXML setup with your own setup just to read a single XML file.. but in the .NET world, you know that anywhere your app runs, there’s a framework.  And code to read PNG files.  And a fair number of encryption algorithms.  And all kinds of other stuff.