Open Source Thoughts

Posted 1/17/20 by Matthew Stone

Today I read Steve Klabnic's A sad day for Rust and then through Nikolay Kim's thoughts in the acix-web's current README.md. It's not a fun read, and if anything it is a mirror back on the OSS communities and the communities that benefit from OSS existence. I wanted to write some of my thoughts down. Especially as I exit a role where I was partially responsible for a moderately popular OSS project.

Leaching

I think the primary take away from the situation at-large is that this is not new. It's happened to other projects, and will continue to happen to projects. One line from Nikolay's words particularly stood out to me:

Be a maintainer of large open source project is not a fun task. You alway face with rude and hate, everyone knows better how to build software, nobody wants to do home work and read docs and think a bit and very few provide any help. Seems everyone believes there is large team behind actix with unlimited time and budget.

I have no clout. I have no reason for you to read my words much less take any of them to heart -- but if I could impart any one trait on those who chose to read this it would be to prioritize making situations better and not piling on. It's incredibly easy to play arm-chair quarterback when you evaluate code in a vacuum. This is not a mark of good a good software developer it is a mark of immaturity. Context and nuance appear to have less and less of a place in the average conversation/disagreement/debate, but leaving them out only adds entropy and friction to forward progress. I'm guilty of this (criticize code in a vacuum) as well, but am slowly curing myself of this as I get older. There's always context that isn't considered when someone is being critical of how something was implemented. Yes there are objectively wrong things to do, but this is not a free "be a dick to the person" pass. Either to their face or behind their back. Unless you want me to dig up some of your [early in career, 2 am fix, feature no one will use, algorithm you didn't quite understand] code? I thought not…

I think there's two primary things at play here.

Honestly these two are pretty one-in-the-same but it's interesting to talk about them seperatly.

Coding by coincidence is a concept that I was first introduced to in The Pragmatic Programmer (If you haven't read this book don't talk to me again until you have). This industry (almost necessarily) is full of it. I don't believe this was the situation with actix, but I've never reviewed the code so don't cancel me (bruh) over this assumption. It's prevalence propagates an undertone of frustration and elitism for those who are further along their learnings and can point out questionable patterns easily. This undertone leads to the immature comments that aren't rare in the OSS (and other) communities.

The human aspect of it is pretty straight forward -- humans are relatively broken beings who often feel the need to take from others to inflate themselves. Thus most individuals, companies, projects, etc end up being leaches on OSS projects. Not just that they take the source and don't constructively give back, but often negatively impact the community. Either through asking basic questions covered in documentation (or clearly labeled/commented APIs in the case of a code library), through filing bug reports complete with a traceback containing a human-readable string explaining the issue (My friend Lindsay will like the inclusion of that one), or just by generally throwing negativity around because of their experience. We literally had someone anonymously join the StackStorm community slack one day, write 3 paragraphs of hate, and then leave (Or maybe I banned them? I can't remember…we didn't miss them). Whatever entitlement OSS breads will remain an interesting and sad mystery to me.

No one writes good code

Yeah, that's right. No one. Except maybe John Carmack, but probably not him either. We are just trying our best to manage the complexities of our job. This is why new tooling is consistently built. Rust is one such tool, helping humans better manage the (oft exploited) complexities of memory management. My rule of thumb is to keep AS MUCH out of unsafe as possible. Was Nikolay wrong for having used unsafe so much? I donno. I haven't looked at the code, and even if I had and found areas where I could reduce the exposure was Nikolay wrong? I DON'T KNOW! I wouldn't have enough context into a complex project. I can guarantee the code wasn't perfect and I can guarantee there were opportunities to improve it…because no one writes good code. We just do the best we can with our current knowledge while being as empathetic as we can to the hardware (Or not if you write Javascript or something. [I had to make fun of Javascript at some point, but I love you <3.]). What I get impressed by is projects that have utility. Not dreams of what a project could be or might be. Or your plans for what you're going to do when you get time. Nikolay wrote something with actual utility. It pushed on how performant Rust can be. It implemented a protocol. It help other projects deal with peformance and scale needs. That's fucking cool. Better than I can say for a lot of arm-chair quarterback coders.

OSS Problem, not a Rust problem

This type of trope has played out so many times. It's not a Rust problem as some have suggested. It's an OSS problem. Often the only projects that can make it long-term are projects that have corporate backing. Who can field employees to continue the project over the long-haul. This is even true of Linux. Linux's development is primarily done via contributions from corporations that benefit from its existence, and those that aren't directly related to a company are indirectly through corporate patrons funding the Linux Foundation. This shouldn't be overly surprising, after all. People have to earn a living, and yes absolutely there are the entirely-on-their-free-time developers of OSS and I tip my hat to them. They're just rare. I wish the OSS world had a better way to support projects that contribute actual utility to products. A better way for that value to trickle down. Unfortuantely that doesn't exist. OpenSSL's situation provided the industry some pause (and to my understanding mostly solved the funding issue for that project) but it still exists for so many other projects.

Final thoughts

In the end I'm quite sad things turned out the way they did. I see it happen (though perhaps not at this scale) a lot. Produce more than you consume. Don't put others down to raise yourself up. Support projects you benefit from. If you're in control of budget consider adding a line item to patron projects you use to get your job done or produce your product. Don't be a leach. RTFM. GLHF.

The scientists of today think deeply instead of clearly. One must be sane to think clearly, but one can think deeply and be quite insane.
Nikola Tesla
©Copyright 2018 Matthew Stone