SlideShare una empresa de Scribd logo
1 de 70
Descargar para leer sin conexión
Let me tell you about...
March 24, 2022
Daniel Stenberg
@bagder
https://daniel.haxx.se
start
growth
now
future
news
@bagder
@bagder
Just ask!
@bagder
An open source project that
makes a command line tool
and a library for transferring
data using Internet protocols
@bagder
curl.se
Once upon the time...
@bagder
@bagder
@bagder
… while I was
writing this IRC
bot...
Let’s put it online... as open source
@bagder
… became curl 1998
HTTP
Gopher
FTP
@bagder
… and time passed...
@bagder
… and time passed...
@bagder
… and time passed...
@bagder
… and time passed...
@bagder
Features!
DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP,
IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTMPS, RTSP, SCP,
SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP
TLS certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP
form based upload, HTTP/HTTPS/SOCKS proxy, cookies,
authentication (Basic, Digest, NTLM, Negotiate, Kerberos),
HTTP/2, HTTP/3, alt-svc:, happy eyeballs, file transfer
resume, proxy tunneling, DNS-over-HTTPS, HTTP
compression and much more
@bagder
@bagder
Web sites on the Internet
1996: 250,000
2022: 2,000,000,000
(multiplied 8,000 times)
@bagder
@bagder
curl runs in all your devices
@bagder
transfer protocols: 26
TCP
filesystem
UDP
TLS
SSH
QUIC
HTTP
HTTPS
TFTP
FILE
FTP
IMAP
SMTP
POP3
GOPHER
TELNET
DICT
RTSP
RTMP
SMB
LDAP
SFTP
SCP
FTPS
IMAPS
SMTPS
POP3S
RTMPS
SMBS
LDAPS
@bagder
MQTT
GOPHERS
bindings: 60
application
Falcon
D
C++
Requests
ScriptBasi
c
Ferite
Delphi
Chcurl
curlpp Gambas
Eiffel
BBHTTP
(Cocoa)
curlcpp glib/GTK+
Euphoria
Curlhandl
e
(Cocoa)
go-curl
Object-
Pascal
Lua-cURL
Java
Guile O’Caml
Mono
Julia
Harbour Pascal
.NET
Common
Lisp
Haskell
WWW::Curl
(perl)
node.js
luacurl
perl6-net-
curl
PHP/CURL Rexx
PostgreSQ
L
Ring
pycURL RPG
Tclcurl Q
Visual
Foxpro
Visual
Basic
vXWidgets S-Lang
Xojo
XBLite Smalltalk
SP-
Forth
Scilab
Scheme
curl-
rust
SPL Ada95
Curb
(Ruby)
Clojure R
Kapito
(Erlang)
PureBasic
Net::Curl
(perl)
Nim
@bagder
third party deps: 35
I/O layer
URL parser libidn2
winidn
HTTP
TLS
OpenSSL
Mesalink
gskit
mbedTLS
wolfSSL
Schannel
Secure
Transport
GnuTLS
NSS
boringssl
libressl
AmiSSL
SFTP SCP LDAP
WinLDAP
OpenLDAP
RTMP
librtmp
Name resolver c-ares
compression
libz
brotl
i
cookies
libpsl
IMAP SMTP POP3
HTTP/2
nghttp2
authentication
winsspi Heimdal
MIT
kerberos
HTTP/3
quiche
ngtcp2
HTTP/1
SSH
wolfSSH
libssh2
libssh
@bagder
BearSSL
nghttp3
zstd
FTP
Hyper
FTPS IMAPS POP3S SMBS SMTPS
GOPHERS HTTPS LDAPS RTMPS
libgsasl
rustls
operating systems: 86
@bagder
Syllable OS TPF
Tizen
Symbian Tru64
SunOS tvOS ucLinux
Genode Hurd iOS
Integrity
Illumos
HP-UX
HardenedBS
D
Haiku
z/OS
Nintendo
Switch
NonStop OS
NetWare
MorphOS MPE/iX MS-DOS NCR MP-RAS NetBSD
RISC OS
Redox
ReactOS Sailfish OS SCO Unix Serenity SINIX-Z
Qubes OS
UnixWare WebOS
vxWorks
VMS Windows
UNICOS Windows CE
Wii System
Software
AmigaOS
Blackberry
10
BeOS
Android
Blackberry
Tablet OS
AIX Cell OS
Aros
IRIX LineageOS Mbed Micrium
macOS
Mac OS 9
Linux Lua RTOS
eCOS FreeRTOS
FreeBSD
FreeDOS Fuchsia
DragonFly
BSD
Cygwin
Cisco IOS
OpenBSD OS/2 OS/400
Ultrix
ipadOS
NuttX
Solaris
Xbox
System
ChromeOS
MINIX
Garmin OS
QNX
PlayStation
Portable
Plan 9
OS21
OpenStep Orbis OS
z/TPF z/VM z/VSE
Operating systems known to have run curl
Atari
FreeMiNT
CPU architectures: 22
@bagder
x86
MIPS
ARM
PowerPC
SPARC POWER
m68k
s390 HP-PA
SH4
Nios
RISC-V
OpenRISC
ARC
Cell
Itanium VAX
MicroBlaze
Alpha Xtensa
x86-64
AVR32
CPU architectures known to have run curl
Planets: 2
@bagder
Earth Mars
Planets known to have run curl
>10,000,000,000
installations
@bagder
Hi Daniel,
I’m the marketing director for Dice.com and I wanted
to reach out to you to thank you for spotting our
billboard error on the 101. We are deeply
embarrassed by this mistake to say the least. In a
classic coding scenario, our QA failed us.
Unfortunately for us, we bought this spot long-term
and we are trying to figure out how quickly we can
replace the content.
@bagder
Subject: Multimedya isc-v:85
I have toyota corola with multimedya
system that you have its copyright.
I need a advice to know how to use
the gps.
Master of many things
@bagder
Cisco Small Business Routers, March 2019
@bagder
Why?
@bagder
Why use libcurl?
Stable well-documented API – examples from 2000 still work
Same API everywhere – 86 OSs, 22 CPU archs...
Open source – free and immortal
Rock solid – battle proven, furiously maintained, secure
Customizable – use what you want, disable what you don’t
Internet hardened – speaks protocols the way they should
Multiple protocols – 50% of users use more than two!
Keeps up – TLS 1.3, HTTP/2, HTTP/3, ...
@bagder
Why Open Source?
There was never any alternative to me
Wanted to contribute back
Would never even come close unless
No, I would not be rich otherwise
@bagder
How?
@bagder
0821 0822 0850 0854 0959 0974 1035 1081 1123 1225 1350 1425 1427 1436
1460 1510 1635 1639 1651 1653 1725 1730 1734 1738 1777 1808 1867 1869 1870
1884 1928 1939 1945 1950 1951 1952 1959 1964 2045 2046 2047 2048 2049
2060 2061 2068 2095 2104 2109 2133 2145 2183 2184 2192 2195 2222 2228
2229 2231 2246 2255 2326 2373 2384 2388 2389 2396 2428 2449 2459 2478
2487 2518 2553 2554 2577 2595 2616 2617 2640 2718 2732 2817 2818 2821 2831
2854 2936 2964 2965 3207 3280 3490 3493 3501 3513 3617 3659 3961 3986
4120 4121 4178 4217 4248 4346 4366 4422 4511 4516 4559 4616 4954 4959
5034 5092 5321 5322 5335 5336 5849 5890 6531 6532 6749 7230 7231 7232
7233 7234 7235 7238 7540 7541 7628 7838 8314 8446 8484 8999 9000 9001
9002
143 Relevant RFCs (280,000 lines)
libcurl
@bagder
1,451,035 words
@bagder
Contributors
2,600 in total
50-70 per release
Increasing
Small core team
Volunteers
@bagder
Independent
Everything is
public
@bagder
mailing lists
@bagder
a selected few
have push rights
@bagder
https: github.com/curl
Money flows
@bagder
@bagder
Sponsors
Customers
Official curl sponsors March 2022
@bagder
Secure enough for the billions?
Reviews
(at 111 CVEs and counting)
Code audit
Code style
Fuzzing
Docs
Static code
analyzers
Valgrind and
sanitizers
Many tests
@bagder
CI like crazy
curl CI 2022
>100 build + test “rounds” per commit
Tests code style, indenting etc
Thousands of tests per build
Builds and tests on tens of platforms
25 hours of CI per commit
@bagder
Code and test policies
Fix all warnings (oh well...)
No defects left
Use the most picky compiler options
As many tests as possible
Fix security issues asap
@bagder
curl bug bounty
@bagder
Let's make it personal
This is the lead
developer of this project
@bagder
… and time passed...
@bagder
Security issues
Release management
Web site admin
Mailing list admin
Patch reviewing
User support
Blogging about it
What’s maintaining?
Debugging
Patch merging
Feature development
Write documentation
Event planning
Getting stickers
Doing talks
@bagder
Now
@bagder
I still lead the development
Two hours spare time per day
Every day, every week, every year, since 1998
Part time paid since 2014
Full time since early 2019
Yes, I totally mix and blur spare time and work!
@bagder
@bagder
“The created economic value
cannot be overstated.”
@bagder
@bagder
Where does the road lead from here?
@bagder
Future
@bagder
@bagder
Everything will be networked
If it isn’t powered now, it will be soon
If it is powered, it will be networked
If it is networked, it needs Internet access
If it needs Internet access, curl can help
@bagder
@bagder
sewing machine, microwave, advertisement sign, kitchen scale, electric
razor, kitchen oven, fan, dog collar, bicycle computer, power plug, piano,
child monitor, radiator, vacuum cleaner, escooter, lawn mower, air
conditioner, printer, projector, kettle, bluray player, settop box,
computer monitor, alarm clock, clothes iron, powertool, exercise
equipment, mouse, wifi router, car, headphones, electric toothbrush,
bluetooth speaker, air purifier, doorbell, watch, game console, keychain
fob, flashlight, ebook-tablet, washing machine, stereo equipment,
ebikes, tv, toaster, thermostat, door lock, drilling machine, fridge and
freezer, lamp switch, clothing, bathroom scale, camera, smart phone,
garage door opener, medical device, bus-stop sign, stove, blender, light
bulb, tablet
Everything will be networked
@bagder
@bagder
All network technologies
Bluetooth 5, Wifi 6, 5G/6G, TbE etc drive
more networking
More networking means more curl
@bagder
@bagder
All platforms
curl runs on 80 operating systems,
20 CPU architectures
and 2 planets
… and your next platform
@bagder
@bagder
HTTP APIs everywhere
everyone offers HTTP APIs
curl is the universal API consumer and
debugger
@bagder
@bagder
A defacto standard API
stable and solid API
since twenty years
secure and fast transfers
all the protocols you need
@bagder
@bagder
Unparalleled
Commercial support
Rock solid
Stable API
Open Source
@bagder
@bagder
@bagder
more everywhere
@bagder
stuff
time
Future
No, it truly never gets done
Protocols keep evolving
Open source code survives
No slow-down in sight
You can help!
@bagder
News
@bagder
Done over the last 4 years GOPHERS
HTTP/3
MQTT
zstd
--alt-svc
--hsts
--aws-sigv4
--remove-on-error
--retry-all-errors
--tls13-ciphers
--proxy-tls13-ciphers
--disallow-username-in-url
w: %header{}
%{errormsg}
%{exitcode}
%{header_json}
%{json}
%{method}
%{num_headers}
%{onerror}
%{urlnum}
%{url}
--json
--no-clobber
--parallel
--doh-url
--etag-compare
--fail-with-body
--haproxy-protocol
@bagder
Done over the last 4 years
--alt-svc
--hsts
--aws-sigv4
--remove-on-error
--retry-all-errors
--tls13-ciphers
--proxy-tls13-ciphers
--disallow-username-in-url
w: %header{}
%{errormsg}
%{exitcode}
%{header_json}
%{json}
%{method}
%{num_headers}
%{onerror}
%{urlnum}
%{url}
--json
--no-clobber
--parallel
--doh-url
--etag-compare
--fail-with-body
--haproxy-protocol
@bagder
JSON!
https://everything.curl.dev/
@bagder
You can help!
@bagder
68
Daniel Stenberg
@bagder
https://daniel.haxx.se/
Thank you!
Questions?
@bagder
License
This presentation and its contents are
licensed under the Creative Commons
Attribution 4.0 license:
http://creativecommons.org/licenses/by/4.0/
@bagder

Más contenido relacionado

La actualidad más candente

Formatting ForThe Masses
Formatting ForThe MassesFormatting ForThe Masses
Formatting ForThe MassesHolger Schill
 
Dexador Rises
Dexador RisesDexador Rises
Dexador Risesfukamachi
 
Writing a fast HTTP parser
Writing a fast HTTP parserWriting a fast HTTP parser
Writing a fast HTTP parserfukamachi
 
Woo: Writing a fast web server @ ELS2015
Woo: Writing a fast web server @ ELS2015Woo: Writing a fast web server @ ELS2015
Woo: Writing a fast web server @ ELS2015fukamachi
 
Deep dive into Xtext scoping local and global scopes explained
Deep dive into Xtext scoping local and global scopes explainedDeep dive into Xtext scoping local and global scopes explained
Deep dive into Xtext scoping local and global scopes explainedHolger Schill
 
[WSO2 Integration Summit Bern 2019] Ballerina — Cloud-native Middleware as a ...
[WSO2 Integration Summit Bern 2019] Ballerina — Cloud-native Middleware as a ...[WSO2 Integration Summit Bern 2019] Ballerina — Cloud-native Middleware as a ...
[WSO2 Integration Summit Bern 2019] Ballerina — Cloud-native Middleware as a ...WSO2
 
Writing Well-Behaved Unix Utilities
Writing Well-Behaved Unix UtilitiesWriting Well-Behaved Unix Utilities
Writing Well-Behaved Unix UtilitiesRob Miller
 
HTML5 Programming
HTML5 ProgrammingHTML5 Programming
HTML5 Programminghotrannam
 
DevOps Guide to Container Networking
DevOps Guide to Container NetworkingDevOps Guide to Container Networking
DevOps Guide to Container NetworkingDirk Wallerstorfer
 
[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...
[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...
[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...WSO2
 
NoSQL and SQL Anti Patterns
NoSQL and SQL Anti PatternsNoSQL and SQL Anti Patterns
NoSQL and SQL Anti PatternsGleicon Moraes
 
Drupal 8 + Elasticsearch + Docker
Drupal 8 + Elasticsearch + DockerDrupal 8 + Elasticsearch + Docker
Drupal 8 + Elasticsearch + DockerRoald Umandal
 
Vert.x clustering on Docker, CoreOS and ETCD
Vert.x clustering on Docker, CoreOS and ETCDVert.x clustering on Docker, CoreOS and ETCD
Vert.x clustering on Docker, CoreOS and ETCDTim Nolet
 
Redis - for duplicate detection on real time stream
Redis - for duplicate detection on real time streamRedis - for duplicate detection on real time stream
Redis - for duplicate detection on real time streamCodemotion
 
Kernel Recipes 2014 - Quick state of the art of clang
Kernel Recipes 2014 - Quick state of the art of clangKernel Recipes 2014 - Quick state of the art of clang
Kernel Recipes 2014 - Quick state of the art of clangAnne Nicolas
 

La actualidad más candente (19)

Formatting ForThe Masses
Formatting ForThe MassesFormatting ForThe Masses
Formatting ForThe Masses
 
Dexador Rises
Dexador RisesDexador Rises
Dexador Rises
 
Who Broke My Crypto
Who Broke My CryptoWho Broke My Crypto
Who Broke My Crypto
 
Writing a fast HTTP parser
Writing a fast HTTP parserWriting a fast HTTP parser
Writing a fast HTTP parser
 
Woo: Writing a fast web server @ ELS2015
Woo: Writing a fast web server @ ELS2015Woo: Writing a fast web server @ ELS2015
Woo: Writing a fast web server @ ELS2015
 
Deep dive into Xtext scoping local and global scopes explained
Deep dive into Xtext scoping local and global scopes explainedDeep dive into Xtext scoping local and global scopes explained
Deep dive into Xtext scoping local and global scopes explained
 
[WSO2 Integration Summit Bern 2019] Ballerina — Cloud-native Middleware as a ...
[WSO2 Integration Summit Bern 2019] Ballerina — Cloud-native Middleware as a ...[WSO2 Integration Summit Bern 2019] Ballerina — Cloud-native Middleware as a ...
[WSO2 Integration Summit Bern 2019] Ballerina — Cloud-native Middleware as a ...
 
Lisp in the Cloud
Lisp in the CloudLisp in the Cloud
Lisp in the Cloud
 
About Clack
About ClackAbout Clack
About Clack
 
Writing Well-Behaved Unix Utilities
Writing Well-Behaved Unix UtilitiesWriting Well-Behaved Unix Utilities
Writing Well-Behaved Unix Utilities
 
HTML5 Programming
HTML5 ProgrammingHTML5 Programming
HTML5 Programming
 
DevOps Guide to Container Networking
DevOps Guide to Container NetworkingDevOps Guide to Container Networking
DevOps Guide to Container Networking
 
[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...
[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...
[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...
 
NoSQL and SQL Anti Patterns
NoSQL and SQL Anti PatternsNoSQL and SQL Anti Patterns
NoSQL and SQL Anti Patterns
 
Drupal 8 + Elasticsearch + Docker
Drupal 8 + Elasticsearch + DockerDrupal 8 + Elasticsearch + Docker
Drupal 8 + Elasticsearch + Docker
 
Vert.x clustering on Docker, CoreOS and ETCD
Vert.x clustering on Docker, CoreOS and ETCDVert.x clustering on Docker, CoreOS and ETCD
Vert.x clustering on Docker, CoreOS and ETCD
 
Node.js
Node.jsNode.js
Node.js
 
Redis - for duplicate detection on real time stream
Redis - for duplicate detection on real time streamRedis - for duplicate detection on real time stream
Redis - for duplicate detection on real time stream
 
Kernel Recipes 2014 - Quick state of the art of clang
Kernel Recipes 2014 - Quick state of the art of clangKernel Recipes 2014 - Quick state of the art of clang
Kernel Recipes 2014 - Quick state of the art of clang
 

Similar a Let me tell you about curl

curl - a hobby project that conquered the world
curl - a hobby project that conquered the worldcurl - a hobby project that conquered the world
curl - a hobby project that conquered the worldDaniel Stenberg
 
curl - openfourm europe.pdf
curl - openfourm europe.pdfcurl - openfourm europe.pdf
curl - openfourm europe.pdfDaniel Stenberg
 
IoT with Apache ActiveMQ, Camel & Spark
IoT with Apache ActiveMQ, Camel & SparkIoT with Apache ActiveMQ, Camel & Spark
IoT with Apache ActiveMQ, Camel & SparkRed Hat Developers
 
HTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPHTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPDaniel Stenberg
 
Tools, Tips and Techniques for Developing Real-time Apps. Phil Leggetter
Tools, Tips and Techniques for Developing Real-time Apps. Phil LeggetterTools, Tips and Techniques for Developing Real-time Apps. Phil Leggetter
Tools, Tips and Techniques for Developing Real-time Apps. Phil LeggetterFuture Insights
 
Http3 fullstackfest-2019
Http3 fullstackfest-2019Http3 fullstackfest-2019
Http3 fullstackfest-2019Daniel Stenberg
 
NXP FRDM-K64F Platform with ARM mbed Demo - Edinburgh 2016 Workshop
NXP FRDM-K64F Platform with ARM mbed Demo - Edinburgh 2016 WorkshopNXP FRDM-K64F Platform with ARM mbed Demo - Edinburgh 2016 Workshop
NXP FRDM-K64F Platform with ARM mbed Demo - Edinburgh 2016 WorkshopOpen Mobile Alliance
 
Getting Smart About Smart Homes - MLS Tech Fair - 10.06.16
Getting Smart About Smart Homes - MLS Tech Fair - 10.06.16Getting Smart About Smart Homes - MLS Tech Fair - 10.06.16
Getting Smart About Smart Homes - MLS Tech Fair - 10.06.16Chad Curry
 
mastering the curl command line.pdf
mastering the curl command line.pdfmastering the curl command line.pdf
mastering the curl command line.pdfDanielStenberg7
 
The Things Conference 2020: Technical Keynote
The Things Conference 2020: Technical KeynoteThe Things Conference 2020: Technical Keynote
The Things Conference 2020: Technical KeynoteJohan Stokking
 
Internet of things (IoT) and big data- r.nabati
Internet of things (IoT) and big data- r.nabatiInternet of things (IoT) and big data- r.nabati
Internet of things (IoT) and big data- r.nabatinabati
 
A Reference Architecture for IoT
A Reference Architecture for IoT A Reference Architecture for IoT
A Reference Architecture for IoT WSO2
 
Internet ALL the Things - a walking tour of MQTT
Internet ALL the Things - a walking tour of MQTTInternet ALL the Things - a walking tour of MQTT
Internet ALL the Things - a walking tour of MQTTAndy Piper
 
Everybody runs this code all the time
Everybody runs this code all the timeEverybody runs this code all the time
Everybody runs this code all the timeDaniel Stenberg
 

Similar a Let me tell you about curl (20)

curl - a hobby project that conquered the world
curl - a hobby project that conquered the worldcurl - a hobby project that conquered the world
curl - a hobby project that conquered the world
 
curl - openfourm europe.pdf
curl - openfourm europe.pdfcurl - openfourm europe.pdf
curl - openfourm europe.pdf
 
The state of curl 2022
The state of curl 2022The state of curl 2022
The state of curl 2022
 
Landing code in curl
Landing code in curlLanding code in curl
Landing code in curl
 
The state of curl 2020
The state of curl 2020The state of curl 2020
The state of curl 2020
 
IoT with Apache ActiveMQ, Camel & Spark
IoT with Apache ActiveMQ, Camel & SparkIoT with Apache ActiveMQ, Camel & Spark
IoT with Apache ActiveMQ, Camel & Spark
 
HTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPHTTP/3 is next generation HTTP
HTTP/3 is next generation HTTP
 
HTTP/3 for everyone
HTTP/3 for everyoneHTTP/3 for everyone
HTTP/3 for everyone
 
Tools, Tips and Techniques for Developing Real-time Apps. Phil Leggetter
Tools, Tips and Techniques for Developing Real-time Apps. Phil LeggetterTools, Tips and Techniques for Developing Real-time Apps. Phil Leggetter
Tools, Tips and Techniques for Developing Real-time Apps. Phil Leggetter
 
Http3 fullstackfest-2019
Http3 fullstackfest-2019Http3 fullstackfest-2019
Http3 fullstackfest-2019
 
NXP FRDM-K64F Platform with ARM mbed Demo - Edinburgh 2016 Workshop
NXP FRDM-K64F Platform with ARM mbed Demo - Edinburgh 2016 WorkshopNXP FRDM-K64F Platform with ARM mbed Demo - Edinburgh 2016 Workshop
NXP FRDM-K64F Platform with ARM mbed Demo - Edinburgh 2016 Workshop
 
Getting Smart About Smart Homes - MLS Tech Fair - 10.06.16
Getting Smart About Smart Homes - MLS Tech Fair - 10.06.16Getting Smart About Smart Homes - MLS Tech Fair - 10.06.16
Getting Smart About Smart Homes - MLS Tech Fair - 10.06.16
 
mastering the curl command line.pdf
mastering the curl command line.pdfmastering the curl command line.pdf
mastering the curl command line.pdf
 
The Things Conference 2020: Technical Keynote
The Things Conference 2020: Technical KeynoteThe Things Conference 2020: Technical Keynote
The Things Conference 2020: Technical Keynote
 
Micro Flash 2te / 4te
Micro Flash 2te / 4teMicro Flash 2te / 4te
Micro Flash 2te / 4te
 
Internet of things (IoT) and big data- r.nabati
Internet of things (IoT) and big data- r.nabatiInternet of things (IoT) and big data- r.nabati
Internet of things (IoT) and big data- r.nabati
 
Microformats
MicroformatsMicroformats
Microformats
 
A Reference Architecture for IoT
A Reference Architecture for IoT A Reference Architecture for IoT
A Reference Architecture for IoT
 
Internet ALL the Things - a walking tour of MQTT
Internet ALL the Things - a walking tour of MQTTInternet ALL the Things - a walking tour of MQTT
Internet ALL the Things - a walking tour of MQTT
 
Everybody runs this code all the time
Everybody runs this code all the timeEverybody runs this code all the time
Everybody runs this code all the time
 

Más de Daniel Stenberg

Más de Daniel Stenberg (20)

mastering libcurl part 2
mastering libcurl part 2mastering libcurl part 2
mastering libcurl part 2
 
mastering libcurl part 1
mastering libcurl part 1mastering libcurl part 1
mastering libcurl part 1
 
curl experiments - curl up 2022
curl experiments - curl up 2022curl experiments - curl up 2022
curl experiments - curl up 2022
 
curl security - curl up 2022
curl security - curl up 2022curl security - curl up 2022
curl security - curl up 2022
 
HTTP/3 in curl - curl up 2022
HTTP/3 in curl - curl up 2022HTTP/3 in curl - curl up 2022
HTTP/3 in curl - curl up 2022
 
Curl with rust
Curl with rustCurl with rust
Curl with rust
 
Getting started with libcurl
Getting started with libcurlGetting started with libcurl
Getting started with libcurl
 
common mistakes when using libcurl
common mistakes when using libcurlcommon mistakes when using libcurl
common mistakes when using libcurl
 
HTTP/3 in curl 2020
HTTP/3 in curl 2020HTTP/3 in curl 2020
HTTP/3 in curl 2020
 
curl roadmap 2020
curl roadmap 2020curl roadmap 2020
curl roadmap 2020
 
curl better
curl bettercurl better
curl better
 
HTTP/3, QUIC and streaming
HTTP/3, QUIC and streamingHTTP/3, QUIC and streaming
HTTP/3, QUIC and streaming
 
HTTP/3 in curl
HTTP/3 in curlHTTP/3 in curl
HTTP/3 in curl
 
HTTP/3 over QUIC. All is new but still the same!
HTTP/3 over QUIC. All is new but still the same!HTTP/3 over QUIC. All is new but still the same!
HTTP/3 over QUIC. All is new but still the same!
 
Just curl it!
Just curl it!Just curl it!
Just curl it!
 
Writing safe and secure code
Writing safe and secure codeWriting safe and secure code
Writing safe and secure code
 
The state of curl 2019
The state of curl 2019The state of curl 2019
The state of curl 2019
 
DNS over HTTPS
DNS over HTTPSDNS over HTTPS
DNS over HTTPS
 
Säker kod (secure code)
Säker kod (secure code)Säker kod (secure code)
Säker kod (secure code)
 
HTTP/3
HTTP/3HTTP/3
HTTP/3
 

Último

SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 

Último (20)

SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 

Let me tell you about curl

  • 1. Let me tell you about... March 24, 2022
  • 5. An open source project that makes a command line tool and a library for transferring data using Internet protocols @bagder curl.se
  • 6. Once upon the time... @bagder
  • 8. @bagder … while I was writing this IRC bot...
  • 9. Let’s put it online... as open source @bagder
  • 10. … became curl 1998 HTTP Gopher FTP @bagder
  • 11. … and time passed... @bagder
  • 12. … and time passed... @bagder
  • 13. … and time passed... @bagder
  • 14. … and time passed... @bagder
  • 15. Features! DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP TLS certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, HTTP/HTTPS/SOCKS proxy, cookies, authentication (Basic, Digest, NTLM, Negotiate, Kerberos), HTTP/2, HTTP/3, alt-svc:, happy eyeballs, file transfer resume, proxy tunneling, DNS-over-HTTPS, HTTP compression and much more @bagder
  • 17. Web sites on the Internet 1996: 250,000 2022: 2,000,000,000 (multiplied 8,000 times) @bagder
  • 18. @bagder curl runs in all your devices
  • 21. bindings: 60 application Falcon D C++ Requests ScriptBasi c Ferite Delphi Chcurl curlpp Gambas Eiffel BBHTTP (Cocoa) curlcpp glib/GTK+ Euphoria Curlhandl e (Cocoa) go-curl Object- Pascal Lua-cURL Java Guile O’Caml Mono Julia Harbour Pascal .NET Common Lisp Haskell WWW::Curl (perl) node.js luacurl perl6-net- curl PHP/CURL Rexx PostgreSQ L Ring pycURL RPG Tclcurl Q Visual Foxpro Visual Basic vXWidgets S-Lang Xojo XBLite Smalltalk SP- Forth Scilab Scheme curl- rust SPL Ada95 Curb (Ruby) Clojure R Kapito (Erlang) PureBasic Net::Curl (perl) Nim @bagder
  • 22. third party deps: 35 I/O layer URL parser libidn2 winidn HTTP TLS OpenSSL Mesalink gskit mbedTLS wolfSSL Schannel Secure Transport GnuTLS NSS boringssl libressl AmiSSL SFTP SCP LDAP WinLDAP OpenLDAP RTMP librtmp Name resolver c-ares compression libz brotl i cookies libpsl IMAP SMTP POP3 HTTP/2 nghttp2 authentication winsspi Heimdal MIT kerberos HTTP/3 quiche ngtcp2 HTTP/1 SSH wolfSSH libssh2 libssh @bagder BearSSL nghttp3 zstd FTP Hyper FTPS IMAPS POP3S SMBS SMTPS GOPHERS HTTPS LDAPS RTMPS libgsasl rustls
  • 23. operating systems: 86 @bagder Syllable OS TPF Tizen Symbian Tru64 SunOS tvOS ucLinux Genode Hurd iOS Integrity Illumos HP-UX HardenedBS D Haiku z/OS Nintendo Switch NonStop OS NetWare MorphOS MPE/iX MS-DOS NCR MP-RAS NetBSD RISC OS Redox ReactOS Sailfish OS SCO Unix Serenity SINIX-Z Qubes OS UnixWare WebOS vxWorks VMS Windows UNICOS Windows CE Wii System Software AmigaOS Blackberry 10 BeOS Android Blackberry Tablet OS AIX Cell OS Aros IRIX LineageOS Mbed Micrium macOS Mac OS 9 Linux Lua RTOS eCOS FreeRTOS FreeBSD FreeDOS Fuchsia DragonFly BSD Cygwin Cisco IOS OpenBSD OS/2 OS/400 Ultrix ipadOS NuttX Solaris Xbox System ChromeOS MINIX Garmin OS QNX PlayStation Portable Plan 9 OS21 OpenStep Orbis OS z/TPF z/VM z/VSE Operating systems known to have run curl Atari FreeMiNT
  • 24. CPU architectures: 22 @bagder x86 MIPS ARM PowerPC SPARC POWER m68k s390 HP-PA SH4 Nios RISC-V OpenRISC ARC Cell Itanium VAX MicroBlaze Alpha Xtensa x86-64 AVR32 CPU architectures known to have run curl
  • 25. Planets: 2 @bagder Earth Mars Planets known to have run curl
  • 27. Hi Daniel, I’m the marketing director for Dice.com and I wanted to reach out to you to thank you for spotting our billboard error on the 101. We are deeply embarrassed by this mistake to say the least. In a classic coding scenario, our QA failed us. Unfortunately for us, we bought this spot long-term and we are trying to figure out how quickly we can replace the content. @bagder
  • 28. Subject: Multimedya isc-v:85 I have toyota corola with multimedya system that you have its copyright. I need a advice to know how to use the gps. Master of many things @bagder
  • 29. Cisco Small Business Routers, March 2019 @bagder
  • 31. Why use libcurl? Stable well-documented API – examples from 2000 still work Same API everywhere – 86 OSs, 22 CPU archs... Open source – free and immortal Rock solid – battle proven, furiously maintained, secure Customizable – use what you want, disable what you don’t Internet hardened – speaks protocols the way they should Multiple protocols – 50% of users use more than two! Keeps up – TLS 1.3, HTTP/2, HTTP/3, ... @bagder
  • 32. Why Open Source? There was never any alternative to me Wanted to contribute back Would never even come close unless No, I would not be rich otherwise @bagder
  • 34. 0821 0822 0850 0854 0959 0974 1035 1081 1123 1225 1350 1425 1427 1436 1460 1510 1635 1639 1651 1653 1725 1730 1734 1738 1777 1808 1867 1869 1870 1884 1928 1939 1945 1950 1951 1952 1959 1964 2045 2046 2047 2048 2049 2060 2061 2068 2095 2104 2109 2133 2145 2183 2184 2192 2195 2222 2228 2229 2231 2246 2255 2326 2373 2384 2388 2389 2396 2428 2449 2459 2478 2487 2518 2553 2554 2577 2595 2616 2617 2640 2718 2732 2817 2818 2821 2831 2854 2936 2964 2965 3207 3280 3490 3493 3501 3513 3617 3659 3961 3986 4120 4121 4178 4217 4248 4346 4366 4422 4511 4516 4559 4616 4954 4959 5034 5092 5321 5322 5335 5336 5849 5890 6531 6532 6749 7230 7231 7232 7233 7234 7235 7238 7540 7541 7628 7838 8314 8446 8484 8999 9000 9001 9002 143 Relevant RFCs (280,000 lines) libcurl @bagder
  • 36. Contributors 2,600 in total 50-70 per release Increasing Small core team Volunteers @bagder
  • 40. a selected few have push rights @bagder https: github.com/curl
  • 42. Official curl sponsors March 2022 @bagder
  • 43. Secure enough for the billions? Reviews (at 111 CVEs and counting) Code audit Code style Fuzzing Docs Static code analyzers Valgrind and sanitizers Many tests @bagder CI like crazy
  • 44. curl CI 2022 >100 build + test “rounds” per commit Tests code style, indenting etc Thousands of tests per build Builds and tests on tens of platforms 25 hours of CI per commit @bagder
  • 45. Code and test policies Fix all warnings (oh well...) No defects left Use the most picky compiler options As many tests as possible Fix security issues asap @bagder
  • 47. Let's make it personal This is the lead developer of this project @bagder
  • 48. … and time passed... @bagder
  • 49. Security issues Release management Web site admin Mailing list admin Patch reviewing User support Blogging about it What’s maintaining? Debugging Patch merging Feature development Write documentation Event planning Getting stickers Doing talks @bagder
  • 51. I still lead the development Two hours spare time per day Every day, every week, every year, since 1998 Part time paid since 2014 Full time since early 2019 Yes, I totally mix and blur spare time and work! @bagder @bagder
  • 52. “The created economic value cannot be overstated.” @bagder @bagder
  • 53. Where does the road lead from here? @bagder
  • 55. Everything will be networked If it isn’t powered now, it will be soon If it is powered, it will be networked If it is networked, it needs Internet access If it needs Internet access, curl can help @bagder @bagder
  • 56. sewing machine, microwave, advertisement sign, kitchen scale, electric razor, kitchen oven, fan, dog collar, bicycle computer, power plug, piano, child monitor, radiator, vacuum cleaner, escooter, lawn mower, air conditioner, printer, projector, kettle, bluray player, settop box, computer monitor, alarm clock, clothes iron, powertool, exercise equipment, mouse, wifi router, car, headphones, electric toothbrush, bluetooth speaker, air purifier, doorbell, watch, game console, keychain fob, flashlight, ebook-tablet, washing machine, stereo equipment, ebikes, tv, toaster, thermostat, door lock, drilling machine, fridge and freezer, lamp switch, clothing, bathroom scale, camera, smart phone, garage door opener, medical device, bus-stop sign, stove, blender, light bulb, tablet Everything will be networked @bagder @bagder
  • 57. All network technologies Bluetooth 5, Wifi 6, 5G/6G, TbE etc drive more networking More networking means more curl @bagder @bagder
  • 58. All platforms curl runs on 80 operating systems, 20 CPU architectures and 2 planets … and your next platform @bagder @bagder
  • 59. HTTP APIs everywhere everyone offers HTTP APIs curl is the universal API consumer and debugger @bagder @bagder
  • 60. A defacto standard API stable and solid API since twenty years secure and fast transfers all the protocols you need @bagder @bagder
  • 61. Unparalleled Commercial support Rock solid Stable API Open Source @bagder @bagder
  • 63. Future No, it truly never gets done Protocols keep evolving Open source code survives No slow-down in sight You can help! @bagder
  • 65. Done over the last 4 years GOPHERS HTTP/3 MQTT zstd --alt-svc --hsts --aws-sigv4 --remove-on-error --retry-all-errors --tls13-ciphers --proxy-tls13-ciphers --disallow-username-in-url w: %header{} %{errormsg} %{exitcode} %{header_json} %{json} %{method} %{num_headers} %{onerror} %{urlnum} %{url} --json --no-clobber --parallel --doh-url --etag-compare --fail-with-body --haproxy-protocol @bagder
  • 66. Done over the last 4 years --alt-svc --hsts --aws-sigv4 --remove-on-error --retry-all-errors --tls13-ciphers --proxy-tls13-ciphers --disallow-username-in-url w: %header{} %{errormsg} %{exitcode} %{header_json} %{json} %{method} %{num_headers} %{onerror} %{urlnum} %{url} --json --no-clobber --parallel --doh-url --etag-compare --fail-with-body --haproxy-protocol @bagder JSON!
  • 70. License This presentation and its contents are licensed under the Creative Commons Attribution 4.0 license: http://creativecommons.org/licenses/by/4.0/ @bagder