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 are 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