You are here

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 la funcionalidad completa y no crear una escisión entre ellos y los que los apoyan.

La primera release fue Asterisk 0.1 (Diciembre de 1999), 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 (Noviembre 2001), que venía a ser muy parecido al original liberado por Zapata Telephony en Octubre del año 2000. De hecho no se introducieron cambios importantes hasta la release 0.1.6 (Marzo 2002), 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 (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.

El lanzamiento de Asterisk 1.0 (Setiembre 2004) fue anunciado por Mark durante la Astricon. El tarball de Asterisk 1.0.0 pesaba unos 9 MB, y ya varias compañías daban soporte al desarrollo de Asterisk: Pilosoft, Inc. (soporte al desarollo ADSI), GFS (soporte al desarrollo ALSA), Telesthetic (soporte al desarrollo SIP), Paul Bagyenda, Digital Solutions (desarrollo inicial del driver Voicetronix), entre otros muchos desarrolladores que contribuían como Christos Ricudis que realizó importantes aportes al código de Asterisk.

Con un changelog mucho más amplio ya, puesto que desde la release incial se habían resuelto unos 340 bugs, se disponía de canales IAX2, SIP, PRI, Zap, OSS, backends para CDR, mejoras en el soporte para FreeBSD/OpenBSD/MacOS X, mejoras en H.323, se añadió el codec iLBC, G.726, G.729, LPC10, ADPCM, speech, u-law, formato GSM WAV, formato de fichero PCM, también MP3 aunque luego se quitó, soporte para ISDN4Linux e incluso soporte para vídeo en el canal SIP e IAX2. También se disponia de DISA, ENUM, voicemail, transferencias, autenticación de propósito general, macros, conferencia MeetMe, AGI, grabaciones, call parking, soporte para múltiples idiomas, se eliminó la dependencia con libaudiofile, entre otras muchas mejoras como el control del eco.

Asterisk 1.0.0 ya tenía soporte para diferente hardware Zaptel entre otros:

A PBX is only really useful if you can get calls into it.  Of course, you
can use Asterisk with VoIP calls (SIP, H.323, IAX), but you can also talk
to the real PSTN through various cards.

Supported Hardware is divided into two general groups:  Zaptel devices and
non-zaptel devices.  The Zaptel compatible hardware supports pseudo-TDM
conferencing and all call features through chan_zap, whereas non-zaptel
compatible hardware may have different features.

Zaptel compatible hardware
==========================

-- Digium (Primary author of Asterisk)
        http://www.digium.com, http://store.yahoo.com/asteriskpbx

   * Wildcard X100P - Single FXO interface connects to Loopstart phone
     line

   * Wildcard T400P (obsolete) - Quad T1 interface connects to four T1/PRI
     interfaces.  Supports RBS and PRI voice and PPP, FR, and HDLC data.

   * Wildcard E400P (obsolete)- Quad E1 interface connects to four E1/PRI
     (or PRA) interfaces.  Supports PRA/PRI, EuroISDN voice and data.

   * Wildcard T100P - Single T1 interface connects to a single T1/PRI
     interface.  Supports RBS and PRI voice and PPP, FR, and HDLC data.

   * Wildcard E100P - Single E1 interface connects to a single E1/PRI (or PRA)
     interface.  Supports PRA/PRI, EuroISDN voice and PPP, FR, HDLC data.

   * Wildcard S100U - Single FXS interface connects to a standard analog
     telephone.

   * Wildcard TDM400P - Quad Modular FXS interface connects to standard
     analog telephones.

   * Wildcard TE410P - Quad T1/E1 switchable interface.  Supports PRI and
     RBS signalling, as well as PPP, FR, and HDLC data modes.

Non-zaptel compatible hardware
==============================

-- QuickNet, Inc.
       http://www.quicknet.net

   * Internet PhoneJack - Single FXS interface.  Supports Linux telephony
     interface.  DSP compression built-in.

   * Internet LineJack - Single FXS or FXO interface.  Supports Linux
     telephony interface.

Miscellaneous other interfaces
==============================

-- ISDN4Linux
       http://www.isdn4linux.de/

   * Any ISDN terminal adapter supported by isdn4linux should provide
     connectivity.

-- ALSA
       http://www.alsa-project.org

   * Any ALSA compatible full-duplex sound card

-- OSS
       http://www.opensound.com

   * Any OSS compatible full-duplex sound card

Paralelamente a Asterisk fue lanzado Zaptel 1.0.0 (Setiembre 2004), tenía soporte para udev (kernel Linux 2.6), zttool tenía como dependencia a libnewt, parte del software también necesitaba la librería Zapata. Por aquel entonces existían problemas con la directiva PROSLIC_POWERSAVE, donde el audio se cortaba después de cuatro segundos:

README:
Zapata Telephony Interface Driver

Requirements:
        Some of the testing programs still require the zapata library
        The zttool program requires libnewt
[...]

README.udev:
UDEV -- What the heck is udev OR why did I get a message to read this?

This is the new mechanism of doing a dyamic /dev.
[...]

README.fxsusb:
Currently known bugs:
---------------------
* If PROSLIC_POWERSAVE is defined, the ability to send audio while on
hook is limited to four seconds after ring is turned off.

Libpri 1.0.0 (Septiembre 2004) traía algunas mejoras para Q.931 entre otros:

ChangeLog:
libpri 0.3.0
-- Fix talking to switch
-- Add pri dump
-- Add test application
-- Fix strncpy stuff
libpri 0.1.2
-- Added PRI_EVENT_HANGUP_ACK so you can know when the disconnect was
acknowledged

libpri 0.1.1
-- Added PRI_DEBUG_Q931_ANOMALY flag so that certain non-error-related
messages would not be output unless specifically desired.

libpri 0.1.0
 -- Initial release

TODO:
General:
-- D-Channel Backup
-- Test against 4e

Q.921:
-- Support unnumbered information frames

Q.931:
-- Locking Shift IE
-- Implement the 11 missing Q.931 timers

Un año más tarde (Noviembre 2005) se anunciaba el lanzamiento de la versión 1.0.10 de Asterisk y Zaptel. Libpri, Asterisk-addons, y Asterisk-sounds ya no presentaban cambios, lo cual ya dejaba entrever la discontinuidad de la rama 1.0 en favor de 1.2

Y efectivamente así fue, solo Asterisk llegó a la release 1.0.12 dejando paso a Asterisk 1.2.0 (Noviembre 2005). La nueva rama de Asterisk fue presentada durante la conferencia IP.4.IT en Las Vegas, Nevada. Asterisk 1.2 introducía sobre 3,000 funcionalidades y mejoras sobre el rendimiento global y eficiencia en el uso de la memoria.

Entre las principales novedades teníamos:

  • Mejora de las funcionalidades de voicemail
  • Añadido protocolo DUNDi (Distributed Universal Number Discovery)
  • Configuración de Asterisk más sencilla
  • Creación de un motor de almacenamiento de configuración en tiempo real sobre una base de datos
  • Un Asterisk Dialplan más potente
  • Introducción de Asterisk Extension Logic, un nuevo método flexible para configurar el dialplan
  • Nueva interficie para flujos de llamada IVR dinámicos
  • Acceso configurable a funcionalidades de llamada generales
  • Mejoras en el protocolo SIP
  • Nuevas funcionalidades para el protocolo IAX (Inter-Asterisk eXchange)
  • Uso de ficheros de sonido para la música en espera nativa
  • Soporte CDR customizable
  • Mejoras en el soporte PRI

En la release 1.4.0 (Setiembre 2006), 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

Blog Tom Keating: 1.0, 1.2

Asterisk: 
GNU/Linux: 
Qué te parece: