@@ -7,206 +7,9 @@ and perhaps something I learned from that particular one.
7
7
8
8
This is not meant to be an exhaustive or complete list.
9
9
10
- ## Dancer
11
-
12
- Soon after I started a new software developer job in the autumn of 1993, I
13
- discovered IRC, Internet Relay Chat. I immediately joined channels (that is
14
- what "chat rooms" are called in IRC speak), socialized online and made friends
15
- online with people from around the world.
16
-
17
- On IRC, I soon discovered that not all clients were actual users. Some of them
18
- were automated programmed robot clients, called bots. All channels I
19
- frequented had at least one. One day an IRC friend of mine from Denmark,
20
- Bjorn, showed me his embryo of what would become his own Open Source bot. I
21
- immediately joined the mission of writing a bot. For the fun, for the
22
- education and to be able to make our bot do everything we would like a bot do
23
- in the channels we frequented. We called it Dancer from the fact that it
24
- served in a Danish channel at first. Dane Serv become Dancer.
25
-
26
- This was the first real Open Source project I conntributed code to regularly.
27
- It was also my first real TCP/IP client adventure and I learned to read RFCs
28
- to figure out protocol details.
29
-
30
- I refreshed a programming language I had written already before that I called
31
- FPL (Frexx Programming Language) and made the bot programmable in this
32
- language. This piece of code might be the oldest code I have ever released as
33
- Open Source, tracing back to maybe even before 1990.
34
-
35
- We worked on and developed Dancer intensively for several years. In the late
36
- 1996, it struck me I should of course extend it so that it could exchange
37
- currency rates for us on command. How much is 100 SEK (Swedish crowns) in USD
38
- today? That was easy, but in order for the currency rates to be exact, I
39
- needed to download fresh rates from somewhere daily. I found an HTTP server
40
- that hosted rates, so I just needed a tool that could run on a schedule and
41
- download those updated numbers...
42
-
43
- ## curl
44
-
45
- I needed a simple tool to download currency rates from an HTTP server (See
46
- [ Dancer] ( #dancer ) above), and I found ** httpget** . On November 11, 1996 Rafael
47
- Sagula had released the first version of that tool named httpget 0.1 and I
48
- found it just days after his release. This was a rudimentary tool that almost
49
- did what I wanted. I fixed a bug or two in it and sent my improvements back to
50
- Rafael over email.
51
-
52
- Rafael made a few follow-up releases of the tool before he asked if I wanted
53
- to "take over" maintenance since I had kept on sending improvements his way -
54
- and I did.
55
-
56
- In August the following year, while still using httpget to get currencies for
57
- my bot service I found a site that provided more currencies. Since these new
58
- rates were hosted on a GOPHER site I had to add support for another protocol
59
- to the tool, which at the same time made the name wrong. It was no longer just
60
- HTTP it would get. I renamed it to ** urlget** a few months later, and by then
61
- it also supported FTP downloads. By then it was portable enough so that it
62
- built and ran on multiple Unix systems as well as Windows, Amiga and more.
63
-
64
- When we moved into 1998, the tool had been improved further and could now do
65
- both FTP uploads and HTTP POST and the tool name had again started to feel
66
- wrong and unsuitable. It really did not just "get" URLs anymore. I released
67
- the final urlget version (3.12) on March 14 1998, then renamed the tool to
68
- ** curl** and did the first curl release almost a week later with a bumped
69
- version number. On Friday March 20, 1998 I shipped curl 4.0.
70
-
71
- In November 1998, I posted an update on the website celebrating "over 300
72
- downloads" of the latest release.
73
-
74
- The project remained a command line tool for a while, and after the summar of
75
- 2000 we introduced ** libcurl** to the world. A library that would bring "curl
76
- powers" to applications that wanted it.
77
-
78
- I would continue to work on curl on my spare time for years to come. In 2019,
79
- I joined the company [ wolfSSL] ( https://wolfssl.com ) and started offering
80
- commercial curl support and could finally work on curl full-time. Something of
81
- a dream that came true.
82
-
83
- In OpenSSF's [ criticality score] ( https://github.com/ossf/criticality_score )
84
- update in early 2021 where they rank how critical Open Source projects are to
85
- the world, they put curl as #86 out of 102,507.
86
-
87
- ## Rockbox
88
-
89
- In the beginning of the twenty-first century, before the smart phones, a new
90
- consumer electronics device started to show up in some households. The
91
- portable mp3 players. Digital music in your pockets for real. To many, the
92
- Apple ipod was the first device that showed the potential but already before
93
- that model, other manufacturers and brands had already released some devices.
94
-
95
- One of the first mp3 players on the market was the "Archos Player" with its
96
- massive 6 GB harddrive. My brother Björn and our common friend Linus purchased
97
- these devices, only to soon realize that while the device was nice, the
98
- software were lacking several features you would think such a device should be
99
- able to provide. How hard would it be to write our own replacement?
100
-
101
- The challenge truly piqued our curiosity. With a lot of reverse engineering
102
- and hard work, we figured out how to replace the software in the devices with
103
- one we wrote ourselves. We then took on other similar devices and within a few
104
- years [ Rockbox] ( https://www.rockbox.org ) was a fully Open Source mp3 player
105
- firmware replacement that worked on several dozens of different portable music
106
- players from a handful of different brands. Rockbox was a tiny, simple
107
- operating system made to just have a music player application run. Albeit an
108
- application that could run games, including doom (of course), have better
109
- battery live than the factory firmware and support many more music and audio
110
- formats than the original software did.
111
-
112
- We had physical annual developer meetups during several years where Rockbox
113
- contributors from all over the world would unite to hack on code and have a
114
- good time over a weekend.
115
-
116
- When the smart phones eventually entered and switfly conquered the portable
117
- music world, the concept and use of mp3 players faded away and so did my
118
- personal interest in the Rockbox project. I officially stopped participating
119
- in 2014, but by then I was not doing much. I continued to host and run servers
120
- and infrastructure for the project until late 2021.
121
-
122
- ## c-ares
123
-
124
- At some point during 2003, my friend Bjorn (from Dancer) and I were discussing
125
- back and forth and planning to maybe create our own asynchronous DNS/name
126
- resolver library. We felt that the synchronous APIs provided by
127
- ` gethostname() ` and ` getaddrinfo() ` were too limiting in for example curl. We
128
- could really use something that would not block the caller.
129
-
130
- While thinking about this and researching what was already out there, I found
131
- the ** ares** library written by Greg Hudson. It was an effort that was almost
132
- exactly what we had been looking for. I decided I would not make a new library
133
- but rather join the ares project and help polish that further to perfect it
134
- for curl.
135
-
136
- It was soon made clear to me that the original author of this library did not
137
- want the patches I deemed were necessary, including changes to make it more
138
- portable to Windows and more. I felt I had no choice but to fork the project
139
- and instead I created ** c-ares** . It would show its heritance but not be the
140
- same. The ` c ` could be for curl, but it also also made it into an English word
141
- like "cares" which was enough for me.
142
-
143
- With c-ares, we could soon offer asynchronous name resolving for curl on a
144
- wide range of platforms, but of course there were other projects and users out
145
- in the world who felt a similar need. c-ares is deployed widely by many.
146
-
147
- I have tried to reduce my own personal activities in the c-ares project the
148
- last few years simply because I feel I do not have enough time and energy to
149
- keep it up in this project as well. I still am a maintainer but I am not doing
150
- a lot.
151
-
152
- In OpenSSF's [ criticality score] ( https://github.com/ossf/criticality_score )
153
- update in early 2021 where they rank how critical Open Source projects are to
154
- the world, they put c-ares as #2153 out of 102,507.
155
-
156
- ## libssh2
157
-
158
- In late 2006, I wanted to add SCP and SFTP support to curl. I investigated the
159
- library situation for SSH support and I found that there existed two similar
160
- Open Source libraries for this purpose, confusingly similarly named too:
161
- libssh2 and libssh.
162
-
163
- As I wanted the SSH library to work a with a non-blocking API to suit curl
164
- proper, I reached out to both the SSH library projects I had found and asked
165
- them about their current support and how they viewed the future and offered to
166
- work on providing such API/functionality myself. I thought the by far most
167
- promising and friendly response came from ** libssh2** , so I made my choice.
168
-
169
- In November 2006 we started to add support for SCP and SFTP to curl based on
170
- libssh2, and at the same time I started contributing improvements in the
171
- libssh2 project. In particular to make sure the API could be set to and behave
172
- in non-blocking way.
173
-
174
- libssh2 was founded by Sara Golemon in December 2004 and she was still the
175
- lead developer when I joined the project but I soon become a co-maintainer and
176
- when Sara changed jobs in 2007 she was blocked to contribute to the project
177
- anymore and I became almost the sole maintainer.
178
-
179
- I am still a maintainer of the libssh2 project but I try to keep my activities
180
- to a minimum. Others do the real work there now.
181
-
182
- In OpenSSF's [ criticality score] ( https://github.com/ossf/criticality_score )
183
- update in early 2021 where they rank how critical Open Source projects are to
184
- the world, they put libssh2 as #3222 out of 102,507.
185
-
186
- ## Firefox
187
-
188
- In November 2013 I flew over to the US and visited the Mozilla offices in
189
- Mountain view, California for a day full of job interviews. I think I did
190
- seven of them, back to back, over the course of that day.
191
-
192
- In most of the interviews, we soon touched the fact that I was the main author
193
- of curl, I knew my way around HTTP and client networking and got into talking
194
- about specific problems or challenges of the day. They knew I knew HTTP,
195
- networking and Open Source as I had already shown that in the public for
196
- years. They mostly needed to also check if I would work socially in a team in
197
- the real world. I got the job.
198
-
199
- Working on the Firefox web browser as a full-time job was quite a difference
200
- compared to the small scale projects I had otherwise mostly kept myself busy
201
- in. In this project there were hundreds of developers, it could end up in
202
- thousands of commits per day and there were more than a thousand new bug
203
- tracker entries filed every single day. The speed and the volume of things
204
- were overwhelming.
205
-
206
- I worked in the networking team ("Necko") so I got to fiddle with HTTP, DNS,
207
- sockets, cookies etc. Things I knew and liked to fiddle with since before. It
208
- was a perfect job for me. Maybe the biggest downside was C++.
209
-
210
- I quit Mozilla in December 2018 without knowing what to do next, but with a
211
- keen interest in trying to see if I could maybe make working on curl full-time
212
- a thing...
10
+ * [ Dancer] ( mine/dancer.md )
11
+ * [ curl] ( mine/curl.md )
12
+ * [ Rockbox] ( mine/rockbox.md )
13
+ * [ c-ares] ( mine/c-ares.md )
14
+ * [ libssh2] ( mine/libssh2.md )
15
+ * [ Firefox] ( mine/firefox.md )
0 commit comments