Appendix C. The History of FreeSWITCH
In order to properly explain the origin of FreeSWITCH, we have to go back to the time before we even had the idea to write it. The VoIP revolution really began to take shape at the turn of the century with the creation of both the Asterisk PBX and OpenH323. Both of these pioneering software packages enabled many developers to have access to VoIP resources without paying for a costly commercial solution. This led to many new innovations in both projects, and the rapid spread of the evidence that true usability of IP telephony did indeed exist.
I first got involved in the industry in 2002, when my company at the time was selling outsourced technical support and we needed a way to manage the calls and send the traffic to an off-site location. We were using a commercial solution but it was costly to deploy and had very over-priced per-seat charges on top of that. I had done a lot of work with open source applications such as Apache and MySQL in my past duties as a web hosting platform architect, so I decided to do some research on the existence of any open source telephony applications. Enter Asterisk.
When I first downloaded Asterisk, I was amazed. I got some analog telephone cards to use with it and here I was at my house, with a dial tone on a phone that was plugged into the back of my Linux PC. Wow! That’s crazy! It wasn’t long before I started immersing myself in the code, trying to figure out how it worked. I learned quickly that it was possible to extend this software to do other things based on loadable dynamic modules just like Apache. I started digging around and worked up a few test modules. This was better than ever. Now I was not only making my phone talk with PC, I was making it execute my own code when I dialed a certain number.
I played around with a few ideas and then the thought dawned on me. Hey! I really like Perl, and this telephone stuff is pretty cool too. What if I try to combine them? I looked into the documentation on embedding Perl into a C application and before I knew it I had app_perl.so
, a loadable module for Asterisk that would allow me to execute Perl code of my choice when a call was routed to my module. It wasn’t perfect, and I started to learn quickly about the challenge of embedding Perl in a multi-threaded application, but it was at least an awesome proof of concept and quite the accomplishment for a few days of tinkering.
As time progressed, I was drawn deeper into the Asterisk online community. After playing with the code for a few weeks, I began working on some call-center solutions using Asterisk as the telephony engine and some home-grown web applications as a frontend. Along the way, I encountered some bugs in Asterisk, so I submitted them to the issue tracker for inclusion to the development branch. The more this process repeated, the deeper my involvement in the project grew, and I began creating improvements to the software as well as just sporadic fixes to bugs. By 2004, I was actually fixing bugs that other people reported as well as my own. It was the least I felt I could do for having a free solution to all of my problems. If my problems would actually be solved still remained to be seen.