Afterwood
A tweet recently appeared in my timeline that caused me to go all Obi-Wan Kenobi and exclaim “now there’s a name I’ve not heard in a very long time”. The name was Phil Karn, although his twitter handle of KA9Q might ring a few bells to those in the amateur (ham) radio scene. But that’s not where I know his name from, at least, not directly.
My first professional programming gig was with a small software house (GST) in the UK back in the early ‘90s. This was an era where we weren’t all permanently connected to the Internet. Although small, the company had a Novell NetWare network on which we could send internal email using the Pegasus Mail (aka pmail) DOS based email client which had special support for Novell NetWare. However, it didn’t have any native support for sending email over the Internet because there was no formal TCP/IP support in DOS.
Enter stage left: Phil Karn.
Back in the mid ’80s Phil wrote a TCP/IP application called KA9Q [1] (the name being based on his ham radio callsign) which he later ported to MS-DOS. This application allowed a PC to connect to the Internet via a modem and came bundled with a number of popular clients such as Telnet, FTP, and, more importantly for this story, SMTP. (At the time KA9Q was referred to as a NOS – Network Operating System – because networking wasn’t a ubiquitous part of an OS like it is today.) Another key feature of this application was that the source was freely available, so you could add support for additional hardware, fix bugs, etc.
Although the Novell NetWare sysadmin at GST was also an amateur radio fan, apparently it was another employee (John Bradley) who worked out that if they could fork KA9Q and tweak the SMTP server code to work with PMail / NetWare it would allow the company to send and receive mail externally, as well as internally. And thus was born “nonet” – a [NO]vell fork of the KA9Q net program that delivered incoming mail directly to a NetWare user’s inbox.
Of course, it wasn’t quite that simple as a direct Internet connection cost a small fortune, but luckily Demon Internet [2] had started its “tenner-a-month” offering (£10 + VAT being the subscription price) in the UK which allowed mere mortals and small companies to “get on the internet” at a more affordable price. You still had to pay telephone call charges which meant you couldn’t simply leave your modem permanently online, but using a classic scheduler like cron allowed you to regularly dial-up, exchange emails, and then disconnect – a process affectionately known as a “blink”. (Although the modem handshake alone took way longer than the blink of an eye, let alone the actual exchange of emails!)
This all happened before I even joined GST so you’re probably wondering where this somewhat obscure history lesson is going…
Eventually the existing maintainer of Nonet (John Bradley) left the company, and somebody needed to take over the reins because either a change in PMail or NetWare (I’m hazy on the details 30 years later) was causing a problem. Actually, I had already started taking an interest in networking and KA9Q because I realised I could use its FTP client to download this up-and-coming new UNIX-like OS for PCs (and the Atari TT) called “Linux”. The company was also spending more time connected to the Internet due to the rise in Internet email and despite my best efforts to reconfigure the concurrency of the built-in SMTP server, a bug when handling bounced emails meant it was too unreliable and I had to revert it back to one.
With a genuine need to fix a couple of problems affecting the company, and my newfound skills in the C programming language, I rolled up my sleeves and offered to dive in and fix things. Except this was not just a simple C console application, it was like nothing I had seen before. To concurrently handle sending and receiving TCP/IP traffic while also processing screen and keyboard I/O on an OS with no built-in multi-tasking capabilities meant Phil had to implement his own form of co-operative multi-tasking which he did using coroutines and some clever hacks. This codebase wasn’t something you could easily attach a debugger to and single-step around the code and I wasn’t nearly clever enough to understand how it all worked, so I resorted to printf style debugging and a fast edit, compile, test loop. In the end I fixed the most pressing issue but the “bouncing email” hang continued to elude me.
With the fix in place and working nicely I realised there were other companies out there also relying on this free tool and so I had to put together a “formal” release (source and binary), upload it to various FTP servers, CiX, etc. and announce it. I also realised that I needed to update the support details in the README and become the point of contact for NOnet going forward, at least, until I also left the company a couple of years later. And so this was my introduction to becoming a maintainer of (a tiny fork) of an open source project.
Over the following 30 years I’ve written and released more than 30 free tools of my own, all with source code freely available, and with at least basic documentation, installer, etc. and continued to support them when I can (sometimes on company time, when they have benefitted from them, but mostly on my daily commute by train).
I only realised later that I had automatically given this stuff away, although I seriously doubt there is any value in any of it anyway. I now have genuine admiration too for those people that do start a company and turn their software projects into a saleable product. Hence, I attribute at least some part of my (unconscious) decision to adopt an (informal) open source model for my own tools to Phil Karn and KA9Q because it seemed like the right thing to do. My professional programming career has allowed me to stand on the shoulders of giants and I’m glad that I have been able to use my own position of privilege to contribute something (no matter how small) back to the software community.
[1] http://www.ka9q.net/code/ka9qnos
[2] https://en.wikipedia.org/wiki/Demon_Internet
Chris Oldwood
23 July 2023
Chris is a freelance programmer who started out as a bedroom
coder in the 80’s writing assembly language on 8-bit micros. These days it's
enterprise grade technology in plush corporate offices from the comfort of
his breakfast bar. He has resumed commentating on the Godmanchester duck race but
continues to be easily distracted by emails and DMs to gort@cix.co.uk and
@chrisoldwood.