La herramienta cURL cumple 25 años

CURL es un proyecto de software consistente en una biblioteca (libcurl) y un intérprete de comandos (curl) orientado a la transferencia de archivos

La herramienta admite protocolos de transferencia de archivos como: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, FILE y LDAP, entre otros.

Aunque la primera versión se publicó en 1997 y se basó en una pequeña herramienta llamada httpget escrita por el brasileño Rafael Sagula, en 1998 Daniel Stenberg publicaba la versión 4.0 y se encargaría desde entonces de mantener la herramienta.

El desarrollador hace un repaso de sus 25 años al frente del mantenimiento de este software libre casi omnipresente en todos los equipos y que ha celebrado publicando la versión 8.0.0.

1998

El 20 de marzo de 1998, se publicó curl 4.0 y ya tenía 2200 líneas de código, porque se construyó sobre los proyectos anteriormente llamados httpget y urlget. Luego admitió tres protocolos: HTTP, GOPHER y FTP y presentó 24 magníficas opciones de línea de comandos.

El primer lanzamiento de curl no fue ese evento especial, ya que el desarrollador había estado enviando publicaciones de httpget y urlget durante más de un año, por lo que, si bien este era un nombre nuevo, también era «solo otro lanzamiento», como ya lo había hecho muchas veces anteriormente.

Se añadió compatibilidad con HTTPS y TELNET ya el primer año de curl, que también introdujo la primera página manual de curl. curl comenzó con licencia GPL pero la cambió a MPL ya dentro de ese primer año 1998.

El primer soporte SSL fue impulsado por SSLeay. El proyecto que a fines de 1998 se convertiría en OpenSSL.

En agosto de 1998, se añade curl en el sitio de directorio de código abierto: freshmeat.net.

La primera página web de curl se publicó en http://www.fts.frontec.se/~dast. (la versión más antigua archivada por wayback machine es de diciembre de 1998)

En noviembre de 1998, se añadió una nota al sitio web sobre el éxito sorprendente que tuvo, ¡ya que la última versión se había descargado 300 veces solo en ese mes! El éxito y la popularidad que ha tenido después estaba muy lejos de ser instantáneos.

Durante este primer año, se publicaron 20 versiones de curl. Nunca más se ha repetido esa hazaña.

1999

Se creó el primer script de configuración, y se añadió soporte para cookies y ya aparecía como un paquete en Debian Linux.

El sitio web de curl se trasladó a http://curl.haxx.nu.

Se añadió soporte para DICT, LDAP y FILE a lo largo del año. Ahora admite 8 protocolos.

En los últimos días de 1999, se importó el código curl al (por aquel entonces) nuevo y genial servicio llamado Sourceforge. Todos los recuentos de commits adicionales en curl comienzan con esta importación. 29 de diciembre de 1999.

2000

Su desarrollador y encargado de código cambió de trabajo a principios de 2000. Y además ese mismo año se casó.

Se cambió el sitio web de curl a curl.haxx.se

En agosto de 2000, se publicó curl 7.1 y las cosas cambiaron. Esta versión presentó la biblioteca que se llamó libcurl a falta de un nombre mejor. En este punto, el proyecto tenía 17.200 líneas de código.

La API de libcurl se inspiró en cómo funciona fopen() y devuelve solo un identificador opaco, y cómo se puede usar ioctl() para establecer opciones.

Crear una biblioteca fuera de curl fue una idea que tuvo el desarrollador casi desde el principio, ya que antes de ese momento me se dió cuenta del poder que una buena biblioteca puede aportar a las aplicaciones.

Los usuarios encontraron útil esa biblioteca y aumentaron las descargas de curl. Uno de los primeros en adoptar libcurl fue el lenguaje PHP, que decidió usar libcurl como su motor de transferencia HTTP/URL predeterminado.

2001

Se cambió de nuevo la licencia y ahora curl se publicaba bajo la nueva licencia curl (efectivamente MIT) así como MPL. La idea de modificar ligeramente la licencia de curl era una locura, pero se el desarrollador ha olvidado el motivo.

Se añadió soporte para HTTP/1.1 e IPv6.

En junio, el archivo THANKS contó con 67 contribuyentes designados. Este es un esfuerzo de equipo. Superamos los 1100 commits totales en marzo y en julio curl ya tenía 20 000 líneas de código.

Apple comenzó a empaquetar curl con Mac OS X cuando curl 7.7.2 se envió en Mac OS X 10.1.

2002

El conjunto de pruebas contenía 79 casos de prueba.

Se eliminó la opción MPL. Nunca se volvería a realizar un cambio de licencia.

Se añadió soporte para compresión gzip sobre HTTP y el uso de proxies SOCKS.

2003

Se introdujo el sistema de «creación automática» de curl: los voluntarios ejecutan scripts en sus máquinas que descargan, crean y ejecutan las pruebas de curl con frecuencia y envían los resultados por correo electrónico al servidor central para informes y análisis. Mucho antes de que los modernos sistemas de CI hicieran estas cosas mucho más fáciles.

Se añadió soporte para autenticación Digest, NTLM y Negotiate para HTTP.

En agosto, se publicaron 40 páginas man individuales.

Se agregó soporte para FTPS, número de protocolo 9.

El desarrollador hizo un fork del proyecto ares y comencé el proyecto c-ares para proporcionar y mantener una biblioteca para hacer resoluciones de nombres asincrónicos, para curl y otros. Desde entonces, este proyecto también se ha vuelto bastante popular y ampliamente utilizado.

2004

A principios de 2004, curl tenía 32.700 líneas de código.

Se realizó que curl admitiera «archivos grandes», lo que en aquel entonces significaba admitir archivos de más de 2 y 4 gigabytes.

Se implementó soporte para IDN, Nombres de Dominio Internacionales.

2005

GnuTLS se convierte en la segunda biblioteca TLS admitida. Los usuarios ahora podían seleccionar qué biblioteca TLS querían que usara su compilación.

Gracias a una subvención del «Internetfonden» sueco, el desarrollador pudo dejar su trabajo y e implementar la primera versión de la API multi_socket() para permitir que las aplicaciones realicen más transferencias paralelas más rápido.

Se creó git y rápidamente adoptaron curl para sus transferencias HTTP(S).

TFTP se convirtió en el décimo soporte de curl de protocolo admitido.

2006

Se decidió eliminar el soporte para «transferencias FTP de terceros», lo que hizo cambiar el SONAME debido a la ABI modificada. El bache más reciente. Desencadenó algunas discusiones. El proyecto aprendió lo difícil que puede ser para los usuarios superar el SONAME.

El precursor de wolfSSL llamado cyassl se convirtió en la tercera biblioteca SSL compatible con curl.

Se añadió soporte para canalización HTTP/1.1 y en la segunda mitad del año el desarrollador aceptó un trabajo de desarrollo por contrato para Adobe y se añadió soporte para SCP y SFTP.

Como parte del trabajo de SCP y SFTP, se dio un paso bastante grande y luego el desarrollador se convertiría en el mantenedor del proyecto libssh2. Este proyecto también es bastante utilizado.

2007

Ahora, curl cuenta con 51.500 líneas de código, y se añadió soporte para una cuarta biblioteca SSL: NSS

Se añadió soporte para LDAPS y se fusionó el primer puerto a OS/400.

Para curl 7.16.1 se añadió soporte para –libcurl. Posiblemente la única opción de línea de comando curl favorita del desarrollador. Generó el código fuente usando libcurl repitiendo la transferencia de la línea de comando.

2008

A estas alturas, la herramienta de línea de comandos había crecido hasta presentar 126 opciones de línea de comandos. Un crecimiento de 5x durante los diez primeros años de curl.

En marzo superamos las 10.000 commits.

Solaris incluye curl y libcurl. Adobe Flash Player en Linux usa libcurl.

En septiembre, el recuento total de colaboradores de curl llegó a 654.

2009

Se introdujo soporte para compilar curl con cmake. Una decisión que todavía se está discutiendo y cuestionando si realmente ayuda. Para completar el ciclo, cmake usa libcurl.

En julio se llevó a cabo la reunión IETF 75 en Estocolmo, la ciudad natal del desarrollador, y esta fue la primera vez que conoció físicamente a varios de sus héroes de protocolo personales que crearon y siguieron trabajando en el protocolo HTTP: Mark, Roy, Larry, Julian, etc.

En agosto, dejó su trabajo para trabajar en su propia empresa, Haxx, pero siguió haciendo desarrollo por contrato. Sobre todo haciendo Linux embebido.

Gracias a otro contrato, introdujo soporte para IMAP(S), SMTP(S) y POP3(S) para curl, elevando la cantidad de protocolos admitidos a 19.

Recibió el premio Nordic Free Software Award 2009. Por su trabajo en curl, c-ares y libssh2.

2010

Se añadió soporte para RTSP y RTMP(S). PolarSSL se convirtió en la sexta biblioteca SSL admitida.

Se cambió el sistema de control de versiones de CVS a git y, al mismo tiempo, cambiamos el alojamiento de Sourceforge a GitHub. A partir de este momento, se consigue hacer un seguimiento de la autoría de los commits de forma correcta y adecuada, algo que era mucho más difícil de hacer con CVS.

Se agregó soporte para la biblioteca AxTLS. el 7

2011

Más de 80.000 líneas de código.

Se añadió el script checksrc que verifica que el código fuente se adhiera al estilo del código curl. Comenzó simple, ha mejorado y se ha vuelto más estricto con el tiempo.

Se han superado los 100 colaboradores individuales que envían commits al código.

Superamos los 100 committers individuales.

2012

149 opciones de línea de comandos.

Se agregó soporte para Schannel y Secure Transport para TLS.

Una primera estimación de usuarios de curl, arroja de 550 millones. ¡Esto confirma que curl está en todas partes!

Durante todo el año 2012 hubo 67 autores de commits.

2013

Se agregó soporte para GSKit, una biblioteca TLS que se usa principalmente en OS/400. La décima biblioteca TLS admitida.

En abril, el número de colaboradores había superado los 1000 y se llegó a más de 800 casos de prueba. Se refactorizó el código en las partes internas.

Los intentos iniciales de compatibilidad con HTTP/2 se fusionaron (impulsados ​​por la gran biblioteca nghttp2), así como la compatibilidad para realizar conexiones mediante el enfoque Happy Eyeballs.

Creamos nuestros dos primeros trabajos de CI.

2014

El desarrollador empezó a trabajar para Mozilla en el equipo de redes de Firefox, de forma remota desde su casa en Suecia. Por primera vez en su carrera, en realidad trabajaría principalmente con redes y HTTP, etc. con una superposición significativa con lo que es y hace curl. Hasta ese momento, los dos lados de su vida habían estado extrañamente separados. Mozilla le permitió pasar algunas horas de trabajo en curl.

En 161 opciones de línea de comando y 20 CVE informados.

59 páginas de manual se convirtieron en 270 páginas de manual en julio cuando cada opción de libcurl obtuvo su propia página separada.

Se añadió compatibilidad con el fork OpenSSL de libressl y se eliminó la compatibilidad con QsoSSL. Todavía en 10 bibliotecas TLS compatibles.

En septiembre, había 105.000 líneas de código.

Se agregó soporte para SMB(S). 24 protocolos.

2015

Se agregó soporte para BoringSSL y mbedTLS.

Se añadió soporte para realizar transferencias multiplexadas adecuadas mediante HTTP/2. Un cambio de paradigma bastante drástico en la arquitectura cuando, de repente, múltiples transferencias compartirían una sola conexión. Muchas refactorizaciones y tomó un tiempo hasta que el soporte de HTTP/2 se estabilizó.

Le siguió el primer soporte para push de servidor HTTP/2.

Se cambió completamente al modelo de trabajo de GitHub, usando su rastreador de problemas y haciendo solicitudes de extracción.

Su trabajo de HTTP/2 este año fue patrocinado en parte por Netflix, mientras todavía trabajaba para Mozilla.

20.000 commits.

El desarrollador empezó a escribir el libro everything curl.

Se añadió soporte para libpsl, usando la lista de sufijos públicos para un mejor manejo de cookies.

2016

curl cambió a utilizar HTTP/2 de manera predeterminada con transferencias HTTPS.

En mayo, curl llega a las 185 opciones para la línea de comandos.

El proyecto adopta un nuevo logo diseñado por Adrian Burcea de Soft Dreams.

Se añadió soporte HTTPS para proxies y TLS 1.3.

curl fue auditado por Cure 53.

Un sitio sueco nombró al responsable de curl como segundo mejor desarrollador de Suecia, debido a su trabajo en curl.

A finales de año el código llega a las 115.500 líneas de código.

2017

curl obtuvo soporte para compilar y usar múltiples bibliotecas TLS y elegir cuál usar al inicio.

Fastly contactó al desarrollador para alojar el sitio web de curl, así como su sitio web personal. Esto ayudó a poner fin a las inestabilidades anteriores cuando las publicaciones del blog se volvieron demasiado populares para que mi sitio se mantuviera e hizo que el sitio curl fuera más ágil para más personas en todo el mundo. Desde entonces, se han mantenido fieles patrocinadores del proyecto.

En la primavera de 2017, se desarrolló la primera conferencia en persona de desarrolladores, curl up, ya que veinte fanáticos y desarrolladores de curl fueron a Nuremberg, Alemania, para pasar un fin de semana sin hacer nada más que cosas de curl.

En junio me negaron viajar a los Estados Unidos. Posteriormente, esto me llevaría a una aventura prolongada y dolorosa tratando de obtener una visa estadounidense.

Llegó el primer soporte SSLKEYLOGFILE, y se presentó la nueva API MIME y soporte para compresión brotli. El proyecto curl se adoptó en el proyecto OSS-Fuzz, que inmediatamente comenzó a señalar errores en nuestro código. Han seguido haciendo fuzzing curl sin parar desde entonces.

En octubre le concedieron al desarrollador el Premio Polhem. El premio de ingeniería más antiguo y probablemente el más prestigioso de Suecia. Este premio se estableció y se otorga desde 1876. Una medalla de oro genuina, que me entregó nada menos que su majestad el rey de Suecia.

2018

Se agregó soporte para DNS sobre HTTPS y se introdujo la nueva API de URL para permitir que las aplicaciones analicen las URL exactamente de la misma manera que lo hace curl.

Microsoft comenzó a incluir curl incluido con Windows. Pero el alias curl permanece. Se añadió soporte para una segunda biblioteca SSH, por lo que ahora SCP y SFTP podrían funcionar con libssh además de la biblioteca libssh2 ya compatible.

129.000 líneas de código. Alcanzó 10.000 estrellas en GitHub.

Para aceptar una donación se solicitó que el proyecto creara una cuenta con Open Collective, y así lo hicieron. Desde entonces ha sido un buen canal para que el proyecto reciba donaciones y patrocinios.

En noviembre de 2018, se decidió que el protocolo HTTP sobre QUIC debería convertirse oficialmente en HTTP/3.

En 27 trabajos de CI al final del año. Ejecutando más de 1200 casos de prueba.

2019

El desarrollador empezó a trabajar para wolfSSL, creando código para curl a tiempo completo. Solo le llevó 21 años al desarrollador, hacer que curl fuera su trabajo.

Se añadió compatibilidad con Alt-Svc y se eliminó la compatibilidad con la canalización HTTP/1.1 siempre tan problemática.

Se presentó el primer programa de recompensas por encontrar errores de curl y, desde entonces, existe una recompensa por errores en ejecución. En asociación con hackerone. Han llegado a pagar casi 50.000 USD en recompensas por 45 vulnerabilidades (hasta febrero de 2023).

Se agregó soporte para AmiSSL y BearSSL: en 14 bibliotecas.

Comenzaron a ofrecer curl como una imagen docker oficial

2020

La herramienta curl obtuvo poderes de transferencia paralelos, la capacidad de generar datos en formato JSON con -w y la aterradora salida de ayuda se limpió y organizó mejor en subcategorías.

En marzo, para curl 7.69.0, el desarrollador comenzó a realizar presentaciones de video de lanzamiento, transmitidas en vivo.

El sitio web curl se trasladó a curl.se y everything curl se trasladó al dominio curl.dev. MQTT se convierte en el protocolo compatible número 25.

Se agregó el primer soporte para HSTS, así como soporte para compresión zstd.

wolfSSH se convirtió en la tercera biblioteca SSH admitida. Se eliminó la compatibilidad con PolarSSL.

Compatibilidad inicial con hiper como backend alternativo para HTTP/1 y HTTP/2.

2021

Se eliminó el soporte para MesaLink pero se agregó soporte para rustls. En 13 bibliotecas TLS.

El Ingenuity aterrizó en Marte y curl ayudó a que sucediera.

El desarrollador recibió una amenaza de muerte muy desagradable por correo electrónico de alguien profundamente confundido, culpándole por todo tipo de cosas malas que le sucedieron.

Curl alcanzó 20.000 estrellas en GitHub.

Soporta GOFRES. 26 protocolos. 187 personas crearon commits que se fusionaron durante el año.

2022

Se fusionó el soporte WebSocket inicial (WS:// y WSS:// URL) y una nueva API para manejarlo. Se llegó a los 28 protocolos.

Se añadió la opción de línea de comando –json y libcurl obtuvo una nueva API de encabezado, que luego también hizo que la herramienta de línea de comando obtuviera una nueva capacidad de «selección de encabezado» agregada a -w.

También se añadió –rate y –url-query. El HTTP/3 RFC se publicó en junio. msh3 se convierte en la tercera biblioteca HTTP/3 admitida.

Trail of Bits realizó una auditoría de seguridad curl, patrocinada por OpenSSF. El lanzamiento de curl 212 se realizó en diciembre.

El incidente número 10.000 se creó en GitHub.

2023

A principios de año: el código tiene 155.100 líneas de código. 486 páginas man. 1560 casos de prueba. 2.771 colaboradores. 1.105 autores de commits. 132 CVE. 122 trabajos de optimización CI. 29.733 commits. 48 580 USD donados en recompensas por errores. 249 opciones de línea de comandos. 28 protocolos. 13 bibliotecas TLS. 3 bibliotecas SSH. 3 bibliotecas HTTP/3.

Se añade soporte para HTTP/3 con respaldo a versiones anteriores, lo que hace que su uso sea menos propenso a errores.

El 13 de marzo superamos los 30.000 commits.

El 20 de marzo se publicó curl 8.0.0. Exactamente 25 años desde el primer lanzamiento de curl.


Un proyecto que empezó de una manera muy casual y pequeña y que se ha ido ampliando para dar demanda a multitud de casos de uso.

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.