URL: https://linuxfr.org/news/24-ans-de-libcurl Title: 24 ans de libcurl Authors: BenoĂźt Sibaud Ysabeau đŸ§¶, bobble bubble et palm123 Date: 2024ćčŽ08月07æ—„T08:42:07+02:00 License: CC By-SA Tags: curl et bibliothĂšque Score: 57 _Curl_ est un outil en ligne de commande destinĂ© Ă  rĂ©cupĂ©rer le contenu d’une ressource accessible par un rĂ©seau informatique et gĂ©rant de nombreux protocoles. _Curl_ est un outil essentiel pour de nombreux usages, pris en charge par une gamme trĂšs large de systĂšmes d’exploitation, d’architectures matĂ©rielles, de l’objet connectĂ© Ă  l’[embarquĂ© spatial](https://daniel.haxx.se/blog/2023/02/07/closing-the-nasa-loop/) en passant par l’informatique classique ou les consoles de jeux. Il Ă©volue rapidement et frĂ©quemment, voir par exemple [l’arrivĂ©e prochaine de HTTP3 pour curl dans Debian unstable (avec le backend gnutls)](https://linuxfr.org/users/trim/liens/arrivee-prochaine-de-http3-pour-curl-dans-debian-unstable-avec-le-backend-gnutls). Son domaine d’utilisation pourrait encore s’étendre avec [l’apparition de wcurl dans Debian et bientĂŽt dans le monde entier ?](https://linuxfr.org/users/ploum/journaux/apparition-de-wcurl-dans-debian-et-bientot-dans-le-monde-entier) Il y a 24 ans, une division du code entre une interface ligne de commande et une bibliothĂšque a Ă©tĂ© faite. ---- [libcurl is 24 years old (6 aoĂ»t 2024)](https://daniel.haxx.se/blog/2024/08/06/libcurl-is-24-years-old/) [curl 8.9.1 (31 juillet 2024)](https://daniel.haxx.se/blog/2024/07/31/curl-8-9-1/) [Curl](https://curl.se/) [les 28 protocoles gĂ©rĂ©s par curl](https://everything.curl.dev/protocols/curl.html) ---- (Cette dĂ©pĂȘche est principalement basĂ©e sur l’annonce anglophone par Daniel Stenberg, auteur principal de _curl_ et _libcurl_ ; dĂ©pĂȘche rĂ©digĂ©e sur un tĂ©lĂ©phone embarquant curl 7.80, pas vraiment la derniĂšre version...). La premiĂšre version de _libcurl_, baptisĂ©e 7.1, date du 7 aoĂ»t 2000. La version de _curl_ prĂ©cĂ©dente, la 6.5.2, pas encore sĂ©parĂ©e entre une interface ligne de commande et une bibliothĂšque. Il s’agit de l’écart le plus long entre deux versions de _curl_. La crĂ©ation de la bibliothĂšque a Ă©tĂ© trĂšs largement rĂ©alisĂ©e par Daniel Stenberg seul. Il dĂ©crit son choix de division ainsi : _c'Ă©tait juste une intuition et une conjecture. Je ne savais pas. Je n’avais pas fait de recherches sur cela ou autre chose. Je me suis juste lancĂ© en me disant qu’on verrait plus tard si j’avais raison ou tort._ Le nom de la bibliothĂšque a Ă©tĂ© choisi faute d’une meilleure idĂ©e. L’API a Ă©tĂ© dĂ©finie comme Ă©tant bas niveau (on peut toujours ajouter une API de plus haut niveau par-dessus), en observant ioctl(), fcntl() et les fonctions du genre. Le code est en C, langage de prĂ©dilection de l’auteur principal. L’API a bien vieilli : 17 fonctions encore prĂ©sentes proviennent de la 7.1 ; elle est passĂ©e de 17 000 lignes Ă  171 000 ; elle a survĂ©cu aux _rĂ©volutions_ HTTP/2 (transferts multiples multiplexĂ©s) et HTTP/3 (passer de TCP Ă  UDP). L’usage a aussi bien progressĂ© depuis l’entrĂ©e dans PHP 4.0.2 comme premier _binding_ (ici rendre utilisable en langage PHP), moins d’un mois aprĂšs la publication de la bibliothĂšque. En 2002 a Ă©tĂ© ajoutĂ©e une API _multi_ pour gĂ©rer des transferts parallĂšles concurrents de façon illimitĂ©e dans un mĂȘme _thread_. Puis en 2006 vient en surplus le _multi_action_ avec des mĂ©canismes orientĂ©s Ă©vĂ©nements, avec une boucle Ă©vĂ©nementielle (comme _epoll_). Les premiers changements douloureux sur l’interface binaire (ABI) ont entraĂźnĂ© une volontĂ© de stabilitĂ©, de ne jamais casser volontairement cette interface, et ce depuis 2006. _libcurl_ possĂšde des _bindings_ vers au moins 65 langages de programmation, fonctionne sur au moins 103 systĂšmes d’exploitation et 28 architectures de processeur, est prĂ©sent dans les bibliothĂšques standard de langages de programmation (Python, Java, Rust ou .Net). Son ancien concurrent principal _libwww_ n’est plus dĂ©veloppĂ©. Bref 18 ans de stabilitĂ© d’API et d’ABI. L’utilisation de _libcurl_ continue de croĂźtre (de plus en plus d’objets connectĂ©s notamment). Et _curl_ de maniĂšre gĂ©nĂ©rale supporte rapidement les nouveaux protocoles et leurs Ă©volutions. À noter que l’auteur principal ne mentionne pas dans ses projections ce qui me semble le plus gros risque pour Curl/libcurl, la difficultĂ© d’avoir une personne prĂȘte Ă  lui succĂ©der ~~si~~ quand cela s’avĂ©rera nĂ©cessaire.

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /