<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Once a Maintainer]]></title><description><![CDATA[Each week we highlight an OSS maintainer and talk about the work they do. ]]></description><link>https://onceamaintainer.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!JrXM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f128c4b-ed4d-44d8-83ae-a6c91101b39d_168x168.png</url><title>Once a Maintainer</title><link>https://onceamaintainer.substack.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 20 May 2026 01:38:06 GMT</lastBuildDate><atom:link href="https://onceamaintainer.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Stripe]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[onceamaintainer@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[onceamaintainer@substack.com]]></itunes:email><itunes:name><![CDATA[Allison Pike]]></itunes:name></itunes:owner><itunes:author><![CDATA[Allison Pike]]></itunes:author><googleplay:owner><![CDATA[onceamaintainer@substack.com]]></googleplay:owner><googleplay:email><![CDATA[onceamaintainer@substack.com]]></googleplay:email><googleplay:author><![CDATA[Allison Pike]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Identifying unmaintained open source packages at scale ]]></title><description><![CDATA[Detecting when packages are unmaintained so engineering teams can take action.]]></description><link>https://onceamaintainer.substack.com/p/identifying-unmaintained-open-source</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/identifying-unmaintained-open-source</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Thu, 20 Nov 2025 16:13:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JC5E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Open source software often comes out of a developer solving their own problem and giving the solution away to the community. Sometimes this surfaces as a one-time code dump, but more commonly the original developer sticks around to maintain their work, adding features and fixing bugs. Eventually the original developer may no longer be interested in continuing to maintain a package, at which point it is either taken over by other contributors or abandoned.</p><p>Detecting abandoned packages is important because an abandoned package may not receive security fixes. It also may not receive compatibility patches for new versions of the underlying language or other packages. Some packages are explicitly abandoned by their authors, but many more enter a silent state where it&#8217;s unclear whether the maintainer is still around or not.</p><p>Infield detects abandoned dependencies using a combination of factors, including release cadence, commit history, maintainer comments, and community behavior. We&#8217;ve trained a model to combine these inputs to score the abandonment level of a dependency in order to predict dependencies that might be at risk. Our customers can then take action on these dependencies within their repos.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JC5E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JC5E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png 424w, https://substackcdn.com/image/fetch/$s_!JC5E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png 848w, https://substackcdn.com/image/fetch/$s_!JC5E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png 1272w, https://substackcdn.com/image/fetch/$s_!JC5E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JC5E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png" width="1456" height="632" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:632,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JC5E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png 424w, https://substackcdn.com/image/fetch/$s_!JC5E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png 848w, https://substackcdn.com/image/fetch/$s_!JC5E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png 1272w, https://substackcdn.com/image/fetch/$s_!JC5E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00894f2c-f78d-4f27-b8ba-07e23dd55b7d_1600x695.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Dependency dashboard inside Infield</figcaption></figure></div><p>Here&#8217;s what we consider in determining a package&#8217;s abandonment potential.</p><p><strong>Release cadence</strong></p><p>Historical release cadence can predict the next &#8220;expected release&#8221; for a package. For instance, if a package historically averaged one month between releases, but it&#8217;s been a year since the last release, that package might be abandoned. Conversely, if a package is released annually, and it&#8217;s been a year, that&#8217;s less likely to be an abandoned package. We combine release cadence and absolute release staleness together with the following formula:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;Staleness = 1 - e^{ - \\left( \\frac{Y}{X} \\right)^{p} \\left( \\frac{Y}{T} \\right)^{q} }&quot;,&quot;id&quot;:&quot;RXDGZQKQAO&quot;}" data-component-name="LatexBlockToDOM"></div><p>where</p><p>X = average days between releases<br>Y = days since last release<br>T = absolute time scale (constant)<br>p,q = weight parameters (constant)</p><p><strong>Commit history</strong></p><p>Some packages are in &#8220;maintenance mode&#8221; where the original maintainer might have left, but collaborators with repo access are still contributing. In this case we want to consider the freshness of new commits to the repo in addition to official releases.</p><p><strong>Maintainer comments</strong></p><p>The most clear indication of an abandoned package is official communication by the maintainers. We detect these in a few ways:</p><ol><li><p>Maintainer marks a repo as archived or deletes it</p></li><li><p>Maintainer responds to a Github issue or open pull request noting that the package is no longer maintained. We use language models to detect these.</p></li><li><p>Maintainer fails to respond to any Github issues or any pull requests</p></li></ol><p><strong>Community behavior</strong></p><p>We can detect abandoned packages in part by looking at how the community responds. For example, if we find a fork of a package with fresher commit history than the upstream source, that&#8217;s an indication that the community is taking over maintenance of this package.</p><p>We combine these factors using a machine learning model. We labeled hundreds of packages ourselves and now use the resulting model to predict &#8220;abandonment likelihood&#8221; as well as a true/false &#8220;abandoned&#8221; label.</p><p>If you&#8217;re interested in reading more about this problem, we suggest this <a href="https://arxiv.org/abs/2507.21678v1">academic paper</a> coming out of China.</p><p>If you want to use Infield to track and manage your own open source dependencies, you can easily get started for free on our <a href="https://app.infield.ai/users/sign_up">Get Started</a> page. We currently support Ruby, Python, and Javascript packages, with more languages coming soon.</p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: William Woodruff]]></title><description><![CDATA[The security engineer on meeting engineers where they are, and what keeps him up at night]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-william-woodruff</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-william-woodruff</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Wed, 21 May 2025 15:25:03 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a8790178-3956-4593-bc5c-ed0e0e548820_3376x6000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/woodruffw">William Woodruff</a>, contributor to <a href="https://github.com/Homebrew">Homebrew</a>, <a href="https://pypi.org">PyPI</a>, and creator of several open source tools including <a href="https://github.com/zizmorcore/zizmor">zizmor</a>, a static analysis security tool for Github Actions. William is currently Engineering Director at <a href="https://www.trailofbits.com">Trail of Bits</a>, a security research and consulting firm in New York. </p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source software upgrades.</p><p><strong>How did you get into coding? </strong></p><p>I don&#8217;t actually have an academic background in software, really. My degree is in Philosophy. I got into it as a hobby when I was a high schooler. I had a computer and I wanted to run different software on it. And I found Homebrew back when it was like a build from source package management ecosystem. I had a lot of fun compiling things on my machine and installing a bunch of random languages, which I never really used. So I began to contribute to Homebrew and make patches for the formulae that it was using. And then when I went to college, I had nothing to do one summer, and I applied to <a href="https://summerofcode.withgoogle.com">Google Summer of Code</a>. I did that for two years with Homebrew and I think it took me from sort of a passive interest to really actively doing software engineering.</p><p><strong>You mentioned installing a bunch of different languages at first - when did Ruby enter the picture for you?</strong></p><p>Ruby was the first full-fledged language I think I wrote software in. I&#8217;d written some Perl and Python before, but those were like little scripts.</p><p><strong>After graduating college, did you go right into software development? </strong></p><p>The company I work for, Trail of Bits, they hired me right out of college. And pretty much since then I&#8217;ve done open source. I&#8217;ve done a bit of proprietary stuff, but most of my career has been in open source.</p><p><strong>Awesome. So what would you say the structure is like, working on open source from within the umbrella of a company?</strong> </p><p>Yeah, as I&#8217;m sure you&#8217;re familiar with, the incentive structure for open source is very complicated. Like if you're a big company, the incentive is to extract value from open source, but not necessarily invest in it unless it's a direct selling point. But Trail of Bits is a pretty small company. One of the nice things is that the incentive structure gets inverted a bit at that smaller size. Because we're a consultancy, we can actually sell our expertise to larger companies who do need to invest in open source. And so I look after an entire team that does pretty much full time open source engineering. It's me and about five others who are actual day engineers as well as a couple of project managers working on Homebrew, but also RubyGems. A little bit of standards work there, and a bit of standards work in the Rust ecosystem. And also one of our really big areas is the Python ecosystem. So we do a lot of Python security engineering.</p><p><strong>What was the inspiration behind zizmor?</strong></p><p>Zizmor is a side project of mine. It started because for about the last five years, I've worked on the Python package index. I'm not a maintainer of it, but I've contributed a lot to it professionally. And so I built up all these security features with the help of a bunch of really fantastic people, the actual maintainers of the project. And as part of that, I noticed this trend that's happening in open source, which I think is ultimately for the good, but has some significant downsides, and that is this push towards putting things into CI/CD platforms. So things like GitHub Actions are alluring because you no longer have to have all this development state locally. You can sort of push it and compartmentalize it into a platform. But the downside to that is it&#8217;s a black box. You sort of throw your code and your build steps into it and pray you get functional and integral build products out of it. And so, you know, I believe pretty strongly that a core part of being a security engineer is not just trying to get people to do the secure thing, but meeting people where they are. People are going to use Github Actions and Gitlab&#8217;s CI/CD, whether or not I think the fundamentals are secure or not. And so the question is how to make those things as secure as possible.</p><p>So similarly with the PyPI stuff, we built this feature called 'Trusted Publishing&#8217;, which basically allows credential-less authentication between Github Actions, Gitlab and PyPI. You don't need long lived API tokens anymore. And that got me thinking like, well, how much do I actually really trust the security of the average Github Actions workflow? And I started looking into ways to statically analyze Github Actions workflows and action definitions to see whether or not my assumption that this was a more secure by default posture was well founded. And I don't know. I think the results are mixed. I think the answer is that you can write very secure Github Actions workflows, but by default Github Actions exposes a really large number of footguns that have recently led to some very high profile breaches in the last couple of months.</p><p><strong>What are the kinds of risks you&#8217;re worried about? Like I as a package maintainer, I'm trying to build a new version of my package. It's being done on GitHub Actions and the resulting build is not what I expect it to be because I installed some wrong plug-in and it's malicious or something? Or someone else was able to publish a version of my package to PyPI because I didn't set up my Github Actions permissions properly and they were able to intercept it? That sort of thing?</strong></p><p>I think both of those are major concerns of mine. I am especially concerned about the case where I think everything is integral. I think I've produced a hermetic build within Github Actions, but in reality there's a cache poisoning vector or a trigger that I think only I can trigger this workflow. When in reality, anybody who submits a pull request can trigger this workflow with elevated privileges. So I'm really worried about that case where everything looks like it's going perfectly. Even if you use all these modern supply chain standards, things like <a href="https://security.googleblog.com/2021/06/introducing-slsa-end-to-end-framework.html">SLSA</a> and <a href="https://openssf.org/community/sigstore/">Sigstore</a>, which are supposed to give you attestations and strong evidence of a place of origin. But if the origin itself is compromised, then these attestations are only an attestation of malicious activity. They don't give you the protection that many people assume they give you. And so I'm really worried about that type of vector.</p><p><strong>I&#8217;m sure you get asked this question a lot, but as a security engineer, on behalf of your customers what do you prioritize? Because there&#8217;s so much that goes into cybersecurity, what do you start with to get your house in order before moving onto the next level of problems?</strong></p><p>Yeah I mean certainly with PyPI we&#8217;re now on year 5 or 6 of this collaboration. And we started with, as you said, get your house in order steps. The most basic one was that five years ago, PyPI did not have API tokens. You would authenticate PyPI with a username and password pair. So if you were say Google or Amazon, you had employees who had the keys to the kingdom for your entire namespace on the index or your entire account rather on the index. And this violates a principle of least privilege, right? It violates longevity guarantees around tokens. Tokens should ideally have mandatory expirations. If they can't, at the very least they should be identifiable and traceable and not entirely random. They shouldn't be user controlled credentials. And so the very first thing we did was add API tokens. So you know, they have global controls. That was a really basic baseline thing. </p><p>Then the question from there is, well, we know for a fact that users will still normalize deviance, they will still create global scope tokens that don't expire. So how do we give users a default path that doesn't encourage them to create non-expiring global tokens? And the answer to that was Trusted Publishing. And it had two factors so that people can't just log into the same credential. Then let's add this self-expiring, self-scoping mechanism. And then finally, now that we have this self-expiring self-scoping mechanism without identity control, you've got to do attestations by default. So that's where we currently are. And I guess that gets back to what I was saying earlier, I really love open source. I think it's amazing what we've built on platforms like GitHub and Gitlab, but I am very worried about this semi-autonomous machine that we've built that runs at all hours of the day. I'm really worried that one day someone's going to find something that no one else has thought of yet. And we'll basically have a new version, a much, much worse version of the<a href="https://en.wikipedia.org/wiki/XZ_Utils_backdoor"> xz attack</a> or <a href="https://en.wikipedia.org/wiki/Heartbleed">Heartbleed</a>, one of these Internet-breaking attacks.</p><p><strong>Have there been any contributions to zizmor that made you think oh, I never would have thought of that? Something that really surprised you?</strong></p><p>Definitely. There've been a couple. I mean, I've had a couple of really fantastic contributors come in and submit audits that I had either not thought of or I was not thinking about structurally the way they thought about them. Like I was like, oh, you just sort of scan for this pattern and hopefully you'll catch the really bad things. But they built up the right machinery to detect, you know, malleability in the pattern and they rigorously thought through the problem whereas I had only a vague sense of what the check needed. That's been really nice. And also people have been filing issues for new audits. You know, people just want new features. That's natural. But I've been trying to burn those down.</p><p><strong>Do you have a formal roadmap for the project or is it more organic? How much would you say it kind of lives in your head versus managed by the community?</strong></p><p>Definitely it mostly lives in my mind at this point. I mean I track everything with Github issues and I have milestones for things I want to accomplish, but big picture things I'm not tracking anywhere but in my own way at the moment. It&#8217;s still only a six month old project. So it's mostly just me sort of feeling through where it needs to go. And eventually what a 2.0 release will look like because that'll be where I can begin to break things and try new directions.</p><p><strong>What are some other open source projects that you think are really interesting right now, or people in open source that are doing something interesting to you?</strong></p><p>There are a lot. I do a lot of work as part of my day job with PyPI and the Python package index maintainers. I think <a href="https://github.com/pypi/warehouse">Warehouse</a> itself, the backend of PyPI, is a really fascinating codebase and it doesn&#8217;t get the kind of attention it deserves. It&#8217;s a really under-appreciated codebase given that it&#8217;s a monolith that controls the world&#8217;s largest by volume packaging ecosystem. And they do that with an almost entirely volunteer staff and the shoestring resources of a nonprofit foundation with a few grants. And it&#8217;s my opinion as someone who&#8217;s contributed to it, who isn&#8217;t a maintainer but who&#8217;s really read through a lot of the codebase, that it&#8217;s a really well architected and tested codebase that&#8217;s held up under a lot of unpredictable stresses over the years, like ways it had to evolve very rapidly or had to grow an entirely new feature surface which could not be predicted. I&#8217;m sure the maintainers there could talk much more intelligently than I could about those pressures. So that's people like <a href="https://github.com/miketheman">Mike Fiedler</a> and <a href="https://github.com/ewdurbin">Ee Durban</a> and <a href="https://github.com/di">Dustin Ingram</a>. And then I know you&#8217;ve already talked to <a href="https://github.com/mikemcquaid">Mike McQuaid</a>, who I consider a great mentor. He&#8217;s one of the first people who got me really into open source on a more serious level than just sending patches every once in a while. </p><p><strong>I have one more question since it seems like you have a breadth of experience across ecosystems. And different open source ecosystems to me have different cultures, like what the JavaScript community will create packages for versus what the Rust community creates packages for, etc. Do you have any thoughts on the way that different ecosystems are doing things from a security perspective?</strong></p><p>Definitely. The difference between them can be very legible at times. I would say that six years ago, if you had asked me that, I would have said that Python was pretty far behind in terms of their security practices. I believe at that point RubyGems and npm already had API tokens. And I believe npm had already enabled two factor authentication at that point. So I would say that Python back then was trailing the pack. And these days, I would say that Python is towards the head of the pack because it pushed so hard on these newer ideas similar to trusted publishing.</p><p><strong>Is there a community consensus on what it could look like if we didn't have the baggage?</strong></p><p>I think especially for Python, there&#8217;s a big wish list of things that could be different if only we had known 20 years ago to set aside conceptual space or standard space for this. I know especially with Python, a huge desire the community has, which is very hard to solve technically, is namespaces. npm had a pretty decent amount of community pain when they did it, but it paid off long term. Now there's been some discussion around Python standards for adding namespaces to PyPI and other indices, but there is some packaging that is so old that it's a really significant lift. That's one thing. The lock files are another thing that are really conspicuously missing from Python, unfortunately, in my opinion. And now there's <a href="https://peps.python.org/pep-0751/">PEP 751</a>, which is the lock file standard. And I'm really hoping that sees more adoption over the next months and years.</p><div><hr></div><p>To suggest a maintainer, write to Allison at allison@infield.ai.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Ed Waisanen and Nate Papes]]></title><description><![CDATA[On Gala, an open source platform for collaborative research and learning]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-ed-waisanen-and</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-ed-waisanen-and</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Wed, 19 Feb 2025 14:28:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1c8fa83d-edb9-403f-b648-95ab515b9d74_7200x4457.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://www.linkedin.com/in/ed-waisanen/">Ed Waisanen</a> and <a href="https://github.com/papes1ns">Nate Papes</a> of the <a href="https://docs.learngala.com">Gala project</a>, an open source research and education platform out of the University of Michigan. Ed oversees the ongoing development of the Gala platform and advises users on instructional design, multimedia production and use, and the development of interactive data tools. Nate is a developer for <a href="https://atomicobject.com/offices/custom-software-development-ann-arbor">Atomic Object</a>, a software agency based in Ann Arbor, and works closely with the Gala team. </p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source software upgrades.</p><p><strong>Ed, let&#8217;s talk a bit about your personal background and how you came to be involved with Gala.</strong></p><p>Ed: Sure. I was a Master&#8217;s student at the University of Michigan, at what was then called the School of Natural Resources and Environment. I was studying environmental policy but also informatics, and I got involved with this radio show called &#8220;<a href="https://hotinhere.us">It&#8217;s Hot in Here</a>&#8221; on the student-run radio station,  <a href="https://www.wcbn.org">WCBN</a>. It was a lot of PhD students and faculty, and also folks in the community who were working on the environment and sustainability. And out of that came this focus on case-based education. Essentially, using case studies as a way to get at these intersecting issues. They drew some inspiration from the business school and other disciplines where case studies are traditionally used. <a href="https://hardin.seas.umich.edu">Rebecca Hardin</a>, the faculty member who was holding down the radio station, got involved in writing an internal grant to create like 50 case studies that would become known as the <a href="https://www.learngala.com/catalog/libraries/michigan">Michigan Sustainability Cases</a>.</p><p>The initial plan was to make some sort of Wordpress plugin that would house these case studies. Because traditionally, you know, a case study would be some sort of PDF that&#8217;s just a written document that gets passed around. But it didn&#8217;t feel impactful and current and like they were accomplishing their goal. And around this time a student named <a href="https://github.com/cbothner">Cameron Bothner</a>, who&#8217;s now at Shopify, was very involved in the radio station and studying linguistics and computer science. He turned out to be a very gifted Rails developer. <a href="https://www.linkedin.com/in/pearlzhuzeng/overlay/about-this-profile/">Pearl Zhu Zeng-Yoders</a> was another early contributor. So the idea was to build some sort of tool that would be multimedia-rich and bring the kind of stuff that was happening at the radio station into these case studies. Every case study would have a podcast episode associated with it. And that was sort of where I came in, because I had experience as a podcast producer. For example let&#8217;s say we have several conversations for a case study with somebody in charge of managing water quality somewhere. Let&#8217;s use that audio and tie it together to the writeup.</p><p>So we had this initial grant for the Michigan Sustainability Cases, which was supposed to last five years or so. That was winding down, and Cameron had left to go to Shopify. We were very lucky in having someone who was the original developer for the project be very capable but also very passionate. And that&#8217;s when we approached Atomic Object and Nate to come in.</p><p><strong>Nate, can you talk a little bit about your experience with Rails and how you came to be involved with the Gala project?</strong></p><p>Nate: So I went to Central Michigan University, and did computer science all the way through. I knew that&#8217;s what I wanted to do from a very early age. And I had a campus job where we helped the recreational staff, mostly with Python apps. That was my introduction to understanding anything about the web.</p><p>Then my first professional job out of college was at a Rails shop. They made online wellness campaigns - helping companies drive their employees to do wellness-related activities, like getting in 10k steps. I didn&#8217;t really want to work for a big company and it was a short drive, so I was like OK, I&#8217;ll do an internship there and if you want to hire me, cool. And I ended up really liking it and liking Rails a lot. I was like, why would anybody not choose this? I learned so much and got to work with really senior people. </p><p>Then Covid happened, and I needed a change, so I started doing my own consulting. And I ended up getting recruited at Atomic Object, which is an agency based in the Midwest. And one day the Managing Partner was like hey, we know you like Rails. We have a little treat for you. And he showed me Gala and said, &#8220;Would you want to work on this?&#8221; And I was amazed. I looked at the code and I was like oh my gosh, this is actually like really good code. I would love to work on this.</p><p><strong>What did the growth of Gala look like over this time period?</strong></p><p>Ed: At the beginning it was this very structured thing where students would apply to get funding for a case study, and we would essentially give them a mini-grant. They&#8217;d create their case study and I&#8217;d interface with the student teams and we&#8217;d work with Cameron to put them up. But over time we started asking for more robust tools to do the sort of authoring we wanted to do. And at a certain point, I don&#8217;t know who said it, but it was like, &#8220;Can we just make this available for anyone to create something?&#8221; And once we did that, people kept finding us and coming up with something cool to do.</p><p>One that I&#8217;d like to highlight is the <a href="https://www.learngala.com/catalog/libraries/ocelots">OCELOTS</a>. They&#8217;re a group of tropical ecologists that use Gala for teaching tropical biology and conservation. It&#8217;s a research coordination network, which brings together instructors to teach them how to create modules that are similar to the goals of the Sustainability Cases, i.e. more multimedia-rich, more engaging and interesting, but still open educational resources. So now we have this relationship with several of these groups where they're doing their thing and we're kind of embedded with them and can say now Gala needs to be able to do this or that.</p><p><strong>Is there any kind of top down roadmap? How do you manage feature requests from the community?</strong></p><p>Ed: I think Nate bounces with excitement on this sort of thing. We don&#8217;t have a roadmap per se. We have started tracking issues a lot better recently. I would say it&#8217;s one of our goals because all of this is sort of managed in my head, weighing our needs versus where we have knowledgeable people, and our funding, and I&#8217;m always trying to synthesize what&#8217;s the best focus that will serve multiple needs at once. </p><p><strong>This is the thing with open source, right. Do you have an estimate of how much of your time you&#8217;re spending on Gala, per week or per month?</strong></p><p>Nate: The number one goal originally was just to keep Gala online. So one day a week I&#8217;d work on Gala for just whatever improvements needed to be made, bug fixes or whatever. And then we were behind on Heroku updates and stuff, so I started doing more work there, and eventually started doing some feature work. As I got more into it I really got into the vision, the promise of Gala and the people involved. </p><p>Ed: I balance my time with instructional design support and documentation and managing how we actually package these things up to engage more students. We have CS students that come through who work on either Gala itself or on tools that integrate with Gala, like data tools and things like that. Recently we&#8217;ve also gotten some UX design students. And they get pretty energized about it. I find we can get them pretty excited about education and they like having worked on an open source project. Many of them have used it in the classroom. </p><p><strong>Where do you see Gala going from here? That could be in terms of features, users, or use cases, or it could also be in terms of contributors. In other words, what do you hope for Gala?</strong></p><p>Nate: From my personal perspective, I&#8217;d like to see Gala grow at a sustainable pace. I&#8217;d like to see more people be aware of it. Really smart people are writing really good content and the platform is good in and of itself. I think it was ahead of its time in a way, like how you can add really rich media to the learning modules. </p><p>Ed: As you know, we&#8217;re moving our base institution to Notre Dame. And one of my hopes is that because we&#8217;ve always had people from a bunch of universities clicking around the site, you wouldn&#8217;t immediately say this is a University of Michigan product. I&#8217;d like to formalize some of the governance and be for transparency but also be set up so that more people can get involved. So students can come in and learn and also contribute. The idea is you're a learner, but you're also an author, and you're also maybe an instructor - bringing that kind of ethos to the infrastructure that's running the thing. </p><p>Another thing is we've been engaging with <a href="https://seekcommons.org/about.html">SEEKCommons</a>, which is another NSF-funded network of folks who are big on open science and open metadata. We've also got some folks from <a href="https://www.wikidata.org/wiki/Wikidata:Main_Page">Wikidata </a>engaged. So my hope is to become more interoperable, nicely indexed, and lean on these other open source projects to get the stuff we want to do done.</p><div><hr></div><p>To suggest a maintainer or learn more about managing your open source upgrades with Infield, write to Allison at allison@infield.ai.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Santiago Pastorino]]></title><description><![CDATA[Working on the Rust compiler]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-santiago-pastorino</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-santiago-pastorino</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Tue, 26 Nov 2024 15:13:37 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/71c212ff-725d-4d05-a789-c56ba55ce501_6000x4000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/spastorino">Santiago Pastorino</a>, contributor to the Rust compiler team and alumni of the Rails Core team. Santiago is also a cofounder of a software development consultancy called <a href="https://www.wyeworks.com">Wyeworks</a>, and he spoke to us from Uruguay. </p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source upgrades.</p><p><strong>How did you first get into programming?</strong></p><p>I live in Montevideo, Uruguay. And I would say that like most of the people back in the day who started when I did, we got into programming through formal study. I went to university to do computer science. It was less of a hobby like it may be for many people now. I studied structural programming, algorithms, object oriented programming, and things like that. </p><p><strong>And what was your first job out of school?</strong></p><p>I started working in some local companies as a consultant doing mostly Java. But my friend and I, we wanted to see if we could do things a little bit differently. And we were getting bored of Java. So we started our own consultancy. And these were the days that DHH and Ruby on Rails was really starting to have its rise with the demo building the blog in 15 minutes and all that. My friend was already doing some Ruby, I was more into Python. But we had some people that wanted to do some prototypes in Rails. And we started to follow people on Twitter who were advocating for things like agile, scrum, TDD. And we found that really interesting.</p><p>This was actually a huge shift in the way that we worked. We used to meet with clients, have maybe a document, spend months working on something and then find out afterward that everything was wrong. But since we started our own agency, we could try out these new ways of doing things that we found interesting. That was also the beginning of my contributions to open source.</p><p><strong>Can you talk a little bit about the progression from your first contribution to Rails to becoming a Core team member? Do you remember what your first contribution was?</strong></p><p>I don&#8217;t remember exactly, but there was a client that needed a certain feature. And I ended up building something crazy that required me to go into how ActiveRecord worked. So that gave me a taste for the framework. Then I saw one of the Rails Core members say that they were going to have a weekend hackathon sometime soon. And I thought, why not? They included some gamification, you earned points or something. So I ended up sending 3 or 4 simple pull requests, maybe fixing a warning or adding a test case, something simple. </p><p>A lot of people think that when you start working in open source you must work on some super complex project, and the first thing you do is a total rewrite, and it&#8217;s not true. For me personally I have a really local understanding of what I&#8217;m doing and I don&#8217;t need to know the whole thing. These are really complex codebases, and it&#8217;s really hard to know what&#8217;s going on everywhere. I know my little piece of it. </p><p><strong>When did you start getting more into Rust?</strong></p><p>So when I was doing Rails around 2014-2015, I started to notice that people were talking about Rust. I started reading more about it, following people that talked about it, and went to this Rust conference in the US without even doing anything in it beforehand. </p><p>In my personal work experience, we were also starting to shift again the way that things were done, and I started to become less interested in the web development side of things. This is without judgment, but there were a lot of changes, mainly on the JavaScript side of things, where it seemed like every day there was something new and that was sort of unsustainable to my brain. It was like today we use A, but tomorrow B, then we use C, and not really for any reason. In my opinion it was changing for the sake of changing. Which is fine, but it was not for me.</p><p>So I started to get into more lower level programming. Rust kind of aims to cover the space of system programming, but with added safety warranties. So that was an interesting thing to me. I started looking into more, their solution for safety, and it was very principled and elegant. And so I started attending more events, and eventually I decided that it was a really complex language to just be working on on the side while I was still doing web development, only an hour a week or something. So I decided OK, let&#8217;s get a project. And the project ended up being the Rust compiler.</p><p><strong>Ruby has this mission statement or is organized around the principle of developer happiness. What would you say is the motto for Rust?</strong></p><p>Yes. It&#8217;s about safety, and about performance. It&#8217;s also about having stability in the language. You upgrade your software to the latest Rust version and it&#8217;s not going to break. Something that I&#8217;ve seen that is kind of new to me is that when you as a developer go to propose a change to the Rust compiler, you can request what&#8217;s called a <a href="https://github.com/rust-lang/crater">Crater</a> run. And what that does is basically we fetch all the libraries that exist, all the Rust libraries in the ecosystem. And we build them and run them and test them against the new version of the compiler. So it&#8217;s a way to check with every release that we&#8217;re not breaking existing codebases. Of course we don&#8217;t have private codebases to check. But at the very least we consistently check that we are not regressing.</p><p><strong>I read the blog post that your team put out a few weeks ago about the reorganization of the compiler team. How do you, as a group of people, think about the roadmap for the project? How do you move the project forward?</strong></p><p>In open source I think these are really interesting questions - what is the roadmap, what is the vision. Because you know, this is not a company where people are getting paid to do some specific thing. There are people that are paid to work on Rust, but by different entities and each entity has different interests, right? So it&#8217;s kind of hard to come together and say this is the roadmap, and these volunteers must adhere to the roadmap. In general, different contributors tend to contribute based on their interests. </p><p>But there are teams inside Rust that have different responsibilities. The lang team for example, in order to make important changes to the language you need to follow their RFC process where you write a formal document, and there is a vote. There is a community team, a library team, an infrastructure team, and then there is the Rust Foundation, which is kind of the legal representation of the project. Each team runs in their own way.</p><p><strong>It sounds like it&#8217;s primarily bottoms up in that it&#8217;s driven by the contributors and their interests, but there are teams responsible for different functional areas that have their own processes.</strong></p><p>Lately it&#8217;s been sort of half year based. We introduced a concept of project goals for the first half of next year, and we decided together between the volunteers and the team members the kinds of things we want to focus on. And then each goal needs an owner who is responsible for it. They are the main force behind it, and then it needs a little plan, and the people to implement it. If other teams are affected they need to say yes, we agree. So it&#8217;s more bottoms up, as you say, versus how a company would do it.</p><p><strong>What would you say is your personal focus for the next six months on the compiler team?</strong></p><p>I have been working on a couple of things. First, we have a project goal that is about building a proper async programming story. And that involves a lot of different things. It wasn&#8217;t long ago that async functions inside traits were implemented in the compiler. Before that you needed to use a crate for it, which was basically a <a href="https://doc.rust-lang.org/reference/procedural-macros.html">proc macro</a> that generated code, right? It wasn't able to generate the most performant code because you needed to box the stuff and that required heap allocation and things like that. So recently the concept of async functions in traits was introduced. We still don&#8217;t support dynamic dispatch for those. So at some point we are going to add support for that. We are building a new crate that will allow dynamic dispatch for asynchronous functions inside traits.</p><p>There is another project goal about ergonomic ref counting. If you work in particular with a lot of RC or Arc data types and threads and things like that, you need to resort to a lot of clones to get a new reference count. There's a person showing a use case where they need to clone like 20 variables or things like that. So we&#8217;re looking at ways to make this simpler and more user friendly.</p><div><hr></div><p>To suggest a maintainer, write to allison@infield.ai</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://onceamaintainer.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://onceamaintainer.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: André Luis Cardoso Jr.]]></title><description><![CDATA[Mentoring the next generation of open source contributors]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-andre-luis-cardoso</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-andre-luis-cardoso</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 18 Oct 2024 13:57:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JrXM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f128c4b-ed4d-44d8-83ae-a6c91101b39d_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/andrehjr">Andr&#233; Luis Cardoso Jr.</a>, maintainer of the runtime developer console and IRB alternative <a href="https://github.com/pry/pry">Pry</a>. Andr&#233; Luis is a Principal Software Engineer at RD Station, and he spoke with us from Brazil.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source upgrades.</p><p><strong>How did you get into software development?</strong></p><p>I think when I was 14 or so I got my first PC, and I discovered that there were things like programming languages, operating systems, and I just felt like that was what I wanted to do. I remember reading tutorials and books on programming, C, C++, Javascript, even though I didn&#8217;t know English very well. So it was hard. Most of the stuff I didn&#8217;t understand but I knew it was what I wanted to do for the rest of my life. So I decided to do computer science when I got to university. </p><p><strong>How did you find the transition from self study and figuring things out on your own to a more formal computer science program?</strong></p><p>I thought it was pretty boring. When I joined university, I already knew a lot from the books and tutorials. But they also gave me a foundation that I didn&#8217;t have in algorithms, structures, simple stuff that I hadn&#8217;t read much about. Then in my second year I started a job as a software engineer for the university. It was in Java, writing software for digital learning for students at the university, e-learning essentially. </p><p><strong>What was your first exposure to the Rails ecosystem?</strong></p><p>When I was at university, I started reading about other languages. I knew Java because that was what they were teaching, then I moved to Python, Ruby, C, Lisp, and Haskell. I had a lot of free time, so I got every book or material I could get my hands on. I really wanted to understand how each of the languages worked. Also back in 2007-2008, the Rails community in Brazil was getting a lot of traction. I remember Rails Summit Latin America was a huge, huge event in Brazil. That conference was a life changer for me. I saw people from Github, from popular open source libraries. I remember David Chelimsky from RSpec speaking at that conference and my decision at that point was, I needed to find a Rails job. I thought here in my city, most of the jobs are Java. So I sent emails to a lot of places and eventually got from a startup in the US, and that was my first Rails job. </p><p><strong>Do you remember your first open source contribution?</strong></p><p>Yeah, I remember making a pull request for the <a href="https://github.com/rails/thor">Thor</a> library. When you run your Rails server or any command line on Rails, you are actually using Thor. I remember I made a pull request for a simple refactor. It was just renaming a few methods, and the person that reviewed my pull request was <a href="https://github.com/josevalim">Jos&#233; Valim</a>, who created Elixir but was very active in Rails at the time. So I was really happy when he merged my request.</p><p><strong>After that first PR, how did you start to think about contributing to open source in terms of your time?</strong></p><p>I think mainly for me, I like to help. I like to be useful, and give back to the community whenever I can. So when I see an opportunity to give back, I jump in. But as a software engineer, I believe that you must understand how things are working under the hood, not just be a user of some dependency. You need to understand how it works. And I like to read code. So for me it&#8217;s like exercise. When I make a contribution or when I read the code from a dependency that we use, I&#8217;m learning and that improves me as a developer and as a person. </p><p>At my current job, we have a huge Rails application and we&#8217;ve been upgrading Rails for about 10 years. We had a lot of dependencies that broke and we had to make fixes or forks and stuff like that. And that improved me a lot as a software engineer. Whenever I can I try to make pull requests. Right now I see that there are a lot of projects that are not well maintained, but we need more people helping. Most people just make an issue and say &#8220;fix this for me.&#8221;</p><p><strong>We&#8217;ve heard about the &#8220;graying of open source&#8221; and the fact that the average maintainer has been at it for more than 10 years. Why do you think that is, and how do we get a new generation of contributors?</strong></p><p>At least where I work right now, I try to teach the younger engineers that you need to understand how things work under the hood. And it's not about just learning how the dependency works, but to be a senior engineer, you need to understand more like how the database works. How does Redis work, which is an awesome C codebase to read. And I believe we need to teach the younger generation to contribute more. </p><p>For <a href="https://github.com/pry/pry">Pry</a>, which is what I'm working on right now, the original creator is not working on it anymore. He's not even working in Ruby at the moment. So he moved on to other stuff that he likes and he passed down the torch to me. I was making a few pull requests and he said, &#8220;hey, do you want commit rights?&#8221; And that was it. He gave me access and let me do my thing. I think that comes with a lot of responsibility. There aren&#8217;t many people that I can ask for help. So we need to ask the younger generation and show them how to help.</p><p>There's a lot of simple stuff that people can do, documentation fixes or typos or whatever that people can make some pull requests and fixes for. The example I gave you earlier, my first pull request, it was just renaming some methods and I was really nervous. People should know that even making tiny fixes, that means a lot.</p><p><strong>How did you overcome those nerves you felt with that first pull request? We hear a lot from people that they want to contribute, but they are worried they&#8217;ll make a mistake and waste the maintainer&#8217;s time or get criticized harshly.</strong></p><p>At first, I think what made me comfortable was following the project before learning the code, getting a sense of the structure of the code, reading pull requests for newer commits, how the maintainer was reviewing them, reviewing the docs, and that gave me a sense of what was happening. And second, I believe that you should contribute to something that you use every day. No one is better than you at saying what is right or wrong if you&#8217;re using that tool daily.</p><p>With Pry, I use it every day whenever I&#8217;m debugging or jumping around code fixing things. And I noticed the project was not really active. There were a lot of open issues and pull requests, because the maintainer wasn&#8217;t really working on it anymore. And I wanted to make it still work with newer Ruby versions. I know Pry is acting a little weird with Ruby 3.3 for example, so we&#8217;re working on that.</p><p><strong>What are some other projects that you've taken inspiration from or you're looking at right now that you think are interesting or pushing Ruby forward?</strong> </p><p>The main project that I'm looking at right now is <a href="https://github.com/ruby/prism">Prism</a>, the new parser that's helping me to remove some code from Pry as well. I think that it's really nice. It's from <a href="https://github.com/kddnewton">Kevin Newton</a>. </p><p>I'm also following <a href="https://github.com/ruby/reline">Reline</a> closely. Reline is implementation of Readline in pure Ruby. Readline is the base of Pry and IRB. They are making a lot of improvements, like the new IRB features with multi-line editing and auto-completion with some drop downs that made me think I can bring some of that to Pry as well.</p><div><hr></div><p>To suggest a maintainer, write to Allison at allison@infield.ai.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://onceamaintainer.substack.com/p/once-a-maintainer-andre-luis-cardoso?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://onceamaintainer.substack.com/p/once-a-maintainer-andre-luis-cardoso?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Nate Berkopec]]></title><description><![CDATA[The Puma maintainer on becoming the go-to for performance]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-nate-berkopec</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-nate-berkopec</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 27 Sep 2024 14:38:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c11c35ed-d607-4bb6-8756-b5111f9c3499_5184x3456.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/nateberkopec">Nate Berkopec</a>, maintainer of the Ruby web server <a href="https://github.com/puma/puma">Puma</a> and expert on Rails performance. Nate lives in Tokyo where he runs <a href="https://www.speedshop.co">Speedshop</a>, a Rails performance consultancy. </p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source upgrades.</p><p><strong>How did you become a software developer?</strong></p><p>I was going to school in New York, and I kind of knew I wanted to be involved in tech startups. I was just interested in the whole scene, but I didn&#8217;t really know how to get involved. So I was just going to meetups and stuff like that in college. And I had a professor basically advise me that if I wanted to be in the tech world, the easiest way to do that was to become a programmer. This was in 2011, which in retrospect was probably the easiest time in the last 20 years to be a junior programmer and get a job. So I did <a href="https://www.railstutorial.org">Michael Hartl&#8217;s Rails tutorial</a>. I self-studied, and then worked for a friend&#8217;s startup, and then got a job as basically the apprentice programmer at another startup, and it sort of snowballed from there. My first and last love was Ruby. </p><p><strong>Did you have a sense at the time, say 2011-2013, that Rails was the right choice? What was the feeling that led you in that direction?</strong></p><p>I think Rails was clearly already the framework of choice for the makers of the world, the people who were just out to build stuff and get stuff done. I think there were also two specific things: the first was a <a href="https://innonate.com/hope">blog post</a> by a guy named Nate Westheimer. I don&#8217;t remember the name of it but he basically described the concept of going into the sweat lodge for a week and learning to code. He was also non-technical and learned to program with the Rails tutorial. I just remember that blog post really speaking to me.</p><p>The other thing that was in the water was Why&#8217;s <a href="https://poignant.guide">Poignant Guide to Ruby</a>, and I didn&#8217;t get it. I couldn&#8217;t follow what was going on. It didn&#8217;t teach me Ruby. But I remember thinking like, if these are the kind of people that write Ruby, then I want to be in that community. Those two little pieces of culture were really important for getting me into Ruby.</p><p><strong>Were you going to meetups in NY around this time as well?</strong></p><p>I remember meeting <a href="https://www.spencerfry.com">Spencer</a> (Fry), he&#8217;s been kind of a pillar in the Rails community in NY for more than 10 years now and he&#8217;s built two businesses with Rails. And Graham Lawler&#8217;s Ultralight Startups, that was a big meetup back in the day. </p><p><strong>What was your first contribution to open source?</strong></p><p>My first ever open source contribution was to Rails, and it was just in that spirit of &#8220;I'm out here getting stuff done, and this thing is broken - it's in my way. So let's fix it.&#8221; It was this weird thing with emails. I didn't know this at the time, but most of us are aware there's a plain text and an html part to an e-mail. The thing is, the order of those parts can matter. So in Gmail, it will display the first part that it can recognize and read. Which I guess is not true of all email clients. So I was looking at emails from our site in Gmail, and they were coming out in plain text, and then in Outlook and they were coming out in html. And I was like, what&#8217;s going on here?</p><p>It turned out that when you did a format block in ActionMailer, so you would write format.html, txt that was also setting the order of these mime parts in the e-mail, which kind of makes sense if you think about how Rails probably implements this. But to me it was so unexpected. I was like first of all, I didn't know this even mattered, right? Who would have any idea this would be important? So my <a href="https://github.com/rails/rails/pull/8044/commits/9cf33b55f39779b98604e1652affc2c64873dd9b">pull request </a>to Rails was to basically always put the html part first. And that was my first ever open source contribution.</p><p><strong>What was the feedback from the Core team? Were they like, no one&#8217;s ever brought this up before, or obviously yes, we should do this?</strong></p><p>Pretty much, and I think that&#8217;s the case for a lot of things in Rails specifically, which is that you come into the project for the first time thinking that everyone&#8217;s thought about all of this very deeply. And you, in the trenches, come across a weird corner case that no one&#8217;s really thought about before. And so there was a bit of back and forth but generally they were like yeah, merge it in. I think the bar for a new feature or something like that is very different than the bar for changing the behavior of some obscure part of ActionMailer.</p><p><strong>How did you end up getting involved in Puma?</strong></p><p>So for the next three years or so after that first contribution I was working freelance, and I started writing about performance online and eventually wrote my book, <a href="https://www.railsspeed.com">The Complete Guide to Rails Performance</a>. And that kind of catapulted me into being the Rails Performance Guy online. I was going to RubyConf and RailsConf a lot, speaking. At the time, <a href="https://github.com/evanphx">Evan Phoenix</a> was at Ruby Central and running those conferences. So I got to know Evan and <a href="https://github.com/schneems">Richard Schneeman</a> from Heroku. And at one of those conferences, sometime in 2016, Evan just sort of grabbed Richard and me in the hallway and said, &#8220;Do you guys want to maintain Puma?&#8221; And we were like, &#8220;yeah, sure.&#8221; So we did.</p><p><strong>What inspired you to write the book on performance to begin with? Or why was that your focus?</strong></p><p>So this was now on the down slope of peak Rails, right? This is 2015, and the start of peak JavaScript, we'll call it that. And I was frustrated because I was seeing a lot of people start to think, oh, Rails doesn't scale. Shopify was not huge yet. GitHub wasn't massive scale yet. And so we didn't have a Rails community Top 20 website in the world kind of success story. We really just had LinkedIn rewriting to Node, and we had Twitter rewriting to Scala. So two of the big Ruby unicorns were rewrites.</p><p>I was really frustrated by this argument because it didn&#8217;t make sense to me. And mostly I was like well, I really like Ruby. I want to keep writing it. So I started to learn more about performance and writing about it and trying to change the perception. And the blog posts I was writing about it were getting tons of views. So I was like ok, I guess I&#8217;ll write a book. </p><p><strong>Did you get the sense that people were kind of waiting for someone to step into that role? Because many Rails community members have said things exactly like you're saying, they love Ruby so much, they love the projects they&#8217;ve worked on, and the Rails doesn't scale stuff maybe bothered them but they didn't quite know what to do about it. So do you feel like when you stepped into that role there was a rush of support around you?</strong></p><p>Yeah, yeah, yeah. Performance is important, but it's not the core value proposition of any business. You have to do something fast. You can't <em>just</em> be fast. And so the community was mature enough at this point that there were a lot of apps running and a lot of people that were starting to hit growth pains for the first time. They're thinking like, oh man, we're going to have to end up having to rewrite this thing in a different language. That sounds awful. So I wasn't the only one feeling the anxiety for sure.</p><p><strong>Taking it back to Puma specifically, how do you guys run it as a project? Like how do you manage all of the contributions from a people perspective?</strong></p><p>I think Puma's actually not that high volume of a project because it does one thing and it's not that complicated of a thing, being a web server. We don't have a mission like Rails, to continually expand what we're doing, right. Puma does a thing and we want to do it really well. So that helps keep the complexity of it down in general. </p><p>How Puma works is there are three core maintainers now, myself, <a href="https://github.com/MSP-Greg">Greg</a>, and <a href="https://github.com/dentarg">Patrik</a>. And basically each of us has our own little thing that we like to do and we just run around doing that thing. So Greg really likes to improve our CI, and Patrik is mostly running around responding to issues. He&#8217;s very responsive and more of the hey, can you reproduce this, do we need to move this to a discussion, etc. And then I just sort of fill in gaps. I tend to manage the pull request backlog. So merging or hey, this needs to change before we can merge. The other part of it is that I see it as sort of my mission with Puma to grow and find new contributors. I think the most effective thing I can do to help the health of the project is to just find more people rather than to you know, get in there and cowboy code myself because I don&#8217;t have that much time.</p><p><strong>Does anything stand out to you - could be a feature request, or an issue - as the craziest or most unexpected thing you&#8217;ve seen as a Puma maintainer?</strong></p><p>I think one thing that was unexpected was this feature that we call reforking, that was contributed by a startup founder (<a href="https://github.com/wjordan">Will Jordan</a>) who wanted it for his own app. Basically the idea is that it changes when Puma spawns new processes and which processes it spawns from. Because to spawn a process in Linux, you&#8217;re always copying another process. Instead of booting from the master process, this feature boots from what we would traditionally call a child process, the process actually responding to requests. And the idea was that it would reduce memory usage because you wouldn&#8217;t need a master process anymore that was just sitting there not really doing anything.   That was such an interesting idea, I&#8217;ve never thought of that before. Then <a href="https://github.com/byroot">Jean</a> took that idea and wrote an entire other web server that was basically Unicorn plus this refork feature and he called it Pitchfork. So that was cool because it was clearly such an interesting idea that it inspired other people to do their own stuff with it. I think that was the coolest feature we ever got out of the blue. </p><p><strong>I guess that brings up an interesting thing about Puma as a project, which is that it's an open source project where there are other direct competing or replacement projects that you could use instead. Like in the Ruby ecosystem you've got Puma, Unicorn, other web servers that all kind of do the same thing. How do you think about working on a project of this type, in terms of what could be seen as competition?</strong></p><p>Yeah, I don&#8217;t see it as competition I think. I think my job is to basically be a steward of this codebase that already exists, and to make it as good as it can be. And I don&#8217;t really care if it gets more or less usage as a result. That&#8217;s why I contribute to Puma. I don&#8217;t really like the framing of competition in open source, because we&#8217;re all doing this for free. What are we competing for? But it is true that it&#8217;s a pluggable part of the ecosystem, a web server, and I think it&#8217;s cool to look at what other people are doing and to look at those ideas.</p><p>The best time is when another web server does something and we go &#8220;yeah, we would never do that.&#8221; I think the person who is pushing the most new ideas in web servers right now is <a href="https://github.com/ioquatix">Samuel Williams</a> and <a href="https://github.com/socketry/falcon">Falcon</a>, and Falcon does two things that Puma will never do - one is fibers. We just aren&#8217;t interested in doing fiber-based concurrency, and Falcon does it really well. So we don&#8217;t have to do it. The other is HTTP/2. Falcon is HTTP/2 native, and I don&#8217;t really see the use case for it for Puma. I don&#8217;t think it&#8217;s on the feature tracker. The only reason HTTP/2 would be useful in Puma would be slightly better development performance. So it hasn&#8217;t been high on the list. It&#8217;s cool that we can have multiple projects and make different things a priority. Like the whole reason why Jean wrote Pitchfork was because he didn&#8217;t want a threaded web server. Shopify has said we&#8217;re not doing threads - we&#8217;re doing process based concurrency, and that&#8217;s it. So we&#8217;re not interested in Puma, we&#8217;re going to do our own thing with this Pitchfork server. I think that&#8217;s great.</p><div><hr></div><p>To suggest a maintainer, write to Allison at allison@infield.ai.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Adrià Mercader]]></title><description><![CDATA[Building data portals for the world]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-adria-mercader</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-adria-mercader</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Mon, 16 Sep 2024 18:19:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JrXM!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f128c4b-ed4d-44d8-83ae-a6c91101b39d_168x168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/amercader">Adri&#224; Mercader</a>, maintainer of <a href="https://ckan.org">CKAN</a>, an open source data management system powering the data portals of governments and corporations around the world, including the US government&#8217;s portal, <a href="https://data.gov">data.gov</a>. Adri&#224; spoke with us from Spain.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source upgrades.</p><p><strong>How did you get into software development?</strong></p><p>I have a degree in biology, and once I finished my degree I did some coursework that required Excel macros, very basic commands. Everybody hated it, but I didn&#8217;t mind it. And then I did a masters in Geographic Information Systems, which had a lot of cartography and spatial resolution and some programming. I was semi-good at it, at least for the standard that they expected there. And from there I just quickly found a job in the geospatial field, but it had a lot of programming components and I started learning more and more. </p><p><strong>Was that first job in the software engineering department or in another area?</strong></p><p>Yeah. It was a very small company here in Barcelona. It basically provided GIS services, and I was hired to work as a GIS analyst, but really quickly, after just a couple of weeks, they put me on the programming side. We were only like 15 people. It's not like there were departments or anything. But I started learning from people that were there and had good mentors that pointed me in the right direction. But I never set out like OK, I need to be a programmer. It was more organically copying others and going step by step.</p><p>I was really lucky that at that first company I was exposed to open source from such an early stage of my career. That&#8217;s where I got familiar with the consumer side of open source software. I wasn&#8217;t yet a maintainer or contributing, but I started getting into the community and learning how things worked.</p><p>My first contributions were these very small projects that I open sourced myself while working at this company, like small Firefox extensions. I remember that I was creating mailing lists and documentation and everything for those projects, even though of course nobody was looking at them. They were super small and just useful for what I was doing in a super specific niche. But at least it gave me an initial sense of what would be involved running a successful open source project.</p><p><strong>When did you start working on CKAN?</strong></p><p>At the time I was living in the UK, and then I moved countries to go back to Spain. In that time I took a few months just to learn new things. And I was really lucky that the <a href="https://okfn.org">Open Knowledge Foundation</a>, which is the organization that created CKAN, posted a job around this time that just happened to align with what I was learning. This was around 2011. So I was incredibly lucky that they hired me then. At the time, CKAN was open source in the sense that the code was public, but it didn&#8217;t have a community around it, or a tech team or anything like that. </p><p>It was also around this time that the UK started looking for a government data portal. It was sort of the initial phase of the open data movement. And we got the UK, and then others followed. At first there were no processes, no community or standards around open data. But in the next two years or so a bunch of other governments started exploring open data, and the Open Knowledge Foundation was sort of a trailblazer in that area. So soon after it picked up <a href="https://data.gov">data.gov</a>, the US government&#8217;s open data portal, and it really picked up after that. That&#8217;s when we formed an official tech team, and I was already there so it was a natural move for me. </p><p><strong>From a people perspective, how does the tech team split up duties? Are there different areas of responsibility?</strong></p><p>I would say there&#8217;s no single person for every part of the code, but there are parts of the code that someone is more familiar with because they&#8217;ve worked with it for longer. It&#8217;s not formalized in any way, but we all have our things we are closer with -you&#8217;re the search guy or you're the database guy. It's kind of organic historical knowledge.</p><p><strong>How do you handle roll outs of new versions with breaking changes and things like that? We&#8217;ve talked to some projects where there's kind of a formal cadence of releases say once a year, or others who want to release as infrequently as possible. How do you guys think about that?</strong></p><p>Yeah, that's one of the major things that we&#8217;ve been discussing forever. The main issue, like most open source projects, is resourcing. It's really difficult to predict. There&#8217;s no formal distribution of resourcing as of now. People just contribute whatever time they happen to have at that specific moment. Ideally we want to do more frequent releases, maybe a major one every year because obviously that makes upgrading easier. But the reality is that we've probably been more like a year and a half, even two years between major releases. But that's something we really want to address.</p><p>As of just this month we have <a href="https://github.com/ckan/ckan/releases/tag/ckan-2.11.0">version 2.11</a> and I would say that the changes between releases has reduced a lot. We&#8217;ve made a lot of effort to make the upgrades as painless as possible. I hope in the future every half a year or so people can rely on a new version or we can make even like semi-automated ones where we just ship bug fixes every month or something like that. Another thing is that our users, who are mostly governments, they often can&#8217;t devote a lot of development time to keeping an eye on our releases or upgrading. So if they have a site that&#8217;s working, we don&#8217;t want to break it. Obviously this is a balance because we need the project to move forward. We need to introduce changes, and to patch vulnerabilities. </p><p>We&#8217;re a small project. We&#8217;ve changed as developers, we&#8217;ve changed as a project. There are a lot more tools available for maintainers than 10 years ago. We try to keep up and use whatever we can to make releases more stable and better for our users. </p><p><strong>You mentioned that CKAN is primarily used by governments but also commercial enterprises. On the data side, are there any features that have been released more for one type of user or the other? Or that surprised you as being requested by both?</strong></p><p>That&#8217;s a really good question. Obviously at the beginning our main target users were governments, at the national or lower level. And we didn&#8217;t target the enterprise directly, it was more like people just organically started using it. One of our tenants is that CKAN is really flexible and customizable. The core functionality is essentially a catalog, and you can build stuff on top of it and integrate it with other systems and platforms. I think that&#8217;s helped with adoption in other fields. There are very basic building blocks for a data management system, and it will take a while to plug them together and build your stuff on top of it. But then it&#8217;s incredibly flexible. </p><p>The successful projects are ones that are seeking the final technical part just to publish their data. But they have done the work beforehand to come up with an internal data management policy, train their people, and make sure the data is clean. CKAN has been around a long time at this point. It&#8217;s well known, at least in the data space we operate in. I don&#8217;t think it&#8217;s that common anymore that people come into it without having done their homework beforehand.</p><p><strong>What&#8217;s your roadmap look like for the next year or so?</strong></p><p>CKAN is in a pretty stable place right now. I think the next big thing will be the next major version, so CKAN 3.0. It&#8217;s probably going to be a refreshed front end. Right now it&#8217;s a bit clunky. It&#8217;s based on Jinja templates, which is fine, but the way they structure it makes it difficult for people to extend and make their own thing. It also looks quite dated, which is being addressed with the new design. Another thing we&#8217;ve identified, through a survey of users, is friction with search. Historically we&#8217;ve used Apache Solar for search, which works really well, but it can be a pain to maintain and people want to use a more out of the box solution like Elasticsearch or even just Postgres because for most sites, they&#8217;re not massive and Postgres would work just fine. There&#8217;s also a lot of work on the data store, which is the data repository itself for CKAN, and how to make it play nice with other tooling like data lakes, big data, etc. </p><p>There are also extensions in CKAN that are widely used. They&#8217;re not part of CKAN core, but we maintain them nonetheless because a lot of people use them. I&#8217;ve maintained a couple related to metadata standards. For example there&#8217;s this standard called DCAT for presenting the metadata of a catalog, and there&#8217;s legislation in Europe and the US that government portals need to present the metadata in this particular format. We want to make it as easy as possible for sites to comply.</p><div><hr></div><p>To suggest a maintainer, email Allison at allison@infield.ai.</p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Bryan Housel]]></title><description><![CDATA[Mapping the world with Open Street Map, and why "spatial is special"]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-bryan-housel</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-bryan-housel</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 30 Aug 2024 13:31:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ef81850b-216a-4f58-a211-7d5f028bb7d4_6000x4000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/bhousel">Bryan Housel</a>, maintainer of several widely used packages in the <a href="https://www.openstreetmap.org/#map=5/38.01/-95.84">Open Street Map</a> ecosystem, including <a href="https://github.com/rapideditor">Rapid Editor</a> and <a href="https://github.com/osmlab">OSM Lab</a>. Bryan is an avid runner, which led to his interest in mapping the world around him. He spoke to us from New Jersey.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades.</p><p><strong>How did you get into software development?</strong></p><p>I guess I&#8217;ve always been into problem solving. As a kid I played computer games like a lot of kids, and it seemed like going to study something that I already liked would be a good idea. I went to Drexel University in Philadelphia for engineering. And one thing that Drexel does that&#8217;s really cool is they make everybody go on these internships. So I got to do several internships while I was still completing my undergrad degree. And you work at real companies writing code, and that&#8217;s how I got started, working for some of those companies that I interned with. </p><p><strong>Was the first line of code you wrote at college, or had you dabbled before that?</strong></p><p>We had a Commodore 64 when I was a kid. And actually my parents had bought one that was broken. It was putting random characters up on the screen. And so when I was a little kid, probably 3rd or 4th grade or something, I figured out how to get those random characters to show up on the screen as a prank. My parents would get mad and think they had to return it to the store again. </p><p>So I was growing up in the 80&#8217;s with this Commodore. You could get magazines and books that had listings of code and you could go and type them into the computer and see it actually work. And I did that a few times. There was this brief bulletin board scene where if you had a modem, you could call into other people's computers, leave messages and play games with people. It was actually a lot more fun than the Internet we have now in a lot of ways, because nobody was making any money off of it. It was all just like bored kids chatting and playing games. </p><p>If you were running a board, you could actually modify the source code and have your bulletin board do different things. So that was really the first programming I did, hacking up my bulletin board. And once I hit like 10th grade, 11th grade, I realized hey, I have an aptitude for this thing and I really like doing it. I could go to school for it and, you know, turn it into a career.</p><p><strong>What was your first exposure to open source professionally?</strong></p><p>I would say in the 90&#8217;s, there was this kind of shared source thing. And Linux was sort of taking off. That was the beginnings of open source as a movement or a community. And I remember it wasn't so much that I was doing that kind of work directly, but the companies I worked for definitely benefited from it. Some of it involved graphics, some of it involved databases, some of it was just a server and e-mail and Linux and whatever. So I wasn&#8217;t directly working on open source, but I think if you were working professionally at that time, you were kind of aware of it. </p><p>My first company was a company involving computer graphics. There was a technology back then called <a href="https://en.wikipedia.org/wiki/VRML">VRML</a>. It was sort of like this 3D graphics thing that never really took off. But I worked on that for a bit. I also worked on database software for lawyers and law firms and then became a consultant for it. That was closed source and like all things in tech you realize that eventually things will shut down, things will kind of go away. I realized that I'm not going to be able to be a consultant on this software forever. So I kind of turned to some of my other interests. </p><p>I sort of fell in with mapping because I'm a runner. And I would go do runs, you know out in the woods or on trails or things. I think I was using Strava or the Garmin tools and realized that some of the maps that I was using were out of date. And that threw me into <a href="https://github.com/osmus">Open Street Map</a>. At first I just wanted to see my running routes show up on a map that was correct. But it also sort of dovetailed with my interest in programming, and so I got into maintaining the editor for Open Street Map around 2013. It&#8217;s a piece of software called <a href="https://wiki.openstreetmap.org/wiki/ID">iD</a>. In 2012, iD launched and it was just this really cool piece of software. I think I read about it on Hacker News or someplace and I just had to dig in and see how it worked because I was just fascinated, and I ended up submitting some contributions that grew over time, and then I eventually took on a maintainer role.</p><p><strong>The open street map ecosystem is pretty big. Can you talk a little bit about the ecosystem from a maintainer's perspective? Are you pretty siloed in the piece of it that you work on?</strong></p><p>Yeah, it's a big community and it's very enthusiastic. I agree it is kind of siloed. I don't think that people working on the different pieces of software are necessarily having monthly meetings or anything. We do have some communication channels that the community uses. And it's a particularly challenging kind of software to work on, I think. Maybe that's what drew me to it.</p><p>Almost every app that you use probably has a map in it. And they have this saying that &#8220;spatial is special&#8221;. If your e-mail software crashes, you're just like, oh, well, I'll just restart it. But if you're navigating somewhere and your map tries to take you down a street that's not there, or you're out in the world and you just feel like, it's lying to me - it hits us at a different level. So I think people have a higher expectation of their location software than they do of other software and get more passionate about it in some ways. You know, the first thing that people do when they get on Open Street Map is they zoom in on their house, right? They want to see like, oh, there's my house and there's my street. And then almost immediately they're like, this is wrong. And they want to fix it.</p><p>Open Street Map is really supposed to be a map of people's local knowledge. Obviously nobody knows more about your house then then you do, so this idea that Google's going to make a map and they're going to drive all around with their cars and map the world and spend several billion dollars and it could be a pretty good map, but there will still be mistakes. What's cool about Open Street Map is if you're driving down your street and you know this business is closed,  you can do something about it. You can walk around your town, you can survey, and Open Street Map encourages people to do this. Make the map your own.</p><p><strong>How do you think about mapping data and how it&#8217;s used? I noticed that you have a canonical data structure so you want everyone to input McDonald&#8217;s in the same way, for example. Why is that important?</strong></p><p>So the other thing about mapping is that there&#8217;s a big mapping business and companies that are making money all have an interest in the map being correct. So Meta uses mapping for things like the marketplace. Even though mapping is not their main business, it&#8217;s important. Or Uber&#8217;s business. Obviously mapping is very important to Uber, but they are not selling the map. So there's an incentive around having people collaborate on a shared map that is the best map that it can be, which requires the data to be correct. And maps are never done - the streets are closing, businesses are changing. </p><p>Even as a maintainer you can&#8217;t know all the ways that your map is going to get used or who it's going to be used by. Like I started out because I wanted my trails in the woods to look right. We have mapping conferences where we'll go and see what other people are using the map for. And some of the stuff is just amazing. </p><p>There's an organization in Tanzania that is mapping remote places where people are victims of violence or this terrible thing called female genital mutilation. They've actually gathered data about how as the map has improved, violence has been going down because they can get people out of situations. And that's the thing where I had no idea that mapping would be used for important things like that. The <a href="https://www.hotosm.org">Humanitarian Open Street Map Team</a>, or HOT, they&#8217;re doing mapping in places that are affected by natural disasters, to go and help people. There&#8217;s so much going on that as a maintainer I like to think about - it&#8217;s not just helping Uber.</p><p><strong>How do you think about from a technical perspective what&#8217;s next?</strong></p><p>That&#8217;s a great question. So the map is always going to be wrong in certain ways. It is always going to lack detail or be incomplete. Those are things we are trying to improve all the time. If you go back even 10 or 15 years, the best aerial imagery was all pixelated, blocky and blurry. And every year it&#8217;s getting better. It kind of surprises people when they look at their house how clear it is. And so as the imagery improves, we can use machine learning on that to detect things in the imagery. Parking spaces, building footprints, even the roads. We&#8217;re developing new ways to detect this information. And there&#8217;s a whole industry around taking images over time and telling how the world is changing. So that&#8217;s exciting.</p><p>Maybe 15 years ago, people weren't really thinking about mapping the sidewalks and the pedestrian accessibility features. You know, it's called Open Street Map, but it's more than just the streets. There are at least a couple different teams right now working on this problem. One of them is up at the <a href="https://tcat.cs.washington.edu">Taskar Center</a> at the University of Washington where they actually have an app for wheelchair accessibility. They can make detailed maps around Seattle of where it's safe to take a wheelchair. Like some of the curb ramps are good and some are not. So if you're in a wheelchair, it might make more sense to cross the street in some places instead of others. Or at a street crossing, is it marked or not marked and are the signals are set up with a button or something that a blind person can use? So you know we're just collecting more and more data. It's almost like every year the state-of-the-art improves, so we&#8217;re expanding what's even possible.</p><p><strong>You said that you originally got into mapping because of your interest in trail running. Are there any particularities about mapping the woods that are different than mapping the streets?</strong></p><p>A lot of people have a hobby or an exercise that they like to do and they want the map to support that activity. I don&#8217;t know if you remember Pok&#233;mon Go, which got really popular a little while ago. So it came out that they were using Open Street Map as the base map for that game. And that presents some interesting challenges because people were mapping fake rivers or fake beaches or whatever to catch river Pok&#233;mon outside of their house. We didn&#8217;t realize at the time that anyone was going to do that. So we had to develop essentially counter-vandalism, to have people review the map really well. And this is a totally unsolved problem in places where no one&#8217;s really looking at the map very closely.  </p><p><strong>So it&#8217;s kind of like people are taking artistic license with the real world?</strong></p><p>It does feel like that at times. It&#8217;s just being used for so many different things. Like it came out a while ago that Tesla was using Open Street Map parking lots to make its Smart Summon work. That&#8217;s the feature where you can have your parked car come drive up to the front of the building to get you. After that got announced we got this influx of data from people mapping parking lots in excruciating detail. </p><p>And it can be very political. We&#8217;ve got people who are mapping on both sides of the Ukraine conflict. </p><p><strong>If people are interested in getting involved in open mapping, how would you suggest they start?</strong></p><p>If you&#8217;re waiting to get involved in open source, I would say please look at mapping and into Open Street Map. There are so many unsolved problems that are really interesting. And as maintainers we really need people who are willing to just show up and do the small chores every day. It&#8217;s a certain kind of person who wants to do that sort of thing. But if you like gardening, maybe you enjoy weeding. And it&#8217;s the same with open source. The weeding is the work. The software I&#8217;m working on now is called <a href="https://rapideditor.org">Rapid</a>, and it&#8217;s the map editor for Open Street Map. We could definitely use help there.</p><p>And anyone can go out into the world and contribute to the map. Write down what you see. You can take pictures and share those pictures with the world. Or help out with the humanitarian work. There&#8217;s always work to be done.</p><div><hr></div><p>To suggest a maintainer, send a note to Allison at allison@infield.ai.<br><br>Check out Infield&#8217;s new <a href="https://www.infield.ai/diagnostic">diagnostic tool</a> to get a health report on the state of your app&#8217;s dependencies and how to upgrade.</p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Sean Law]]></title><description><![CDATA[The creator of STUMPY, a performant time series data analysis library in Python]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-sean-law</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-sean-law</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Tue, 20 Aug 2024 17:52:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d37406c4-c090-46e8-8023-7b88e502d24f_411x136.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://seanlaw.github.io">Sean Law</a>, creator and core maintainer of <a href="https://github.com/TDAmeritrade/stumpy">STUMPY</a>, a powerful and scalable Python library for time series data analysis. Sean and team recently released STUMPY 1.13.0, which includes an easier to use matrix profile data structure, NumPy 2.0 support, pyproject.toml adoption, Python 3.12 support, and improved documentation and testing. Sean is currently Principal Data Scientist at a Fortune 500 finance firm.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades.</p><p><strong>What was your first exposure to open source software?</strong></p><p>I started off in the early 2000s, working as a scientist and then eventually going on to grad school. But I happened to get lucky and worked in a field called computational chemistry. If you've ever heard of the protein folding problem or a company called DeepMind, that was the area of expertise that I was in. So even though I'm a biochemist by training I'm actually more of a computer person. We were working on computer simulations of how DNA, proteins, and RNA interact with each other. It was 2013-ish when our academic grandfather won the Nobel Prize in chemistry for producing the earliest biomolecular simulations. What people refer to as data science today, I kind of half jokingly say that we just call it &#8220;doing science&#8221;. Certainly data has to be a part of it, and it's finding the right tools or sometimes making up your own tools to tackle the task at hand.</p><p>Originally I programmed a lot in Fortran and then Perl, and eventually C++ and Python. I would argue that for scientific computing, Python was not really the tool of choice until like the late 2000s, around 2010. One of the toughest parts was package management. Until package management tools like those developed by <a href="https://docs.anaconda.com">Anaconda</a>, and then later <a href="https://conda-forge.org">conda-forge</a> made things much, much easier, people didn't really look at Python, especially in the data space.</p><p><strong>Did you foresee writing any open source software yourself at the time? Or was it more happenstance?</strong></p><p>The short answer is &#8220;no&#8221;. I don&#8217;t think anyone goes into it expecting that they&#8217;re going to do open source. When I started doing software development especially in academia, it was more of a means to an end. You didn&#8217;t write code in anticipation that someone was going to use it. You wrote code to do the quick and dirty analysis without any unit testing, but it works. And then maybe a year later you come back to it because a reviewer of your paper asks you a question and you need to go back and look at it and you've probably forgotten what you did in the first place. </p><p>But then around 2010 when GitHub started to become more popular they made the developer/code versioning experience much nicer. I think it was around 2011 when I even considered taking some of my academic code and open sourcing it, putting it on places like GitHub or even PyPI so that other people could consume it. But in those days you weren&#8217;t thinking that a lot of people in the world were actually going to use it. You&#8217;d be happy if twenty years later, 10 people downloaded it. So as part of my postdoctoral training I decided that as a sort of companion to publishing the paper I also provided some code to reproduce the work. And I wanted to contribute back to the scientific community.</p><p><strong>And that was also in time series data analysis?</strong></p><p>No, the work back then was the earliest stages of applying a more novel or sophisticated approach to predicting protein secondary structure using machine learning. Also I built a package for analyzing simulation data. But again, very limited usage and adoption. This was right around the time that I decided to leave academia and move into industry. And so my pursuit of it was never really about people using it, but that hopefully it could inspire somebody else&#8217;s work as a starting point more than anything.</p><p><strong>Great, now let&#8217;s talk about STUMPY. First, do you pronounce it &#8220;stum-pie&#8221; or stumpy, like the word? </strong></p><p>I&#8217;ve learned from Travis Oliphant (NumPy) that we shouldn&#8217;t spend time arguing about these things, so I try not to correct people but personally, because the word stumpy is in the dictionary I naturally gravitate toward that. But some people pronounce it &#8220;stum-pie&#8221; and that doesn&#8217;t bother me.</p><p><strong>How did STUMPY come to be?</strong></p><p>So at the end of 2016, a pair of research labs at the University of California, Riverside and the University of New Mexico published two back-to-back papers detailing this concept called a <a href="https://matrixprofile.org">matrix profile</a> that, once you can compute it, will allow you to perform a variety of time series data mining tasks. And then within the papers, they presented a couple of algorithmic as well as algebraic improvements that allow them to generate a matrix profile really, really quickly. And being somebody who had worked with time series data for a very long time, I was very skeptical at first. And because of the nature of my work I spent time reading through those papers and validating whether it was snake oil or whether there was something there. It took me about a month to develop a basic implementation based on some pseudocode. And my first few attempts, I was like, oh, something's funky here. I&#8217;m not getting the right result. </p><p>If I implemented it naively, I knew what the answer should be. It's pretty straightforward. But to implement the high performance version of it, there were some oddities. So eventually I went back to the original authors and was like, hey, I'm getting stuck on this part. And they were like oh yeah, there's an error in our pseudocode. An off by 1 error (but their actual MATLAB implementation was correct). Once that was clarified, then everything became unlocked. This published research was indeed much faster than what a naive person would have implemented. And so I thought there's probably something there. And then I tried it on slightly larger data sets and things started to slow down.</p><p>So I tried to leverage some of the PyData set of tools, in particular <a href="https://numba.pydata.org">Numba</a>, which is a just in time compiler that takes your Python code and compiles it to much more performant and faster machine code. And after trying it out, it seemed to scale very nicely. At that point I knew there was something there. There are some significantly tricky bits to implementing the performance version but I thought as a society, we shouldn't be reinventing the wheel, right? And that's when I decided to open source it.</p><p>So it was around April or May of 2019 when we open sourced STUMPY. And at that point it was more of a nice thing to do without any expectation that people were going to use it let alone contribute to it.</p><p><strong>How did you think about those first couple of contributions or those first couple of issues as they came in, from a human perspective?</strong></p><p>I think there are probably different camps. But I think for myself having seen a lot of successful packages being open sourced, I had a reasonably good idea of what I wanted to aspire towards. Before we open sourced it we made sure that we had 100% code coverage, which is a high mark to maintain. We opened it in 2019 and five years later, we still have 100% code coverage. So everything that we add and that we've added since the beginning is heavily tested. In fact, we probably have more unit tests than we have functions. </p><p>From day one, if I'm the single person maintaining this, I needed to do everything I could to make my life easier. Just having unit tests run every time that there are contributions certainly has saved myself and everybody a lot of headache and this decision has served us very well. Now that also has its challenges of making the bar to contributing a little bit more challenging, if people don't have experience writing tests. But that's where the human side comes into play. We have to have a willingness to serving our community and guiding contributors who want to learn how to write unit tests. We need to remember that people genuinely want to contribute, and they have taken that first step, and that first step is really hard. And when you recognize that, then it's humbling to realize that somebody's willing to spend their time on your project.</p><p>For example, very early on STUMPY didn't even have a workflow or CI/CD for testing as new commits and PRs came in. So I created an issue for it, because that world was completely new to me. Then a few days later somebody said, &#8220;Hey, I'd like to help you.&#8221; It was somebody I didn't know that was in Australia. And when I was sleeping, they were working on it. And very quickly the magic of open source allowed us to have a regular pipeline for automated testing. And then when they were done, they handed over the keys, and they vanished. And I was just like, wow, this is a side of open source that people don't get to see. It inspires me to know that good people like that exist in this world and it inspires me and keeps me going as a maintainer.</p><p><strong>Do you have a core team of people that manage the roadmap, or are you still primarily doing it all yourself?</strong></p><p>Today, I'd say that at least 50% is by myself. Earlier on we had a contributor from Germany who was pretty active and then they stopped contributing once they graduated from school. But more recently we added a new core maintainer, <a href="https://github.com/NimaSarajpoor">Nima Sarajpoor</a>, and, together we've been thinking about how to improve the performance of STUMPY. This really requires a deeper understanding of how the package itself is designed and so it's really mainly two people running STUMPY. But again, because of some of the proactive approaches we've taken and a lot of the automation that we've done beyond adding features and improving what currently exists, there's surprisingly not a ton that we need to do.</p><p><strong>In terms of focus for the next year or two, would you say that improving performance is where the focus is?</strong></p><p>Yes, I think that&#8217;s always the case for us because that&#8217;s what STUMPY is. It computes something that if you did it in a brute force way would take forever and with some better algorithms and compilers we&#8217;ve gained a lot of benefit. Even knocking 20% off the computation can drastically improve the user experience. I think it was <a href="https://github.com/lmcinnes">Leland McInnes</a>, who created packages like <a href="https://github.com/TutteInstitute/fast_hdbscan">HDBSCAN</a> and <a href="https://github.com/lmcinnes/umap">UMAP</a>, that likes to remind us that as a data scientist, there are different bins of time, right? There are tasks that take the time to go grab a cup of coffee, and then come back and it's done, to go grab lunch, and to go to bed and what we're all trying to do is to always move the process up to the earlier levels to eventually get to interactive time scales, where you hit enter to execute some command and it's just done so that you don't have to spend time context switching. And that's what we're always striving for. In one of our recent commits we actually did improve our CPU computations by about 15 to 20% which is very, very rare when you're talking about code that is already performant. In fact, we think there's more juice to be squeezed from this orange.</p><p><strong>How do you track that? Like can you say we&#8217;re twice as fast as we were in 2019 when we came out? I know that that's a complicated question because it might be fast on hundreds of machines or fast on a single machine or fast on a CPU, fast on a GPU, there's a matrix of the places where people want to run your library.</strong> </p><p>What we can't do is rerun it on the hardware that we originally tested on. All we can really do is run it on multiple different types of hardware and operating systems using the previous version of the code and then the changed version of the code, but also try to be a bit more meticulous in terms of identifying the precise line or lines of code that had the most impact. As a reformed scientist, I'm usually very, very skeptical when people claim that there's a 90% improvement in this machine learning model - like sure, right. Trust but verify is sort of the name of the game. </p><p>So we loosely look at performance, but at the same time, what matters more than performance from an open source standpoint is usability - the user interface, the API, how simple, how familiar it is. We often think about STUMPY as aspiring to be what NumPy is to numerical computing. What is important about open source too, is fighting the urge to be everything for everyone and to realize that if I build the software in such a way so that it is modular and composable, then people can build on top of it like they did with NumPy and SciPy or even pandas for that matter.</p><p><strong>Have you gotten any input from the community where you thought wow, I couldn't have imagined that someone would have taken it and done this with my package?</strong></p><p>Yes. I would have never imagined that people were using STUMPY at CERN, the Large Hadron Collider. That surprised me. When we  open sourced this package, we also published a very short <a href="https://joss.theoj.org/papers/10.21105/joss.01504">article</a> in the Journal of Open Source Software, JOSS. Mostly so that we could get a sense of what people were using the software for, at least in the academic world. When people cite that paper, we get a glimpse into this. We'll see people using it for looking at energy/electricity usage, applications in particle physics, and even people using our package for sports analytics. There continue to be a lot of fascinating opportunities and I think we can safely attribute this to the fact that we have created a package that is general purpose and isn't hard coded for any particular field.</p><div><hr></div><p>To suggest a maintainer, send a note to Allison at allison@infield.ai.<br><br>Check out Infield&#8217;s new <a href="https://www.infield.ai/diagnostic">diagnostic tool</a> to get a health report on the state of your app&#8217;s dependencies and how to upgrade. </p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Sofie Van Landeghem]]></title><description><![CDATA[On maintaining spaCy and the evolution of NLP]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-sofie-van-landeghem</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-sofie-van-landeghem</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 28 Jun 2024 13:04:03 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e31e907f-495a-47a0-8f77-848935f3b4cd_7952x5304.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to Sofie Van Landeghem, core maintainer of the advanced NLP library <a href="https://github.com/explosion/spaCy">spaCy</a>. Sofie has been working in machine learning and NLP since 2006, and has worked on practical use cases in the pharmaceutical and food industries. She spoke with us from her home in Belgium. </p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades.</p><p><strong>How did you get into software development?</strong></p><p>It was a long time ago. I had always loved mathematics in high school, and I studied computer science at university. I guess I have quite a logical brain. So I loved doing mathematics, but I didn&#8217;t want to just stay in the theoretical. When I learned about computer science, I thought this is something I can apply maths to. After my degree, I did a masters in software engineering and my masters thesis was around data integration and text mining. So I went into data science from there and have been in the field basically ever since. </p><p><strong>What was it about data science in particular that led you to want to pursue graduate studies?</strong> </p><p>It was this feeling of, well, I know all this theory and algorithms and stuff, but now I can actually apply it to a domain. At the time of my masters, this was the biomedical domain. This was years before big data was even invented as a term. So that was very compelling to me.</p><p>My thesis was about developing novel machine learning algorithms to process biomedical text. And throughout my PhD and then a little bit in my postdoc work as well, I collaborated with a research team in Finland where we ran machine learning algorithms on biomedical texts, millions of them, and stored the results in a database so that users could query it. All of this is outdated now. At the time it was technically challenging to run text mining on such a large scale, and not many people were doing this yet.</p><p><strong>What have you observed over the last 10 years or so as NLP and AI have exploded, coming from an academic background?</strong></p><p>I mean, we've been on a crazy ride in the NLP field, right? So back in the day when I was doing my masters and then my PhD, I was using support vector machines and manual feature engineering. You know, this was even before we had word2vec, before we had transformers. The progress has been crazy. And I have been in an interesting position because I left academia around the time that transformers started coming up. </p><p>I joined Johnson &amp; Johnson, the pharmaceutical company. And we really had to work on very basic, almost low hanging fruit at the time, introducing text mining to business processes that hadn't been using it at all. So there was quite a bit of a disconnect between all of the new research that was coming out and you know, the practical things that we could or could not do in this sort of setting of a large company. Having to think about privacy, and you know, transformers often needed GPUs - sometimes you couldn&#8217;t afford this if you need to have the results quickly. And we still have that today with LLMs. You know, they are awesome. And I think everybody has been amazed by the progress that we've been able to make with LLMs. But at the same time, I'm still very much thinking about everyday use cases and how people can use these in production and whether this will solve an actual business case. There's often still a disconnect between the two. </p><p><strong>How did you first get involved in open source? </strong></p><p>It started pretty small. Back in the day when I was at university we would try and open source the code behind the research papers that we would publish. This was in Java back then. So that tells you a little bit about how old I am. And then when I was working in industry, in the years after that, I wasn't able to do a lot of open source work, but then as the Python ecosystem grew I started using a lot of these Python libraries like spaCy. It was one of the tools we were using in one of my previous jobs when I was working at a startup. That&#8217;s how I first got into the field. And then I got to know <a href="https://github.com/honnibal">Matt Honnibal</a> and <a href="https://github.com/ines">Ines Montani</a>, the founders of <a href="https://github.com/explosion">Explosion</a>, the company behind spaCy, and, and started collaborating with them, and that's how I got more involved as a maintainer.</p><p><strong>How do you think about the roadmap for spaCy? For example we spoke with a maintainer from the NumPy team, which is a huge project and quite formally run, I would say. We spoke to <a href="https://onceamaintainer.substack.com/p/once-a-maintainer-ralf-gommers">Ralf Gommers</a> about NumPy 2.0, which was just released a few days ago. Whereas we&#8217;ve spoken with other projects where the roadmap is quite individual driven, like what does this person feel like working on this year? So I&#8217;m curious where you think spaCy falls on that spectrum.</strong> </p><p>I think for us it is more individually driven. The founders of Explosion, Matt and Ines, have a vision of what the library should be. And I think we've stuck to that vision which has been good because it helps us to keep the library more stable and users know what to expect. Other than that, we do have a never ending task list internally where you know, whenever somebody thinks of a feature, small or big, and they add it to the board. So the question is what to prioritize, right? Sometimes we have a consulting project that might require building out some functionality, or somebody wants to maybe do a blog post or a tutorial. </p><p>I wouldn't say that there's a grand plan, like we'll do exactly this in three months&#8217; time, but we often have work going on on different branches. So we always have master that we're using for quick fixes and small things that can just go in the next bug fix release. And we have development where the larger things, the things that may break other people&#8217;s code are kept. And then we have a v4 branch as well, where the really major features are being added so that we know if we release from that branch, then we have to bump to v4. </p><p><strong>What are the features you&#8217;re working on implementing right now?</strong></p><p>We&#8217;re working on the NumPy fix right now (to support NumPy 2.0). That should be out relatively soon. We also made a plugin which is called <a href="https://github.com/explosion/spacy-llm">spacy-llm</a>. This was something that we couldn't really plan for last year. We wanted to make sure that you can also work with LLMs in a spaCy pipeline, so we created spacy-llm as a sort of optional additional plugin. We're working on a major refactor and corresponding documentation and getting that polished up so that we can release the v1 version. And then the other one is actually getting v4 out - I think we started working on v4 two or three years ago already, but it required an update of <a href="https://github.com/svlandeg/thinc">thinc</a> as well, our underlying machine learning library. </p><p>I think sometimes we all just want to keep on pushing new features, but we have to make sure that at some point we wrap up, publish what we have, and continue. This is the main reason why v4 hasn't been released more quickly, because we always think of something new to add. And at some point you just have to say, you know, it doesn't have to be a huge release every time. Let's just make sure that the community has what we've already created and continue from there.</p><p><strong>Why do you think that Python gets such a bad rap in terms of its dependency management? It&#8217;s interesting to me how how often people say dependency management in Python is just absolutely hellish. What&#8217;s your take on that? Why is it?</strong></p><p>I'm pretty sure I've made the statement myself in the past few years. It&#8217;s always difficult, right? In theory, there should be a proper way to do this and you know, minor versions shouldn't really break things. So you should be able to pin it to the next version that shouldn't break things. I think in reality, though, it&#8217;s just messy. We've definitely had cases where we would publish a release that we would assume was not breaking at all and we wouldn't document any breaking changes. And then it turns out that some sort of usage by a few users is in fact broken by something that we published. Often you don't know all of the different ways your code is being used or its interdependence with other libraries. </p><p>If every maintainer could promise every time that when they do a small bug fix release it wouldn't actually break anything, then we would all be able to pin it correctly. But sometimes when this does happen, when an external library for instance publishes something that is breaking that you didn't expect, then you might become more careful with this external dependency and pin it more strictly. Which then means that in a month's time users will be complaining that they're locked into this version. So there's no ideal way of dealing with that, right? Either you're too strict and you're locking people in or you're too lenient and your software might break tomorrow if they publish a breaking change. This is true for all open source libraries or all Python packages really.</p><p><strong>So tell me about Typer.</strong></p><p>So <a href="https://github.com/tiangolo/typer">Typer</a> is being maintained by Sebasti&#225;n Ram&#237;rez, or as people know him, <a href="https://github.com/tiangolo">tiangolo</a> on GitHub. He's the creator of <a href="https://fastapi.tiangolo.com">FastAPI</a> as well. And basically Sebasti&#225;n used to work at Explosion as well some years ago. That's where I got to know him. I used to send him cat pictures. He also lives in Berlin. He's just an all around awesome guy basically. When he was sort of leaving the company to make more time for developing FastAPI and friends, as he calls it, he made me promise to keep sending him cat pictures, and that's mostly how we stayed in touch.</p><p>Typer is just a small little library that makes your Python functions into CLI commands using type hints that you add there with your functions. I've always enjoyed adding type hints to Python. You know, me coming from a Java background, a heavily typed compiled language, I sort of enjoy having the types in Python again and being able to run type checkers. So just seeing that he couldn't give the love and attention to Typer that it needed, Sebasti&#225;n asked me whether I could get involved a little bit with the maintenance there as well. I&#8217;ve been just cleaning up some of the user contributions, getting them in good shape and making them up to date with master, making sure the tests pass, that they're all adhering to the standards that I know Sebasti&#225;n wants so that he can review them more easily and get them over the line more quickly. That&#8217;s my role.</p><div><hr></div><p>To suggest a maintainer, send a note to Allison at allison@infield.ai. <br><br>Infield is <a href="https://www.ycombinator.com/companies/infield/jobs/5bPS1nT-full-stack-software-engineer">hiring</a> full stack engineers!</p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Mike McQuaid]]></title><description><![CDATA[15 years of Homebrew]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-mike-mcquaid</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-mike-mcquaid</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Tue, 18 Jun 2024 13:58:15 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ee5e5daa-69ba-4003-86a3-0b033314d9e8_218x290.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/MikeMcQuaid">Mike McQuaid</a>, project leader and longest tenured maintainer of <a href="https://brew.sh">Homebrew</a>, a package manager for macOS and Linux used by tens of millions of developers worldwide. After ten years at GitHub, Mike is now CTO of <a href="https://workbrew.com">Workbrew</a>, a startup for managing a fleet of machines running Homebrew. Mike spoke with us from Edinburgh, Scotland.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades.</p><p><strong>What was your first exposure to computers and eventually writing software?</strong></p><p>As a kid my first exposure was at my school. We had BBC Micros, which is what we grew up with in the UK. This was in the early 90&#8217;s. And my dad noticed that pretty much any task, no matter how boring, if it involved computers I would happily do it. He was in finance and back before you could get online stock prices, every Saturday he would get the Financial Times and there would be the big broadsheet with the stock prices, and I had some little spreadsheet program and I would basically just go through and enter all the stock prices into his spreadsheet and spend like two hours on a Saturday afternoon doing that. And for me that was delightful. And my dad was like, OK, what's going on with this kid? </p><p>And then I just evolved my own interest through PC gaming and fiddling around trying to get the games to work on my computer. Eventually I went off to university and did a computer science and business degree and got a job as a software engineer. This was 17 years ago.</p><p><strong>What was the environment like at your first job?</strong></p><p>My first job was for BT, British Telecom. It&#8217;s sort of similar to AT&amp;T if you&#8217;re in the States. And this was back in the days when it wasn&#8217;t that AI was going to possibly destroy your job, it was offshoring. Why would you be British and interested in writing software, because in two years all the jobs will be in India because they&#8217;re just as good for half the money, etc. etc. That was my first experience at a massive company.</p><p>I&#8217;d been dabbling with open source for a few years, and I learned pretty quickly that the open source way of doing things - it goes down well in the open source community, but at your real job you get pulled into your manager&#8217;s office, like what have you done? So that didn&#8217;t work super well with me.  After that I left and was the first employee at a startup called Mendeley in London. I&#8217;d been hacking on KDE, the Linux desktop environment, for a few years at that point. Hired a bunch of people from the KDE community there, stayed there about a year, did some consulting around Qt for KDAB, a Swedish company. And then I kind of got this sense that maybe the cross-platform desktop app world was not future-proof, you know, starting to smell things. I did a bit of research. I wanted to work for a company using Ruby on Rails based in the Bay Area and pretty quickly came upon Github. I applied, and they said &#8220;Not now, you&#8217;re too fresh.&#8221; So I went to work for this company AllTrails. And then several applications later, I got a job at Github where I worked for ten years.</p><p>I guess that&#8217;s a nice segue back to the open source stuff since I left there last year and started my own company with some former Github people called Workbrew, and we&#8217;re building product solutions for bigger companies around Homebrew.</p><p><strong>I&#8217;m having this Zoom from a KDE desktop. So I&#8217;m curious how did you get into working on it?</strong></p><p>So I did Google Summer of Code the summer after I graduated, which was in 2007. Back then you could have journals, and you could post journals to your blog. And I basically built that integration so you could post journals to your blog. I built blogging support for WordPress and a couple of other blogs as my summer code project. And then I ended up sticking around and being involved with like bits and pieces on the KDE side for, you know, maybe a kind of couple years. And then I moved to Mac and I was doing some KDE porting to Mac and then I sort of gave up on it as a lost cause.</p><p><strong>I remember a period in the middle there where it was like you're gonna run all of your Linux apps everywhere - I think I tried to install <a href="https://amarok.kde.org">Amarok</a> or something on Windows, and it sort of worked. Not the way the world ended up going.</strong></p><p>No, it never worked quite as nicely not on Linux, unfortunately.</p><p><strong>What was your first exposure to Ruby?</strong></p><p>During university I had started dabbling with Linux and using various Linux distros, submitting patches to things and modifying things on my system or whatever. I&#8217;d seen a tiny amount of Ruby but mostly I got into KDE and playing with lower level Linux bits and pieces. Ruby didn&#8217;t come until later on when I was at the consultancy and I heard about this project called Homebrew from a friend of a friend in London. And that was the first serious Ruby that I wrote in 2009 or so, and I&#8217;ve been using it for the majority of my career ever since. </p><p><strong>We hear a lot about how intimidated people are to get involved with open source. So when you heard about Homebrew, what made you get over that hump and get involved?</strong></p><p>Hopefully without sounding too arrogant, I never felt particularly intimidated to get involved with open source projects. I think particularly in the Linux era and the pre-Github era, the barriers to entry were so high that it felt like if you managed to get through those barriers people were generally like, we're going to be your friend now. And if you're in my city, I'll take you out for dinner. I&#8217;d been to a few open source conferences by this point and everyone was very friendly and welcoming and accepting.</p><p>So with Homebrew, one of the guys I hired at Mendeley was friends with this other guy who worked at another startup in London. And he was the guy that created Homebrew, <a href="https://github.com/mxcl">Max Howell</a>. I think having that connection and in the first year or so, being involved with Homebrew, meeting up and getting beers with Max and talking about our thoughts, it felt easy. What sucked me into Homebrew initially was just this idea of scratching your own itch - I&#8217;m using this, I need this, and I&#8217;m going to add a new thing because it&#8217;s easier if it&#8217;s in here and then everyone else can use it. And then over time it becomes less about me building for myself and more about, what does everyone who uses this project need and how can I help them?</p><p><strong>How do you manage the roadmap? We talk to some maintainers where the projects, especially the huge ones, are very formally run. Others are still very informal. How do you think about that?</strong></p><p>Yeah, I would say we&#8217;re on the moderately anarchistic end in terms of feature roadmaps and stuff like that. At least until you get to open source projects run entirely by corporations, maintainers have no ability to make anyone work on anything they don&#8217;t want to. I'm the longest running maintainer, I've been the project leader. But if I say like, hey Bob, I want you to ship this thing by the end of the month, then Bob can just be like, nah. And I don't really have any ability to do anything beyond that. </p><p>So in some ways it was quite similar when I was a principal engineer at GitHub, because when you're in those roles, you have no direct reports and so you don&#8217;t have twenty engineers to do what you tell them, but at the same time, you have an awful lot of cultural influence. So instead of it being like, I will tell you what to do, it becomes like, hey, I've had an idea, who wants to join me on this journey? And there's some people with within Homebrew particularly who would like to be doing more Homebrew stuff. So I guess a big change for me in the last few years is that I try to push as much of my personal Homebrew to do list into issues that are tagged &#8216;help wanted&#8217;. Sometimes those are done by me, and sometimes those are done by random people in the community. There are <a href="https://github.com/Homebrew/brew/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22help+wanted%22+author%3AMikeMcQuaid">five open issues</a> in the main Homebrew repo right now and all of them are things that five years ago I would have maybe just had in my Apple notes somewhere.  But I learned that there are a lot of people that might go &#8220;hey, that&#8217;s a good idea&#8221; and jump in and get involved.</p><p><strong>Do you guys have any kind of regular meetings among the core maintainer team?</strong></p><p>Once a year we try and get as many maintainers as possible to meet together in person for our AGM. We try and collocate that with FOSDEM, which is in Brussels every year in early February, to try to make a bit of a weekend of it. We're trying to do more events now. We're doing a hackathon focused on performance and security next month. And historically we&#8217;ve had some vaguely regular Zoom calls, but it&#8217;s hard to sort out the timing for those. Most of our private communication is happening in Slack. That's where we have the conversation about what do you think we should be doing? Or, there&#8217;s this issue right now. Could someone jump on and help with that? </p><p><strong>So this list of issues here, I see this one about Sorbet. How does that conversation, like &#8220;we should add type checking to Homebrew&#8221;, get shepherded through?</strong></p><p>That's a pretty good example actually. You inadvertently stumbled on one of the more amusing but contentious ones. All of our <a href="https://docs.brew.sh/Homebrew-Governance">governance documentation</a> is public but if you&#8217;re not a Homebrew maintainer, it can be a bit of a struggle to get through it all. We have the project leadership committee, which is essentially managing the money and the governance structure. And historically that was also maintainers. But now two of the five people in that are not maintainers and never have been. Then we have the technical steering committee, which is managing roadmaps and deciding these types of things. And then we have a project leader, which is like an elected position as well, which is me. And I'm the only person who's ever been the project leader so far. </p><p>But the way it works in reality is that the technical steering committee exists to help resolve conflicts in technical direction I&#8217;ve been unable to resolve myself with the other maintainers. And that's what happened with the Sorbet stuff. Interestingly, a few years ago when it was initially proposed, I was not a fan of the idea. Now, however, I'm actually a big proponent of Sorbet. I think we should double down on it and use it even more.</p><p><strong>What convinced you?</strong></p><p>Well sometimes the way it can go with open source projects is that someone gets an idea, that one person is very enthusiastic. And people get excited and say yeah we want to get involved, great. But what can happen in the worst case is that none of the people who say they&#8217;re going to step up actually step up, and the person who pushed it to begin with got bored and wandered off, and now you&#8217;re left with these problems. And then it becomes someone else&#8217;s problem, often mine, to clean up the mess. So I thought that was the way it was going to go with Sorbet. But it turned out that over time actually more people got interested in it, and more people got involved. And personally over at Workbrew we started using it to solve a bunch of problems, and at GitHub a bit as well, and so now having used it to solve problems I&#8217;m like ok, this is better than I thought it was. </p><p><strong>So in the 15+ years that you&#8217;ve been working in open source, do you feel that the way that open source projects are run have changed? What have you noticed in terms of open source culture over the last 15 years?</strong></p><p>I think the really big thing in the last 15 years is where and how open source is happening. So 15 years ago I'm not sure whether node.js existed - certainly npm if it existed was pretty minor. Whereas now most engineers out there are writing JavaScript, right? If you're a new engineer coming out of a bootcamp or learning a new language, it would be a strange choice for you not to learn JavaScript and do that on the front end and the back end and then I'm full stack and yadda, yadda, yadda. So I think that has been interesting just because the JavaScript ecosystem has its own culture and way of doing things. You have millions of dependencies and often those are quite small and maintained by like a single person. Not fewer, big chunky open source projects. Like KDE is essentially a big umbrella project that probably has, I don't know how many active contributors it has, but it wouldn't surprise me if it's hundreds or thousands or whatever. And it's carved into a wide variety of pieces. Whereas I feel like open source in general has become a bit more decentralized and there's a lot more small projects of one or two people here and there. </p><p>Things have also moved away from the Linux world where it used to be. Like when I was at university, open source and using Linux were almost one to one, right? If you were a big C# Microsoft stack Windows type person, it would be relatively unusual for you to use any open source at all. But obviously over time, with GitHub and Microsoft acquiring them and Microsoft themselves getting a lot more into open source, it's like everything is open source now in some respect but what open source means has also changed. There used to be the assumption that open source projects are community run and maybe they're loosely affiliated with a company or whatever. In the earlier days of GitHub, if you looked at the repos with the most stars or whatever, Homebrew was often up there. Whereas now it's all like VSCode and next.js. Almost all the projects that are up there are ones that have major corporate backing basically. That makes open source a very different world and makes it harder to be an indie, volunteer-run project.</p><p><strong>Are there any other open source projects that you&#8217;re impressed by or watching?</strong></p><p>Ruby on Rails always continues to impress me. I'm using it again at the Workbrew startup that I'm building, and it&#8217;s the first time I've built a completely greenfield app from scratch. We&#8217;ve got a couple apps I guess, but one&#8217;s in Rails and one&#8217;s in Go and you know, Go is really good at what it does, but writing it doesn't make me happy in the same way Ruby does. There's been such an amount of time and effort and care and love that's gone into making it very pleasant for developers to use.</p><div><hr></div><p>To suggest a maintainer, send a note to Allison at allison@infield.ai. <br><br>Infield is <a href="https://www.ycombinator.com/companies/infield/jobs/5bPS1nT-full-stack-software-engineer">hiring</a> full stack engineers! </p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Okura Masafumi]]></title><description><![CDATA[From Palo Alto to Kaigi on Rails]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-okura-masafumi</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-okura-masafumi</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 17 May 2024 15:16:20 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e8294a25-c4c9-4f07-95cd-add4b4462f00_752x690.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/okuramasafumi">Okura Masafumi</a>, a software developer based in Tokyo and lead organizer of the <a href="https://kaigionrails.org/2024/">Kaigi on Rails conference</a>, this October 25-26 in person and online. Okura has contributed to and created several open source projects including <a href="https://github.com/okuramasafumi/alba">alba</a>, a JSON serializer for Ruby, and as a longstanding user of Vim, translated the book <a href="https://www.packtpub.com/product/mastering-vim/9781789341096">Mastering Vim</a> into Japanese.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades.</p><p><strong>How did you become a software developer?</strong><br><br>My major in university was economics. I was not interested in computers at all at the time. But I live in Japan, and when I was about 20 years old I went to Stanford University to learn English as part of this program, and there were some activities outside of classes where we went to Palo Alto. There were some guys there that did stuff with computers and they were trying to start a company. And this made me think I could do something similar back in Japan. </p><p><strong>Do you remember what company it was?</strong><br><br>No, they were really just starting. They were in a garage, literally.</p><p>So it looked, well not easy, but not that difficult you know. They were just sitting in front of computers and it looked so fun. So when I got back to Japan, a friend of mine suggested that I do an internship where I would build iPhone apps. This was 2009, 2010. The iPhone 3GS had just come out. I thought, oh, this is wonderful, this is what I want to build my own program for. At the time I had no interest in desktop apps. And six months later I successfully launched my first app in the App Store. So my first real world programming experience started with the iPhone.</p><p><strong>How did you learn to build the app? Were you self-taught?</strong></p><p>Mostly self-taught. As I said I did an internship, but they didn't really talk to me all that much. The app was a location reminder type app, which is now built-in to iPhones. When I reached a subway station it notified me to do something, that kind of thing.</p><p><strong>Did you have any users?</strong></p><p>I&#8217;m afraid no. Maybe 10-ish users, but the primary goal was to publish the app itself, not marketing. So I was satisfied.</p><p><strong>What was your first exposure to open source?</strong></p><p>When I look at my pull request history data in GitHub, my first contribution to open source was 2012, which is around when I switched from iPhone development to Rails. At the time I had just started to use Vim because for iPhone app development, we must use Xcode. But for Rails development, we were able to choose editors. And my editor of choice was Vim. I still use Vim. There were many plugins for Vim at the time, there still are, and my first contribution was a <a href="https://github.com/Shougo/neosnippet.vim/issues/9">feature request</a> to a snippet plugin. The snippet in Vim has placeholders. And I wanted to skip one. So if there were 3 placeholders I sometimes wanted to skip, for example, the second placeholder. I wanted that feature.</p><p>The funny thing is that after I submitted an English description for my feature request the author replied to me &#8220;Please reply in Japanese if you&#8217;re uncomfortable in English&#8221; because he was Japanese. So I switched to Japanese. </p><p><strong>How did you find the human element of collaborating with people that you had never met before? Because something that we hear a lot as a barrier to people contributing to open source is that they feel scared or intimidated just by the prospect of putting themselves out there and saying hey, this is a feature I want or this is a bug that I found. What gave you the confidence to write that first issue?</strong></p><p>So one of the first Rails issues I wrote was for the <a href="https://github.com/rails/spring/issues/129">spring gem.</a> And it turned out that I was wrong. I actually went ahead and closed my own issue. But what I learned is that there were other people who ran into the same thing, and they found my issue and it actually helped them a lot. So just because my contribution was not perfect because I raised an invalid issue, it turned out to be helpful to people debugging their own code.</p><p><strong>How did you end up eventually becoming involved in conferences and organizing Kaigi on Rails?</strong></p><p>The first Kaigi on Rails event was in 2020. We in Japan had a similar event called Rails DM (Developer Meetup), but it ended in 2019. I was assistant staff for that conference, and so I communicated with DHH so he could join remotely, and I invited Jeremy Daer from Rails Core who physically came to Japan for that event. So I knew that if we had a Rails-specific event in Japan, people will come. I was also an organizer for VimConf. So I was confident by then that I could be the founder of a conference. I came up with several friends who might be interested in helping, and talked to them one by one. We ended up with a staff of eight.</p><p>When Covid hit we needed to decide to stop planning entirely or just go. And we decided to go, to make it a virtual conference. Which made some issues irrelevant, like physical venues or food. But we still needed to think about keynote speakers and gathering proposals. It was eventually successful partly because we have the Japanese Ruby community, the community behind RubyKaigi, and their experience.</p><p>Last year, 2023, was the first year we had Kaigi on Rails in person. We&#8217;ve had three virtual conferences, and one hybrid. </p><p><strong>It&#8217;s much easier to have people join virtually obviously, but you miss out on the spontaneous interactions that can happen in person, where people run into each other getting coffee and things like that. How was the transition to in-person?</strong></p><p>I personally preferred it in person. As an organizer, we were lucky because we had three virtual conference experiences before the in-person one. So we knew how to organize talks, how to get sponsors, etc. And the only experience we lacked was the in-person part - throwing a party, for example. </p><p><strong>Which is much more expensive, I imagine, too.</strong></p><p>Yes. But the sponsors also pay more. And we&#8217;d built up a brand by then.</p><p><strong>When is Kaigi on Rails 2024?</strong></p><p>October 25-26, hybrid in person and virtual.</p><p><strong>Finally, who&#8217;s doing something in open source right now that you think is really interesting?</strong></p><p>I&#8217;m a Neovim user now, and there is a guy called <a href="https://github.com/folke">Folke</a> who is a Neovim plugin author. He invented lots of plugins simultaneously, and he&#8217;s one of the people I&#8217;d love to meet in person because he&#8217;s so productive. He also sometimes goes on vacation for a few weeks, and during that time doesn&#8217;t do any open source. And so I wanted to ask him about that.</p><p><strong>How he takes a real vacation?</strong></p><p>Yeah! A vacation from open source. I&#8217;d love to talk to him about that.</p><div><hr></div><p>To get in touch, find Infield on Twitter @infieldai or write to Allison at allison@infield.ai.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Rafael França ]]></title><description><![CDATA[The Rails Core member on new releases and balancing pushing the community forward with stability.]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-rafael-franca</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-rafael-franca</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Thu, 02 May 2024 13:56:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/685c1e62-cabe-4c25-9d49-78dbb4ddaa7c_4266x2843.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/rafaelfranca">Rafael Fran&#231;a</a>, member of the Rails Core team since 2012 and contributor with the most commits to the framework. Rafael is a Principal Engineer at Shopify where he leads the team responsible for the Ruby and Rails ecosystem within the company.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades. </p><p><strong>How did you come to be on the Rails Core team?</strong> </p><p>I guess I always wanted to be part of Rails Core, at least as soon as I knew what the Rails Core team actually was. But in reality, how it came to be is that one of the Rails Core team members was<strong> </strong><a href="https://github.com/josevalim">Jos&#233; Valim</a> - he was the first Brazilian person I knew that was working on open source projects as big as Rails.</p><p>Of course later I learned that there are more, but at the time he was the only person that looked like me that was on a team that important, and I wanted to work with him. One year later I was moving to S&#227;o Paulo to work with Jos&#233;, and I learned a lot. I started maintaining a few open source projects like devise and simple_form. A year later I decided that I would try to help with Rails. I was basically mimicking his steps, doing what he was doing.</p><p><strong>This was pre-Shopify, or were you already there?</strong></p><p>This was five years pre-Shopify, so 2012. I was doing consulting, and working with Jos&#233; and others like <a href="https://github.com/carlosantoniodasilva">Carlos Antonio</a> who is also Rails Core. That&#8217;s how I started, mostly mimicking Jos&#233;, doing what he was doing. Then I found my own things, the things I like in Rails, and to me that&#8217;s helping others and unblocking people, growing new contributors, etc.</p><p>Then I came to Shopify as the first person responsible for directing open source. At Shopify I had a lot of different responsibilities. The first one was to make sure that Rails works for Shopify, the company. But now it&#8217;s a lot of things - YJIT, parsers, LSPs, everything in the Ruby ecosystem we try to touch. I still kept my role at Rails Core. As a person, that&#8217;s my role. As an employee of Shopify my role is the entire Ruby ecosystem, not just Rails.</p><p><strong>So Rails 7.1 came out last October. How soon after that release does the planning start for the next version?</strong></p><p>That&#8217;s a good question. And I don&#8217;t know if anyone knows this, but we never have a plan, and it&#8217;s no problem. The first time that we actually exposed a plan was this year, I believe <a href="https://dhh.dk">David</a> (DHH) decided to expose a plan [last] December. That plan is there, and people actually thought that we started that plan in December. But the things that he created as public milestones have been there for years. Those are things where we say hey, we would love to build something like this, and we use Basecamp to track what those ideas are. It accumulates, and some day people say hey I&#8217;m going to work on this, and we do.</p><p>One of the reasons why we never made the plan public is that it adds the pressure that we need to finish, and in private we never have to finish the thing. We&#8217;ll say &#8220;I want this for Rails 7,&#8221; for example. But then life goes on, you change interests, and you do other things and forget about that thing, and you don&#8217;t feel bad because you never promised anyone that we would do it. </p><p>But this year, last October, during Rails World we had our first ever meeting of Rails Core. We&#8217;d never had a meeting. Our first meeting was last year. And one of the things we discussed in that meeting was maybe we should have a regular cadence for releases - we try to, but sometimes we miss. Our original plan was to release once a year, but if you pay attention, 7.1 took way more than one year. So one of the decisions we made was let&#8217;s try to follow a regular cadence. And the cadence is now going to be six months.</p><p>The next release is going to be next month - 7.2, not 8. And the second decision was maybe we should make our plan public. Just to let people know what direction we&#8217;re going in, in case they want to steer in the same direction or even change their own plans or if they&#8217;re building something similar maybe that can help us. And that&#8217;s why David decided to open the milestones. All those ideas were there for years - there are things I put there three or four years ago, and now it&#8217;s public for Rails 8. </p><p>For a big release like 8 or 7, we try to see how things actually evolve on the internet. The goal for Rails 8 is simplifying, have less moving pieces. So we are planning to remove things that we believe add confusion - like today the assets pipeline has Sprockets, Propshaft and jsbundling. We don&#8217;t need all of that. So we use a plan to decide what we want to achieve and then someone will go ok, I&#8217;m interested in this area and I&#8217;m going to build this. It&#8217;s very individual. But we agree as a team with the idea. So like <a href="https://github.com/fxn">Xavier Noria</a>, years ago said he&#8217;d write the auto-loader, he wrote <a href="https://github.com/fxn/zeitwerk">Zeitwerk</a>. But that was his personal plan, it was not a team plan. </p><p>So after the meeting last year, we are going to try to keep the milestones public as we are doing now with Rails 8. The interesting thing though is that most of the things we added to the Rails 8 milestones are coming on 7.2. Because we are not trying to plan specific releases, we are trying to plan big ideas. Those big ideas make sense as a big release, but it does not mean that we need to wait until October, we can release things as we go, and the things we are finishing now are going to be in 7.2, and the things that are not are going to be in 8.0.</p><p><strong>How do you distinguish between those two things? So if you have one over-arching roadmap, and individuals are kind of picking things off the roadmap that they are working on, how do you decide what goes into the major release versus let&#8217;s just put this in 7.2?</strong></p><p>There are two main decision points. One is, how big the change is. So when we talk about simplifying the assets pipeline as we are talking about, this needs to be a big change. If we had finished it this month, I would say 8.0 would be released in April, not in October, because for us that&#8217;s a big change in the direction of the framework. I think the same thing happened with 7.0 when David introduced Hotwire. People were like ok, maybe I shouldn&#8217;t be doing more in JavaScript-land like using React, using webpack, etc., and Rails introduced Turbo/Hotwire with its vision of simplifying the web. It could have been 6.2. Like if you look at the release history, it was always 4.1, 4.2, 5.0. 5.1, 5.2, 6.0. But 6.2 was never a thing. We decided we have this new thing, it&#8217;s very big. It&#8217;s not going to be a small change for people, it&#8217;s not incremental. It&#8217;s a large change in the vision of the framework. </p><p>8.0 for us is going to be the same. Like I said, the goal is to simplify things. The simplification is large enough that it requires a milestone, a celebration of something. That&#8217;s why we are going to say it&#8217;s 8.0.</p><p><strong>So it&#8217;s more about impact.</strong></p><p>Yes. David usually calls that, because he has the larger picture in his head. In the past we also used the major versions to drop Ruby support. But now we are trying to change that because otherwise we are going to be supporting versions of Ruby that Rails Core or Ruby Core has not supported for years. Like today, Rails 7.1 supports Ruby 2.7, that&#8217;s not supported at all by Ruby Core. So now we are trying to change this as well, because removing support for old Ruby versions was a reason to bump major versions. Now it&#8217;s not anymore. </p><p><strong>How do you balance items on the roadmap that are maybe from the Core team themselves versus from the community, versus from your work at Shopify? You have all these different stakeholders who use Rails, in some capacity. How do you balance across those different communities?</strong></p><p>So just to reiterate, it&#8217;s mostly individual driven. What I care about are some of the same things that David cares about or Xavier cares about. Like there were a lot of changes in authentication to make it easier to build your own authentication. Those were community driven. I said something about it on a podcast, but it was not me that built it. But I was championing it because I think the idea is great. Or Xavier, he cares about auto-loading. So if people have an idea about how to push this forward, he will be open to it. </p><p>There are other things where we prefer not to get input from the community - the assets pipeline is one of them. Because everyone has an opinion. And if you try to satisfy everyone you would end up with the same mess we have today. There are so many choices that you can pick and choose and none of them work as great as the default worked years ago. But sometimes in the community there are a lot of small ideas that together make a large vision, and I care about those. One of those is people are trying to extract things from ActiveRecord to ActiveModel. Individuals that don&#8217;t work together are doing this. And so I&#8217;m trying to look at the overarching story around that, like why are we doing this? What are the reasons someone might extract things right now or in the future? Rails right now is very mature. It&#8217;s harder to change. Like I could not just say &#8220;the way you do this is wrong, let&#8217;s do it completely differently.&#8221; And for community members, it&#8217;s hard to think about backwards compatibility and stability. They want to change faster. And that&#8217;s why you see them building things on the more experimental side, building the libraries from Rails but outside of the framework.</p><p>I wish we had a better way to start to integrate some of those ideas back in Rails. Some of them are happening. So encryption is one of them. For years we had libraries that do data encryption. Now it's baked into Rails. If we build it ourselves we can build a different developer experience, we can integrate with different modules, while with a library you have to deal with different integration points. I try not to make Shopify dictate the decisions we make at Rails Core. There are things the team works on that we treat the same as any other contributor - they have to open a PR, a member of Rails Core has to review, and then we merge. </p><p><strong>So besides which features make it in, there&#8217;s an element of how much breaking-ness can we introduce. As an outsider it seems like as the framework has gotten more mature it&#8217;s gotten more backwards compatible, more deprecation warnings, a lot of work has gone into making that smoother. How does the team think about helping existing applications stay up to date going forward?</strong></p><p>That&#8217;s a really good question. I remember when I was doing work similar to what you guys do - it was really hard. The worst time was from Rails 2.3 to 3.0, it was almost impossible to do. I don't know if there are any apps on 2.3 today, but if there are they are in real trouble. So I said no more, now I actually have power to make things happen. I don&#8217;t ever want to see that happen again. And one of the things I shouldn&#8217;t have said about us trying to change the pace of release from one year to every six months - I don&#8217;t want companies every six months to be having to upgrade Rails, removing deprecations, dealing with a lot of code. Like if it was only bumping the version, I would be OK with companies doing that every six months because it&#8217;s not a lot of work, but removing the deprecated code or fixing breaking changes - I don't want that every six months. So I'm trying to think about how we can increase the pace without increasing the burden on the community.</p><p>There are some ideas I have, like not removing deprecations every release, removing every year only. I don&#8217;t know if it&#8217;d be the first half or second half of the year, but once a year. So we&#8217;d have two versions of Rails with the same deprecations. Things like that. It would allow people to upgrade but they don&#8217;t need to do any major breaking changes or rewrite parts of code, etc.</p><p><strong>So you&#8217;re able to get features out throughout the year without waiting an entire annual cycle, but people can take those features without breaking their code.</strong></p><p>Yes, exactly. I care a lot about this problem space, and Shopify is the same, and we automated that kind of work. There is a tool at Shopify that helps more than 300 services be upgraded from one version of Rails to another. And the tool helps you open PRs, tell you what you need to do, etc. And we do this every year. We are very good at this. I don&#8217;t know that any company gets close. But even for Shopify, I&#8217;m not willing to say, hey we have tooling, I want you to upgrade every six months. I&#8217;m still on the fence. If we, even with automation, are not comfortable doing it every six months then I don&#8217;t want the community to feel like they need to do it every six months. It should be easy to upgrade Rails. It should not be hard. I&#8217;m not saying we don&#8217;t need expertise, but it should not be as hard as that 2.3 to 3.0 upgrade was. It took Github like three years to upgrade from 2.3 to 3.0.</p><p><strong>Zeitwerk is probably a recent introduction of a major breaking change that was still painful handling the upgrade, but there was tooling shipped as part of the release and deprecations that made it much more tractable and much safer to do than, for example, Strong Parameters in the past where it was much harder to know if you&#8217;d done it correctly.</strong> </p><p>Yeah, so what I say is, you should need to do work. But the work needs to be directed, and paced and let&#8217;s say even official sometimes. Like before, you could call form_for and pass an object, now you call form_with. So we discuss. Should we deprecate form_for? Maybe, yes, it&#8217;s simpler for Rails to have one API. But I&#8217;m not sure if we should require people to change this code. There&#8217;s no reason to. </p><p><strong>So if Rails does go to a six month cadence on release, does that affect the maintenance commitment to older Rails versions? How are you thinking through that?</strong></p><p>Yeah, this is another thing I&#8217;m thinking about. One of the reasons we want that cadence is that it&#8217;s hard to predict how long your version is maintained. Because if we had a calendar, I would say ok yes - it&#8217;s maintained today, next year it&#8217;s not. But because we have no strict cadence, you don&#8217;t know. We could release tomorrow or in two years. So we want to help people plan. But that&#8217;s another problem, because every minor release we do, that means the old one is not supported anymore. Before, you would get at least one year, or more. So one of the ideas I had around this was maybe we should have a yearly maintenance policy, no matter what version you&#8217;re on. So 7.1, you have one year, 7.2, that should come next month, you have one year. That would mean we&#8217;d be maintaining at least two versions of Rails at once, but that&#8217;s our problem it&#8217;s not the problem of the community. </p><p>To me, the right window is one year for bug fixes, two years for security releases. I think that&#8217;s enough. That&#8217;s less than other ecosystems do, like if you go to Java, Oracle still supports Java that is 12 years old. I don&#8217;t want that, because I think that makes the community lag behind. So I want to balance pushing the community forward, bringing them with us, and still supporting them. I think a yearly window for bug fixes, and two year window for security fixes is enough. </p><p><strong>How much time do you spend thinking about the other frameworks and how they're doing things?</strong></p><p>I don't spend a lot of time looking at other frameworks. I spend a lot of time looking at other languages. Because my larger job at Shopify is to be responsible for Ruby. I have a very good friendship with Jos&#233; Valim still. He created the language called Elixir that has a framework called Phoenix. I chat with him all the time, we discuss different approaches. I know what Phoenix is doing. He knows what Rails does because he was also a Rails Core member. So that one I'm very close to. I pay attention to Hanami, that's Ruby. I read every single blog post they release. I follow those people around. I work a lot with Rust right now, I pay attention to what they get right, what I hate about the language. </p><p>JavaScript for me, not in terms of frameworks but in terms of tooling - how easy it is to work with JavaScript in your editor is one of the reasons why at Shopify I created the team to work on LSPs, code editors, parsers, type checkers<strong> </strong>because I believe that thing is good and we should bring it to Ruby and Rails as well.</p><p>Tooling especially is what Ruby is lacking right now. Matz three years ago, maybe two years ago, he made a keynote saying Ruby 4 is going to be about tooling. And that&#8217;s what Shopify is building Ruby 4 to be. We are working on a new parser because we believe the parser should be the same across all the tooling, so we could have better code mods. Better Rubocop - it&#8217;s great but it&#8217;s slow, at least for our codebase. Typing is a hard one because I don&#8217;t want to push typing to the community, but there is a lot of value in typing especially in large codebases. So the storytelling around typing should be better than it is today - not put typing everywhere, but there is a specific case where you need typing. </p><p>So my inspiration from other languages is mostly about the tooling. I want to see what tools they are building so we can build the same in Ruby or even better.</p><p><strong>OK, last question: was there ever anything on the Rails roadmap that was a real moonshot, something that was thought about but never done, that you wish you did?</strong></p><p>There is one, but I&#8217;m not sure if I should talk about it. One of the struggles I see a lot of applications have is what to do when your company grows.  Like say when your team gets to be more than 20 people - how do you deal with that code base? So one of the things we did at Shopify, with 8,000 engineers, that I think should be part of Rails, but I&#8217;m not comfortable yet putting out into the public is to be able to build applications as if it were Lego sets. So you break your app into pieces. A lot of people have tried to do this, like Shopify released a library years ago called <a href="https://github.com/Shopify/packwerk">Packwerk</a> that helps you to do it, but we never told you how we actually did it, using a feature in Rails that is already there. </p><p>The feature is there, but people don&#8217;t use it for that purpose. Rails <a href="https://guides.rubyonrails.org/engines.html">engines</a> could be used to create small applications, and you could use them to build bigger ones. Usually people use engines to share code, but this is not for code sharing, it&#8217;s for code organization. The feature is there, people can use it already - that&#8217;s how we&#8217;re doing it at Shopify. But we could make it easier, because the way we make engines right now makes it hard - it requires you to have a gemfile, gemspec, it actually generates engines to be shared, and that&#8217;s not the goal. So the new feature is actually generating less code, not more code. But I&#8217;m afraid of sharing this yet because I don&#8217;t want people to think that as soon as you create an app you should have this. It&#8217;s a tool to solve a problem, but you need to have that problem first. If you use the tool too soon, you&#8217;ll be in trouble. That&#8217;s why I never shared it outside of Shopify talks, blog posts, etc. I don&#8217;t know yet how to document the problem space well enough to tell you &#8220;don&#8217;t do this yet if you don&#8217;t need to.&#8221;</p><p><strong>Fascinating. We&#8217;ve definitely seen engines gone wrong for modularization inside of smaller teams that they regret doing. But also the idea of how do you scale a Rails app, not just the code but as the engineering team itself grows how do you support it, has been a question the whole time.</strong></p><p>So to me, it&#8217;s a sharp knife. But it&#8217;s a sharp knife you can&#8217;t pull out. So that&#8217;s the problem I&#8217;m struggling with. It&#8217;s built, the code is there, but I haven&#8217;t released it. The documentation, to tell the story properly is the hard part. Because as soon as you add it to your app and you realize you don&#8217;t need it anymore, you&#8217;re stuck. To remove it is a lot of work. So that&#8217;s the hard part. It&#8217;s one of the ideas I wish I would release, because it would help Shopify a lot, and we&#8217;re probably going to have a lot of big companies in the same situation as us. But it&#8217;s hard to sell in the right way. Because people will do what they do with Google - oh Google does this, so we should do it. But you&#8217;re not Google. </p><p><strong>Right. But in the meantime, you've got, you know, people adopting dozens of micro services or something, and maybe they shouldn't have done that.</strong></p><p>Yes. So the other side of the coin is that this could be a response to microservices because it allows you to deploy the same app in different ways. You can say I have this monolith, composed of many lego pieces. But here I want to make a man, and here I want to make a car. You can use the same lego pieces to make two different things. Google actually wrote a paper last year about this. But we need to get the story right. I would say that&#8217;s what Rails is, in part. The code is the least of the thing. Rails is storytelling, it&#8217;s leadership, it&#8217;s showing that we can do it differently. The code is there in support of this. </p><div><hr></div><p>To get in touch, find Infield on Twitter @infieldai or write to Allison at allison@infield.ai. </p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Armin Ronacher]]></title><description><![CDATA[The creator of Flask on the role of the package index and how things have changed over time for open source creators]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-armin-ronacher</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-armin-ronacher</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Thu, 18 Apr 2024 19:13:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ad94ae93-f89f-489d-bfe0-7f382d69ecc9_3448x4807.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/mitsuhiko">Armin Ronacher</a>, creator of the <a href="https://github.com/pallets/flask">Flask</a> framework and founder of the <a href="http://www.pocoo.org">Pocoo team</a>, a group of open source developers working on several widely used Python projects. Armin is a regular speaker at various developer conferences and currently works as a Principal Architect for Sentry.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades. Armin spoke with us from Austria.</p><p><strong>How did you get into open source? Do you remember your first contribution?</strong></p><p>Actually, it took me a lot longer to contribute than to write my own open source software. In 2004 when Ubuntu released Warty Warthog, there was quite a bit of excitement about that Linux distribution. There was a bit of momentum, and I joined a bunch of people and decided it would be a good time to create a community for the German speaking population in Germany, Austria and Switzerland. There we used PHP, VB and I think Dokuwiki. I was also learning Python at the time. It was essentially a community website for an open source project.</p><p>Through that I started building things, utilities that I could use to switch this thing over to Python. Basically the idea was to take the PHP code and replace it with Python code. And so I think in 2004-2005 I started my first open source libraries just out of personal interest, and because I noticed that it was kind of hard to do web development in Python compared to how easy it was for PHP. And so that's how I got into it gradually. But a lot of it was my own libraries. I think it took probably a year and a half, two years more until I contributed to other people's stuff.</p><p><strong>When you first released Flask, did you know right away that it was going to be popular? Did it hit right away or did it kind of take a while?</strong></p><p>So the pre-story there is that I wrote the libraries that Flask was based on quite a bit earlier. I couldn't tell you by how much, but the precursors of those libraries are probably like three years older than Flask was. And there was at the time quite a bit of sentiment that you had to do these single Python, no dependency libraries, monolithic, everything in one place kind of thing. And so I made an April Fool&#8217;s joke where I bundled all my libraries into a zip file and just made some marketing for it. And that was obviously a joke. But the <a href="https://lucumr.pocoo.org/2010/4/3/april-1st-post-mortem/">joke was surprisingly popular</a>. </p><p>What I learned through that joke is that marketing actually matters quite a bit. With the libraries I did before, I didn't even try to do that. With this one I actually tried to make a proper website, proper documentation. And it felt somewhat clear right from the start that there was a certain need or an interest from people. Now, it was not as measurable as open source projects today with like Github stars and everything. But for me it was measurable by the activity that we had in the IRC channel. Compared to all the questions that came in before, which were once in a while, all of a sudden there was like a constant flurry of questions and answers and it felt like there was more activity behind it right from the start.</p><p><strong>How quickly did you bring in other people to start helping maintain it?</strong></p><p>Before Flask I sort of informally worked with a guy called <a href="https://github.com/birkenfeld">Georg Brandl</a> and we started this <a href="http://www.pocoo.org">Pocoo</a> website where we basically collected a bunch of open source libraries that we created together. It was primarily there as a way of creating a community, which was entirely based on IRC. It wasn't really based on the idea of getting more people in, more on the idea that you're not in this alone. If there are questions, then there's another person you can ask. It wasn&#8217;t a very clear work arrangement or anything like that, but it was one where multiple people were always joining or leaving or or doing something. Some of those projects always had people technically capable of committing to it, but there was no real structure around it. And that actually never changed for Flask until eventually <a href="https://github.com/davidism">David Lord</a> started contributing to it, and he's sort of the face of the project nowadays and he has a much more organized approach.</p><p><strong>I want to talk about a blog post you wrote a few years ago about PyPI naming your project a &#8220;critical&#8221; package - your post is called <a href="https://lucumr.pocoo.org/2022/7/9/congratulations/">Congratulations: We Now Have Opinions on Your Open Source Contributions</a>. I'm curious now that it's been a few years, do you feel any differently than you did in the post, or how have your thoughts evolved on the package indices?</strong></p><p>It didn&#8217;t become much clearer. So that particular [post] was just like hey, we're setting a bar here that's not a bar for everybody, but a bar for let&#8217;s call it popular people. If you want to publish your critical package now this extra rule applies to you. Which is not a particularly impactful rule, it was just two factor authentication, but it was still a rule that didn't apply to everybody. And it basically meant the index all of a sudden sets something in place that wasn't there originally. And the problem is that the open source package kind of turns from someone's toy into this critical piece of infrastructure. And I think we have never really figured out what the relationship of an index to the open source contribution is. </p><p>I don't feel particularly strong about two factor authentication. But I do kind of feel that we have never really addressed the fundamentals of how this sort of stuff is supposed to work and the unclear relationship of the indices to the packages I think is one part of it. It's not the most impactful one. But yeah, it's kind of interesting.</p><p><strong>Do you feel like any other ecosystems are doing it in a better way, different way, worse way?</strong></p><p>I mean the extreme versions of this is do you even need a package index? You have Go which doesn't really have one because you can directly depend on GitHub, but then GitHub is sort of hard coded into the language. I'm not entirely sure if decentralization actually is the solution for this problem, but there are all these different approaches and some of them are maybe better than others in certain aspects.</p><p>The fundamental problem is we got very willing to depend on a whole bunch of stuff, on external dependencies, and we haven't really established well defined rules about what it means to depend on something. And so that has created a bit of a mess. And in an attempt to solve this mess, a bunch of people ran to the package indices like &#8220;you've got to figure this out now.&#8221; So for instance, <a href="https://qz.com/646467/how-one-programmer-broke-the-internet-by-deleting-a-tiny-piece-of-code">left-pad</a> was an example where people went to the package index and said &#8220;Undo this&#8221;.<strong> </strong>And they were basically like well, the maintainer clearly went rogue. So we're going to override his decision to unpublish this package. And the question is like, is the index supposed to do that or not? The index can do whatever they want, right? Because they're just republishing under the license that the creator used. And so you can't really take it away.</p><p>So yeah, I think all the indices are more or less in the same position. People depend on packages, so the packages kind of have to stay there. But then that always turns political and most package indices don't have the capacity to deal with the politics too much. In theory, if you want to run a package index there should be contracts in place and rules and regulations and everything, but it&#8217;s mostly made up and they have quite a bit of flexibility in how to interpret their own rules. I don't think any index is doing it particularly better than others. <a href="https://www.npmjs.com">npm</a> probably has the most well defined rules today of how the index is supposed to work.</p><p><strong>Is the npm registry run by Microsoft now?</strong></p><p>I think it's technically run by GitHub, which is part of Microsoft, but I'm not entirely sure how this works. It doesn't have Microsoft branding or anything, so they are probably keeping it somewhat intentionally separate.</p><p>I think the core problem is just that there's a big difference in practice from publishing something on an index versus putting it on your own website. And it looks very much the same, but it really isn't. And that's kind of not disclosed. And it's not well understood what the differences actually are, so some people only learn like years later.</p><p><strong>Do you mean, for example, that once I publish to an index I've given license for that index to keep that code forever and make it available to people if they want to? Or what sorts of distinctions are you thinking of?</strong></p><p>One is that the index clearly has rights that it sort of gains - the terms of service of using the index apply and then you have to adhere to it. But in a very specific way, it also takes away some agency. I'm not saying anyone should ever be doing this, but there was a very well known Ruby programmer called <a href="https://en.wikipedia.org/wiki/Why_the_lucky_stiff">why the lucky stiff</a>. And he decided one day that he&#8217;s just done. He's going to remove all his content on the Internet. And that sort of removal of your stuff has lasting implications that really only works if you're in full control over where you're hosting. It&#8217;s probably not a good idea, but this was a freedom he had, to take it away. If you're on a package index, you really don't have that freedom. And that is not so much because being on an index takes away a right, but because people literally depend on the package being installable on the index.</p><p>So here's an example, non-malicious. When we publish an update to Sentry CLI, which is one of the tools that we have, and there's a bug in it, within minutes there will be a bug report and tons of people will say &#8220;hey, this broke.&#8221; And it's not because they all suddenly upgraded at this very moment, but because the CI systems run all the time and they run on the latest version. So if something is not working, then you have the mass effect of everybody being broken all at once. In the time before public package indices, it was pretty common that your website wasn't perfectly available. The website might be down every once in a while. You might be like OK, I can't download this right now. So you would mirror it, you would vendor it, you would do a whole bunch of stuff to keep this code around for yourself because the original source wasn't all that reliable to begin with. With package indices, you don't have to do that because the index is there to serve it up for you. But it also means that now this act of unpublication is gone. So the way you interact with an index is just fundamentally different.</p><p>I made this joke that curl cannot be unpublished because everybody has their own version of curl. I remember when I worked on a game console, and we didn't even use the official curl version. We used a thing that looked like curl but it was actually written by someone else. It just emulated the curl interface.</p><p><strong>There are also package managers at the operating system level that Ubuntu runs or Debian runs. I get the feeling that they are governed more strictly than the language package managers are historically. Is there any difference?</strong></p><p>Well, I can tell you my version of this. The first time I published an open source library, I think it was a Python web library, and there was no PyPI. Or maybe there was PyPI, but nobody used it. So I went to SourceForge, and if you wanted to create a project on SourceForge, it took seven business days and you had to go through a manual review process. I'm pretty sure I had to sign a letter with pretty terrifying legal text to read through. It was a relatively daunting process compared to &#8216;npm publish&#8217;, which is what we do now. And I don't think that's a good thing. After I had the package there, eventually someone from Debian started putting it into their Debian archive. People don't do this anymore. But I remember for many years I had conversations with Debian people where they told me I cannot do such and such because the license prohibits it, or I have to do such and such because otherwise they can't do their job. For instance, I wasn't allowed to republish a tag on git because they would pin against the tag and if something changed, they got an alert.</p><p>I think that eventually it may go back to something like that. But we're definitely in a completely different world now. It's kind of scary in a way how we do software development now because we have a lot of dependencies, but we don't trust anyone. Everybody has complete rights to screw you over. In practice it doesn't happen often. People are good most of the time, but security-wise it's pretty terrifying compared to how we used to do this like ten years ago.</p><p><strong>And ten years ago there was a lot more emphasis on GPL licenses and having the expectation that if anybody used your code that they were going to contribute back to the community. That's changed a lot too. Do you have an opinion on what combination of index, registry, server systems, governance, open source licensing decisions or other kind of decisions make for the healthiest open source community?</strong></p><p>I don't know what the right answer to this is. I'm very skeptical of GPL in general. One thing is that the only way in which you can actually have a GPL enforced is if you're willing to go to court. And I think that has been demonstrated multiple times throughout the years that the most successful GPL projects have enforcement alongside them. And that&#8217;s never something that I would want to do. A license is only as good as the enforcement. If the license is BSD or Apache you have to do something that is really extreme for enforcement to ever come into play. Typically it's just like, people forgot to put the license file into some copyright screen. You're not going to go to court for that. </p><p>But that also means that if you want to do something beyond open source, like you actually want to make money, GPL kind of always had a way for you to make money. In the historic world that doesn't really work for a more permissive license like BSD or Apache. Then it becomes really complicated, because my belief on how you'd combine open source and and commercial things is that it is no longer open source. For example the license that we use at Sentry is the <a href="https://blog.sentry.io/introducing-the-functional-source-license-freedom-without-free-riding/">FSL license</a>, where for two years it has an exclusivity period and then on a rolling two years it turns into Apache, or there's a second version that turns into MIT. That&#8217;s sort of my and David&#8217;s way of squaring this. But it&#8217;s also very loaded because it&#8217;s violating this belief for people of what open source should be. But if you don't actually have a way to earn money, then it kind of sucks. There&#8217;s just burnout and a whole bunch of other stuff that doesn't really work. So there has to be a way to commercialize something along the way without giving up on the benefits of open source entirely. I don't know what the perfect solution is, but that has been what I feel are some of the most reasonable approaches.</p><p><strong>Lastly, it&#8217;s been about a year since you released <a href="https://rye-up.com">Rye</a>. What led you to create it?</strong></p><p>Multiple things sort of led to it. The original version was never published. The reason I don't publish all the things that I sort of hack on in my free time is because I feel like I can no longer put something on GitHub without having some sort of responsibility for it in one way or another. </p><p>I wrote it because I had a need to use multiple Python versions and I didn't like compiling them. I don't actually know what finally made me change my mind on publishing it. My best guess is that multiple things aligned. For one, there were people in the Python community raising money for Python tooling in one form or another. And so I felt like, ah, people are going to go and build a package manager or really a project manager/package manager kind of thing. And I just felt like, hey, since I already have it, let me polish this up and show what it could be and maybe somebody wants to build it. There is an article from someone who wrote if you don't have the desire to actually build something, just publish the idea. And so there was a little bit of that, let me just show you the idea of what it could be.</p><div><hr></div><p>To suggest a maintainer, write to Allison at allison@infield.ai.</p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Jeremy Smith]]></title><description><![CDATA[Keeping (Indie)Rails alive]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-jeremy-smith</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-jeremy-smith</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 05 Apr 2024 13:38:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/76add7a0-7717-48ec-8848-f5ad1f25b3c0_4000x6000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://twitter.com/jeremysmithco">Jeremy Smith</a>, co-host of the <a href="https://www.indierails.com">IndieRails</a> podcast, organizer of the BlueRidge Ruby conference, and enthusiastic member of the Ruby and Rails communities. </p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform that helps companies upgrade their open source software without breaking things. </p><p><strong>How did you get into programming?</strong></p><p>So I distinctly remember seeing my first website when I was a teenager, probably 1995-96, something like that. I had dial up access to my dad's university Internet service because he was getting his PhD, so he had it as part of his program. I remember dialing in and logging on to the university website. It was the first website I'd ever seen. And I was immediately like, in love. But I thought, I've got to learn how to do that. I have to learn how to make these. And I spent the rest of high school learning how to build websites.</p><p>Then I went to college, and I was actually in a systems analysis program which is like computer science without the electrical engineering. And I got my first D on a midterm in a data structures class, and I thought, I can't be a programmer. I don&#8217;t know how to do this. It was a lot of C++ and obscure problems that felt very foreign and different from the websites I was building. So I dropped out of that program.</p><p>I ended up backing into an interdisciplinary studies program which essentially let me make my own major, where I took some computer science, some writing, design, media production. That has been beneficial in some ways to me and not in others. </p><p><strong>How did you get that first job building websites for other people?</strong></p><p>It was the summer after I graduated, I don&#8217;t know really, I made contact with someone at the environmental, health and safety department. At the time, it was easier. If you were anyone who knew anything about computers, people would be like, yeah, we&#8217;ve got computer stuff for you to do. And it was all sort of lumped together under IT. Handling printers and setting up people&#8217;s desktops and building websites, it was all together. So I did that for a bit.</p><p>Then my wife and I got married, and my parents moved to south Florida. And my dad found this company that sold palm trees. It was totally Florida. He said they have an opening for a web developer. And so we moved down there and I worked for this company. Essentially they dealt with a certain kind of palm tree called a date palm. It&#8217;s like a nicer, higher end palm tree. And there was enough money in this for them to hire a few web developers to build out what&#8217;s essentially an app for landscapers and people to browse through the inventory of palm trees and select them. And then he would deliver them, install them and maintain them. So these really rich people on Palm Beach Island would go to this website and pick out 12 foot palm trees. And I designed the app and I also ended up doing a bunch of other design work for them, making trade show banners and things like that. I kept working for small companies for a long time, because I&#8217;ve always wanted a high level of ownership and being able to get into all the details of a thing.</p><p><strong>What was your first exposure to Rails?</strong></p><p>I think it was in 2008 or thereabouts. I was working for a small nonprofit and we were building applications in ASP Classic. And I knew that we had a lot of product development ahead of us and I needed to pick a new framework. And at that time I'd done a bunch of research and the ones I knew were Rails, Django, and I think it was CodeIgniter in PHP. That was from what I could tell the best PHP framework at the time. </p><p>And I evaluated them on a number of criteria, including sort of the look and feel, the framework itself, the number of libraries, how substantial the libraries were for each, how large the community was. But what especially impressed me about Rails was how large the community was in comparison to the others, how vocal they were, how many resources there were in comparison to the others. And so I knew that if I picked Rails, I felt really confident that I was going to have enough resources to tap into to help me whenever I got stuck. </p><p>Sometimes people call that a community of practice. The idea that it's not just for fun, it's not just for association, but people are on a journey of learning together sharing their practices. I think the programming world is like that in general, but even more so I felt that with Rails specifically, and still do.</p><p><strong>How has that feeling evolved over time?</strong></p><p>By 2015-2016, I was really getting worried about the Rails ecosystem. There was still plenty for me to learn from, but it was a feeling more like what's the longevity of this? I knew a bunch of people were leaving, or at least talking about leaving to go to Clojure. There was sort of a wave to Clojure and then a wave to Elixir. And that was a little nerve wracking for me, because I&#8217;m a more product focused developer. So I&#8217;m depending on the foundation underneath me to stay stable. And if I see that foundation shifting, it made me a bit nervous. </p><p><strong>We see this a lot in the Rails community, like the &#8220;Is Rails dead?&#8221; post every few months or so. What pulled you out of that feeling?</strong></p><p>Well during that period, one person that really helped me was <a href="https://github.com/jasoncharnes">Jason Charnes</a>. He didn&#8217;t help me directly, but the way he talked about Rails, the way he turned that &#8220;Rails is dead&#8221; into a joke and almost like, who cares? This is what I love. This is where I belong. I'm a ride or die here, you know. And then I got to a place in my life where my kids were getting older, and I actually had some discretionary time again. So I decided suddenly that I was going to start investing a lot more of my time into Ruby and Rails. </p><p>At this point I'm freelancing consulting, I'm completely invested in Rails. So it aligns really well with the work that I'm doing. I've learned so much from the Ruby and Rails community, I felt an obligation to do like something to help others to pay it back. And there was a sense of maybe looking around and thinking there was an opportunity to step into the community and take care of it. </p><p><strong>Is this what led to the Indie Rails podcast? </strong></p><p>Yeah. For a while, I had the idea that it&#8217;d be fun to do a podcast. And then on Twitter, my co-host <a href="https://twitter.com/bjessbrown">Jess Brown</a> reached out to me. He said, hey, I've got this IndieRails domain and I'm wondering what it could be. Maybe it should be like a mastermind group or something like that. And I was like, this should be a podcast. Definitely. He wasn&#8217;t so sure at first but that was a thing where I had always tried to do everything on my own, and I wasn&#8217;t great at collaborating. And I know if it wasn&#8217;t for Jess or Paul our editor, I wouldn&#8217;t have made it to a year. Knowing that someone has my back and has an expectation for me has been really, really valuable. It&#8217;s really opened my eyes to the fact that I probably should have done much more collaboration earlier in my life and I should look for more ways to do that in the future. </p><p><strong>Who has been a guest on your podcast or what kind of topic did you cover that you think back on as like, wow, this was so cool. I'm so glad I got to have this conversation.</strong></p><p>This is tough. This is tough to narrow down. There&#8217;s a quote that&#8217;s something like the impact that people have on other people is not so much who they are, but what they represent. Like, what does <a href="https://twitter.com/andycroll">Andy Croll </a>represent to me? What does <a href="https://twitter.com/allanbranch">Allan Branch</a> represent to me? We&#8217;ve got this diverse collection of people that are doing really interesting things in different ways. Whether it's going deep into building their own library, going deep into database performance, going to deep into building their own business with Rails or building community, all these different facets, but all together in this community.</p><p>When I was trying to organize BlueRidge Ruby last year, Andy was someone who gave me a lot of time and helped me think through a lot of the conference stuff. He was incredibly encouraging to me, and sent me a handwritten note beforehand saying &#8220;you&#8217;ve got this, you&#8217;re going to do great.&#8221; It was incredibly touching. And so Andy represents to me the kind of person I want to be in the Rails community. </p><p><strong>Who are some people you&#8217;re following right now that are doing something really interesting?</strong></p><p>One person is <a href="https://twitter.com/bhumi1102">Bhumi Shah</a>. She is doing a fantastic job of writing just deep, thoughtful pieces on Ruby, and I've learned a lot from her and her newsletter in the past year. Her newsletter <a href="http://buttondown.email/bhumi">One Ruby Question</a> is really good. </p><p><a href="https://twitter.com/_swanson?lang=en">Matt Swanson</a> is a pretty well known Rails dev and CTO of Arrows, and he writes a lot on Twitter. His blog <a href="https://boringrails.com">Boring Rails</a> is one of the best resources I've found for doing Rails in the style that I end up doing a lot with my client work, which is usually on small teams. I've learned a lot from Matt.</p><p>There's a guy that people aren't talking about enough who I think is doing an amazing job of writing deep dives in Rails right now, his name is <a href="https://twitter.com/akshaymohite31">Akshay Mohite</a>. He&#8217;s very consistent and his writing on some Rails topics is fantastic.</p><p>The last person who's very well known is <a href="https://twitter.com/palkan_tula">Vladimir Dementyev</a>. He works for Evil Martians. He's a prolific open source contributor, writes a lot of Ruby gems, is the maintainer of AnyCable, and his book <a href="https://www.packtpub.com/product/layered-design-for-ruby-on-rails-applications/9781801813785">Layered Design for Ruby on Rails</a> is my favorite Rails book at this point. That'd be my top recommendation for people getting started learning Rails.</p><div><hr></div><p>To suggest a maintainer, write to Allison at allison@infield.ai. </p><p>To learn more about keeping your open source software up to date using Infield, write to us at founders@infield.ai. </p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Ralf Gommers]]></title><description><![CDATA[On the release of NumPy 2.0]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-ralf-gommers</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-ralf-gommers</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 15 Mar 2024 13:58:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6da526dd-217a-4c2b-a329-95a4d9dd2d0c_3984x2656.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where we interview open source maintainers and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/rgommers">Ralf Gommers</a>, Co-Director of <a href="https://labs.quansight.org">Quansight Labs</a> and leading contributor to <a href="https://numpy.org">NumPy</a>, the fundamental package for scientific computing in Python, as well as <a href="https://scipy.org">SciPy</a>, <a href="https://pypi.org/project/meson-python/">meson-python</a>, and the <a href="https://data-apis.org/array-api/latest/">Array API Standard</a>. NumPy published the first pre-release version of their upcoming 2.0 release in public beta this week. This is the first new major version of NumPy in 16 years.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades. Ralf spoke to us from Norway.</p><p><strong>How did you get into software engineering?</strong></p><p>To begin, I trained as an experimental physicist. During my degree I had one course in Pascal and that was about it. So really I'm self-taught from doing research, learning Python for data analysis, MATLAB first and then labVIEW and C for writing control code for experiments, things like that. When I started my PhD I decided you know, I have three or four years, I&#8217;m going to do it right and go straight for everything open source.</p><p>So I started with Linux and Vim and Python all at the same time, and I had a very rough month. This was before NumPy existed. I had to join the mailing lists to figure out what was going on, because nothing worked with each other. It was very immature at that point, zero documentation. So I just stayed subscribed and I kind of gradually figured out how this whole open source thing worked. And then after a few years when I was actually a decent programmer and had a few things of my own to share, I had a break after my PhD and I thought why not try and get started on this? I started with smaller contributions, some documentation, some features that I contributed to scikit-image. And at that point the release manager of NumPy quit. He wrote to the mailing list like, I'm sorry, I'm too busy, I quit, does anyone want a job? And for five days nobody wanted it. </p><p>This was early 2010. NumPy was also very infrequently released at that point. So after five days I'm like, well, I don't really know what I'm doing, but you know, if nobody else wants to do it, I'll give it a try. And then I had to do things like, you know, build Windows binaries for releases on Linux via Wine with undocumented scripts. The whole thing was a big learning experience. But, you know, it remained interesting and it's a very friendly community. So I stayed. And then after six months the guy came back and he's like, well, what about SciPy? I did SciPy too. Are you going to do SciPy? And I said ok, I'll do SciPy too. And I've been one of the leads for NumPy and SciPy since then.</p><p>In my experience, people who become an open source maintainer, especially of a large, widely used project, they have a certain mindset and they don't mind doing the dirty work. They like helping others and hopefully they learn something and have some fun in the process. But they tend to be the people that don't like saying no and they like to be helpful. It works like that for me too.</p><p><strong>How much time per week or per month did you devote to these projects?</strong></p><p>I'd say I spent 10 years doing it as a volunteer, and probably spent, I don't know, 10 to 15 hours a week on average outside of a pretty busy job. And then in 2019, it got to the point where AI had really taken off. And SciPy was big when I started, but that was hundreds of thousands of users, and now it's 20 million. It got to the point that it was really not doable as a volunteer in the evenings. I'm either going to make it my job or at some point I&#8217;m going to quit.</p><p>So at that point I went to the SciPy conference for the first time and I met <a href="https://github.com/teoliphant">Travis Oliphant</a>, was the original author of NumPy. I knew him reasonably well. But when we talked in person, he said I'm just starting a new company, what do you think about joining me? It's a consulting company where 3/4 is consulting around the PyData space and then 1/4 is the labs department, which is directly contributing back and employing maintainers. So I started leading <a href="https://labs.quansight.org">Quansight Labs</a>, and half of my time is basically management, getting funding, being on some projects, and the other half I still get to contribute, but now it's part of my job.</p><p><strong>Can you speak to the differences in the way that the academic or government world uses open source software versus the commercial side? This seems to come up a lot in the Python ecosystem especially, curious about your take on it.</strong></p><p>That's a good question. So, industry is a very broad term. I think one thing you have in academia is that everything is custom. It wasn&#8217;t take a thing in pandas, run a scikit-learning thing over it, and then I'm done. It was really thinking about data structures and what you want to do and building your own code usually from the ground up. But academia is usually something you do by yourself or in a small group.</p><p>There&#8217;s also not just how people use the project but also how they interact with open source. I often hear that there's an overrepresentation of academia and smaller individual users, hobbyists. What we find is people in industry who have large deployments and things like that, they never really show. They come and maybe talk to me now because I'm working in a consulting company. But they have the type of request that you never see on an open source project issue tracker. It's more like this whole module is wrong or you know, we've we've already rewritten it and we found that everything here in your project is suboptimal. And you can end up with months or even years worth of work. </p><p><strong>How do you think about that for such a long running project? Stability versus you know, maybe I would go back and change some things about how this works?</strong></p><p>Yeah. I think that the lower you go into the stack, the more stable it has to be by necessity. You have more users and every change has more impact. For NumPy specifically, there was an extra constraint in that NumPy isn&#8217;t only a Python package, but it has a very large C API, and so everything is kind of built on top and all the binaries depend on each other. </p><p>So actually right now, over the coming weeks, we&#8217;re splitting off NumPy 2.0 and doing the first release candidates, and that's the first time in 16 years that we&#8217;re breaking API compatibility. The effort to keep that for 16 years, including all the things we don't really want and exposing too many internals that we don't want people to use and all that kind of stuff, it's just the cost we've had to pay. I've been a co-author on some of the proposal documents, we call them NumPy Enhancement Proposals. And there's also now a SciPy version of that where we define support windows for a set of Python versions and NumPy versions and some of the other key libraries. </p><p><strong>How does that work on the research side? If someone wrote a paper 15 years ago with some NumPy code, should someone else be able to run that code now?</strong></p><p>I would say no. It's really hard to get people to create environments where they know what versions they used to begin with. But I think that's the only correct way of doing it. We try to be careful to make sure that if something used to work, and now it gives an error, that's a lot better than if it used to work and now it still works but it gives you a different answer. But you can't keep stability at the individual API level for that long.</p><p>Other than that, I think in industry what does happen a lot is that they deploy applications and they use a certain Python version, certain NumPy version, the environment gets frozen and then it has to run for five years or something like that. In extreme cases, maybe even ten years, but that's not really relevant to the development of the project because they know how to lock their environment and it's actually not changing. So it doesn't matter if you release new versions.</p><p><strong>With the release of 2.0, what do you see as the focus? What&#8217;s the direction you&#8217;re taking the package?</strong></p><p>Roadmaps in open source are really challenging, especially in such a diverse project. You have the people who really care about static typing, or people who care about performance, usability, etc.</p><p>From my perspective, it was an opportunity to really rethink what the Python API looks like because that's still what 99% of our users use. And I think the big change that we're landing there is that first of all, we made it smaller and easier to understand, introducing a very clear split between what's public and private.</p><p>The other big change that I've been working on for a few years is to introduce the Python Array API standard, which basically is like the core 150 functions or so that make up an array library and now all the changes that made it hard for the NumPy API to run on GPU for example, have now been fixed. And they were fixed by the design of that standard. So with my SciPy maintainer hat on, NumPy is never going to run on GPU, right? But there's also <a href="https://pytorch.org">PyTorch</a>, there's <a href="https://jax.readthedocs.io/en/latest/index.html">JAX</a>, there's all these libraries that are newer and way faster and I want SciPy and higher level libraries to make it as easy as possible to run on GPU or to use PyTorch or Jax's automatic differentiation and things like that. For me that&#8217;s probably going to continue to be the main theme for the next few years.</p><div><hr></div><p>To suggest a maintainer, write to Allison at <a href="mailto: allison@infield.ai">allison@infield.ai</a>.</p><p>To learn more about keeping your open source software up to date using Infield, write to <a href="mailto: hello@infield.ai">hello@infield.ai</a>.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: David Wobrock]]></title><description><![CDATA[Diving into Django]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-david-wobrock</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-david-wobrock</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Tue, 20 Feb 2024 15:38:22 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2f1abfeb-52b4-4b81-ab35-f414f76806cf_5184x3456.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where each week we interview an open source maintainer and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/David-Wobrock">David Wobrock</a>, a Senior Software Engineer at <a href="https://www.backmarket.com/en-us">Back Market</a>. David is a maintainer of the Python framework <a href="https://github.com/django/django">Django</a> and a contributor to many projects in the Python ecosystem. He lives in Berlin.</p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades.</p><p><strong>How did you get into programming?</strong></p><p>How far should back should we go? My parents are both university professors, and they do research on meteorology. So they always had computers around to do cloud modeling and stuff. My brother and I always wanted to play around, to tinker, to try things out. I remember that they installed games on the computer that we had when I was a child, and they wrote the commands to type in the terminal in order to launch the games on Post-It notes. I had no idea what it meant, but I just typed these characters and it worked. I always had computers near me.</p><p>When I started studying at university, I really fell in love with the entire field, both the theoretical aspects, the mathematical parts like linear algebra for databases and also the technical parts.</p><p><strong>And have you always worked as a software developer since you graduated from university?</strong></p><p>Yeah, I have. I tried the academic path of doing a master thesis researching how development and computer science applied to different fields, but it didn&#8217;t stick. I think I like the private sector where you have a bit more impact on the day-to-day life of people through software. But yeah, I've always been a software engineer.</p><p><strong>How did you first get into open source?</strong></p><p>I started at university a little bit. My first contributions were during my studies when I was very C# focused.  I think a professor taught us that, so it's stuck with me. And I remember my first major feature, something that was not a typo or a link or whatever, my first major contribution was a Python plugin in Visual Studio - not Visual Studio Code, the big IDE Visual Studio. I don't know why I was writing Python in Visual Studio. What came upon me was like hmm, this integration is not working as I expected, I would like some auto completion features that I don't have, and so I contributed to that.</p><p>I&#8217;ve always admired open source maintainers. Those people were both incredibly smart, being able to write software that's used by hundreds, even thousands, millions of people and putting your work out there saying, OK, I think it works. I really admire the dedication, to spend some of your free time to give back to the community, to say hey look, I did this on my free time maybe it can be helpful to someone. They&#8217;re sort of a role model for me.</p><p><strong>How did you get involved in Django specifically?</strong></p><p>At university, we had to do some group projects where we could freely choose the technology that we used. And Python was the language to learn, right? That's where the industry was going for most jobs. So me and my fellow students, we thought OK, we have to learn Python. We want to make a web server. What can we use? The first Google search basically popped out Django. FastAPI didn't exist at the time, and Flask was less batteries included. So we were like well, everyone recommends Django, let's try it out. </p><p>Then when I started looking for jobs, I didn't specifically look for Django jobs, but they were what I qualified for. So I applied and I got one of those. And then, the more you play with the framework, the more you know the internals a little bit. You start diving into the source code. You start finding bugs. Sometimes we're like, that shouldn't work like this. Why doesn't it work like this? Then you're like, OK, I think I can add that. And then you think, hey, there&#8217;s no issue open, let's give it a try. That's how I got into Django - step by step let's say.</p><p><strong>Is there a Django core team? How does the maintenance work?</strong></p><p>So there are two fellows who are paid to maintain Django who accept contributions, triage tickets, they do a ton of things. Coding is probably a very small part of that job. And then there's the <a href="https://www.djangoproject.com/foundation/">Django Software Foundation</a> with the board that handles the finances. Then there's a technical board making technical decisions, and a security board that handles critical issues or security issues that could be in the framework. So it's quite a big organization in the end. I&#8217;m a tiny person in all of this.</p><p><strong>How would you describe working with those people and working on Django versus how you do your work in your day job?</strong></p><p>It&#8217;s very different in a way, because there are so many different interests at stake. The contributor wants their change merged, right? The maintainer wants the software to make sense, to answer the specific problem it was designed for. In Django, since it's batteries included, there are many people who want to add things that could be third party packages and they say hey, it's going to be even more batteries, but there's a limit to that. So there&#8217;s an interesting discussion of what should be inside the framework and what should be a third party package. These types of discussions are very interesting. </p><p>But in your company, you're all focused basically on making money for your company or pleasing your customers which is still working towards the same goal. Open source tends to take more time of course because it&#8217;s people&#8217;s free time. In a work environment things take a day, half a day because you can sit together, pair program and say let's do this together. You might have Slack or Microsoft Teams. In open source there is a back and forth and everything is much more asynchronous. For an open technical question or a new feature we&#8217;ll say let's ask the technical board. We'll give them maybe two weeks to discuss and come back with a solution or a suggestion. The communication is quite different. It&#8217;s also more relaxed in a way.</p><p><strong>How do you dive into a code base that somebody else has written and many people have contributed to over the many years?</strong></p><p>Talking to a person will always be ideal. I think that's the easiest way. But, you know, open source projects that are 10 or 15 years old or even older, it's going to be hard to find the contributor. What do I do? I probably dive into the code and try to understand who calls what. And then have a little notebook where I write things down and draw these big diagrams of arrows and boxes in all directions, but I can start making sense of it. And then it's really about trying out something. Maybe having a break point somewhere, or at the unit test launch it and see what are the code paths that you got into.</p><p><strong>If you think back to when you first got into open source, to now feeling comfortable unraveling a large, established project - how do you get comfortable doing that?</strong></p><p>Debugging skills are definitely useful there. The more you&#8217;ve had some weird, hairy bugs, the more you understand how to follow your stack trace and understand where you're going. I&#8217;m not sure it has to do with seniority. It's just getting comfortable with the code base. Once you understand the models, the different files, modules that are in the code base, it's basically just experience in this code base. When you start fixing a bug that affects one function and one file, that's one thing, right? You can write tests, you can test your function, it works. That's a really good start. And from there you start doing changes that imply two files, maybe two models that work together, and then step by step it's getting bigger and bigger.</p><p><strong>Are there any other open source projects that you've been into lately that you think are really interesting?</strong></p><p>There are many, many interesting people and interesting projects. Honestly, everyone in the Django community, it's amazing how they work, how efficient they are, how on point. Every review is always inspiring.</p><p>In the Python community there is <a href="https://github.com/astral-sh/ruff">Ruff</a>, a linter and formatter. It's mind blowing how fast they had adoption on their tool and it's written in Rust, so it's faster than all the others. It solves a problem that you didn't know was there, and suddenly everyone wants to use it and it's amazing how fast adoption grew. It's a great project.</p><p>Personally I'd like to dive a little bit into the <a href="https://www.postgresql.org">PostgreSQL</a> community. Maintaining an open source database sounds really interesting. It's such a massive project that the governance around it must be quite interesting, and I&#8217;d love to get a better sense of how they do it.</p><div><hr></div><p>To suggest a maintainer, write to Allison at <a href="mailto: allison@infield.ai">allison@infield.ai</a>.</p><p>If you&#8217;re interested in learning more about how Infield can help your team keep its open source dependencies up to date, write to <a href="mailto: hello@infield.ai">hello@infield.ai</a>.</p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Will McGugan]]></title><description><![CDATA[How an open source project and love for the terminal resulted in Textualize]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-will-mcgugan</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-will-mcgugan</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 09 Feb 2024 14:24:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0c491de8-ec6d-4dfc-8e8c-656db8b60106_1988x2228.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where each week we interview an open source maintainer and tell their story.</p><p>This week we&#8217;re talking to <a href="https://github.com/willmcgugan">Will McGugan</a>, founder of <a href="https://www.textualize.io">Textualize</a> and creator of <a href="https://github.com/Textualize/rich">rich</a>, <a href="https://github.com/Textualize/textual">textual</a>, and <a href="https://github.com/PyFilesystem/pyfilesystem2">pyfilesystem2</a>. Will is based in Edinburgh and primarily works in Python. </p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades.</p><p><strong>How did you get into programming?</strong></p><p>My first exposure to computers was way back in the 80&#8217;s when my mother bought me a <a href="https://en.wikipedia.org/wiki/ZX_Spectrum">ZX Spectrum</a> 48K. It was like a little home computer back in those days, and that was it. I was kind of hooked. I think I was nine or something. And yeah, I just discovered an aptitude for computers and a desire to tinker. I studied computer science at uni, but I dropped out after two years and got a job making video games because that was kind of my end goal.</p><p>I worked for a few games companies in Scotland. Two of them went bust, so tragically the games never got released. I worked for Evolution Studios, they make PlayStation games. I was working on PlayStation 3 games, like one of the first PS3 games, MotorStorm. So yeah, I've worked on varieties of bits of games and that just led to a career down the line.</p><p><strong>Did you teach yourself graphics programming? How did you learn to work on games?</strong></p><p>Yeah, I used to learn from books which we don&#8217;t see much nowadays. I had stacks and stacks of books on graphics technology and video games and I just devoured them. That&#8217;s basically how I learned.</p><p><strong>Did you have any kind of community around you in doing this?</strong></p><p>There wasn't really, because I grew up in a small town in northeast Scotland, and we all had computers, ZX Spectrums, Commodores, etc. and most people just used them to play games. So it was not much of a community. Later on I started subscribing to magazines where you'd get a floppy disk and it would have kind of like a website type thing and some other game demos and you could send your work there and it would be distributed amongst other people in in the UK, but that was pre-Internet. So I didn't actually meet anyone in that community.</p><p><strong>How did you eventually find your way into the open source community?</strong></p><p>Open source was a natural progression of the kind of things I was working on. You know, I'd build things and when the Internet came about, it felt natural to want to share your work. So I guess that was open source before I'd even heard the term open source. I used to put my code on my website. This was before GitHub and Google Code. And then Google Code came along and I put my work there and it started being used by a number of people, and you start to get feedback. So that&#8217;s how I got into open source, sharing my work and using the work of others.</p><p><strong>Are there any projects that you remember from that time using and thinking, oh this is really amplifying what I can do by many times. Does anything stick out in your mind from that time?</strong></p><p>Yeah, there were some libraries I used a lot. There's a library called <a href="https://www.wxwidgets.org">wxWidgets</a>. It's a cross-platform GUI library, so you could write something which worked on Mac and Windows and Linux. And there's quite a big community around that, people building various widgets and things and they would share them. And there was also a Python wrapper for that called <a href="https://wxpython.org/index.html">wxPython</a>. I used that quite extensively.</p><p><strong>So what led to eventually creating your own open source project? I mean, it sounds like you were building things all along, but what made you take the leap?</strong> </p><p>Yeah, it kind of ramped up over the years. I put several libraries out there, first on Google Code and then on GitHub and then some of them started to get traction. It went crazy when I published <a href="https://github.com/Textualize/rich">rich</a>. Rich is a Python library for nice formatting in the terminal, and there seemed to be a real need for that. When I released that, it just became massively popular, it just kind of took off in the Python community and now everyone's using it. So that's how I became well known in a very certain kind of niche.</p><p>There were lots of libraries out there which did part of what rich does, but they didn't work well together. So if you had say a library that does tables, and a library that does wrapped text, you couldn't put the wrapped text inside the table. And I really wanted to do that. So I built a system where it was composable and you could combine these things together. Nothing else did that at the time. Maybe you could trace it back to being in my small, small town and having no one to share these things with growing up, but that was definitely part of my motivation.</p><p><strong>How did rich end up resulting in Textualize?</strong></p><p>Yeah, so it was just over four years ago, actually. This was just before the pandemic, like literally a couple of months. And I was actually in Wuhan at the time because my wife&#8217;s family is there. So really crazy timing.</p><p>So I was working on rich, which is basically static content in the terminal, but people were starting to want to build applications with it. And I resisted for a while because, you know, I wanted to reclaim some spare time. But then I saw what people were building with it and they were actually attempting more full screen applications, and I thought, wow. This is so much more promising compared to libraries we used to use.</p><p><strong>Is this like <a href="https://docs.python.org/3/howto/curses.html">curses</a>?</strong></p><p>It's exactly like that. Curses was how people wrote these libraries. But they haven't moved on much since the 90&#8217;s.</p><p>It&#8217;s very hard to use. You have to be very motivated to build things with it. And I experimented with Textualize to see if I could build some kind of application library which did a better job. And I proved to myself after a few months that yeah, it can be a lot easier. And that was how it started.</p><p>So the idea is we built this application platform which people can build these libraries very quickly, faster than web apps, and you can distribute them in the terminal, but you can also turn them into web apps if you&#8217;d like. That&#8217;s what Textualize is based on.</p><p><strong>How do you manage that human side of the community that you've built?</strong></p><p>It is a lot of work. It's mostly asynchronous. In the Textualize team, we've got four developers, but there's lots of contributors and lots of people posting issues, so we try to respond. To those people, a lot of it is misunderstanding the docs, and we just point them in the right direction, but that kind of interaction is very important. </p><p>What we're working on at the moment is what you might describe as issue-based development. The issues can tell you where people are having trouble with your API, so you can focus your efforts there and refine it. It can also tell you what features they're missing, so you can build those features. And it means that you're always just ahead of what people need it for. So you can build the things that people need now rather than build the things people need in a year or two. </p><p>I think that's the strength of open source. If it's closed source, you don't have as many eyes on the code and you can't refine it as well because you've only got a handful of people looking at it for a year. When you release it, that's when you get feedback. But with open source, you get that feedback from the community and you know straight away.</p><p><strong>Have there been any contributions from the community that just struck you as interesting or impressed you?</strong></p><p>Yeah, with something that runs in the terminal you&#8217;d think that you&#8217;d do particularly terminal things, but not always. We had someone build a piano emulator in Textual. I've never thought someone would build that in the terminal, but it's quite cool. They've got all the keys and everything and you can click each one and it plays the MIDI music. It&#8217;s fun watching creative people take what you&#8217;ve built and do something really for themselves.</p><p><strong>What are some other projects that you're using or you've come across that you think are really interesting right now?</strong></p><p>There's <a href="https://github.com/pydantic/pydantic?tab=readme-ov-file">pydantic</a>, which got funded recently, that&#8217;s quite an interesting project. It's a data validation library that uses Python typing, so it's very easy to express in Python form. It's very natural. </p><p>There's also a project called <a href="https://www.mkdocs.org">MkDocs</a> that's really excellent. It basically builds docs and it can extract signatures in your code and it looks really nice. It's very navigable. That's a really terrific project and he's doing amazing work.</p><div><hr></div><p>To suggest a maintainer, write to Allison at <a href="mailto: allison@infield.ai">allison@infield.ai</a>.</p><p>If you&#8217;re interested in learning more about how Infield can help your team keep its open source dependencies up to date, write to <a href="mailto: hello@infield.ai">hello@infield.ai</a>.</p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Stephen Ierodiaconou]]></title><description><![CDATA[An electrical engineer who came to open source for the community]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-stephen-ierodiaconou</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-stephen-ierodiaconou</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 02 Feb 2024 14:49:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/96c30382-0768-4713-b918-03852f80b242_6016x4016.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where each week we interview an open source maintainer and tell their story. </p><p>This week we&#8217;re talking to <a href="https://github.com/stevegeek">Stephen Ierodiaconou</a>, a freelance Ruby and JavaScript developer who has created several recent Ruby gems like <a href="https://github.com/stevegeek/vident">vident</a> and <a href="https://github.com/stevegeek/typed_operation">typed_operation</a>. </p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades.</p><p><strong>How did you get into programming?</strong></p><p>I started out interested in electronics. I was building small circuits and stuff like that. At some point, me and some friends, we started going to the IT department computers, which back then were either DOS or Windows 95 and basically started messing around in QBasic. I mean initially we're just like building stuff with you know <code>print</code> and choose your own adventure text-based games, right? But then we started getting some PC list magazines with listings at the back, copying those and it got us more interested in micro controllers and programming them so one thing sort of led to another. </p><p>By the time I was in my late teens, I got more into software, and I progressed through VisualBasic, a bit of C and C++. And of course I wanted to build a game. That kind of got me hooked and I got quite interested in the mix of hardware and software, CPU design and stuff like that. I even designed a tiny 4 bit CPU which was a bit rubbish, but it was interesting.</p><p><strong>Was this an interest of your parents, or do you know where this interest came from at such an early age?</strong></p><p>When I was in my early teens I was given one of those little science kits for kids. And to be honest, it's very simple. You just throw some wires together on some circuits that are already there. But the experience of actually seeing something working, it's magical. And then the combination with software was that it suddenly became so much more malleable, right? Because you build your circuit, that's fine. I see that there's a timer, it makes an LED flash fine, but there's not much more you can do with it until you start building another circuit. But with software, suddenly you can completely change what you were doing. And that means that the experience becomes so much more engaging.</p><p>When I went to university I decided to study electrical engineering because I still was really interested in electronics and I wanted to kind of stay in that realm. I elected to do a lot of the units that were sort of computer architecture, VLSI, microelectronics and that sort of thing. And then I went into academia and studied signal processing. But I never formally studied computer science.</p><p><strong>Did you have any friends locally or community locally that you were talking through those problems with? Or were you using the Internet to share with anyone?</strong></p><p>No, initially it was just me in a bubble. Well, I had one friend in school who was interested in the same stuff making little games and things. But I think actually the first thing that pushed me into open source was the fact that I didn't really have anybody else to work with on things, and I wanted to. I discovered that you could just go on SourceForge or the other alternative at the time and find like a million projects. And that really inspired me into actually taking those steps because I needed to have somebody else to learn off, right? I was essentially teaching myself through some books and the Internet. </p><p><strong>Do you remember any open source projects at the time that you learned from?</strong></p><p>One of the first projects where I saw a contribution opportunity and became part of the community was a project called <a href="https://github.com/arianne/stendhal">Stendhal</a>, it's a game written in Java. At the time, I didn't know any Java, so I didn't really know how I could contribute with code, but I joined the IRC channel. I just sort of chatted to people and eventually I realized that, you know, I could help with drawing up maps for the game world. I could triage tickets. So I was helping triage bug tickets and stuff on SourceForge, write documentation, proofread stuff, whatever. And I realized there were a lot of different ways that I could help out that wasn&#8217;t writing code. In fact, I don't think I ever wrote code for that project. But it was fun and I felt like part of the group and made friends.</p><p><strong>It sounds like open source and the open source community was really part of your journey to being a professional software developer, where a lot of people come at it from the other direction. They go into some company, and maybe a mentor or someone at the company says, hey, we use open source, and they start contributing. And your story is instead this very organic kind of thing where open source has just been part of your blood for a very long time. So that's really interesting.</strong></p><p>That was definitely part of it, looking for a community of people as well as working on problems I found interesting. I did go off the open source radar for a long time after I got a real job, which is not uncommon. My first full time job after academia was in startups and it was really startup style working late nights and everything. And with a long stint of years without contributing it really knocks you out of the space. If you have no cadence at all, if you don't try to at least do something every now and then, it  feels like it's going to be way too hard to get back into it again. And that's what happened to me.</p><p>Really last year kicked it off again for me. I really like reading other people&#8217;s code and investigating issues and things like that. And being a freelancer, which I&#8217;ve been for a while now, I thought it would also be a great way to show off your work. It&#8217;s sort of like an online CV. As Hacktoberfest was coming up I saw a tweet or something where Richard Schneeman talked about his new book which is called <a href="https://howtoopensource.dev">How to Open Source</a>. And I just thought, well, sounds perfect, I'll just get that. And it turned out to be great. It really helped me get back into it.</p><p>He has this framework to apply that he calls COIL. And I really took it word for word and applied it to a few projects during Hacktoberfest, to find an opportunity to contribute, to actually do the contribution, to get it merged. And that got the ball rolling for me again. I had a goal in my head as well, which was to try and get a contribution into Ruby the programming language itself, which I managed to do by the end of that year. So anyway, big thanks for Richard for his book.</p><p><strong>I was going to ask, where does Ruby come into this? Because it didn't sound like you were programming in Ruby, you know, 10 years ago.</strong></p><p>Yeah no, fair enough. My entry into the Ruby world came just because I got a job where they were built on Ruby. I&#8217;d never really seen or used Ruby or Rails before. And I think in the beginning it was a little bit of a love/hate relationship. My previous job was working with JavaScript and the server side, so it was kind of like jumping into a different realm.</p><p>When I went back to freelancing after that job, I actually went back to JavaScript and I worked for a while doing TypeScript. But then a project came up that was Ruby again and I took it and I don't know what happened it clicked for me this time, something I can&#8217;t quite put my finger on. I guess in a way Ruby as a programming language is designed with this in mind, right? It's to try and make you as a developer feel something about it that is nice to work with, productive, and makes you feel happy, right? Since then I've only been writing Ruby basically. I like the community as well. And I thought, you know, why don't I just dedicate myself to this only from now on?</p><p><strong>How do you think about the community for your own gems that you put out there?</strong></p><p>Well to be honest my projects don&#8217;t have contributions from the community, they're just very small projects that I've released myself in the last year. But I would love to get more people involved simply because it&#8217;s fun to bounce ideas off of other people and talk about problems.</p><p>One thing I&#8217;ve found about making your own gems is that you can take an application that you&#8217;ve already written, take a piece of the code, and make a gem out of it. Essentially you've already built something, you've already got code there, and as long as of course in my case I get permission from the client or whatever, but extracting a piece of code from an existing application and turning it into a gem is very easy because it's already written. That&#8217;s what I did. I sort of just threw them out into the wild. And once you do that you get inspired to improve it, partly because there&#8217;s this imposter syndrome which comes when you put something on the Internet and you know people can read it. </p><p><strong>Who are some other people in the community you think are doing really interesting work?</strong></p><p>One of the things I&#8217;ve enjoyed recently is <a href="https://github.com/joeldrapper">Joel Drapper</a>, the maintainer of <a href="https://www.phlex.fun">Phlex</a>, he&#8217;s been working on some gems that he&#8217;s experimenting with all the time, trying out new things and iterating on them. He&#8217;s got a Discord and it&#8217;s nice to chat with other people on it. </p><p>Also <a href="https://github.com/maximecb">Maxime Chevalier-Boisvert</a> and the whole <a href="https://github.com/Shopify/yjit">YJIT</a> team is doing some really amazing stuff. I think what they're doing is really cool because they're actually technically implementing a complex system inside Ruby, improving Ruby for the whole of the community.</p><p>The other project I&#8217;ve been interested in recently is <a href="https://github.com/marcoroth">Marco Roth</a>&#8217;s <a href="https://github.com/marcoroth/type_fusion">TypeFusion project</a>, which is basically sort of runtime type analysis. Or rather just gathering types at runtime from a running application about say a particular gem or piece of code and then pushing it up to gem.sh such that you're gathering statistics about the types that are being used in a particular gem. And from there you could, you know, generate RBS files, which I think is really interesting because one of the big problems of adoption for something like RBS is obviously having to write the RBS in the first place. So I think it's a really cool idea.</p><div><hr></div><p>To suggest a maintainer, write to Allison at <a href="mailto: allison@infield.ai">allison@infield.ai</a>.</p><p>If you&#8217;re interested in learning more about how Infield can help your team keep its open source dependencies up to date, write to <a href="mailto: hello@infield.ai">hello@infield.ai</a>.</p>]]></content:encoded></item><item><title><![CDATA[Once a Maintainer: Robert Mosolgo]]></title><description><![CDATA[Linguist by background and creator of graphQL-ruby]]></description><link>https://onceamaintainer.substack.com/p/once-a-maintainer-robert-mosolgo</link><guid isPermaLink="false">https://onceamaintainer.substack.com/p/once-a-maintainer-robert-mosolgo</guid><dc:creator><![CDATA[Allison Pike]]></dc:creator><pubDate>Fri, 26 Jan 2024 14:31:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/782ad99f-1b03-4258-8517-54fbba573ba0_5184x3456.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Once a Maintainer, where each week we interview an open source maintainer and tell their story. We&#8217;re back with a great lineup for 2024!</p><p>This week we&#8217;re talking to <a href="https://github.com/rmosolgo">Robert Mosolgo</a>, creator of the <a href="https://github.com/rmosolgo/graphql-ruby">graphql-ruby gem</a> and prolific open source maintainer, linguist, and dairy farmer. Robert is a former Senior Platform Engineer at Github and was the first maintainer of the <a href="https://github.com/reactjs/react-rails">react-rails gem</a> outside of Facebook (now Meta). </p><p>Once a Maintainer is written by the team at <a href="http://www.infield.ai">Infield</a>, a platform for managing open source dependency upgrades.</p><p><strong>How did you become a software developer?</strong></p><p>I think it starts in like 10th grade with my TI-83 calculator. When I realized that I could create games using the digits and numerals. You know I read somewhere recently that in the past, I think it was in a military prison - people would teach each other languages, passing strings with knots tied in them. It's like, man, when you're in 10th grade science class and you have nothing else to do, programming your calculator seems like a great idea.</p><p>I didn't code at all in college. I studied Chinese and linguistics, but I graduated and none of my job plans panned out, so I ended up kind of pushing papers in a professor's office, working on research projects with him. And that's when the opportunity to start writing code again came up as I was smashing CSVs together and learning about relational databases. A buddy of mine said you would really love Ruby on Rails, you should really look it up. And I told him no. And he suggested it again. And I told him no again.</p><p><strong>Why did you say no?</strong></p><p>Because I had a thousand line php file that was doing a great job. Why would I learn something else?</p><p><strong>Right.<br><br></strong>But by the end of six months or something, I knew that I just wanted to write Ruby all the time. So I ended up switching jobs just to write code and and that was that.</p><p><strong>What time period was this?</strong></p><p>Oh, probably 2010-2011. I did Michael Hartl&#8217;s <a href="https://www.railstutorial.org">Rails Tutorial</a> that had just been updated for Rails 3, and I think in the Rails 2 to Rails 3 shift ERB and Rails became one and the same and so there was like a gathering of momentum. I still think his tutorial is great.</p><p><strong>Awesome. So what was the first job that you got?</strong></p><p>The company is called <a href="https://www.planningcenter.com">Planning Center</a>, and the short description is enterprise software for churches. So if you're scheduling musicians for Sunday church services and you need a bass player, a drummer, three singers and somebody to shake a tambourine, and you've got 20 volunteers, but you can't schedule so and so at the same time as so and so, and you can't schedule [this person] on the same Sunday that they're doing the sound board and you put all these rules in and it gives you a schedule, sends everybody emails. That was that. Now it does a lot more. Every year that passes I realize more and more what an amazing company it was and the owner, also the head developer there was just doing great work and it was a magical time for sure.</p><p><strong>Wow. So transitioning from the professional side to your open source work, or maybe they&#8217;re related for you</strong> <strong>- how did you first get exposed to open source software, not just as a consumer, but as a contributor?</strong></p><p>In that job at Planning Center, we used JavaScript, and the JavaScript framework wars were just ending as React stomped everything else out. We had one guy who was still going for <a href="https://emberjs.com">Ember.js</a>, but we went through a company-wide project replacing everything with React. And there was a React-Rails gem at the time that I think had been put together by someone in Facebook just so they could say there is a Rails integration, but it it wasn't Rails-native. It was just someone&#8217;s job to say there was a Rails integration. So I was young and energetic and we started using that gem a lot, and it was almost like a coup. I just started answering unanswered questions on the issues and submitting patches for bugs that were reported. The guy was like, I guess I should just let you take this over now? Could you? And I was like, sure, thank you.</p><p><strong>That's really interesting, because a bunch of the people that we've interviewed have said that it was really intimidating to even dip their toe into contributing. What gave you the confidence to participate in the conversation?</strong></p><p>I was young. That was a good confidence builder. And, now that I think back there was a first stop. So the JavaScript framework that our company was using at the time was called Batman.JS. It was from Shopify. There are no traces of it on the Internet anymore, but it became clear by the time that I joined Planning Center that Shopify was not actually using Batman.JS, that they were not answering questions. But we had made a big company investment in it and so, looking for a way to make my mark on the company, I devoted myself to becoming the Batman.JS expert in house. And I think at a certain point I was the worldwide Batman.JS expert. So I became the expert in a dead open source project.</p><p>But I did learn a ton because it was this full stack front end framework in the sense that it had a router and models and a network layer and views, etc. It was a great learning experience.</p><p><strong>So how did you get into GraphQL?</strong></p><p>Planning Center sent us to conferences, and they sent us to the first ReactConf at Facebook headquarters. And gosh, we were so eager to go to that conference that we - this is a long story. </p><p>They were selling tickets through some kind of ticketing website that we'd never heard of, and we realized that they weren't selling tickets until you know, 9 am on such and such a day. But we realized it was just a client side implementation to keeping you from submitting the form, and we were like, I think if you just open the console and submit the form it will go through. So we did that. We paid for our tickets, but we got in before it was actually open. </p><p>There were a lot of interesting ideas at that conference. But at some point during one of the intermissions, they get up and say &#8220;Is Robert Mosolgo here? Would you stand up for a minute?&#8221; They caught me for for getting my ticket too soon and he said, &#8220;We wanted to thank you for taking over the React-Rails gem&#8221; and you know, all of your contributions.</p><p>It was at that conference that <a href="https://github.com/dschafer">Dan Schafer</a>, and he had a co-presenter whose name is escaping me, described GraphQL and its usage in Facebook for the first time. If you were to go back and look at that conference, you would see the language is different than it is now, but my eyes lit up. I have a background in linguistics and I worked in Ruby on Rails, and I could just see how these things could be really useful. And so I went home from the conference and I pushed an empty gem to the GraphQL name on rubygems.org and decided I was going to do the thing.</p><p><strong>Can you talk a little more on the linguistics side? What hit you as Rails and GraphQL, there&#8217;s something interesting at the intersection there?</strong></p><p>I had recently read the book <a href="https://www.amazon.com/Ruby-Under-Microscope-Illustrated-Internals/dp/1593275277">Ruby Under a Microscope</a> and it's just such a fantastic book, and I loved thinking about how programming languages do their magic. And so you know, having the practical experience to recognize the upsides of using GraphQL, especially when you're fetching data for React and seeing that what we needed was a language implementation, I thought it would be fun.</p><p><strong>Language implementation meaning writing the actual interpreter for the GraphQL.</strong></p><p>Yeah, like that idea of translating this new kind of programming syntax into the query side. To me computer languages are way easier than human languages, so it made it seem like fun for sure.</p><p><strong>How did you find, after creating the gem, being on the other side of it as a maintainer? How did you find interacting with the contributions that you received from the community?</strong></p><p>Certainly, mostly good. Especially in those early years. So many people were so hyped up, excited, trying things out, making suggestions. I think at this point, a bit like Ruby on Rails, people take the functionality for granted and they expect it to do what it does and understandably there's a little less wiggle room for for imperfections or shortcomings. And so there's a lot more of you know, I downloaded this and I expected it to work. And for some reason it didn't. </p><p>But the other thing is, there are plenty of companies who have made deep enough investments in <a href="https://github.com/rmosolgo/graphql-ruby">graphql-ruby</a> that there are a handful of contributors out there who come out of nowhere with a really great patch. There's nothing like waking up to the notification that, you know, somebody's opened a pull request and you read the description, and you can&#8217;t think of how you would have done that. This is great. Just click merge and you're done. And I really love that.</p><p>Sometimes there's more back and forth. Somebody has a question and got halfway, and then I get to actually be useful. Point them where they need to go for the other half of the way, and I really enjoy that kind of deeper technical conversation. I've been doing a lot of that especially with folks at Shopify this year, working on performance and it&#8217;s been a lot of fun.</p><p><strong>So you needed to write a parser for the GraphQL gem. As someone with a non-traditional academic CS background, how did you learn how to do that? That&#8217;s a hard thing to do independently.</strong></p><p>My first parser was written with a ruby gem called <a href="https://kschiess.github.io/parslet/">Parslet</a> and it has parsley themed documentation and it's super easy. You describe the parser in Ruby and it just makes Ruby objects that parse code. It's not really a parser generator in the more heavy metal sense, but it worked great and it was good enough to get started.</p><p>I guess my point about a background in linguistics is that parsing is probably the most familiar thing. If you've taken linguistics courses where the assignment is like, hey, here's a paragraph or here's five sentences in a language that you've never seen before, where are the boundaries between subject, object, and verb? And you've got to recognize the pattern and break it apart into pieces and put it back together. And it's very fun and very similar to parsing a computer language. So bridging the gap from that rusty school knowledge to the Parslet documentation and all of its little vegetables was a bit of work. But it came naturally enough, and it's been and remains a really fun area for nerding out.</p><p>There are just so many ways to optimize and improve the parser. Last year, you know, after Parslet, I wrote it in Ruby's own parser generator library called <a href="https://github.com/ruby/racc">racc</a>. It's a spin on <a href="https://en.wikipedia.org/wiki/Yacc">yacc</a>, and it has a similar arcane format for describing how the language is constructed. And it worked fine. But people were always complaining that it wasn't fast enough, too much memory. So this summer, all right, fine. I started from the Ruby grammar. I wrote a yacc grammar that generates a C parser, and it still makes AST nodes in Ruby, but it's 10 times less memory and 10 times faster. But recently, a few months ago, Aaron Patterson wrote a plain Ruby parser that's faster than the C parser once YJIT is warmed up. So now the ball is in my court to get the takeaways from his work and and put them into real life production. So I'm looking forward to giving that a try.</p><p><strong>How do you balance the open source work that you do with your day job?</strong></p><p>I don't have a day job, which is sweet. Seven years ago it became clear that GraphQL was gonna be a thing, and companies were downloading the gem and starting to use it. And I thought, there's a good place for me to formalize my relationship with them and a good way for me to make some money on all this work that I'm doing, if I do just like <a href="https://github.com/mperham">Mike Perham</a> has with Sidekiq and Sidekiq Pro and Sidekiq Enterprise. </p><p>I don't own a private island like Mike does. I don't think he owns a private island, but I think Sidekiq makes a lot more money than GraphQL Pro, but it pays my bills and I don't have to do that balance. Besides that, my family just moved to a hobby farm this year, and I got to milk cows for the first time, which has been like a five year dream for me. And now I've practiced with other cheese makers and helped out at other people's farms, and so now my cows will make cheese which is sweet.</p><p><strong>What other projects are you using now that you think are interesting, or you want people to know about?</strong></p><p>I would say probably the newest thing that is on my mind, but it's not that new anymore, is the Fiber API in Ruby. It&#8217;s been around for a long time and it's been getting better more and more recently. <a href="https://github.com/ioquatix">Samuel Williams</a> is the main hero champion of it right now and he's got a gem called <a href="https://github.com/socketry/async">async</a> that once every three months, I work as hard as I can to make async and graphQL-ruby work together, and I have not quite gotten there yet. I keep getting thread deadlocks and I keep getting core dumps from crashing Ruby. But the possibility there for really easy, true parallel concurrency in the Ruby code you already have is really promising. </p><p>And I'd say in general, the performance folks at Shopify who are working on <a href="https://github.com/Shopify/yjit">YJIT</a> - I'm rooting for them, because I love writing Ruby and I don't want to have to write another language just because Ruby isn't fast enough and it's such cool work the ways they're optimizing it. So those are probably the two things most on my mind right now.</p><p><strong>Ruby itself is a hard to parse language. I guess it's got so much syntax to it. Has it gone in the other direction for you at all? Have you gone back to linguistics groups and tried to take anything you&#8217;ve done back to that domain?</strong></p><p>I have. I've just started what I think of as a 10 year journey to learn Biblical Hebrew, which is kind of crazy. In studying the translation from the Hebrew Bible to your off the shelf English Bible I&#8217;ve discovered a deep, rich world of the historical interpretation of the text. So it's not really related to programming. I'm a year in and I can sound things out and I know some words, but it's very much a slow burn and it's probably the hardest language I've ever studied.</p><div><hr></div><p>To suggest a maintainer, write to Allison at <a href="mailto: allison@infield.ai">allison@infield.ai</a>. </p><p>If you&#8217;re interested in learning more about how Infield can help your team keep its open source dependencies up to date, even with breaking changes, write to <a href="mailto: hello@infield.ai">hello@infield.ai</a> or check out our website. </p>]]></content:encoded></item></channel></rss>