Historia de Asterisk PBX

Mark empezó en el mundo Linux con Slackware en 1994 (kernel versión 1.09). Uno de los pocos en Auburn, Alabama por aquellos tiempos que conocía cualquier cosa sobre Linux. Después de una temporada con Adtran (un proveedor global de equipos de telecomunicaciones) creó su propia compañía.

Asterisk, la aplicación de centralita telefónica PBX bajo licencia GPL, fue desarrollada por Mark Spencer, entonces estudiante de ingeniería informática en la Universidad de Auburn, Alabama. Mark había creado en 1999 la empresa "Linux Support Services" con el objetivo de dar soporte a usuarios de Linux. Para ello necesitaba una centralita telefónica, pero ante la imposibilidad de adquirirla dados sus elevados precios, decidió construir una con un PC bajo Linux, utilizando lenguaje C.

Este fue el principio del fenómeno mundialmente conocido como Asterisk®, la centralita telefónica construida por Mark después de su experiencia desarrollando GAIM (ahora llamado Pidgin) entre otros proyectos de software libre.

Mark Spencer
Imagen: (Wikipedia)
Mark Spencer en el 2006 O'Reilly Emerging Telephony Conference.

Después de explicarles sus necesidades de capital a sus amigos en Adtran ellos se ofrecieron a invertir en su compañía. Se dio cuenta que recibía más interés en el PBX Asterisk que por sus servicios generales de consultoría Linux. Entonces mark se reunió con Jim Dixon que estaba construyendo hardware open source. Su primer proyecto fue construir una tarjeta T1 open source. Estos ingresos les mantenían a flote pero no recibían contribuciones de nadie y el resto tan solo cogían sus diseños y manufacturaban tarjetas que competían con las suyas.

Posteriormente "Linux Support Services" se convertiría en el año 2002 en "Digium", redirigiendo sus objetivos al desarrollo y soporte de Asterisk...

Linux Support Services
Imagen: (Web Archive) El banner de Linux Support Services

El dinero era escaso en Digium hasta que un día un vendedor de DeltaCom (una competitiva compañía de comercio local) entró para venderles a Mark y a Jim una T1. Después de entender lo que Mark y Jim habían hecho el vendedor se ofreció a ayudarles. A partir de este punto empezaron a ver un incremento en las ventas, y acabaron el año con beneficios. Después de grandes ingresos durante largo tiempo Mark fue capaz de hacer crecer el negoció sin recabar mucho en los beneficios.

Cuando Mark empezó con Asterisk hizo una cosa muy inteligente. Se le requería firmar un acuerdo a cada desarrollador que contribuía en el código para que el copyright se asignara a Asterisk y el compromiso que no hay encumbramientos en el código contribuido. Esto le permitió sentirse confortable con su proyecto que era completamente open source y que su compañía podría relicenciar el código a vendedores OEM como 3COM y NTT. Digium también ha hecho las cosas bien al mantener la versión de la comunidad con las funcionalidad completa y no crear una escisión entre ellos y los que los apoyan.

La primera release fue Asterisk 0.1, y el tarball ocupaba tan sólo 124.3K que una vez descompactado venían a ser unos 506 KB en 96 archivos. Para correr Asterisk necesitábamos básicamente Linux y libaudiofile:

The Asterisk Open Source PBX
by Mark Spencer <markster@linux-supp***.***>
Copyright (C) 1999, Linux Support Services, LLC and Adtran, Inc.
================================================================
* WHAT IS ASTERISK
Asterisk is an Open Source PBX and telephony toolkit.  It is, in a
sense, middleware between Internet and telephony channels on the bottom,
and Internet and telephony applications at the top.  For more information
on the project itself, please visit the Asterisk home page at:
http://www.asteriskpbx.com
* REQUIRED COMPONENTS
== Linux ==
Currently, the Asterisk Open Source PBX is only known to run on the
Linux OS, although it may be portable to other UNIX-like operating systems
as well.
== libaudiofile ==
If you want to use format_wav module, then you need a very recent
version of libaudiofile (at least version 0.2.0, or you can apply the
following patch to version 0.1.9):
</markster@linux-supp***.***>

Esta primera release fue liberada en 1999 bajo licencia GPL2 pero tenia clausulas adicionales que indicaban que en todos los productos derivados debía constar el nombre de Linux Support Services, LLC o Adtran Inc., también advertían sobre códecs cubiertos por patentes de software, y la más curiosa es que si emprendíamos acciones legales por infringir patentes en referencia a algún software Open Source nuestro derecho a usar o distribuir el software se terminaba de inmediato:

=================================================================
Please note that Asterisk is distributed under the GNU General 
Public License, with the following additional notices (some of
these notices may be revised or relaxed in future releases):
a) All distributions or derivative works MUST not remove
the name of Linux Support Services, LLC or Adtran, Inc. from 
the product.
b) Some codecs included in the full Asterisk distribution
*may* be covered by software patents.  
c) If You bring legal action against an organization or 
individual for patent infringement regarding any Open Source 
software (as defined by the Open Source Definition available at
http://www.opensource.org/osd.html) then your right to use and/or
distribute this software is immediately terminated.
=================================================================

De todos modos estas clausulas duraron bien poco, ya que de los primeros cambios que se hicieron para la release 0.1.1 fue aparte de arreglar numerosos bugs revisar la licencia que pasó a ser pura GPL, y nada más.

* Asterisk 0.1.1
-- Revised translator, fixed some general race conditions throughout *
-- Made dialer somewhat more aware of incompatible voice channels
-- Added Voice Modem driver and A/Open Modem Driver stub
-- Added MP3 decoder channel
-- Added Microsoft WAV49 support
-- Revised License -- Pure GPL, nothing else
-- Modified Copyright statement since code is still currently owned by author
-- Added RAW GSM headerless data format
-- Innumerable bug fixes

Asterisk está formado por varios paquetes:

  • Asterisk: Ficheros base del proyecto.
  • Zaptel: Soporte para hardware. Drivers de tarjetas.
  • Addons: Complementos y añadidos del paquete Asterisk. Opcional.
  • Libpri: Soporte para conexiones digitales. Opcional.
  • Sounds: Aporta sonidos y frases en diferentes idiomas.

Zaptel, inicialmente llamado Zapata se basó en el Zapata Telephony Project, el driver Open Source de Zapata Telephony (anteriormente llamada BSD Telephony Of Mexico).

Zapata Telephony
Imagen: (Zapata Telephony Project) Emiliano Zapata, nuestra inspiración

La primera release fue Zapata 0.1.1, que venía a ser el original liberado por Zapata Telephony en Octubre del año 2000. De hecho no se introducieron cambios hasta la release 0.1.6, donde se movieron las estructuras de red para usar malloc() cuando fuera necesario, se le añadió soporte HDLC PPP, junto con algunos arreglos multicanal en Torisa y Zaptel:

...
0.1.6:
* Move network structures to be malloc()'d when needed
* Add HDLC PPP Support
* Fix multi-channel stuff in zaptel and torisa

En la primera release, Libpri 0.1 Markster nos relataba que libpri era la implementación en C de la especificación para primarios RDSI basado en la especifiación de Bellcore del 12 de Mayo de 2001, por aquel entonces Asterisk pasó a ofrecer soporte para conexiones digitales:

libpri: An implementation of Primate Rate ISDN
Written by Mark Spencer <markster@linux-supp***.***>
What is libpri?
===============
libpri is a C implementation of the Primary Rate ISDN specification.  It was
based on the Bellcore specification SR-NWT-002343 for National ISDN.  As of
May 12, 2001, it has been tested work with NI-2, Nortel DMS-100, and Lucent 5E Custom protocols on switches from Nortel and Lucent.
</markster@linux-supp***.***>

Las funcionalidades y añadidos que no podían ser incluidas en el núcleo se fueron incorporando al paquete Addons, y también se pasó a ofrecer paquetes de sonidos.

En la release 1.4.0, Asterisk ya contaba con:

Líneas de código fuente 250.463
Esfuerzo estimado de desarrollo (persona/año - persona/mes) 66,03 - 792,30
Estimación de tiempo (años) 2,63
Estimación de número de desarrolladores en paralelo 25,08
Coste total estimado 8.919.128 $

Lenguajes de programación en Asterisk 1.4.0:

Lenguaje Líneas de código Porcentaje
ANSI C 232.514 92,83%
sh 7.550 3,01%
cpp 5.815 2,32%
perl 2.259 0,90%
yacc 1.508 0,60%
asm 642 0,26%
tcl 113 0,05%
PHP 62 0,02%

El desarrollo de Asterisk continúa imparable, donde ya tenemos cinco betas de la release 1.6 que aportaran de nuevo un gran número de cambios y mejoras entre ellos una muy esperada reescritura del chan_sip, mejoras para videoconoferencia, JACK ,....

Cuando se le pregunta a Mark sobre el futuro del hardware open source no esta convencido que funcione de la misma manera que el software open source. El cita la barrera para entrar en la producción de hardware en contra de el punto mucho más bajo para entrar en el desarrollo de software. En ejemplo es el Open Cores Project que corre en Field Programmable Gate Arrays(FPGA).

Fuentes:

Wikipedia:

Mark Spencer

Asterisk

Otros:

Zapata Telephony

Digium

Socialized software