El lenguaje del chat

Erlang started as Ericsson's solution to updating software without shutting down systems. Created in 1986 by Joe Armstrong, Mike Williams, and others, it became famous when WhatsApp used it to handle millions of users with a tiny engineering team.
Chapters
¿Recuerdas qué sucedió con WhatsApp en 2014? Fue vendida a Facebook y la noticia se hizo viral con diferentes titulares. Algunos apuntaban a la maravillosa posición del mercado que había logrado WhatsApp, considerada la aplicación de chat de facto. Todo el mundo tiene WhatsApp, ¿no?
Otros apuntaban al reducido tamaño del departamento técnico de la empresa en contraposición a los números de sus usuarios. ¿Cómo es posible gestionar tantos millones de usuarios con tan solo 50 ingenieros?
Y otros... Comenzaron a hacerse eco de Erlang, ese lenguaje de raíces suecas que daría de qué hablar. Hoy os contamos sus éxitos, fracasos y, sobre todo, su historia. Antes de continuar, un inciso: ¿Te gustaría apoyar a nuestro canal? No olvides que puedes suscribirte y activar la campanita para no perderte futuro contenido. También se agradecen me gustas, Y además, si nos prefieres en formato podcast, podemos acompañarte desde Spotify. Ahora sí, continúa. Todo comienza en la década de 1980. Ericsson desarrollaba aparatos para telefonía, pero tenía un problema: el lenguaje PLEX no era lo suficientemente flexible, cada actualización requería un apagado de la máquina completa y no había garantías de funcionalidad correcta. Si sucedía un error, todo caía.
Pero, ¿no es así como funcionan los sistemas normalmente? ¿No es normal ver carteles de mantenimiento en webs hoy en día?
Sí, pero no en telefonía. Imagina que tienes que llamar a alguien y el teléfono no funciona, o te dice que está en mantenimiento. Es mucho peor si tu llamada es por una emergencia. Definitivamente, en ese escenario, ese tipo de situaciones no son nada apropiadas. Por lo que el departamento dirigido por Jarno Dakert se puso a trabajar y junto a Mike Williams, Robert Birding y Joe Armstrong elaboraron una serie de pruebas para determinar cuál sería la solución óptima a su problema.
Y antes de continuar, nos gustaría presentaros a nuestro patrocinador, Altenwald.
Altenwald es una empresa dedicada a la divulgación de la programación, pero no es para los amantes de la comida rápida.
Los libros son cuidadosamente escritos a través de la experiencia real de sus autores y el apoyo de sus revisores. En su biblioteca podréis encontrar libros de todo tipo, pero queremos hacer hincapié en los 2 volúmenes de Erlang OTP porque está muy ligado a la historia que nos ocupa hoy.
Estos libros nos llevan desde una posición en la que no tenemos ningún conocimiento de programación a poder desarrollar aplicaciones backend completas, incluso tan avanzadas como tu propio servidor web.
En el mensaje fijado podréis encontrar un cupón para conseguir ambos libros con un 50% de descuento.
¡No perdáis la oportunidad!
Y ahora sigamos con nuestra historia.
Las pruebas. Joe Armstrong y Robert Birding inicialmente tomaron la iniciativa de preparar algunas pruebas con diferentes lenguajes. Las pruebas fueron planificadas con los lenguajes Ada, CLU, Smalltalk y Prolog. Los requisitos a cumplir eran: los procesos deben ser parte intrínseca del lenguaje.
¿Los procesos?
Sí, hay muchas formas de paralelizar la ejecución de código y en la década de 1980 la más famosa era por procesos. Cada proceso ejecuta un código diferente.
¿Y eso no estaba implícito en cada lenguaje?
No, de hecho, en muchos lenguajes forma parte de alguna biblioteca, es accesorio. En este lenguaje buscaban que los procesos no fueran aparte. El lenguaje debe integrar los procesos como una pieza fundamental.
Debe poder ejecutar desde miles a millones de procesos concurrentes.
¿Concurrentes como en Go cuando vimos los gorros?
Sí, exacto. Cada proceso debe ser independiente del resto, de modo que si algún proceso se corrompe no pudiese dañar al resto.
Dicho de otra forma y usando los goffers de nuevo, si alguno estuviese enfermo y tiene que retirarse, otro pueda tomar su lugar sin afectar al trabajo del resto. También debe ejecutarse de forma ininterrumpida.
¿No todos los sistemas se ejecutan de forma ininterrumpida?
De hecho no. Como hemos dicho al principio, hay muchos sistemas que por mantenimiento o para actualizar su software deben pararse completamente o ponerse en modo de mantenimiento.
Ya sabéis, esas páginas que aparecen en algunas webs de vez en cuando, y entonces realizar el cambio. En Ericsson querían poder hacer un cambio de software sin reiniciar, lo que más tarde se conocería como recarga de código en caliente.
Entonces tenemos 4 lenguajes, ¿no?
Sí, aunque parece ser que tras las pruebas Ada y CLU no cumplían con los requisitos deseados.
¿Y Smalltalk?
No consiguieron nunca obtener una licencia ni el compilador ni información para Smalltalk.
Finalmente, ¿se quedaron con Prolog entonces?
No del todo. Prolog fue el lenguaje que proporcionó algo muy importante. Descubrieron que el álgebra telefónica se procesaba de forma muy rápida en sistemas como Prolog, un lenguaje de alto nivel y—
Espera, ¿has dicho álgebra telefónica?
sí. En verdad es una forma de nombrar los cálculos que se hacen con referencia a la marcación, los números de teléfono y capacidad de líneas, entre otras cosas. Como decía, Prolog les permitía desarrollar este álgebra a alto nivel y de forma determinista, es decir, ante los mismos datos de entrada obtenemos siempre los mismos datos de salida. Por ejemplo, si la operación es una suma y proporcionamos 2 y 3 como valores de entrada, obtendremos siempre 5 como valor de salida, por lo que la suma es determinista. Así, la función desarrollada en estos sistemas y de esta forma forma es predecible y mucho más fácil de corregir o ampliar. Pero Prolog no era un lenguaje pensado para la concurrencia.
Entonces, ¿ningún lenguaje pasó en realidad las pruebas?
No, ninguno las pasó. Y por ese motivo y con la idea que había surgido cuando hicieron las pruebas con Prolog, llegaron a la conclusión de hacer su propio lenguaje.
Un nuevo lenguaje.
Robert Birdeen dijo una vez que Ericsson tenía el nombre de un lenguaje preparado. Erland. ¿Por qué Erland?
Porque les daba un juego de palabras interesante. Por un lado, podían decir que tomaron el nombre en honor al matemático danés Agnus Kraut Erland, cuyo trabajo se usa en telefonía, y por otro lado podían decir también que era la contracción de Ericsson Language. Les gustaba esa dualidad.
¿Tenían un nombre y no el lenguaje?
Aún no habían tenido la ocasión para desarrollarlo.
Donald Knuth Decía que lo más difícil era el nombre, así que tan solo quedaba la parte fácil, ¿no?
Pues eso parece, porque cuando surgió la posibilidad, al tener clara la idea de emplear una forma de expresar el código al estilo de PROLOG pero con los elementos necesarios a bajo nivel, el equipo se lanzó inmediatamente a desarrollar su propio lenguaje, y Erlang vio la luz en 1986 después de que Joe Armstrong se encerrara a desarrollar la idea base.
¿Así de fácil? ¿Ya estaba hecho Erlang?
Bueno, no. En verdad era tan solo un programa intérprete sobre Prolog, con un número muy reducido de instrucciones, pero gracias a su buena acogida fue creciendo rápidamente. En 1989 el sistema estaba comenzando a dar sus frutos, pero el rendimiento no era el adecuado.
¿Cómo de malo era el problema?
Bueno, al menos tendría que ser como 40 veces más rápido que entonces.
¿Cómo consiguieron que fuese más rápido?
Mike Williams se encargó de escribir todos los elementos de bajo nivel necesarios para la ejecución de un programa en Erlang.
Estos son: un emulador para simular una máquina, un cargador para cargar los programas, un planificador de tareas para dar a la CPU el proceso a realizar en cada momento y un recolector de basura para eliminar de la memoria lo que ya no se usa. Todo ello empleando el lenguaje C.
¿Por qué en lenguaje C?
Porque era el lenguaje más extendido para crear programas a bajo nivel y optimizarlos lo máximo posible.
¿Y cómo consiguen tener esos programas para ejecutarse en el emulador?
Joe Armstrong escribió el compilador y las estructuras de datos y la gestión de memoria corrieron a cargo de Robert Birvin, que se encargó de escribir la biblioteca de funciones, es decir, todo lo que emplearán los programadores.
¿Consiguieron su objetivo?
No solo eso, el sistema aumentó su rendimiento en nada más y nada menos ¡Que 120 veces! Ericsson ya podía comenzar a emplear su nuevo lenguaje. La prohibición. En la década de los 90, Erlang comenzó a ser una gran pieza de software, pero aun así Ericsson prohibió el uso de Erlang.
Espera, espera. ¿Ericsson prohibió emplear su propio lenguaje incluso cuando cubría sus necesidades y aumentaba en popularidad?
Erlang había ido acumulando una gran cantidad de características, pero comenzó la era de Java. Y Ericsson decidió centrarse en lenguajes usados globalmente ante la dificultad de encontrar programadores de un lenguaje que nadie conocía fuera de las puertas de Ericsson.
¿Y cómo consiguió salir adelante?
La prohibición con el tiempo y a medida que avanzaba la década se fue diluyendo. Había una pequeña comunidad de programadores de Erlang fuera de Ericsson que comenzó a crecer. El equipo de desarrollo dentro de Ericsson llamado OTP y dedicado a mantener el lenguaje siguió desarrollando y soportando Erlang y fueron presionando ¿Consiguieron entonces volver a emplearlo? No solamente eso, sino que también en 1998 convencieron a Ericsson para abrir su código fuente y hacer que Erlang estuviera disponible para todos. En la siguiente década llegaron desarrollos y empresas que adoptaron el lenguaje.
¿Alguna en particular de renombre?
Sí, sin duda hay una en particular que quizás no lo pretendió desde un principio, pero fue la que más impulsó a Erlang. WhatsApp. Al principio, Jan Koum inició su andadura sin saber exactamente en qué se convertiría WhatsApp. Comenzó siendo una lista de contactos inteligente, una forma de enviar notificaciones a tus contactos, y finalmente llegó la idea de servir como reemplazo al SMS.
¿Y cómo llegaron a Erlang?
Pues por el empleo del protocolo XMPP. Que estaba de moda para el chat en computadoras y que la mayoría de integrantes de WhatsApp consideraron emplear Java Verde porque tenían muy buenas referencias acerca de su estabilidad y escalabilidad. Y por lo tanto, Erlang fue elegido indirectamente por un buen producto desarrollado en ese lenguaje más que por el lenguaje en sí.
¿WhatsApp habló de todo esto desde sus inicios?
Quizás no desde un inicio, pero hay muchas conferencias de Rick Recht de cuando entró a formar parte de WhatsApp en 2011 ¿Él sabía programar en Erlang?
No, se encargó tanto de aprender Erlang como de realizar todas las modificaciones necesarias.
¿Y por qué contrataron a Rick Reid si no sabía de Erlang?
Rick había estado trabajando, al igual que muchos de la plantilla de WhatsApp, en otras empresas como Yahoo.
¿Fue muy traumático para ellos el cambio de lenguajes anteriores a Erlang?
Realmente no. Cuando finalmente consiguió su objetivo de disponer de una versión modificada y completamente funcional de Java Verde, Se percató de la facilidad de implementar sistemas concurrentes y cómo le habría gustado tener un lenguaje así en su etapa de Yahoo, en lugar de C y C++.
¿Supuso entonces una ventaja para WhatsApp?
Sin duda. WhatsApp no tuvo rival y durante mucho tiempo estuvo imponiéndose a otras grandes empresas como Google o Facebook.
Los sistemas de chat de estos no eran ni tan estables ni tan rápidos como lo era WhatsApp. Y WhatsApp tenía millones de usuarios usándolo a diario.
Facebook no pudo competir con WhatsApp y entonces lo compró.
Sí, como dijimos al principio, fue en 2014 cuando saltó la noticia de la compra por parte de Facebook de WhatsApp. La tecnología empleada saltó a primera página de algunas publicaciones y de repente Erlang había obtenido un foco que nunca tuvo durante todos sus años de vida.
Comenzaba a brillar y ser considerado como lenguaje en el desarrollo de aplicaciones de servidor y muchas empresas, principalmente del norte de Europa, pero también en Estados Unidos y Japón comenzaron a emplear este lenguaje y sumarse a sus conferencias. Erlang consiguió brillar finalmente y muchos comenzaron a fijarse en él. Conclusiones. En una Erlang User Conference de Estocolmo en 2015, Bodil Stokke dijo que, a diferencia de otros lenguajes como Java, donde Sun Microsystems había apoyado y vendido el lenguaje muy bien fuera de la empresa, En el caso de Ericsson y Erlang fue todo lo contrario.
Ericsson empleó internamente el lenguaje, pero no tuvo pretensión al principio de publicarlo e incluso llegó a prohibirlo durante un periodo de tiempo. Es por eso que fue un lenguaje que tardó en propagarse, pero que aún sigue siendo mantenido por Ericsson y su comunidad de forma muy activa. Y ahora te toca a ti: ¿Sabías de la existencia de Erlang?
¿Sabías decirnos qué significa lagom en sueco? Déjanos tu comentario.
More from Manuel

Historia de los Lenguajes de Programación: años 1960-1969 #basic #apl #simula #lisp #logo

¿Compilador o intérprete? La historia de una rivalidad que comenzó en los años 40








