logo

drewdevault.com

[mirror] blog and personal website of Drew DeVault git clone https://hacktivis.me/git/mirror/drewdevault.com.git
commit: cd3ee053c818656acbd82b44b55c5b11421e047c
parent febbc30af4592bc78af0737e27ece9652fbcf9c3
Author: Drew DeVault <sir@cmpwn.com>
Date:   Fri, 30 Aug 2024 15:16:06 +0200

Rust for Linux revisited

Diffstat:

Acontent/blog/2024-08-30-Rust-in-Linux-revisited.md143+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 143 insertions(+), 0 deletions(-)

diff --git a/content/blog/2024-08-30-Rust-in-Linux-revisited.md b/content/blog/2024-08-30-Rust-in-Linux-revisited.md @@ -0,0 +1,143 @@ +--- +title: Rust for Linux revisited +date: 2024-08-30 +--- + +> *Ugh. Drew's blogging about Rust again.* + +-- You + +I promise to be nice. + +Two years ago, seeing the Rust-for-Linux project starting to get the ball +rolling, I wrote "[Does Rust belong in the Linux kernel?][0]", penning a +conclusion consistent with [Betteridge's law of headlines][1]. Two years on we +have a lot of experience to draw on to see how Rust-for-Linux is actually playing +out, and I'd like to renew my thoughts with some hindsight -- and more +compassion. If you're one of the Rust-for-Linux participants burned out or +burning out on this project, I want to help. Burnout sucks -- I've been there. + +[0]: https://drewdevault.com/2022/10/03/Does-Rust-belong-in-Linux.html +[1]: https://en.wikipedia.org/wiki/Betteridge's_law_of_headlines + +The people working on Rust-for-Linux are incredibly smart, talented, and +passionate developers who have their eyes set on a goal and are tirelessly +working towards it -- and, as time has shown, with a great deal of patience. +Though I've developed a mostly-well-earned reputation for being a fierce critic +of Rust, I do believe it has its place and I have a lot of respect for the work +these folks are doing. These developers are ambitious and motivated to make an +impact, and Linux is undoubtedly the highest-impact software in the world, and +in theory Linux is enthusiastically ready to accept motivated innovators into +its fold to facilitate that impact. + +At least in theory. In practice, the Linux community is the wild wild west, and +sweeping changes are infamously difficult to achieve consensus on, and this is +by far the broadest sweeping change ever proposed for the project. Every +subsystem is a private fiefdom, subject to the whims of each one of Linux's +1,700+ maintainers, almost all of whom have a dog in this race. It's herding +cats: introducing Rust effectively is one part coding work and ninety-nine parts +political work -- and it's a lot of coding work. Every subsystem has its own +unique culture and its own strongly held beliefs and values. + +The consequences of these factors is that Rust-for-Linux has become a burnout +machine. My heart goes out to the developers who have been burned in this +project. It's not fair. Free software is about putting in the work, it's a +classical do-ocracy... until it isn't, and people get hurt. In spite of my +critiques of the project, I recognize the talent and humanity of everyone +involved, and wouldn't have wished these outcomes on them. I also have sympathy +for many of the established Linux developers who didn't exactly want this on +their plate... but that's neither here nor there for the purpose of this post, +and any of those developers and their fiefdoms who went out of their way to make +life *difficult* for the Rust developers above and beyond what was needed to +ensure technical excellence are accountable for these shitty outcomes.[^1] + +So where do we go now? + +Well, let me begin by re-iterating something from my last article on the +subject: "I wish [Rust-for-Linux] the best of luck and hope to see them +succeed". Their path is theirs to choose, and though I might advise a moment to +rest before diving headfirst into this political maelstrom once again, I support +you in your endeavours if this is what you choose to do. Not my business. That +said, allow me to humbly propose a different path for your consideration. + +[^1]: Yes, I saw that video, and yes, I expect much better from you in the + future, Ted. That was some hostile, toxic bullshit. + +Here's the pitch: a motivated group of talented Rust OS developers could build a +Linux-compatible kernel, from scratch, very quickly, with no need to engage in +LKML politics. You would be astonished by how quickly you can make meaningful +gains in this kind of environment; I think if the amount of effort being put +into Rust-for-Linux were applied to a new Linux-compatible OS we could have +something production ready for some use-cases within a few years. + +Novel OS design is hard: projects like [Redox][2] are working on this, but it +will take along time to bear fruit and research operating systems often have to +go back to the drawing board and make major revisions over and over again before +something useful and robust emerges. This is important work -- and near to my +heart -- but it's not for everyone. However, making an OS which is based on a +proven design like Linux is *much* easier and can be done very quickly. I worked +on my own novel OS design for a couple of years and it's still stuck in design +hell and badly in need of being rethought; on the other hand I wrote a passable +Unix clone alone in less than 30 days. + +[2]: https://www.redox-os.org/ + +Rust is a great fit for a large monolithic kernel design like Linux. Imagine +having the opportunity to implement something like the dcache from scratch in +Rust, without engaging with the politics -- that's something a small group of +people, perhaps as few as one, could make substantial inroads on in a short +period of time taking full advantage of what Rust has on offer. Working towards +compatibility with an existing design can leverage a much larger talent pool +than the very difficult problem of novel OS design, a lot of people can manage +with a copy of the ISA manual and a missive to implement a single syscall in a +Linux-compatible fashion over the weekend. A small and motivated group of +contributors could take on the work of, say, building out io_uring compatibility +and start finding wins fast -- it's a lot easier than designing io_uring from +scratch. I might even jump in and build out a driver or two for fun myself, that +sounds like a good opportunity for me to learn Rust properly with a fun project +with a well-defined scope. + +Attracting labor shouldn't be too difficult with this project in mind, either. +If there was *the* Rust OS project, with a well-defined scope and design (i.e. +aiming for Linux ABI compatibility), I'm sure there's a lot of people who'd jump +in to stake a claim on some piece of the puzzle and put it together, and the +folks working on Rust-for-Linux have the benefit of a great deal of experience +with the Linux kernel to apply to oversight on the broader design approach. +Having a clear, well-proven goal in mind can also help to attract the same +people who want to make an impact in a way that a speculative research project +might not. Freeing yourselves of the LKML political battles would probably be a +big win for the ambitions of bringing Rust into kernel space. Such an effort +would also be a great way to mentor a new generation of kernel hackers who are +comfortable with Rust in kernel space and ready to deploy their skillset to the +research projects that will build a next-generation OS like Redox. The labor +pool of serious OS developers badly needs a project like this to make that +happen. + +So my offer for the Rust-for-Linux project is: you're burned out and that's +awful, I feel for you. It might be fun and rewarding to spend your recovery +busting out a small prototype Unix kernel and start fleshing out bits and pieces +of the Linux ABI with your friends. I can tell you from my own experience doing +something very much like this that it was a very rewarding burnout recovery +project for me. And who knows where it could go? + +Once again wishing you the best and hoping for your success, wherever the path +ahead leads. + +<details> +<summary>What about drivers?</summary> + + To pre-empt a response I expect to this article: there's the annoying question + of driver support, of course. This was an annoying line of argumentation back + when Linux had poor driver support as well, and it will be a nuisance for a + hypothetical Linux-compatible Rust kernel as well. Well, the same frustrated + arguments I trotted out then are still ready at hand: you choose your + use-cases carefully. General-purpose comes later. Building an OS which + supports virtual machines, or a datacenter deployment, or a specific mobile + device whose vendor is volunteering labor for drivers, and so on, will come + first. You choose the hardware that supports the software, not the other way + around, or build the drivers you need. + + That said, a decent spread of drivers should be pretty easy to implement with + the talent base you have at your disposal, so I wouldn't worry about it. +</details> +