January 28, 2004

Please Sir May I Have a Linker?

Excellent rant by Joel Spolsky on the latest Microsoft VisualStudio.NET and it's curious omission... bq. For some reason, Microsoft's brilliant and cutting-edge .NET development environment left out one crucial tool... a tool that has been common in software development environments since, oh, about 1950, and taken so much for granted that it's incredibly strange that nobody noticed that .NET doesn't really have one. bq. The tool in question? A linker. Here's what a linker does. It combines the compiled version of your program with the compiled versions of all the library functions that your program uses. Then, it removes any library functions that your program does not use. Finally, it produces a single executable binary program which people can run on their computers. bq. Instead, .NET has this idea of a "runtime" ... a big 22 MB steaming heap of code that is linked dynamically and which everybody has to have on their computers before they can use .NET applications. And more - he talked a bit about installing a small application on three different machines at his office and having to take a couple hours doing it. He put a copy of the movie Office Space on and the movie finished before he was done. Here he is talking about his companies product and how potential customers can download a free demo version of it: bq. Almost all of our users download a free trial version before buying the product. The download is around 9 MB and has no additional requirements. Almost none of these users has the .NET runtime yet. bq. If we asked our trial users, usually small organizations and home users, to go through a movie-length installation hell just to try our app, I think we'd probably lose 95% of them. These are not customers yet, they're prospects, and I can't afford to give up 95% of my prospects just to use a nicer development environment. bq. "But Joel," people say, "eventually enough people will have the runtime and this problem will go away." bq. I thought that too, then I realized that every six or twelve months Microsoft ships a new version of the runtime, and the gradually increasing number of people that have it deflates again to zero. And I'll be damned if I'm going to struggle to test my app on three different versions of the runtime just so I can get the benefit of the 1.2% of the installed base that has one of the three. bq. I just want to link everything I need in a single static EXE that runs without any installation prerequisites. I don't mind if it's a bit bigger. All I would need is the functions that I actually use, the byte code interpreter, and little bit of runtime stuff. I don't need the entire C# compiler which is a part of the runtime. I promise CityDesk doesn't need to compile any C# source code. I don't need all 22 MB. What I need is probably five or six MB, at most. Very true - I almost consider MS C 5.0 to be the crown jewel of compliers. I am not a fan of C++, I don't do big projects and the feature set of C++ is not needed. Every version since 5.0 has had more bloat, larger EXE's for the same source code and slower performance. It is true that there is a greater feature set and if one was working with a number of other programmers on a large project, upgrading would make a lot of sense. Still, for small utilities and hacks, simple is better. Posted by DaveH at January 28, 2004 4:15 PM