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