For a number of reasons of practicality, I run Windows XP on my work laptop. However my job is mainly UNIX-focused, and all of the coding I do is in historically UNIX tools (perl, shell, etc.) I have a Redhat linux desktop available for my use in the office, but sometimes I like to do work remotely with my laptop and in some cases it’s not possible or convenient to be online and VPN connected while I am working.

Recently I have been setting up my Windows-based laptop for maximum productivity for use as an offline code editing system. I don’t need to actually run the code I am working on under the Windows environment, so mainly what I needed was source code control and editing capabilities. I’ve found several tools that come together to create a really nice development environment under Windows – for free.


For editing, a colleague turned me on to Notepad++ – an open source “replacement” for the bundled Windows Notepad. I put the word replacement in quotes, as Notepad++ is far more advanced than the basic Notepad text editor that ships with Windows. It supports syntax highlighting out of the box for a variety of languages (including C, perl, shell scripting, and most other popular languages) as well as easy support for user defined language syntax highlighting (which I have been playing with to create a syntax highlighting profile for cfengine). It supports multiple document editing using tabs and has a ton of features that I have yet to scratch the surface of.

I’ve used CVS for revision control for years and continue to use it for the source code I write today. I’m pretty comfortable with the command line CVS, but I hadn’t used Windows graphical CVS clients. After a little googling, I found WinCVS – a graphical windows interface to CVS. It looks somewhat similar to a Windows Explorer window although it includes additional file detail fields for things such as revision date (and you can open a WinCVS window by right clicking a folder in the explorer and selecting Browse with WinCVS). One of the great things about WinCVS is that you can integrate it with other tools to automatically open all files with your editor of choice (Notepad++ in my case) and you can use a custom diff.

By default WinCVS will display a “regular” dff output in the console area of the window. I’ve never been very fond of looking at diff output, and since I am using Windows I may as well take advantage of a GUI diff utility. The one I’ve started using is WinMerge. It integrates nicely with WinCVS so that if I want to diff my current working copy of a file with the current checked-in copy (or an earlier version) I can just right click the file within WinCVS and select “diff” and it will check out the old version, as needed, and open a WinCVS window to show the two side by side.

The actual CVS remote access interface I’m using is ssh, and under windows I very much prefer the free ssh client PuTTY. The PuTTY package includes a command line ssh client called plink intended for use with programs such as WinCVS. Because I don’t want to have to type my password in every time, I have set up plink to authenticate using KERBEROS but for environments that don’t use KERBEROS you can use ssh public key authentication using the PuTTY Windows version of ssh-agent called pageant.

This combination of tools has made my Windows laptop environment very productive for software development. Of course I haven’t addressed the execution environment at all – I don’t have a need to run what I’m developing on my laptop but if you do I suggest you look at Cygwin’s POSIX environment for Windows. I do use the free Cygwin/X X server which works great and is very easy to install using the Cygwin setup.exe package installer.