1How curl Became Like This 2========================= 3 4Towards the end of 1996, Daniel Stenberg was spending time writing an IRC bot 5for an Amiga related channel on EFnet. He then came up with the idea to make 6currency-exchange calculations available to Internet Relay Chat (IRC) 7users. All the necessary data were published on the Web; he just needed to 8automate their retrieval. 9 101996 11---- 12 13On November 11, 1996 the Brazilian developer Rafael Sagula wrote and released 14HttpGet version 0.1. 15 16Daniel extended this existing command-line open-source tool. After a few minor 17adjustments, it did just what he needed. The first release with Daniel's 18additions was 0.2, released on December 17, 1996. Daniel quickly became the 19new maintainer of the project. 20 211997 22---- 23 24HttpGet 0.3 was released in January 1997 and now it accepted HTTP URLs on the 25command line. 26 27HttpGet 1.0 was released on April 8th 1997 with brand new HTTP proxy support. 28 29We soon found and fixed support for getting currencies over GOPHER. Once FTP 30download support was added, the name of the project was changed and urlget 2.0 31was released in August 1997. The http-only days were already passed. 32 33Version 2.2 was released on August 14 1997 and introduced support to build for 34and run on Windows and Solaris. 35 36November 24 1997: Version 3.1 added FTP upload support. 37 38Version 3.5 added support for HTTP POST. 39 401998 41---- 42 43February 4: urlget 3.10 44 45February 9: urlget 3.11 46 47March 14: urlget 3.12 added proxy authentication. 48 49The project slowly grew bigger. With upload capabilities, the name was once 50again misleading and a second name change was made. On March 20, 1998 curl 4 51was released. (The version numbering from the previous names was kept.) 52 53(Unrelated to this project a company called Curl Corporation registered a US 54trademark on the name "CURL" on May 18 1998. That company had then already 55registered the curl.com domain back in November of the previous year. All this 56was revealed to us much later.) 57 58SSL support was added, powered by the SSLeay library. 59 60August: first announcement of curl on freshmeat.net. 61 62October: with the curl 4.9 release and the introduction of cookie support, 63curl was no longer released under the GPL license. Now we're at 4000 lines of 64code, we switched over to the MPL license to restrict the effects of 65"copyleft". 66 67November: configure script and reported successful compiles on several 68major operating systems. The never-quite-understood -F option was added and 69curl could now simulate quite a lot of a browser. TELNET support was added. 70 71Curl 5 was released in December 1998 and introduced the first ever curl man 72page. People started making Linux RPM packages out of it. 73 741999 75---- 76 77January: DICT support added. 78 79OpenSSL took over and SSLeay was abandoned. 80 81May: first Debian package. 82 83August: LDAP:// and FILE:// support added. The curl website gets 1300 visits 84weekly. Moved site to curl.haxx.nu. 85 86September: Released curl 6.0. 15000 lines of code. 87 88December 28: added the project on Sourceforge and started using its services 89for managing the project. 90 912000 92---- 93 94Spring: major internal overhaul to provide a suitable library interface. 95The first non-beta release was named 7.1 and arrived in August. This offered 96the easy interface and turned out to be the beginning of actually getting 97other software and programs to be based on and powered by libcurl. Almost 9820000 lines of code. 99 100June: the curl site moves to "curl.haxx.se" 101 102August, the curl website gets 4000 visits weekly. 103 104The PHP guys adopted libcurl already the same month, when the first ever third 105party libcurl binding showed up. CURL has been a supported module in PHP since 106the release of PHP 4.0.2. This would soon get followers. More than 16 107different bindings exist at the time of this writing. 108 109September: kerberos4 support was added. 110 111November: started the work on a test suite for curl. It was later re-written 112from scratch again. The libcurl major SONAME number was set to 1. 113 1142001 115---- 116 117January: Daniel released curl 7.5.2 under a new license again: MIT (or 118MPL). The MIT license is extremely liberal and can be combined with GPL 119in other projects. This would finally put an end to the "complaints" from 120people involved in GPLed projects that previously were prohibited from using 121libcurl while it was released under MPL only. (Due to the fact that MPL is 122deemed "GPL incompatible".) 123 124March 22: curl supports HTTP 1.1 starting with the release of 7.7. This 125also introduced libcurl's ability to do persistent connections. 24000 lines of 126code. The libcurl major SONAME number was bumped to 2 due to this overhaul. 127The first experimental ftps:// support was added. 128 129August: The curl website gets 8000 visits weekly. Curl Corporation contacted 130Daniel to discuss "the name issue". After Daniel's reply, they have never 131since got back in touch again. 132 133September: libcurl 7.9 introduces cookie jar and curl_formadd(). During the 134forthcoming 7.9.x releases, we introduced the multi interface slowly and 135without many whistles. 136 137September 25: curl (7.7.2) is bundled in Mac OS X (10.1) for the first time. It was 138already becoming more and more of a standard utility of Linux distributions 139and a regular in the BSD ports collections. 140 1412002 142---- 143 144June: the curl website gets 13000 visits weekly. curl and libcurl is 14535000 lines of code. Reported successful compiles on more than 40 combinations 146of CPUs and operating systems. 147 148To estimate number of users of the curl tool or libcurl library is next to 149impossible. Around 5000 downloaded packages each week from the main site gives 150a hint, but the packages are mirrored extensively, bundled with numerous OS 151distributions and otherwise retrieved as part of other software. 152 153October 1: with the release of curl 7.10 it is released under the MIT license 154only. 155 156Starting with 7.10, curl verifies SSL server certificates by default. 157 1582003 159---- 160 161January: Started working on the distributed curl tests. The autobuilds. 162 163February: the curl site averages at 20000 visits weekly. At any given moment, 164there's an average of 3 people browsing the website. 165 166Multiple new authentication schemes are supported: Digest (May), NTLM (June) 167and Negotiate (June). 168 169November: curl 7.10.8 is released. 45000 lines of code. ~55000 unique visitors 170to the website. Five official web mirrors. 171 172December: full-fledged SSL for FTP is supported. 173 1742004 175---- 176 177January: curl 7.11.0 introduced large file support. 178 179June: curl 7.12.0 introduced IDN support. 10 official web mirrors. 180 181This release bumped the major SONAME to 3 due to the removal of the 182curl_formparse() function 183 184August: Curl and libcurl 7.12.1 185 186 Public curl release number: 82 187 Releases counted from the very beginning: 109 188 Available command line options: 96 189 Available curl_easy_setopt() options: 120 190 Number of public functions in libcurl: 36 191 Amount of public website mirrors: 12 192 Number of known libcurl bindings: 26 193 1942005 195---- 196 197April: GnuTLS can now optionally be used for the secure layer when curl is 198built. 199 200April: Added the multi_socket() API 201 202September: TFTP support was added. 203 204More than 100,000 unique visitors of the curl website. 25 mirrors. 205 206December: security vulnerability: libcurl URL Buffer Overflow 207 2082006 209---- 210 211January: We dropped support for Gopher. We found bugs in the implementation 212that turned out to have been introduced years ago, so with the conclusion that 213nobody had found out in all this time we removed it instead of fixing it. 214 215March: security vulnerability: libcurl TFTP Packet Buffer Overflow 216 217September: The major SONAME number for libcurl was bumped to 4 due to the 218removal of ftp third party transfer support. 219 220November: Added SCP and SFTP support 221 2222007 223---- 224 225February: Added support for the Mozilla NSS library to do the SSL/TLS stuff 226 227July: security vulnerability: libcurl GnuTLS insufficient cert verification 228 2292008 230---- 231 232November: 233 234 Command line options: 128 235 curl_easy_setopt() options: 158 236 Public functions in libcurl: 58 237 Known libcurl bindings: 37 238 Contributors: 683 239 240 145,000 unique visitors. >100 GB downloaded. 241 2422009 243---- 244 245March: security vulnerability: libcurl Arbitrary File Access 246 247April: added CMake support 248 249August: security vulnerability: libcurl embedded zero in cert name 250 251December: Added support for IMAP, POP3 and SMTP 252 2532010 254---- 255 256January: Added support for RTSP 257 258February: security vulnerability: libcurl data callback excessive length 259 260March: The project switched over to use git (hosted by GitHub) instead of CVS 261for source code control 262 263May: Added support for RTMP 264 265Added support for PolarSSL to do the SSL/TLS stuff 266 267August: 268 269 Public curl releases: 117 270 Command line options: 138 271 curl_easy_setopt() options: 180 272 Public functions in libcurl: 58 273 Known libcurl bindings: 39 274 Contributors: 808 275 276 Gopher support added (re-added actually, see January 2006) 277 2782011 279---- 280 281February: added support for the axTLS backend 282 283April: added the cyassl backend (later renamed to WolfSSL) 284 2852012 286---- 287 288 July: Added support for Schannel (native Windows TLS backend) and Darwin SSL 289 (Native Mac OS X and iOS TLS backend). 290 291 Supports metalink 292 293 October: SSH-agent support. 294 2952013 296---- 297 298 February: Cleaned up internals to always uses the "multi" non-blocking 299 approach internally and only expose the blocking API with a wrapper. 300 301 September: First small steps on supporting HTTP/2 with nghttp2. 302 303 October: Removed krb4 support. 304 305 December: Happy eyeballs. 306 3072014 308---- 309 310 March: first real release supporting HTTP/2 311 312 September: Website had 245,000 unique visitors and served 236GB data 313 314 SMB and SMBS support 315 3162015 317---- 318 319 June: support for multiplexing with HTTP/2 320 321 August: support for HTTP/2 server push 322 323 December: Public Suffix List 324 3252016 326---- 327 328 January: the curl tool defaults to HTTP/2 for HTTPS URLs 329 330 December: curl 7.52.0 introduced support for HTTPS-proxy! 331 332 First TLS 1.3 support 333 3342017 335---- 336 337 July: OSS-Fuzz started fuzzing libcurl 338 339 September: Added Multi-SSL support 340 341 The website serves 3100 GB/month 342 343 Public curl releases: 169 344 Command line options: 211 345 curl_easy_setopt() options: 249 346 Public functions in libcurl: 74 347 Contributors: 1609 348 349 October: SSLKEYLOGFILE support, new MIME API 350 351 October: Daniel received the Polhem Prize for his work on curl 352 353 November: brotli 354 3552018 356---- 357 358 January: new SSH backend powered by libssh 359 360 March: starting with the 1803 release of Windows 10, curl is shipped bundled 361 with Microsoft's operating system. 362 363 July: curl shows headers using bold type face 364 365 October: added DNS-over-HTTPS (DoH) and the URL API 366 367 MesaLink is a new supported TLS backend 368 369 libcurl now does HTTP/2 (and multiplexing) by default on HTTPS URLs 370 371 curl and libcurl are installed in an estimated 5 *billion* instances 372 world-wide. 373 374 October 31: Curl and libcurl 7.62.0 375 376 Public curl releases: 177 377 Command line options: 219 378 curl_easy_setopt() options: 261 379 Public functions in libcurl: 80 380 Contributors: 1808 381 382 December: removed axTLS support 383 3842019 385---- 386 387 March: added experimental alt-svc support 388 389 August: the first HTTP/3 requests with curl. 390 391 September: 7.66.0 is released and the tool offers parallel downloads 392 3932020 394---- 395 396 curl and libcurl are installed in an estimated 10 *billion* instances 397 world-wide. 398 399 January: added BearSSL support 400 401 March: removed support for PolarSSL, added wolfSSH support 402 403 April: experimental MQTT support 404 405 August: zstd support 406 407 November: the website moves to curl.se. The website serves 10TB data monthly. 408 4092021 410---- 411 412 February 3: curl 7.75.0 ships with support for Hyper is a HTTP backend 413 414 March 31: curl 7.76.0 ships with support for rustls 415