This week we welcome Jürgen Gmach (@jugmac00) as our PyDev of the Week! Jürgen is a maintainer of the tox automation project. You can see what else Jürgen is up to over on his website. You can also check out Jürgen’s code over on GitHub or Launchpad.
Let’s spend some time getting to know Jürgen better!
Can you tell us a little about yourself (hobbies, education, etc):
Hi, I’m Jürgen. I am a software engineer at Canonical. I live in southern Germany, just between the beautiful Danube river and the Bavarian Forest.
I have been into computers since my earliest childhood, at first playing computer games on my Commodore C64, later writing simple applications in Basic.
A very passionate teacher at school piqued my interest in economics, so I decided to study that.
A couple of years into my studies, I was more and more sucked into this new thing called the Internet.
I created websites with HTML, most noticeable a quite successful online pool billiards community, which I later ported to PHPNuke for which I had to learn PHP and how to write patches.
At one point I decided I needed to follow my heart, so I started working as a software engineer at a local company.
In my spare time, I love to be outside. Depending on the weather and the season, I love to hike, bike, swim or hunt mushrooms, sometimes alone, but most of the time with my lovely family.
Why did you start using Python?
For my first engineering job, I was hired to work on a major intranet application, based on Python and Zope. So I had to learn Python on the job.
There is a little background story about this tech stack. My back then colleague first tried to create his own application server in Ruby, but his attempts always segfaulted, so at one point he picked up Zope and with that Python.
Since then Python has always been in my life.
I am forever in my colleague’s debt.
What other programming languages do you know and which is your favorite?
What projects are you working on now?
I joined Canonical in October 2021 to work on the Launchpad project, which consists of many pieces, most notably a code hosting system similar to GitHub, and a build farm, where all the fine packages get built for Ubuntu and other systems.
My team is currently building a CI system from scratch, which is a super interesting task. While I contribute to all involved systems, for the most part, I work on the CI runner. And one of the best parts – this is all open-source.
I also spend some of my spare time working on multiple open-source projects.
That would be tox, the task automation tool, the almost 300 projects of the Zope Foundation, the Morepath web framework, Flask-Reuploaded, which I forked and so saved from being unmaintained. I also do many more drive-by contributions.
Which Python libraries are your favorite (core or 3rd party)?
I certainly would not want to maintain the 300 Zope repositories without tox, which offers a standard interface to testing, running linters, and building documentation.
Speaking of linters, I never go without pre-commit and flake8, and some more depending on the project.
When I need to create a command-line application, argparse is my first choice. I especially love its versatility and that it comes with the standard library.
all-repos is a fantastic niche application and library, which I use when I need to update dozens or in the case of Zope, even hundreds of repositories with a single command. I gave a quick introduction at PyConUS.
How did you become involved with the tox project?
Oh, this is a fun one. I even have blogged about it in “Testing the tox 4 Pre-Release at Scale”.
The short form:
In order to be able to maintain the 300 Zope projects with only a couple of people, we need uniform interfaces, so we use tox for testing. Just clone it and run `tox` – no setting up a virtual environment, no reading documentation, no fiddling with test paths.
As Bernát Gabor, the core maintainer of tox, announced on Twitter that he plans to release tox 4, which would be a complete rewrite, I thought it would be a good idea to run tox 4 alpha against all 300 projects. For that, I used all-repos to drive tox. I found and reported quite a couple of edge cases, and at one point I tried to fix some of them myself – which, with some help from Bernát, worked out pretty well.
As I enjoyed working with tox so much, I not only contributed code but also answered questions on StackOverflow and triaged new bug reports.
One day, out of the blue, Bernát asked me to become a maintainer – of my favorite open-source project!!! Crazy!
What are the top 3 things you have learned as a maintainer of an open-source package?
You cannot help everybody. Let’s take tox as an example. It is not a big project, but with more than 5 million downloads per month, and thousands of users, two things regularly happen. Users ask questions that even I as a maintainer cannot answer, as maybe the original poster uses a different IDE, a different operating system, or some very specific software… but it is ok to not know everything.
Also, with so many users you will be asked to implement things that are only helpful for very few users on the one hand, and on the other hand, will make maintenance harder in the long term. So you need to learn to say “no”.
Also, don’t be the single maintainer of a project. It is much more fun with some fellow maintainers. You can split the workload, learn how others maintain a project, and most importantly, you can have a break whenever you want. Life happens! I am currently building a house for my family so I cannot spend too much time on my projects – but this is ok!
And finally, and maybe most important. Let loose. When you no longer feel joy in maintaining your project, pass it on to your fellow maintainers, or look for new maintainers. That is ok. It is also ok to declare your project as unmaintained. You do not owe anybody anything, except yourself.
I think the above things are not only valid for open-source projects, but also for work, and possibly also for life in general.
Is there anything else you’d like to say?
If I could give my younger self three tips, these would be:
Take down notes of things you learn, write a developer journal or even a public blog. That way you reinforce what you learn and you can always look it up later on.
Go to conferences!!! You will pick up so many new things, and most importantly, you will meet and get to know so many great people from all over the world.
Shut down your computer. Go outside and have some fresh air and some fun!
Thanks for doing the interview, Jürgen!