Skip to content

Commit 373f01c

Browse files
committed
mine: split into multiple per-project pages
1 parent 8cf928a commit 373f01c

File tree

8 files changed

+213
-203
lines changed

8 files changed

+213
-203
lines changed

SUMMARY.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
* [My experience](mine.md)
2+
* [Dancer](mine/dancer.md)
3+
* [curl](mine/curl.md)
4+
* [Rockbox](mine/rockbox.md)
5+
* [c-ares](mine/c-ares.md)
6+
* [libssh2](mine/libssh2.md)
7+
* [Firefox](mine/firefox.md)
28
* [Getting started](getting-started.md)
39
* [Expect this](expect.md)
410
* [Source code](code.md)

mine.md

Lines changed: 6 additions & 203 deletions
Original file line numberDiff line numberDiff line change
@@ -7,206 +7,9 @@ and perhaps something I learned from that particular one.
77

88
This is not meant to be an exhaustive or complete list.
99

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)

mine/c-ares.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# c-ares
2+
3+
At some point during 2003, my friend Bjorn (from Dancer) and I were discussing
4+
back and forth and planning to maybe create our own asynchronous DNS/name
5+
resolver library. We felt that the synchronous APIs provided by
6+
`gethostname()` and `getaddrinfo()` were too limiting in for example curl. We
7+
could really use something that would not block the caller.
8+
9+
While thinking about this and researching what was already out there, I found
10+
the **ares** library written by Greg Hudson. It was an effort that was almost
11+
exactly what we had been looking for. I decided I would not make a new library
12+
but rather join the ares project and help polish that further to perfect it
13+
for curl.
14+
15+
It was soon made clear to me that the original author of this library did not
16+
want the patches I deemed were necessary, including changes to make it more
17+
portable to Windows and more. I felt I had no choice but to fork the project
18+
and instead I created **c-ares**. It would show its heritance but not be the
19+
same. The `c` could be for curl, but it also also made it into an English word
20+
like "cares" which was enough for me.
21+
22+
With c-ares, we could soon offer asynchronous name resolving for curl on a
23+
wide range of platforms, but of course there were other projects and users out
24+
in the world who felt a similar need. c-ares is deployed widely by many.
25+
26+
I have tried to reduce my own personal activities in the c-ares project the
27+
last few years simply because I feel I do not have enough time and energy to
28+
keep it up in this project as well. I still am a maintainer but I am not doing
29+
a lot.
30+
31+
In OpenSSF's [criticality score](https://github.com/ossf/criticality_score)
32+
update in early 2021 where they rank how critical Open Source projects are to
33+
the world, they put c-ares as #2153 out of 102,507.
34+

mine/curl.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# curl
2+
3+
I needed a simple tool to download currency rates from an HTTP server (See
4+
[Dancer](#dancer) above), and I found **httpget**. On November 11, 1996 Rafael
5+
Sagula had released the first version of that tool named httpget 0.1 and I
6+
found it just days after his release. This was a rudimentary tool that almost
7+
did what I wanted. I fixed a bug or two in it and sent my improvements back to
8+
Rafael over email.
9+
10+
Rafael made a few follow-up releases of the tool before he asked if I wanted
11+
to "take over" maintenance since I had kept on sending improvements his way -
12+
and I did.
13+
14+
In August the following year, while still using httpget to get currencies for
15+
my bot service I found a site that provided more currencies. Since these new
16+
rates were hosted on a GOPHER site I had to add support for another protocol
17+
to the tool, which at the same time made the name wrong. It was no longer just
18+
HTTP it would get. I renamed it to **urlget** a few months later, and by then
19+
it also supported FTP downloads. By then it was portable enough so that it
20+
built and ran on multiple Unix systems as well as Windows, Amiga and more.
21+
22+
When we moved into 1998, the tool had been improved further and could now do
23+
both FTP uploads and HTTP POST and the tool name had again started to feel
24+
wrong and unsuitable. It really did not just "get" URLs anymore. I released
25+
the final urlget version (3.12) on March 14 1998, then renamed the tool to
26+
**curl** and did the first curl release almost a week later with a bumped
27+
version number. On Friday March 20, 1998 I shipped curl 4.0.
28+
29+
In November 1998, I posted an update on the website celebrating "over 300
30+
downloads" of the latest release.
31+
32+
The project remained a command line tool for a while, and after the summar of
33+
2000 we introduced **libcurl** to the world. A library that would bring "curl
34+
powers" to applications that wanted it.
35+
36+
I would continue to work on curl on my spare time for years to come. In 2019,
37+
I joined the company [wolfSSL](https://wolfssl.com) and started offering
38+
commercial curl support and could finally work on curl full-time. Something of
39+
a dream that came true.
40+
41+
In OpenSSF's [criticality score](https://github.com/ossf/criticality_score)
42+
update in early 2021 where they rank how critical Open Source projects are to
43+
the world, they put curl as #86 out of 102,507.

mine/dancer.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Dancer
2+
3+
Soon after I started a new software developer job in the autumn of 1993, I
4+
discovered IRC, Internet Relay Chat. I immediately joined channels (that is
5+
what "chat rooms" are called in IRC speak), socialized online and made friends
6+
online with people from around the world.
7+
8+
On IRC, I soon discovered that not all clients were actual users. Some of them
9+
were automated programmed robot clients, called bots. All channels I
10+
frequented had at least one. One day an IRC friend of mine from Denmark,
11+
Bjorn, showed me his embryo of what would become his own Open Source bot. I
12+
immediately joined the mission of writing a bot. For the fun, for the
13+
education and to be able to make our bot do everything we would like a bot do
14+
in the channels we frequented. We called it Dancer from the fact that it
15+
served in a Danish channel at first. Dane Serv become Dancer.
16+
17+
This was the first real Open Source project I conntributed code to regularly.
18+
It was also my first real TCP/IP client adventure and I learned to read RFCs
19+
to figure out protocol details.
20+
21+
I refreshed a programming language I had written already before that I called
22+
FPL (Frexx Programming Language) and made the bot programmable in this
23+
language. This piece of code might be the oldest code I have ever released as
24+
Open Source, tracing back to maybe even before 1990.
25+
26+
We worked on and developed Dancer intensively for several years. In the late
27+
1996, it struck me I should of course extend it so that it could exchange
28+
currency rates for us on command. How much is 100 SEK (Swedish crowns) in USD
29+
today? That was easy, but in order for the currency rates to be exact, I
30+
needed to download fresh rates from somewhere daily. I found an HTTP server
31+
that hosted rates, so I just needed a tool that could run on a schedule and
32+
download those updated numbers...

mine/firefox.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Firefox
2+
3+
In November 2013 I flew over to the US and visited the Mozilla offices in
4+
Mountain view, California for a day full of job interviews. I think I did
5+
seven of them, back to back, over the course of that day.
6+
7+
In most of the interviews, we soon touched the fact that I was the main author
8+
of curl, I knew my way around HTTP and client networking and got into talking
9+
about specific problems or challenges of the day. They knew I knew HTTP,
10+
networking and Open Source as I had already shown that in the public for
11+
years. They mostly needed to also check if I would work socially in a team in
12+
the real world. I got the job.
13+
14+
Working on the Firefox web browser as a full-time job was quite a difference
15+
compared to the small scale projects I had otherwise mostly kept myself busy
16+
in. In this project there were hundreds of developers, it could end up in
17+
thousands of commits per day and there were more than a thousand new bug
18+
tracker entries filed every single day. The speed and the volume of things
19+
were overwhelming.
20+
21+
I worked in the networking team ("Necko") so I got to fiddle with HTTP, DNS,
22+
sockets, cookies etc. Things I knew and liked to fiddle with since before. It
23+
was a perfect job for me. Maybe the biggest downside was C++.
24+
25+
I quit Mozilla in December 2018 without knowing what to do next, but with a
26+
keen interest in trying to see if I could maybe make working on curl full-time
27+
a thing...

0 commit comments

Comments
 (0)