@@ -29,9 +29,161 @@ This edition covers what happened during the month of April 2018.
2929### Support
3030-->
3131
32- <!-- -
33- ## Developer Spotlight:
34- -->
32+
33+ ## Developer Spotlight: Johannes Schindelin (alias Dscho)
34+
35+ * Who are you and what do you do?
36+
37+ That is a broad question ;-)
38+
39+ Professionally, I got a diploma (not a measly MSc) in mathematics
40+ (specialty: number theory), graduated as a geneticist, dabbled with
41+ psychology as a post-doc, then got heavily involved in scientific image
42+ processing and light sheet microscopy. Nowadays, I work proudly as
43+ software developer at Microsoft.
44+
45+ From Git's perspective, I am the maintainer of
46+ [ Git for Windows] ( https://gitforwindows.org ) , the "friendly fork" of
47+ Git whose purpose in life is to bring Git to the platform with the
48+ largest market share among professional software developers. As
49+ maintainer, my goals are 1) to improve the Git user experience,
50+ primarily on Windows, 2) to make the contribution process more
51+ inclusive and friendly, and 3) to collaborate as effectively with the
52+ Git project as I can muster.
53+
54+ * What would you name your most important contribution to Git?
55+
56+ That is really hard to answer, because it depends on your perspective
57+ which of my contributions you might consider the most important.
58+
59+ From the Git project's point of view, it is probably that I started
60+ porting Git to Windows, and that I started packaging end-user facing
61+ installers after
62+ [ Johannes Sixt] ( https://git.github.io/rev_news/2016/04/20/edition-14/#developer-spotlight-johannes-sixt )
63+ finished the initial port. Windows * is* the OS most professional software
64+ developers use, after all, and at the same time it is the OS least well
65+ supported by Git.
66+
67+ From the perspective of power users, I guess the
68+ [ interactive rebase] ( https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#_changing_multiple )
69+ is what most would deem my contribution with the highest impact.
70+
71+ Speaking for myself, I would deem my tenacity my most important
72+ contribution, i.e. that I keep improving Git (both the software as well as
73+ the project) and that I continue to care about the user experience, the
74+ project and the code.
75+
76+ * What are you doing on the Git project these days, and why?
77+
78+ I am [ working] ( https://github.com/git/git/pull/447 ) on teaching the
79+ interactive rebase a mode where it recreates branch structure by rebasing
80+ merge commits, too, rather than dropping them. Kind of a ` git rebase -p `
81+ Done Right.
82+
83+ Why? Because I need it to maintain Git for Windows (and
84+ [ GVFS Git] ( https://github.com/Microsoft/git/commits/gvfs ) and Git for Windows'
85+ [ fork of the MSYS2/Cygwin runtime] ( https://github.com/git-for-windows/msys2-runtime/ ) ,
86+ and of [ BusyBox-w32] ( https://github.com/git-for-windows/busybox-w32/ ) ).
87+ Simply rebasing a linear branch of ~ 500 patches is simply not good
88+ enough for a big project like Git for Windows.
89+
90+ * If you could get a team of expert developers to work full time on
91+ something in Git for a full year, what would it be?
92+
93+ [ Technical debt] ( https://xkcd.com/844/ ) . We have several metric tons of
94+ that. I get that a mostly volunteer-driven project such as Git has a lot
95+ of technical debt: who wants to work on technical debt, really?
96+
97+ One blatant example of our technical debt is the absence of a consistent
98+ API. We have something we call libgit.a, but even that is pretty
99+ inconsistent, and organically grown, and it is specifically intended only
100+ for use by Git's own commands (which is a shame, because it forces every
101+ application using Git through the essentially ASCII-based command-line
102+ stdin/stdout/stderr).
103+
104+ Another example is that so many central operations are still implemented
105+ as Unix shell scripts (with the corresponding lack of performance, safe
106+ error handling and portability). Some scripts are Perl scripts, which is
107+ better from the performance and safe error handling perspective, but it
108+ increases the number of languages you have to speak to contribute to Git,
109+ and it still is not particularly portable.
110+
111+ We have a test suite where debugging a regression may mean that you * have*
112+ to run 98 test cases before the failing one every single time in the
113+ edit/compile/debug cycle, because the 99th test case may depend on a side
114+ effect of at least one of the preceding test cases. Git's test suite is so
115+ not [ 21st century best practices] ( https://www.slideshare.net/BuckHodges/lessons-learned-doing-devops-at-scale-at-microsoft ) .
116+
117+ We spawn many, many processes (e.g. ` pack-refs ` , ` reflog ` , ` repack ` ,
118+ ` pack-objects ` , ` prune ` , ` worktree ` and ` rerere ` in ` git gc ` , or
119+ ` remote-https ` , ` receive-pack ` , ` index-pack ` , ` unpack-objects ` in
120+ ` git fetch ` ); It is sometimes really challenging to identify * which*
121+ process is the culprit of segmentation faults, file locking issues, or
122+ even "BUG:" messages. Sometimes even Unix shell scripts are involved,
123+ so you may very well end up having to go old-school by adding debug
124+ statements (because modern techniques such as single-stepping are not
125+ an option).
126+
127+ A lot of error code paths end in calls to die(). That might have seemed
128+ convenient to the developer who used that, but every piece of useful code
129+ will sooner or later be reused, and then such a sloppy "let's just exit()
130+ and not bother with releasing memory or closing file handles" mentality
131+ really hurts. Of course, C's lack of a ` finally ` construct makes proper
132+ error handling quite a bit bothersome.
133+
134+ We use Asciidoc for our documentation. Worse: even after the rest of the
135+ world settled safely on Markdown for pretty much everything new, we
136+ decided that it would be a splendid idea to convert some ASCII document to
137+ Asciidoc. This hinders fruitful exchanges with all kinds of user
138+ documentation, say, in GitHub wikis.
139+
140+ Git assumes that filesystems are case-sensitive. That is true for Linux.
141+ It is incorrect for Windows and macOS. And then we use the filesystem as a
142+ backend e.g. for loose refs.
143+
144+ The Git index file was designed as a flat file with variable-size items,
145+ intended to be read sequentially. The index' purpose, however, is more
146+ like a filesystem, where ideally random-access, concurrent reads and
147+ writes should be possible, but the flat file nature prevents that. When
148+ your idea of a large project looks like linux.git, that may seem a
149+ reasonable design. Even going to the size of gcc.git puts a dent into that
150+ impression, though. Most commercial software projects have larger
151+ repositories. Sometimes by
152+ [ a large margin] ( https://blogs.msdn.microsoft.com/bharry/2017/05/24/the-largest-git-repo-on-the-planet/ ) .
153+
154+ There is a lot of technical debt in Git.
155+
156+ * If you could remove something from Git without worrying about
157+ backwards compatibility, what would it be?
158+
159+ Submodules.
160+
161+ Their premise is that they can be treated essentially as if they were
162+ files, which is a laughable notion after even a cursory consideration.
163+ Files can be untracked, ignored, tracked (clean, modified, deleted).
164+ Submodules can have combinations of those. Like, a submodule can be up to
165+ date * and* have untracked files. Oh, and try to detect renames on
166+ submodules (including the case where a submodule was modified). I'll be
167+ waiting.
168+
169+ * What is your favorite Git-related tool/library, outside of Git
170+ itself?
171+
172+ [ Git garden shears] ( https://github.com/git-for-windows/build-extra/blob/master/shears.sh )
173+ (i.e. the Unix shell script that will hopefully be mostly replaced by
174+ ` git rebase --interactive --rebase-merges ` before long). I am biased, of
175+ course, as I wrote it myself. It is a major time saver for me, though.
176+
177+ I dibble-dabbled with many a Git-related tool from time to time, but at
178+ the end of the day I often end up enhancing Git proper to my needs, or use
179+ Git aliases or shell scripts (yes, I use shell scripts myself... Unix
180+ shell scripting has its uses... although I find myself writing and using
181+ [ node.js] ( https://nodejs.org/ ) more and more, as it makes it a lot easier
182+ to use object-oriented abstraction and exception-based error handling, not
183+ to mention that it is waaaaaaaaay faster than shell script interpreters).
184+ I do try to automate as much of my daily work as possible, and many
185+ Git-related tools or libraries simply are not all that automatable.
186+
35187
36188## Releases
37189
54206Jakub Narębski
< ; < [email protected] > > ; ,
55207Markus Jansen
< ; < [email protected] > > ; and
56208Gabriel Alcaras
< ; <
[email protected] >
> ; 57- with help from XXX .
209+ with help from Johannes Schindelin .
0 commit comments