Friday, March 12, 2010

Disaster DIY: Adventures in Free and Open Source Software

This week's columnist is Jason Cote from Freeform Solutions. He writes:

Do you like to Do-It-Yourself (DIY)? This is a homage to all the DIY-ers out there. While I was being sucked into the black hole of my latest DIY adventure, I had the marginally comforting epiphany that despite it eating up all the time I had thought I would use to write this article, it also gave me a (cautionary?) tale to share.

First, the background. In October 2006, I set up my first Voice over Internet Protocol (VoIP) phone system using Asterisk. It is amazing what you can do with open source software. In this case, a truly ancient machine (circa 1999) had been pressed into service once more, after a life of file and web server drudgery. This time, the exciting horizon of VoIP beckoned. Maybe the hardware liked being on the cutting edge, since this little machine kept ticking over the years since then, through a failed power supply and a couple of failed hard drives.

My memories of the many frustrating hours spent learning how to put it all together have long since been romanticized, thanks to the time that’s passed since then. I do remember that I had wanted to set it up for some time, and I certainly remember discovering that I needed to know about a great many more things than I had originally anticipated. Nonetheless, eventually, I installed the necessary software and tucked the machine under my desk and tried to forget about it.

Cut to the present day. This week, the power supply failed again, or so I thought. I replaced it with another spare; the motherboard lit up, but the power supply would still not power up. I pulled what I could off the motherboard, and still no joy. No problem, I thought, this motherboard has been running 24/7 for a decade – I'll look at it later. In the meantime, I'll put the drives in another, newer, spare computer, and get the phone system back online.

If this were a movie, you would hear the spooky music right about now.

With the drives in another computer, Linux refused to initialize the storage. I was beginning to sense the black hole way in the distance. Hardware drivers are still the final frontier in open source software. There could be a firmware or other update required. Or, I may have missed changing some obscure system setting. Decision time: continue fussing with the old hardware, or spend my time installing a completely new system?

The old hardware never really stood a chance in this reckoning. For a long time, I have been wanting to install a new phone system, as a virtual machine on hardware located in a data centre. Now, with the old phone system sitting in pieces all around me, it was all too easy to fully commit to this new DIY adventure. I was firmly in the grip of the black hole.

I did not really want to spend much time discovering, evaluating, and comparing the options all over again, but so much has changed in the VoIP landscape over the last three-plus years. I needed to pick something, now. But so many choices. How should I choose? Should I follow the same direction as my original approach, or try something new? Should I support a purely community-driven effort, or one supported by commercial interests? Should I stand my ground on what license was being used? Should I pick something that looked pretty, or something that sounded well engineered?

One of the hardest things in using open source software effectively is knowing when to stop evaluating. If you dive into several projects and look at all these factors, you can be simply spoiled for choice. You’ve got to pick something, and go for it.

I remembered that clock timing issues had been a real problem when running in a virtual server the last time, so I looked for Asterisk-based distributions that seemed to have their virtual house in order.

I like the real or perceived performance improvements provided by paravirtualization over full virtualization, and this preference limits my options. I looked at one distribution, and it was clear they were not supporting paravirtualization by default. I looked at another distribution, which had documentation explaining how it could be paravirtualized; I tried it, but it did not work as advertised. If their website and documentation had been more polished, I would have tried harder. Instead, I found another distribution that claimed to make virtualizing fast and easy.

I was beginning to orbit the event horizon with alarming speed, so I committed.

Let me be clear in saying that this distribution did not work as advertised either. I was quite disappointed, since, other than new learning, my pursuit of the ready-to-run distributions left me empty handed. They did not deliver the value they promised: it was not faster, and it was not easier, unless you wanted to run it on a dedicated machine.

So, having gone through three explorations already – the original failed hardware, the inability of new hardware to boot the old drives, and attempts at virtualizing ready-to-run Asterisk distributions – I turned to the core open source software itself: Asterisk.

In the end, it only took a few manual tweaks to various Asterisk configuration files, and the use of the FreePBX configuration GUI. I quickly and easily created a VoIP telephone system, with all the trimmings – system recordings, a digital receptionist, inbound and outbound routes, extensions, etc. – in only a few hours. By just rolling up my sleeves and diving in with the core open source software I needed, eventually I made it through the black hole and emerged in a whole new universe of working VoIP goodness.

For this, I am extremely grateful. My sincerest thanks to all of us in the free and open source software community, for making things for DIY-ers to do. This is how my tale turned out. Others might end up in completely different places when starting at the same point. That’s a core strength of open source software: it gives us all choices, and the freedom to pursue them in any direction (including around in circles).

No comments: