What is Unix? Do you have to say UNIX? For some people, if it is not certified Seventh Edition from Bell Labs it isn't Unix. There used to be an emulator from Wollongong called Eunice that ran on VMS VAXes. That wasn't Unix. But all these other things, Ultrix, HP-UX, AIX, Solaris, Linux, all of it... they're Unix. Man pages, hierarchical file systems, Bourne shells, /etc/passwd. It's great that we can conjure up the vast differences between AIX and HP-UX just by mentioning their names. But they're both Unix.

When I started to learn about Unix in the 80's, I was also taking 400 level computer science classes - the ones where you study compiler design and operating systems. The university centered around the main frame, so I was used to JCL and languages other than C. Working from Unix made the abstractions of the operating system and compiler design (lex and yacc, right on the command line!) classes come alive. Compared to Unix, the virtual-punch-card method of computing seemed like kicking dead whales down the beach.

I became the junior dweeb on the systems staff at the computer center at a lucky time. I got to install Unix (ULTRIX 1.0) on the cast-off 750. I got sent to NSFnet meetings and USENIX conferences so that I could learn from folklore about RIP and sendmail.cf files. I got to install the reference implementation of NNTP and configure it, with Gene Spafford's help, so that my university and his university could exchange news over the NSFnet. I got to run the DNS and the computer where the first web server at the university ran. I got to fight hackers back when they used to put a directory called ... in your anonymous ftp directory.

Time rolled on and with the invention of Linux the need for shell-account Unix timesharing systems lessened. Unix system administration became more about serving systems than users. At the same time, the need for Unix system programming began to grow as Unix transitioned from obscurity to ubiquity. Mailservers tended to run on Unix, and spam was exploding, so there was a need for the development of Unix anti-spam programs.

It was generally easy to spot spam the instant you opened it. When they introduced milters to sendmail we got the chance to write programs that could spot spam and do something about it. I made a spam milter and when I was describing how it worked to my buddy over at Yahoo where they did a lot of spam fighting, he told me I was using Bayesian statistics.

One of the many good things about Unix is that there is usually something lying about that you can configure and use for whatever is needed. I was given the task of making a plug-in for us to use with a commercial provisioning engine we had that would cause all the right people to be members of all the right mailing lists. It occurred to me that awk, whose potential I had never really tapped, would work great. Here's some notes I wrote down to help me jump-start my awk-foo again in the future if needed.

Another time that Unix's bag of tricks proved itself to be sufficient came along while we were working on a project that involved data transformations. Blobs of XML would be sent around and the recipients would transform them into whatever local configurations were encoded in them. A shell script with an i, j, k loop in it was part of the transformation when the recipient was Unix. When there was a lot of data to transform, the i, j, k loop would be a giant bottleneck. My co-worker and I were looking for a way to optimise the loop. He drew a venn diagram and colored in a few places where there was overlap. He figured we could almost do the whole problem with diff. If only there was a "comm"... man -k common... there is a comm! We replaced the whole i, j, k loop with a couple of diffs and a comm and the bottleneck was gone.

We had a few projects that were somewhat complex. One of the legacy ones had a handmade build system of Makefiles and assorted goo. This drove me to finally study autotools ending up with this general purpose prepare script. Nothing says Unix like configure/make/make-install. The GNU Autoconf manual is probably the best guide to helping you construct autotools configuration files. I ended up helping setup the build system for a project one of my co-workers was working on. I tried to make stuff work like he wanted by listening to him talk about it while simultaneously reading between the lines of the GNU Autoconf manual. The build system ended up using the convenience libraries you can read about in the manual. I made a dummy project that uses convenience libraries and committed it here to my github repository.