Julian Foad—Software Design Engineer

see also: my CV

Currently seeking an interesting new software design challenge

I am passionate about open source software and open protocols. My greatest professional satisfaction comes from working on software that helps lots of people to do something better, be it version control or CAD or owning one’s own digital self.

I want to spend all my efforts improving open source software, I have experience doing so in commercial environments, and I excel at getting to the core of a complex problem.

My last position was as one of the few full-time developers of Apache Subversion, first for CollabNet and then for WANdisco. On top of the usual bug fixing and helping customers repair corrupted repository data, with a remit to advance the development as I saw fit, I chose to tackle some of Subversion’s biggest design challenges: merging and move tracking.

A great part of my work was on improving merging. In between making many incremental improvements in areas such as tree conflict detection, I analysed the behaviour of the highly asymmetric merging implementation in comparison to the conceptually symmetric nature of merging at an abstract level. Using this analysis I was able both to extend the set of supported use cases and at the same time to significantly simplify the usage. I presented these findings at conferences, and the implementation was released in Subversion 1.8 as documented here in the release notes.

Around 2014-2015 I was researching how to provide move tracking, or Renames Done Right. This would drastically improve the experience of merging in the presence of renames, and its lack is widely recognized as one of the most significant weaknesses in Subversion. Perceiving that lack of a sound theoretical basis was a reason why many previous discussions had stalled, I reconsidered the whole versioning model down to its core concepts. I invented a model that embodies branching and moving as first-class concepts while preserving Subversion’s key characteristics such as directories being explicitly versioned (in contrast to Git). I designed a hierarchical branching system that recreates almost all of the flexibility that users had with Subversion’s existing free-form path-based branch identification, to explore how much of that flexibility is really needed. By the the start of 2016 I had committed a prototype implementation into the Subversion trunk to demonstrate the capabilities of this model. (At this time, my employer ended its involvement in Subversion development. I would love to come back to this project at some point if circumstances permit.)

My software background ranges from embedded systems to Linux, with languages including C and Python recently, and assembler, Pascal and C++ previously. I am confident that I can quickly transfer my skills to other technologies as required.

I am British and work from my home office in Nottingham. I speak English natively, with intermediate French and elementary German.

Please see also:

my CV (résumé) here or on LinkedIn

some of my Works & Contributions