Herramientas 4 min de lectura 668 palabras

curl cumple 30 años (y nunca se ha reescrito)

EN
curl cumple 30 años (y nunca se ha reescrito)

Hay herramientas que usas tanto que dejas de verlas, como el interruptor de la luz: nadie se para a pensar quién lo fabricó ni cuándo. A mí me pasa con curl. Lo tecleo varias veces al día para probar una API, ver unas cabeceras o descargar algo, y en PHP habré escrito curl_init() y curl_setopt() más veces de las que me gustaría reconocer. Pues hoy, 11 de noviembre, Daniel Stenberg recuerda que se cumplen 30 años desde que empezó todo.

Cien líneas de C

El 11 de noviembre de 1996, Rafael Sagula publicó httpget 0.1, poco más de 100 líneas de C para descargar cosas por HTTP. Daniel trabajaba entonces en una empresa de sistemas ferroviarios y tenía un bot de IRC (Dancer) con un servicio de conversión de divisas que necesitaba bajarse los tipos de cambio de una web. Encontró httpget, le añadió la resolución de nombres y le mandó los parches a Rafael. Lo de siempre: arreglas lo que te hace falta y lo devuelves.

Después vinieron Gopher y FTP, y como ya no tenía sentido llamarlo httpget pasó a ser urlget. A principios de 1998 se quedó con el nombre definitivo, y el 20 de marzo salió curl 4.0: 3.300 líneas, 24 opciones y tres protocolos. Por eso el proyecto tiene dos cumpleaños, el de httpget en noviembre de 1996 y el de curl en marzo de 1998.

Para ponerlo en contexto, en 1996 una conexión doméstica en Suecia iba de media a unos 30 kbps (hoy ronda los 200 Mbps), había unos 36 millones de usuarios de Internet y unas 250.000 webs. Un mundo en el que descargar algo de forma automática era casi un lujo.

De herramienta a biblioteca

El salto importante llegó en agosto de 2000 con libcurl, la biblioteca que permite que otros programas hagan lo mismo que la herramienta de línea de comandos. Y aquí es donde entra PHP, que la adoptó muy pronto como motor de transferencias. Media web en PHP que hablaba con otros servicios (pasarelas de pago, APIs, webhooks…) lo hacía, y lo sigue haciendo, a través de libcurl.

A partir de ahí, curl acabó en todas partes. Stenberg calcula que libcurl corre en unos 30.000 millones de instalaciones: móviles, coches, televisores, consolas, routers… y la NASA confirmó que se usó en la misión de aterrizaje en Marte. No está mal para algo que empezó para saber a cuánto estaba el dólar en un canal de IRC.

Lo que más me gusta

Más allá de las cifras, de la historia me quedo con dos cosas.

La primera, que curl nunca se ha reescrito. Treinta años manteniendo la compatibilidad de API y ABI, en un sector que reescribe cada cosa cada pocos años porque “esta vez sí lo haremos bien”. El código que escribiste contra libcurl hace veinte años sigue funcionando, y eso, que parece aburrido, es justo lo que hace que la gente confíe en una herramienta para ponerla en sus cimientos.

La segunda, que curl no es de nadie. No es una empresa ni una fundación: Daniel se define como su “dictador benevolente” y reconoce que no hay plan de sucesión, aunque lo documentan todo para que el proyecto pueda seguir sin él. Es la imagen de manual de esas piezas de infraestructura que sostiene una sola persona (con ayuda, claro) y de las que todos dependemos sin saberlo. Y esa persona, además, tiene que dedicar cada vez más tiempo a filtrar avisos de seguridad que no lo son: en el seguimiento que hace VulnCheck de los fallos encontrados con IA, de 34 informes publicados sobre curl, 19 no eran vulnerabilidades.

Rafael Sagula, el que escribió aquellas primeras cien líneas, falleció en 2016. Daniel sigue al frente y dice que nunca ha tenido un objetivo final para curl, y que espera seguir con él unas cuantas décadas más. Treinta años después, la herramienta que uso sin pensar sigue estando ahí, compatible y discreta, que es lo mejor que se puede decir de una pieza de infraestructura.