Dienstag, 8. Oktober 2013

Digging The PuTTY Sources

Since many years I'm a heavy user of the SSH client PuTTY. Some days back I had the idea to take a look at the PuTTY sources. Not that I wouldn't trust the software. It was pure curiosity to see how the software I've been using for such a long time, is actually created.

The Main PuTTY Configuration Screen On Windows
The sources can be downloaded from the web page. First of all I've noticed that PuTTY supports not only Windows (where I'm mainly on) but also Linux and Mac OS X (to some extend).

To be portable as much as possible PuTTY is written in pure ANSI C (C89/ C90). It is impressive on how many different compilers the sources obviously compile. The code itself is well structured and not too cryptic (beside some functions which I personally might have distributed into smaller ones).

Since we're on ANSI C there is no standard library support for wildcard matching (required for sftp). Hence, the PuTTY team went for an own implementation (see wildcard.c). I seriously hope that I've never have to implement something like this - praise to good library support ;-)

To auto generate the makefiles required for the different target environments PuTTY is utilizing a Perl program called mkfile.pl. This is a handcrafted solution of the PuTTY team, Cmake and automake would be popular open source tools for the same kind of task.

The PuTTY authors (it's actually mainly Simon Tatham) keep a clear separation between platform depended and independed code. I found the implementation very well done. There will by a separate blog post about the implementation of the different communication protocols the PuTTY suite is supporting (ssh, telnet, raw...).

Although I'm a big fan of the Test Driven Development approach, it's calming to see it is still possible to go without ;-) However, I did find some traces of where test data is generated. Also, cmdgen.c, a command line version of the SSH public/ private key generator PuTTYgen, contains some functionality to run external tests. That is taking the binary produced and call it with different arguments while testing for the result.

Also, the code comments are very well written.

The PuTTY Sources Contain Many Helpful Comments And Explainations

Conclusion: for gaining an inside in the work of a seasoned C programmer, the PuTTY source are more than worth spending some time and coffee.