This week we welcome Elana Hashman (@ehashdn) as our PyDev of the Week! Elana is a director of the Open Source Initiative and a fellow of the Python Software Foundation. She is also the Clojure Packaging Team lead and a Java Packaging Team member. You can see some of her work over on Github. You can also learn more about Elana on her website. Let’s take a few moments to get to know her better!
Can you tell us a little about yourself (hobbies, education, etc):
I love to bake and cook, so my Twitter feed tends to be full of various bread pictures or whatever dish I’ve whipped up over the weekend. When I was a kid, I was completely hooked on the cooking channel—my favourite shows were “Iron Chef” and “Good Eats”—and I thought I’d become a chef when I grew up. That’s my back up plan if I ever drop out of tech!
I’m Canadian, and I attended the University of Waterloo in Ontario to study mathematics, majoring in Combinatorics & Optimization with a Computer Science minor. The University of Waterloo is famous for its co-operative study program, where students take an extra year to finish their degrees and forfeit their summers off to complete 5-6 paid co-op work terms. To give my schedule a bit more flexibility, I actually dropped out of the co-op program, but prior to graduating I completed 4 co-op terms, a Google Summer of Code internship, some consulting, and even became an open source maintainer. I learned how to admin servers for the Computer Science Club, and a group of my friends and I revived the Amateur Radio Club after it had been inactive for a decade.
Amateur (or “ham”) radio got me into playing with electronics, so I learned how to solder and now I occasionally build cool things like the PiDP-11 kit. And now that I can solder a PCB, I want to see if I can solder silver, so I’m signing up to take some jewellery-making classes this fall. I also take care of a bunch of wonderful, mostly low-maintenance houseplants. One day I hope to have a full-sized backyard for growing vegetables and setting up radio antennas!
Why did you start using Python?
I first learned Python to contribute to the OpenHatch project back in 2013. I had signed up for the Open Source Day at the Grace Hopper Celebration and was assigned to the WordPress group, but I ran into Asheesh Laroia and Carol Willing earlier at the conference and they poached me! I was amazed at how easy it was to read and understand the project code, even though I hadn’t written any Python before.
My very first bug assignment turned out to be more complex than anticipated, but I was later able to make a contribution and completed an entire summer internship with OpenHatch through Google Summer of Code, where I learned how to write Django and do Python web development. I then maintained the OpenHatch website and backend codebase for a little over a year, before the project started to wind down.
What other programming languages do you know and which is your favorite?
Oh, a lot! My first programming language was probably mIRCscript, which I learned as a teenager to make IRC bots and triggers, but I didn’t pick up any substantial programming skills until university. In school I studied Scheme, C, C++ and bash, and I learned SQL, Perl, and C# during my co-op jobs.
After I graduated, I worked primarily in Clojure, a dialect of Lisp that runs on the JVM. I might call that my favourite programming language because it’s so expressive and powerful, though I’m fond of all Lisps. Most folks would describe Python as a high-level language, but I can write much more terse, elegant abstractions in a Lisp than I can in Python! It’s the only language I’ve written where my colleagues have complimented my code by calling it “pretty” 😀
These days I don’t write much Clojure or Python; for my current day job, I work as a site reliability engineer for OpenShift on Azure, which means I write a lot of Golang and a little bash. I find Go a little bit too low-level for my tastes, but it’s really satisfying and cool to be able to contribute to upstream Kubernetes!
What projects are you working on now?
Outside of work, I spend the majority of my time serving as a director on the board of the Open Source Initiative. I’m a member of the licensing and sponsorship committees, and I chair the membership committee, so it’s my biggest current commitment in open source.
I also lead the Debian Clojure team, though things have been pretty quiet since the Buster release. There’s a few packages I’d like to spiff up and get new uploads completed for in the next few months.
What non-Python open source projects do you enjoy using?
I really enjoy using Mastodon, which is written in Ruby on Rails. It’s a FOSS alternative to Twitter, and it’s decentralized and federated, giving each instance a lot more control over moderation and content. I really like the atmosphere there; it’s friendly, laid back, and not really focused on reputation and branding. Lots of people have multiple accounts to reflect various aspects of themselves: I have a whole account just for food and cooking!
How did you get started with the Python Packaging Authority?
At PyCon sprints in 2016, I wanted to get involved with the Python cryptography project. Paul Kehrer was one of the cryptography development leads and he gave a talk that year on Reliably Distributing Compiled Modules, and suggested that I test out some of the tutorials for building CPython extensions on the manylinux docker images to see if I could make any improvements to the guides.
I knew very little about CPython extensions, so I tried to build the only one I had ever used before: python-kadmin. Pretty quickly, that resulted in me hitting a bug in the auditwheel tool. I didn’t know anything about ABIs or symbol versions, but here were some wild errors telling me that I couldn’t make numerical comparisons with the “MIT” part of the “KERBEROS_5_MIT” symbol versions. After folks at the sprints helped explain to me what was happening under the hood, what the bug was, and how to fix it, I was able to completely rewrite (for the better!) how auditwheel processed symbol version comparisons.
By the next year of PyCon sprints, the original maintainers of auditwheel had moved on. Someone had found a bug in the project and asked me to review and merge their fix. Since I was one of the only active contributors, Donald Stufft granted me maintainer access so I could review pull requests and cut releases. I served as the maintainer of auditwheel for two years after that … and I still haven’t made any contributions to cryptography!
What are Python Packaging Authority’s biggest challenges?
The manylinux project is probably the most technically challenging area of the Python Packaging Authority. It works incredibly well for 90% of use cases, but the 10% that don’t fit into the mold can have a very difficult time producing binaries, and many maintainers that fall into that camp have not hesitated to share their frustration about this. Reliably distributing pre-built binary modules, particularly for the C runtime, is a problem so complex that we have entire operating systems
to solve it!
The Python Packaging Authority has to strike a delicate balance between serving the needs of its users (who want it to be easy to install Python extensions), developers (who support users with source and binary packages), maintainers (who typically don’t work on open source full-time), and companies (who tend to occupy the niche use cases and have specific goals that may not always align with other companies or the rest of the community).
What the the future of Python packaging look like?
Bright and exciting! The manylinux2014 specification was just released, which will bring manylinux support to a number of new machine architectures. Having ceased most of my packaging responsibilities in April, I’ve been really impressed by the folks that have stepped up to maintain auditwheel. There are a lot of excellent people who contribute their time to improving Python packaging, and I’m confident that they will do a great job at navigating the very real challenges the community faces.
Thanks for doing the interview, Elana!