📻 Versión en audio: si prefieres escuchar en vez de leer, el resumen del artículo está justo aquí arriba.
Fíjate un rato en la fecha: hoy 11 de noviembre se cumplen 30 años del día en que Rafael Sagula, un estudiante brasileño, publicó httpget 0.1, unas 100 líneas en C sin manejo de errores y con direcciones IPv4 escritas a mano. Unos días después, un desarrollador sueco llamado Daniel Stenberg encontró ese código en los archivos de la época, le mandó parches y terminó a cargo del proyecto cuando Rafael perdió el interés. Ese juguete de 1996 hoy se llama curl y corre en cada VPS, TV, router y firmware que pille.
La parte que me gusta de esta historia no es el cumpleaños en sí: es cómo nació. Stenberg no quería una herramienta famosa, quería que su bot de IRC, Dancer, pudiera ofrecer un servicio de tasas de cambio al canal. Lo único que necesitaba era descargar una página con las cotizaciones una vez al día. Punto. Y con esa necesidad tan modesta partió una de las piezas de infraestructura más usadas del planeta.
De httpget a libcurl
El recorrido tiene sus vueltas: primero httpget, luego urlget cuando sumó soporte para gopher y FTP, y finalmente curl. La versión 4.0, de marzo de 1998, ya tenía cerca de 3.300 líneas, 24 opciones y tres protocolos. El salto grande llegó en agosto de 2000 con libcurl: la biblioteca que PHP adoptó casi de inmediato como motor de transferencias, y de ahí en adelante curl entró en todas las distribuciones de Linux y en cosas que ni sospechas que hablan HTTP: autos, televisores, electrodomésticos.
En el post de aniversario hay un detalle que me gustó mucho: Stenberg mantuvo curl como hobby durante 23 años, con los cambios de pega, la familia y la vida entera pasando en paralelo, antes de convertirlo en su trabajo. Y da una de esas frases que deberían estar clavadas en la pared de cualquier equipo de desarrollo: curl nunca fue reescrito. Refactor sí, reestructuras internas sí, partir de cero no.
Mantener es lo incómodo y lo que importa
Tengo mi propia tesis de por qué curl sobrevivió tres décadas: no es la mejor herramienta para nada, pero es suficientemente buena para casi todo. Cuando armo un cron en mis servidores — el respaldo nocturno, el healthcheck, lo que sea — no me pongo a evaluar librerías modernas: tiro curl. La sintaxis que ya todos conozco, el mismo formato de salida hace lustros. Treinta años de compatibilidad es el verdadero foso defensivo de este proyecto, más que cualquier lista de opciones.
Y esto importa más que nunca en la era del código generado por IA, donde la tentación es partir todo desde cero porque el modelo te escribe la versión 2.0 en una tarde. Stenberg lleva 30 años mostrándolo al revés: el código nuevo es la parte fácil. Lo difícil es lo que vino después: responder bugs, sostener protocolos nuevos, actualizar TLS sin romper a nadie, parchearle 22 vulnerabilidades de una sola vez cuando el pasado octubre tocó salir con parches en masa. Eso es lo que convierte un juguete en infraestructura.
La próxima vez que un curl -I te responda limpio a la primera, piensa que hay alguien en Suecia que lleva la mitad de su vida cuidando que ese comando siga funcionando. Y si tienes un proyecto viejo en producción que sigues atendiendo semana a semana, no es una mancha en tu currículum: es que estás haciendo el trabajo que nadie aplaude y todos necesitan.
Fuente del tema: 30 years of Internet transfers with curl, del blog de Daniel Stenberg.
Fuente de inspiración: 30 years of Internet transfers with curl (daniel.haxx.se)