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