Skip to content

Commit bb0e345

Browse files
committed
rn-79: add interview with Felipe Contreras
1 parent 6687e4c commit bb0e345

File tree

1 file changed

+216
-3
lines changed

1 file changed

+216
-3
lines changed

‎rev_news/drafts/edition-70.md‎

Lines changed: 216 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,222 @@ This edition covers what happened during the month of November 2020.
4747
### Support
4848
-->
4949

50-
<!---
51-
## Developer Spotlight:
52-
-->
50+
## Developer Spotlight: Felipe Contreras
51+
52+
* Who are you and what do you do?
53+
54+
I'm a software engineer who has worked in all areas of software
55+
development. These days they use the term "full stack developer" for a
56+
developer that works on all areas of web development, which I have
57+
done, but I've also worked on Linux kernel development, middleware,
58+
UI; you name it.
59+
60+
Right now I'm a freelancer offering services to local companies doing
61+
mostly web development, but not quite.
62+
63+
It's hard to pigeonhole me because I not only do software development,
64+
I also write a blog (which is not only about software), I've moderated
65+
online communities, and I read a lot from intellectuals regarding the
66+
ongoing culture war, and so on.
67+
68+
I guess you could say I'm a jack of all trades (but I've actually
69+
mastered a few).
70+
71+
* What would you name your most important contribution to Git?
72+
73+
That's very hard to tell because I've worked all over the place, so
74+
most of my changes are minor improvements. But I guess the one with
75+
the biggest impact to users would have to be `git-remote-hg`; a
76+
bidirectional bridge between Git and Mercurial.
77+
78+
Ironically I've never had to use Mercurial, nor worked on a project
79+
that uses Mercurial. However, I did work on projects that used
80+
Subversion and CVS back in 2005, when Git started, and I found it
81+
useful that there existed tools to use Git while working with other
82+
version control systems.
83+
84+
I used to contribute to Pidgin (the MSN protocol parts), who used
85+
Monotone, and I refused to work on such a horrendous VCS, so I started
86+
to work on scripts to convert Monotone repositories to Git, and I
87+
contributed my patches back through Bugzilla (like all other
88+
contributors).
89+
90+
This gave me insight into the inner workings of Git, and eventually
91+
when the Pidgin project decided to move to Mercurial (an obvious
92+
mistake in my opinion), I started surveying the tools to convert from
93+
Git to Mercurial, and I found lots of areas of improvement.
94+
95+
Regarding these tools I would be remiss if I didn't give attribution
96+
to Rocco Rutte, who created the first `fast-export` script, which I used
97+
as inspiration for `git-remote-hg`, but unfortunately died of cancer in
98+
2009. Without his work I might not have started this particular
99+
journey.
100+
101+
Using Rocco Rutte's program, I had the idea to take that approach, but
102+
hide it inside Git's remote-helper infrastructure, which was
103+
surprisingly easy. Everything else that came after was fine-tuning,
104+
adding features, and improving Git's infrastructure to make such
105+
features possible.
106+
107+
In response to some pushback that I received from more established Git
108+
developers--who claimed that some of these changes were specific to
109+
`git-remote-hg`--I decided to create `git-remote-bzr` as a proof of
110+
concept to interact with Bazaar (again, I never personally had to use
111+
Bazaar), but it turned out there was a huge demand for such a tool, so
112+
I kept working on it.
113+
114+
Some GNU Emacs developers loved `git-remote-bzr`, and it probably helped
115+
in the eventual move to Git, even though Richard Stallman initially
116+
pushed back hard against it.
117+
118+
So, even though I never really used `git-remote-hg`, or `git-remote-bzr` I
119+
kept working at them because clearly other people did. I understand
120+
all too well the frustration of working on a VCS that is foreign and
121+
suboptimal, especially when you know Git has everything you need; it's
122+
like being stranded.
123+
124+
* What are you doing on the Git project these days, and why?
125+
126+
A lot of things. I stopped working on the Git project for many years,
127+
but right now I have motivation to work on it again, and there's
128+
literally dozens of features I'm working on. Unfortunately my patches
129+
have a tendency to not be accepted, so many of these will not end up
130+
helping the end users, but I'm thinking of ways to make these
131+
available outside of Git.
132+
133+
The main one is improvements to "git pull". Initially there was a
134+
complaint from a Red Hat employee about an annoying warning added
135+
recently, which prompted me to look back at work I did in 2013 which
136+
solves all this, but was never merged. Back then the "git pull" code
137+
was written in shell script, now it's in C, so I had to rewrite all
138+
this functionality.
139+
140+
It's a lot of work because there's many different workflows,
141+
configurations, and options that affect the way "git pull" works. I
142+
think the bulk of the code is mostly done, but there's a few options I
143+
would like to explore that I haven't mentioned yet in the mailing
144+
list, since the current patch series is controversial as it is.
145+
146+
Part of the work is reading back old mail threads which go back to
147+
2008. A lot of problems and suggestions have been mentioned throughout
148+
the years, and my patch series tries to compile all of those, in
149+
addition to the comments from 2020.
150+
151+
The story of these changes is interesting enough that I have been
152+
writing a blog post about it, which is going to be enormous, but a lot
153+
more work is needed to finish it properly. Hopefully it will be ready
154+
for the next edition of Git Rev News.
155+
156+
In another irony; I don't even use "git pull" (I use "git fetch" +
157+
"git merge" / "git rebase").
158+
159+
* If you could get a team of expert developers to work full time
160+
on something in Git for a full year, what would it be?
161+
162+
I would split Git into a library, and a command line interface.
163+
164+
Clearly there's a need for a stand-alone library, since there is
165+
libgit2, but Git doesn't use libgit2, so one has to always catch up
166+
with the other.
167+
168+
Recently Ævar Arnfjörð Bjarmason mentioned a thought about somehow
169+
splitting the porcelain and plumbing of Git; the part that is for
170+
typical end users, and the part that is for advanced users or scripts.
171+
Splitting the command line from the library would allow us to more
172+
easily see what part belongs where. Plus, I would split the command
173+
line into two; `git` and `git-tool`. The `git` command should be
174+
for typical end users, and the documentation about those commands
175+
should not include any implementation details, or plumbing.
176+
177+
I believe having a clean command line, which hides implementation
178+
details and plumbing, would be of great benefit to the average Git
179+
user, and in addition would help developers visualize what changes are
180+
more likely to affect the end user, plus where the focus of improving
181+
documentation should be.
182+
183+
Oh, and one person on the team should be not a developer, but a copy
184+
editor, and his job would be to rewrite *all* the documentation. It's
185+
probably incontrovertible that Git's documentation can be improved a
186+
lot.
187+
188+
* If you could remove something from Git without worrying about
189+
backwards compatibility, what would it be?
190+
191+
I don't think I would remove anything from Git.
192+
193+
Plus, I don't believe any good developer should stop worrying about
194+
backwards compatibility, ever. I'm of the opinion that there's always
195+
a way to implement changes that are incompatible with previous
196+
versions, but there's a series of steps. First you add the new
197+
functionality, then you add a deprecation period, then you make the
198+
new functionality the default, but always allowing the user to access
199+
the old functionality.
200+
201+
It's a lot more work, and takes a lot more time, which is why many bad
202+
projects don't do it, but I think you always need to worry about
203+
backwards compatibility, and it's a good thing Git developers do worry
204+
about that.
205+
206+
OK, maybe `merge.defaultToUpstream`, nobody uses that.
207+
208+
* What is your favorite Git-related tool/library, outside of Git itself?
209+
210+
I don't really use anything outside of Git.
211+
212+
I find Git vanilla to be mostly good enough to do everything I need,
213+
and when I don't; I try to introduce that directly into Git itself.
214+
215+
I created a fork of Git called `git-fc` with all the features I didn't
216+
manage to land into Git upstream, but I have not updated it in some
217+
years (it's in my endless to-do list), and even though I miss those
218+
features a lot, I can manage.
219+
220+
I also have a bunch of projects that add other functionality, like
221+
[`git-related`](https://github.com/felipec/git-related),
222+
[`git-reintegrate`](https://github.com/felipec/git-reintegrate),
223+
and [`git-send-series`](https://github.com/felipec/git-send-series),
224+
but I could live fine without those.
225+
226+
I think the only tool I would find very hard to live without is
227+
[`git-smartlist`](https://github.com/felipec/git-smartlist). Since
228+
I use gitk a lot to visualize commit history, very often I just want
229+
to see the history from the master branch to the current branch I'm
230+
at, and while usually you can do that with `master..@`, that's not
231+
always the case and "git smartlist" helps a lot in telling gitk
232+
exactly what I want to see.
233+
234+
I think this would be a good additional question:
235+
236+
* Outside of code, is there anything you would like to change about
237+
the Git project?
238+
239+
I think there's a disconnection between users and developers. Recently
240+
I've been talking about the curse of knowledge; the better you know
241+
something, the less you remember about how hard it was to learn. It's
242+
very typical for experts to underestimate how hard it is to understand
243+
something, because they've had many years of experience with it.
244+
245+
One example is rebasing. Basically all Git developers are very
246+
familiar with rebasing, so they can't imagine what it must be like for
247+
a user to not know how to rebase, or worse; to not know what a rebase
248+
is. But feedback from people whose job is to train users tells us the
249+
vast majority of new users have no idea what a rebase is.
250+
251+
Of course the Git developers care about the users, but many times we
252+
have to imagine hypothetical users and their needs, and it's not rare
253+
that these don't match the needs of real users.
254+
255+
That's why [Git Users' Surveys](https://public-inbox.org/git/577E6F32.7020007%40gmail.com/)
256+
are so important. Unfortunately they haven't been made in many years,
257+
and to be honest I don't see much point in them if the developers
258+
are not going to trust the results and use them to guide the project.
259+
260+
In all the users' surveys the number one and two areas of improvement
261+
without fail are: user-interface, and documentation, and I believe
262+
those are the two areas that are neglected the most.
263+
264+
I would take this feedback seriously, and as a project make a real
265+
effort to try to improve in these areas.
53266

54267
## Releases
55268

0 commit comments

Comments
(0)