-
Notifications
You must be signed in to change notification settings - Fork 30
/
interview.txt
187 lines (104 loc) · 5.79 KB
/
interview.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
Interview
Who am I/background
- I'm Jon Atack, a Bitcoin Core developer in my free time, and I'd like to move
to full-time work, in a sustainable way, on Bitcoin Core open source development.
- For the past decade I've been a freelance software developer doing software
engineering and CTO roles for multinationals. I'm based between Paris and
Biarritz in France, as well as sometimes in NYC and SF
- I studied computer science and physics at Harvey Mudd College in Claremont,
CA, and business at INSEAD in France.
- I speak English, French, German, and some Russian
- Computer languages: BASIC, assembly, Ruby, Lisp, some C, C++, and Python
- I began programming computers when I was 9 on the terminal printer in the
administrative offices of our grade school.
- I then taught myself 6502 assembly language and from age 12 to 17, parallel
with school and athletic activities, I was a professional freelance games
creator and programmer, and wrote 3 games that were released for Atari and
Commodore computers.
- I first heard of Bitcoin in 2013
- I began contributing to open source in 2013 as lead maintainer of Ransack, a
leading database search engine in the Ruby ecosystem, and became a top 100
contributor to the Ruby on Rails web framework and co-editor of the This Week
in Rails newsletter
- Starting following Bitcoin closely in 2016 and saving money from my freelance
missions to spend time learning to contribute
- I applied to Chaincode Labs in late February, and was told I needed to begin
showing some proof of work in the space
- In March, I began working on Bitcoin Core to learn how to contribute
- A month later, Jonas and John at Chaincode Labs proposed a phone call to
advise, provide orientation, and answer questions
- 2 months later, they proposed joining the Chaincode Labs Bitcoin seminar in
June, which was an amazing experience with great people
- Since then, for the past months I have been spending a few hours a week on
Bitcoin Core and aiming to work on it sustainably full time
- My priorities for Bitcoin Core are robustness and privacy /
censorship-resistance, followed by features, scaleability, and UX/UI.
Getting started working on Bitcoin Core
- Good resources and how to begin
- What kind of contributions are desired and needed
- How to begin contributing changes
- How long does it take to get to grips with the codebase and how Bitcoin Core works
- What skills and tools picked up on previous projects can be applied to working
on Bitcoin Core
- It's good to keep in mind to be patient, context-aware, and not take things
personally... it takes time
- How to sustain contributing without burning out
- What is unusual and exceptional in Bitcoin Core compared to other large,
legacy OSS projects I've seen
- Much context, history, specialised knowledge behind current state to assimilate
- BDFL-free
- Very small number of experienced reviewers and contributors
- Process
- Criticality
- People care and are generous with their time
- Humbleness and activism (why I'm here)
Reviewing PRs and the Bitcoin Core PR Review Club (John)
- Reviewing is the ideal way to begin
- How to reviewing Bitcoin Core PRs
- How does this advice contrast with other open source projects
Bitcoin Optech (John, David, Mike, Steve)
- Newsletter review
- Perhaps can come up with ideas to take it to the next level
Chaincode Labs summer Bitcoin seminar and residency (Matt, John, Jonas)
- Amazing place with amazing people
- Semi-depressing to return to normal life after ten days there!
- It makes business sense for OGs to protect their investment; patronage a la
Chaincode can be one of the most effective and interesting ways to do so
- A similar structure should exist in Europe, if any smart OGs are interested
There is much to do: Interesting developments in the Bitcoin Core codebase
- Modularity, for example further separating the node from the wallet (Russ)
- Multiprocess (Russ)
- Property-based testing (Chris Stewart and I)
- Fuzz testing (Marco, practicalswift)
- Faster functional tests from optimisations, more modularity, or switching from
Python to C++ or Rust
- Better test coverage of the P2P networking code
- There is discussion of this in issue #14210 "Test coverage of our networking code"
- Might help catch bugs like #12392 "Fix ignoring tx data requests when fPauseSend is set on a peer"
- Privacy improvements to the P2P networking (Suhas, Gleb):
- Separating transaction relay from block relay
- Need for better p2p testing tools and frameworks to evaluate how behaviour
changes in complex state: Suhas, Gleb, Jeremy, Giulia
- Multiple p2p networks instead of just one (James Chiang idea).
- Use different IP buckets per peer (James Chiang idea). Each IP
would have its own AddrMan table and would confer to ensure they
don't have the same peer IPs, to avoid IP poisoning e.g. flooding
by attacker peers.
- Separate block relay from txn relay, e.g. separate them into 2
networks. Suhas is working on that with PRs like 15759.
- A better framework for systematically thinking about privacy.
- Better simulations needed for evaluating Dandelion/++/Lite,
contact Giulia Fanti.
- AssumeUTXO (James)
- Benchmarking (James)
- Builds (Carl, CFields)
- Plugging Rust components into Bitcoin Core (Matt DNS PR)
- Watch the IRC discussions, issues, and code reviews
Future plans and goals
- With so much interesting stuff happening, how to decide what to work on
(haven't even mentioned all the exciting things happening with Lightning)
- How should people decide on whether to work on base layer or second layer
- Is trying to work on both spreading oneself too thin?
End note - humble service
Twitter and GitHub: jonatack
Bitcoin development repo at: https://github.com/jonatack/bitcoin-development