Go to Hackademy website

Une brève histoire d'Elixir et Erlang/OTP

Ludovic de Luna

Posté par Ludovic de Luna dans les catégories back

Je développe depuis plusieurs années en Ruby. Depuis mon arrivée chez Synbioz, j’expérimente en plus avec Elixir de façon assez naturelle. En quoi Elixir est-il différent, me demanderez-vous ? Pour le savoir, il faut s’intéresser à cet étrange animal qu’est Erlang/OTP. Il mérite un ouvrage à lui seul, mais je vais l’aborder ici du côté de son histoire.

Bref, un article qui parle un peu d’Elixir et d’Erlang sans présenter une seule ligne de code, un « presque » poisson d’avril, mais c’est sérieux.

Je vous présente maintenant une histoire que même Ericsson refuse d’admettre et qui se découvre à travers les coups de gueule et les mésaventures disséminés tels des indices au travers du web. Mais commençons par le commencement : Erlang et Ericsson.

Erlang et Ericsson

erlang-creators-by-hacker-founders_thumb_650.png

Les créateurs d’Erlang, d’après une interview réalisée par Hackers / Founders

Ericsson est une société de télécommunications basée en Suède, le pays du froid et des jolies filles. Nous sommes à la fin des années 70 et cette société centenaire doit faire face à la transition de l’électromécanique vers l’architecture à base de microprocesseurs en silicium. En ce temps-là, la Terre était peuplée de dinosaures que nous appellerons mainframes et de tout un tas d’équipements lourds qui tiendrait aujourd’hui dans la coque d’un iPhone.

Ce sera le commutateur téléphonique AXE qui va cristalliser l’évolution d’Ericsson. Tout ce qui compose ce matériel est fait maison : processeur APZ, système d’exploitation BOS (Basic Operating System), chaîne de développement interne, langage de programmation propriétaire nommé Plex, et j’en oublie une bonne grosse partie peu intéressante pour nous aujourd’hui.

Pour accélérer ses recherches, Ericsson va créer un partenariat avec les universités via l’ouverture en 1984 du Computer Science Laboratory, ou plus simplement le CSLab – toujours en Suède. Outre sa mission principale (faire évoluer l’humanité, un truc super simple), il aura en charge des recherches sur les réseaux (IP et autres), les propriétés des super-conducteurs et l’étude de solutions autour des microprocesseurs. Toutes ces recherches sont liées au tournant que connaît Ericsson qui doit brasser large pour rester dans la course. Et il faut dire que ça réussit à la société puisqu’elle cultive un savoir-faire unique qui lui donne une bonne longueur d’avance sur son temps.

C’est en 1986 que le CSLab donne naissance à un nouveau langage qui viendra concurrencer Plex, l’autre langage maison. Il s’agit d’Erlang ou Ericsson Language, bien que la raison exacte du nom vienne se nicher dans l’histoire d’illustres mathématiciens dont nous n’avons que faire pour l’instant. L’instigateur de ce nouveau langage est un jeune employé recruté un an plus tôt : Joe Armstrong.

Si vous êtes aventureux, visitez le site www.cs-lab.org mais notez qu’il n’est aujourd’hui plus que l’ombre de lui-même, le laboratoire ayant fermé au début des années 2000. Voyons ensemble son histoire car c’est bien le CSLab qui va battre la mesure d’Erlang.

À nos lecteurs attentifs, veuillez noter que lorsque je parlerai du CSLab, je ferai référence uniquement à l’équipe autour du projet Erlang.

Erlang avant OTP

erlang-the-movie-hello-mike.png

La version initiale d’Erlang sera écrite en Prolog jusqu’en 1988 et souffrira de lenteurs (même pour l’époque). Les mauvaises performances lui vaudront un déni chez Ericsson, Joe Armstrong et l’équipe du CSLab devront faire mieux s’ils souhaitent son adoption. Il faut également noter qu’il existe une concurrence en interne entre Plex et Erlang, ce dernier étant positionné en successeur par Joe Armstrong ce qui n’est pas du goût de tout le monde.

Autre fait marquant, Erlang héritera sa syntaxe de Prolog et ça rend le langage rédhibitoire pour une catégorie de développeurs (dont moi-même). Néanmoins, Erlang propose une feuille de route qui en fait un OVNI dans le paysage des langages informatiques :

  • C’est un langage fonctionnel et de haut niveau ;
  • Il n’y a pas de manipulation de pointeurs ce qui rend la programmation Erlang relativement safe ;
  • Gestion de la mémoire automatique via un garbage collector ;
  • Dynamiquement typé ;
  • Orienté vers le concurrentiel et le distribué ;
  • Mise en œuvre des messages et des channels (bien avant Go) ;
  • Avec support de la tolérance de panne.

Pour une génération de développeurs qui est tout juste passée de l’assembleur au C, ça fait un choc.

L’implémentation officielle d’Erlang en 1989 est JAM (Joe’s Abstract Machine). L’environnement d’exécution (ERTS - Erlang Runtime System) est développé par Joe Armstrong (compilateur), Robert Virding (bibliothèques) et Mike Williams (runtime en C). JAM est 70 fois plus rapide que l’implémentation en Prolog ce qui rend la technologie intéressante pour des cas réels d’utilisation. Une évolution nommée TEAM (Turbo Erlang Abstract Machine) améliore légèrement les performances via une compilation intermédiaire (Erlang → C → langage machine) mais ne donne pas satisfaction.

En 1992, une nouvelle machine virtuelle est mise au point. Elle rompt avec les précédentes expérimentations et offre de meilleurs performances par rapport à JAM. Elle est développée initialement par Bogumil Hausman (diminutif “Bogdan”) puis Björn Gustavsson… D’où son nom, Bogdan/Björn’s Erlang Abstract Machine : BEAM.

Et depuis cette date, c’est toujours BEAM qui anime les programmes Erlang/OTP.

Arrivée de l’OTP

Erlang est pleinement opérationnel sur un seul système d’exploitation : BOS. Ce système dispose de l’ensemble des outils et bibliothèques qui donnent à Erlang ses caractéristiques si spéciales. À la fin des années 80, c’est la guerre des systèmes d’exploitation (merci de ne pas citer Windows). En 1996, le CSLab va extraire du système d’exploitation les composants nécessaires à Erlang afin de l’en rendre indépendant. Le résultat est nommé Open Platform. En fait, il sera assez rapidement renommé Open Telecom Platform afin d’être plus spécifique, abrégé en OTP, et développé en Erlang. À nos amis libristes, n’imaginez pas que Open signifie open source : Erlang et OTP sont toujours propriétaires et le code source est jalousement gardé.

Cette même année, la première version stable d’OTP est finalisée : OTP R1B. L’implémentation d’Erlang telle qu’imaginée par Ericsson (ou plutôt ses concepteurs) sera définitivement nommée Erlang/OTP.

Et il était temps…

Internet 1.0

Car en 1995, Ericsson compte bien monter dans le wagon d’Internet. Il annonce un projet que même ses fervents défenseurs auront du mal à définir clairement : le AXE-N sera prêt pour les besoins d’Internet (N signifie Network). Au-delà de l’aspect marketing, comprenez ce que vous voulez. Et c’est là tout le problème de ce projet. Outre la quantité pharaonique d’individus et de sociétés participant au projet, ce pot-pourri d’idées va simplement s’écraser en 1998 après avoir englouti 10 billions de couronne suédoises pour un résultat non commercialisable.

De cet échec, Ericsson va prendre des mesures radicales et bannir Erlang pour – d’après la version officielle – ne plus dépendre de logiciels propriétaires. Comme dit au début de l’article, tout ça c’est « presque » du poisson d’avril, sauf que c’est sérieux.

La raison officieuse de ce positionnement vient du fait que CSLab est d’abord un laboratoire de recherche. Il n’est pas taillé pour passer à l’échelle ses bébés. Et pour Erlang, il y a encore du boulot : stabilisation d’une partie du code, documentation et formation des équipes de développement… Ericsson décide d’arrêter les frais en invoquant une raison qui va finalement sauver Erlang/OTP d’une mise au placard.

Car on prend note du message du côté de CSLab qui rend open source le code d’Erlang/OTP fin 1998 après un tour de force pour stabiliser son code et finaliser la documentation. Mais Ericsson ne reverra pas pour autant sa position. Par contre il utilisera toujours Plex qui restera définitivement propriétaire… Bref, on nage dans l’humour façon corporate. Ç’en sera trop pour Joe Armstrong qui quittera l’entreprise peu après.

Cet entêtement de la maison mère va conduire CSLab à fermer ses portes en 2002, une partie de ses anciens employés formera la société Bleutail AB rachetée par Alteon en 2000… Et non, Alteon n’a pas racheté Erlang qui est open source et toujours géré (ou en sommeil) chez Ericsson. L’objectif de Bleutail AB était de promouvoir les solutions à base d’Erlang/OTP, dont un acteur sera très attentif : le concurrent Nortel Networks Corporation. Merci Ericsson sur ce coup. Peut-être ses dirigeants auraient du être attentifs à l’un des crédos du CSLab :

Make mistakes in a small scale – not in a production project. — Mike Williams

Je vous laisse jouer avec Google pour la traduction.

L’effet boomerang

Il arrive des moments où on fait des choix stupides dans la vie. Et on se dit – tout en faisant ces choix – que ça va nous retomber dessus. C’est ce qui est arrivé à Ericsson.

Si le projet AXE-N est bel et bien un fiasco, un autre dérivé de l’AXE, le AXD301 sorti en 1998 va connaître un succès commercial sans précédent. Tout comme le AXE-N, le AXD301 dispose d’une bonne partie de sa logique écrite en Erlang. Car sous le capot, c’est environ 1,5 millions de lignes de code en Erlang pour 500 000 lignes de code en C. Et ce commutateur dernier cri a tenu compte des leçons du précédent échec.

Sa feuille de route est claire et sa réalisation sans défaut, la partie logicielle a été rigoureusement testée. Les opérateurs qui vont investir dans le AXD301 en feront l’éloge. British Telecom va même jusqu’à estimer en 2002 que ce matériel atteint le taux record de disponibilité des 9s, soit 99.9999999%. Une prouesse qu’on doit, d’après l’opérateur, aux capacités de mise à jour à chaud de la partie logicielle sous Erlang/OTP. Cette estimation fera grincer des dents l’équipe du AXD301 qui concédera à Erlang/OTP ses avantages mais réduira cette estimation aux 5s, ce qui est déjà énorme.

Coup de pub ou réalité, il n’en reste pas moins que le succès est au rendez-vous et la notoriété d’Erlang/OTP auprès des opérateurs revient comme un boomerang chez Ericsson qui évitera soigneusement d’en faire mention dans ses communiqués officiels. Cependant…

Ce dernier fera discrètement machine arrière et réintégrera Erlang/OTP tout comme son concepteur, Joe Armstrong, dans la société en 2004. Ceci met un terme définitif au bannissement d’Erlang qui est redevenu un langage central dans le matériel d’Ericsson depuis.

Évolution

Erlang/OTP ne cesse d’évoluer, mais il y a deux dates qui sont à marquer d’une pierre blanche :

  • 2006 : BEAM permet le traitement parallélisé via le support du SMP. La machine virtuelle répartit la charge sur l’ensemble des CPUs ou cœurs de processeurs ce qui est suffisamment rare pour être noté. L’autre technologie qui a fait parler d’elle avec ce support est Go. On dispose donc avec Erlang/OTP d’une solution de traitement distribué, concurrentiel et, depuis 2006, parallélisable (multi-thread) ;
  • 2016 : BEAM change la façon dont il gère sa mémoire vive en implémentant un Generational Garbage Collector. Déjà utilisé par d’autres machines virtuelles (Ruby, Java, Microsoft .Net, Python) ou intégrées à des technologies telles que Go, cette technique est l’une des plus abouties en termes de garbage collection.

Nous sommes en 2019. Pour l’heure, Erlang/OTP propulse toujours le matériel d’Ericsson y compris pour les nouveaux projets. On compte par exemple les solutions Ericsson pour réseaux 3G/4G, GPRS et les réseaux mobiles LTE. D’autres grands noms l’utilisent depuis, parmi lesquels :

  • Cisco
  • Nortel
  • T-Mobile
  • Goldman Sachs
  • Amazon
  • Facebook
  • WhatsApp

Et Synbioz bien sûr.

Et Elixir dans tout ça ?

elixir-live-jose-valim_thumb_650.png

Où plutôt, que reste-t-il à Elixir ? Pour comprendre ce qu’Elixir apporte, il faut suivre son créateur : José Valim.

José est un passionné des problématiques autour du concurrentiel et des traitements parallélisés. Il travaille pour la société américaine Plataformatec qu’il a cofondée. Basé en Pologne, il travaille sur des solutions logicielles en Ruby. Très investi dans la communauté, il est l’un des mainteneurs principaux de Ruby On Rails, et en particulier la brique Active Record qui fournit la couche ORM du framework.

Malgré sa passion, il est plutôt mal loti avec Ruby qui est assez limité dès qu’on aborde des besoins en traitement concurrentiel (due en partie au GIL, mais c’est une autre histoire).

Pour l’un des projets de Plataformatec, la question d’Erlang est arrivée sur la table. Comme je vous l’ai dit, l’écriture en Erlang est vraiment inadaptée à la façon dont on conçoit du code aujourd’hui. C’est aussi le constat qu’ont fait José Valim et les équipes de Plataformatec.

Pour autant, José Valim avait déjà étudié la machine virtuelle BEAM et remarqué assez tôt son avantage dans ce domaine. Le seul point vraiment bloquant, c’est la syntaxe d’Erlang (véridique).

Il se lance en 2011 dans un projet personnel afin de créer un langage au-dessus d’Erlang et va s’appuyer sur la syntaxe de Ruby. En 2014, José Valim officialise ses travaux sous le nom d’Elixir.

Qu’est-ce qu’Elixir ? Une syntaxe issue de Ruby appliquée à la technologie Erlang/OTP, mais également des outils pour facilement créer des applications qui seront ensuite compilées pour fonctionner nativement sur la machine virtuelle BEAM et disposer de tout le support de l’OTP. Ceci donne deux avantages :

  • Elixir est aussi performant qu’Erlang ;
  • Elixir et Erlang s’intègrent naturellement l’un dans l’autre sans pénalité de performance.

De facto, on obtient un langage avec un structure de code moderne et une syntaxe accessible tout en bénéficiant d’une technologie robuste et conçue pour la montée en charge.

Depuis sa sortie en 2014, Elixir et Erlang s’influencent mutuellement. De par sa position particulière, un développeur Ruby ou Erlang sera rapidement efficace en Elixir.

Il existe déjà un écosystème varié sous Elixir (qui dispose aussi de l’écosystème existant en Erlang). On pourra citer Ecto, la solution d’accès aux données créée par José Valim et qui va influencer plusieurs projets en dehors d’Elixir. À noter également un framework web nommé Phoenix (le nom est bien choisi compte tenu de l’histoire d’Erlang) et qui est développé en Elixir. Bien sûr, vous pouvez faire fonctionner des bibliothèques Erlang dessus.

J’espère que vous aurez un meilleur aperçu de ce qu’est Elixir et de la force de cette technologie après ce voyage dans le temps :)

Pour aller plus loin

elixir-logo.png

Je vous propose quelques liens :

Si vous cherchez un peu de littérature :

  • Erlang Programming - par Francesco Cesarini (ISBN-10 : 0596518188)
  • Programming Elixir - par Dave Thomas (ISBN-10 : 1937785580)

Des articles intéressants rédigés chez Synbioz :


L’équipe Synbioz,
Libres d’être ensemble.

Articles connexes

Écrire une thread pool en Ruby

10/01/2019

Pouvoir exécuter plusieurs tâches en parallèle, que ce soit dans un script ou une application, peut être vraiment très utile, surtout dans le cas où le traitement de ces tâches peut être très long....

Translation temporelle

31/05/2018

Cette semaine, je me suis essayé à un nouveau format d’article qui se présente sous la forme d’une nouvelle de Science-Fiction. Je tiens en passant à remercier Valentin pour ses illustrations....

Authentifier l'accès à vos ressources avec Dragonfly

11/05/2017

Pour ceux qui ne connaissent pas Dragonfly, c’est une application Rack qui peut être utilisée seule ou via un middleware. Le fait que ce soit une application Rack la rend compatible avec toutes les...

Pourquoi devriez-vous utiliser ARel ?

06/04/2017

Lorsqu’il s’agit de soumettre des requêtes complexes à notre base de données, nous avons une tendance naturelle à aller à la simplicité en passant à ActiveRecord du SQL brut dans une chaîne de...