The Case for Freeware and Open Source Windows Tools

In our just-published book, Windows Developer Power Tools, we make the case that developers who limit their toolset to Microsoft’s Visual Studio (and the other tools your employer provides for you), are missing out on scores of incredibly useful, freely available tools.

That such freeware and open source software (FOSS) exists at all is a complete mystery to some software developers. "What's the point?" they ask. "Why would anyone spend time building stuff they're not getting paid for?" It’s a valid question, and not everyone will be satisfied with the answers FOSS proponents toss out. Commercial software certainly has its place, but the world of FOSS tools is an awfully compelling one.

First of all, FOSS offers tools, frameworks, utilities, and widgets you won’t find elsewhere. You can find everything from complete ready-to-run frameworks, such as the Enterprise Library and Mono, to tiny gadgets that do only small tasks (but do them very well), such as Unlocker or Cropper.

Second, mailing lists, online forums, and blogs abound for larger projects like NHibernate, Nunit, and DotNetNuke that are as robust as those you will find for commercial tools. Odds are that someone else has already solved the problems you're struggling with, and that by spending a bit of time with a search engine you'll find either the answers you're looking for or, at the very least, a pointer to a site or expert. An advantage of open source projects is that when a developer encounters a problem, he can often submit a patch that will actually resolve this problem instead of just posting a workaround in a forum, as is the case for most commercial solutions.

Third, and more ephemerally, there's a passion binding these tools that you generally don't find in commercial software. This passion keeps the project teams continuously improving their products, drawing on user feedback and new ideas to make their tools even better. I haven’t met many people more passionate than Phil Haack, the lead developer for the SubText blogging engine, or Jamie Cansdale, the developer of TestDriven.NET. These developers put their time and effort into these tools because they love writing software and because they believe in what their tools are making possible.

Fourth, you'll never have to worry about making sure you have enough licenses for your team. There have been plenty of times when the two of us have found a great commercial tool for a project but haven’t been able to use it because it would have required our client to purchase multiple licenses to equip an entire team. Now that we use FOSS tools almost exclusively, we can be sure that any tool we select can be provided to everyone on a team.

Lastly, open source tools are just plain cool. Because they’re open, you can delve into their source code and see how industry leaders like Charlie Poole, Ward Cunningham, or Ron Jeffries work their magic. That's an amazing resource to have available to help you expand your knowledge and improve your own code.

Still, many developers will wonder, if I’m using Visual Studio already, why do I need anything else? That's a very good question, particularly since it takes time and effort to get productive with any new tool, whether it's open source or Visual Studio. That's a cost/benefit tradeoff that should concern managers, team leaders, and developers, and Visual Studio Team System 2005 (VSTS) in particular has a broad feature set.

One answer is that VSTS doesn't do everything that developers might want to do as they build and test their applications, and for those tasks it does support, it doesn't always do them well. Furthermore, some developers like having the flexibility of performing particular tasks in ways that aren’t available through VSTS.

Many FOSS tools were written to fill specific gaps in VSTS's feature set. You can't get dependency information on your assemblies in VSTS, but you can use NDepend to generate detailed reports on your system's relationships. You can't use pair-wise testing in VSTS when you need to pass large amounts of data through complex methods, but you can use MbUnit to automatically generate data via factories and drastically cut the amount of data you need to supply. You can't use any part of VSTS to tell you which process has a lock on a specific file, but you can use Process Explorer or Unlocker to find out what's preventing you from using a file.

Finally, not everyone uses VSTS. Although it is a wonderful development environment, it's very expensive, resource-intensive, and beyond the reach of smaller shops. And even VSTS users will want a support channel to turn to for answers to the problems they will inevitably encounter. Open source and freeware tools bring incredible power to hobbyist developers, small development shops on tight budgets, and developers who just want to do things differently. Moreover, even well-established larger development teams may find FOSS tools can bring considerable value to their software development cycle.

To help you get started, here are five of our favorite tools (in no particular order) and where you can find them.

MbUnit is an advanced unit testing framework. It goes beyond Nunit and the Visual Studio Team System test framework to offer features like automatic database rollbacks, pair-wise testing, and row-based testing.

Subversion is the source-control system that we used to write our book. Subversion offers seamless source control that outperforms many of the commercial offerings and negates the only valid reason people ever used SourceSafe (since Subversion is free).

Nhibernate is an Object-Relation Mapper, which means it takes your business objects and maps them to your database, eliminating the redundant data access code we have all been writing for years, thus reducing defects and development time.

TestDriven.NET is a Visual Studio add-in which gives you the ability to run tests from just about any unit testing framework directly in the IDE. You can also quickly debug your tests, get coverage results, and much more.

SlickRun is the command prompt that you always wished Microsoft would build into Windows. You can create macros that execute commands and launch applications; for instance, you could create a macro called "morning" that would launch IE pointed to the Yahoo homepage, Outlook, and Visual Studio.

James Avery has been programming with Microsoft technologies for the last 7 years and has been working with .NET since the second beta release.

Jim Holmes has nearly 25 years experience in the IT industry, including network management, systems analysis, and software development in Perl, Java, C++, and .NET.