|
|
Log in / Subscribe / Register

Getting extensions to work with free-threaded Python

Did you know...?

LWN.net is a subscriber-supported publication; we rely on subscribers to keep the entire operation going. Please help out by buying a subscription and keeping LWN on the net.

By Jake Edge
June 25, 2025

PyCon US

One of the biggest changes to come to the Python world is the addition of the free-threading interpreter, which eliminates the global interpreter lock (GIL) that kept the interpreter thread-safe, but also serialized multi-threaded Python code. Over the years, the GIL has been a source of complaints about the scalability of Python code using threads, so many developers have been looking forward to the change, which has been an experimental feature since Python 3.13 was released in October 2024. Making the free-threaded version work with the rest of the Python ecosystem, especially native extensions, is an ongoing effort, however; Nathan Goldbaum and Lysandros Nikolaou spoke at PyCon US 2025 about those efforts.

Goldbaum began by noting that Python has "superpowers" in part because of its ability to call into native code. For example, when using NumPy, what looks like Python actually calls into C code; the interpreter mediates that, so the Python programmer does not even know. Typically, that native code is written in C, C++, or Rust. Up until recently, the GIL has always been part of the way that the interpreter mediates access.

[GIL
slide]

He showed the slide above and said that it would be used as the basis for multiple parts of the talk. In it, each thread spool represents a thread running in a native Python extension (such as NumPy). Each spool has a lock icon representing the GIL; some, such as those doing I/O or making native function calls, are unlocked, while one that is calling into the CPython C API is locked. Two other spools are "grayed" out because they are waiting for the GIL so that they can call into the C API. As the diagram shows, there is some parallelism available even with the GIL, but multiple threads needing to use the C API will be serialized by the GIL.

[Nathan Goldbaum]

There is an additional detail in the slide that he wanted to highlight: the plug and receptacle between the interpreter runtime and the thread spool. In the GIL-enabled build, obtaining the GIL also means that the thread is attached to the Python runtime, so all of the threads but the one holding the GIL are in the unplugged state. He did not go into further detail, but the idea is that attached threads are registered with the interpreter runtime so that they can make calls into the C API. The attached versus detached (unplugged) state is not really a useful distinction for the GIL-enabled build, he said, but it does make a difference for the free-threaded build.

He put up an updated slide for the free-threaded interpreter, which looked similar; the differences were a lack of locks (because there is no GIL) and that all of the threads calling into the C API were attached to the interpreter runtime and were running. You still need to be attached to the runtime in order to call the C API and he emphasized that the API to do so has not changed. There are two ways to attach (PyGILState_Ensure() and the Py_END_ALLOW_THREADS macro) and two corresponding ways to detach (PyGILState_Release() and the Py_BEGIN_ALLOW_THREADS macro). The free-threaded build will just maintain the existing API that extensions are already using "so, by default, most things will just kind of work", which means there is less to do than might be guessed to run existing extensions on the free-threaded build.

One problem area that does need attention, however, is extensions that rely on global state. Goldbaum showed an example from NumPy 2.1 (though it was not verbatim) where there was a static variable for its print mode that would get set from Python code. That was "horribly broken" with the free-threaded build because multiple threads could be setting it at once; it could result in the options for, say, printing an array changing while the array is being printed.

Ecosystem migration

Nikolaou then stepped up to talk about the work that a team from Quansight Labs (where he and Goldbaum work) and Meta (where free-threaded Python was born) had done to jumpstart the ecosystem migration to the free-threaded build. He put up a slide with nearly 20 different Python projects and said that the team had spent time on getting those working with the free-threaded build. The team started with build systems and bindings generators, like Meson, Conda, Cython, and PyO3; some members are working on CPython directly, while others are working up the stack on things like NumPy, SciPy, Matplotlib, scikit-learn, and pandas. Beyond that, work has been done on various projects in the surrounding ecosystem like Pillow, pyca/cryptography, PyYAML, and AIOHTTP.

He pointed to two web sites that are tracking compatibility. Hugo van Kemenade has a site tracking free-threaded wheels that are available for the top 360 packages on the Python Package Index (PyPI). Similarly, Donghee Na has the Free-threaded Python Library Compatibility Checker, which builds packages with the free-threaded interpreter daily and shows the successes and failures. The team has also been working on the Python Free-Threading Guide to help the long tail of projects that will be making any needed changes themselves.

[Lysandros Nikolaou]

It is important to understand that there are two separate builds of the Python interpreter for 3.13 and the upcoming 3.14: one with the GIL and one where it is disabled by default (i.e. the free-threaded build). Getting the free-threaded Python (often specified as 3.13t or 3.14t) is fairly straightforward, Nikolaou said; it can be installed in parallel with the standard interpreter. It is available from Linux distributions, Homebrew, Conda, uv, and more.

Native extensions do not automatically come with support for free-threaded Python; extensions need to declare that they support it. Trying to use an extension that does not make that declaration on a free-threaded Python build will result in a RuntimeWarning that the GIL has been enabled. Contrary to what many people think, the GIL is not gone, and "probably will not be gone in the future as well", he said.

When a package is being ported to support free threading, lots of documentation should be added to describe exactly what is and is not supported. For things that are not supported, the documentation should provide alternatives. The team has found that it is important to encourage user feedback, because that can provide the use cases and can help guide the developers to the areas that need attention. SciPy does this particularly well, he said; it explicitly lists classes and functions that can and cannot be used by multithreaded code. It also raises exceptions when objects are shared between threads in unsupported ways, which is a good practice.

Native data races are an area that needs attention when porting extensions to support free threading. Data races are undefined behavior, which, in C and C++, "is particularly evil and we should be avoiding it". He put up a classic example of a global counter that is being incremented in a loop; if multiple threads are executing that code, the results are undefined. He did not directly say it, but the existing races may not have occurred because of the GIL or were not encountered because multithreaded Python programs were fairly rare.

Using sanitizers, such as ThreadSanitizer, and other tools can detect these kinds of problems, but multithreaded testing is also need to flush them out. To that end, Quansight Labs has released pytest-run-parallel, which is a pytest plugin to stress test a package's tests in multiple threads.

Early release of packages with free-threading support is something that works well to speed the porting process. Problems that users encounter (and report) will help find outstanding issues, but it also helps the ecosystem. "Having just one dependency in your dependency tree that does not support free threading means that the GIL will be re-enabled at run time", which makes testing the free-threaded build harder.

Mutexes

A tool that can be used to deal with global state problems is a mutex, Goldbaum said after returning to the stage. A mutex is like the GIL, in that only one thread can hold it and others must wait for it in order to continue executing, but a mutex has a more limited scope. So, instead of code that is problematic when multiple threads are using it, such as:

    int counter = 42;

    void increment() {
        counter++;
    }
A mutex can be used to protect counter from being accessed and incremented by multiple threads at once:
    int counter = 42;
    static PyMutex mutex = {0};

    void increment() {
        PyMutex_Lock(&mutex);
        counter++;
        PyMutex_Unlock(&mutex);
    }

Another common reason why a mutex might be needed is to wrap calls into a non-thread-safe library. He showed an example from Pillow where calls into the FreeType library were wrapped in mutex locks and unlocks using a macro that was a no-op for GIL-enabled builds. The team used a single global mutex for the library and wrapped all of the calls into the thread-unsafe FreeType API.

Whenever you use more than one lock, though, there is the possibility of deadlocks, Goldbaum said. One way to avoid deadlocks is to use atomic operations, which allow multiple threads to safely change shared variables. Atomics are also a low-level way to tell the compiler to not reorder code in ways that can introduce timing issues, he said. Atomics allow writing algorithms that can avoid locking because the programmer can precisely control the order of operations to avoid the need for locks.

Atomics is a "huge topic" and it is easy to write incorrect code using them. He recommended the Rust Atomics and Locks book, which is freely available online; it is how he learned about atomics. Even for those who do not know Rust, the book provides useful information that is applicable to any language that exposes native atomics.

Caches are another problem area for multithreaded code; caches are good for single-threaded performance, but they are "bad for threads". One quick way to make progress on porting a cache-using package for free threading is to disable any caches that are not critical. Any caches that remain are just sources of global state that need to be protected from access by multiple threads.

Using one-time initialization APIs, such as Rust's OnceLock, to populate a cache can avoid problems for multithreaded code. But, because the one-time initialization APIs will block other threads while one thread does the work, it can result in deadlocks, either with the GIL for GIL-enabled builds or with the garbage collector on free-threaded builds. The PyO3 Rust bindings for Python provide the OnceLockExt trait to avoid this problem; extensions written in C or C++ will need to find a way to do something similar.

Mutable data structures are perhaps the source of the biggest problems for free-threaded support. Any time two or more threads have access to a mutable object, there is the potential for non-deterministic behavior. The general picture that developers should have in their heads is a classic triangle with "thread safety", "scalability and performance", and "simplicity" as the three vertices. "If you're really lucky, you can choose two; sometimes you can only choose one." Goldbaum believes there is a lot of room to develop thread-safe primitives that are optimized for different use cases.

He noted that the native debuggers (LLDB and GDB) were useful tools when developing or porting a Python extension. He also suggested that anyone working on an extension in any language—"except maybe in Rust, but even then"—use AddressSanitizer and ThreadSanitizer. He pointed to Docker images for CPython built with ThreadSanitizer as a possibility for using in continuous-integration (CI) testing. There is also advice on debugging as part of the free-threading guide.

The future

He sees bindings generators as "the future in a free-threaded world", as opposed to writing extensions using the raw C API for CPython. For C++, that likely means using pybind11 or nanobind; Cython should strongly be considered for C. Rust extensions should use PyO3; he thinks that Rust and PyO3 is the best choice for writing thread-safe extensions "or even just native extensions at all for Python".

For new extension projects, he thinks Rust really should be the only choice, but, for those who feel differently, Rust should at least be "strongly considered". It is easy to write incorrect extension code in C and C++; "Rust prevents a lot of issues". He is not the only one who thinks so; he put up a slide from David Hewitt's Python Language Summit talk earlier in the conference that showed roughly 30% of new PyPI projects have at least some Rust in them.

There is a need to coordinate between libraries in the free-threaded world. For example, the threadpoolctl module is used by NumPy to limit the number of threads that OpenBLAS starts in its thread pool; if too many threads are spawned on a system, there will be problems with resources and contention. Integration between libraries that are creating their own thread pools will be needed to ensure that the system does not get overwhelmed.

Rethinking mutable state should be on the agenda, as well, Goldbaum said as the session wound down. Making more types of immutable data structures available would be helpful. Reworking the buffer protocol with something like borrow checking would make it easier to share byte buffers. Currently the buffer protocol allows arbitrary reads and writes in buffers, which is problematic with multiple threads.

A YouTube video of the talk is available.

[Thanks to the Linux Foundation for its travel sponsorship that allowed me to travel to Pittsburgh for PyCon US.]

Index entries for this article
ConferencePyCon/2025
PythonFree-threading


to post comments

When is Rust going to have a stable distro experience?

Posted Jun 25, 2025 22:25 UTC (Wed) by Kamilion (subscriber, #42576) [Link] (50 responses)

Mildly annoying, to say the least:

error: package `cryptography-openssl v0.1.0 (/tmp/pip-install-_9ulh6t7/cryptography_0ee1e858866c448186c85ad7e4761e67/src/rust/cryptography-openssl)` cannot be built because it requires rustc 1.74.0 or newer, while the currently active rustc version is 1.63.0

It's becoming increasingly difficult to deal with rust popping up everywhere without a stable ABI.
It's really getting to be maddening dealing with distro packages that I can't upgrade because of some library change.

It's also extremely annoying that a PCI audit keeps complaining about our openssh version. Debian doesn't even package 10.x in stable yet. I ended up adding a port knocker to shut it up.

When is Rust going to have a stable distro experience?

Posted Jun 25, 2025 22:49 UTC (Wed) by intelfx (subscriber, #130118) [Link] (25 responses)

> error: package `cryptography-openssl v0.1.0 (/tmp/pip-install-_9ulh6t7/cryptography_0ee1e858866c448186c85ad7e4761e67/src/rust/cryptography-openssl)` cannot be built because it requires rustc 1.74.0 or newer, while the currently active rustc version is 1.63.0

> It's becoming increasingly difficult to deal with rust popping up everywhere without a stable ABI.

The error you have quoted is entirely irrelevant to any kind of "stable ABI".

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 1:34 UTC (Thu) by NYKevin (subscriber, #129325) [Link] (24 responses)

I think Kamilion wants to download a precompiled openssh library instead of building it from source on their workstation, and is complaining that such a package is de facto impossible to provide because the ABI is unstable.

Of course, the obvious problem here is that even if Rust did have a stable ABI, you'd then have to contend with manylinux versioning, non-Python dependencies, etc., and most of those problems are currently somewhere between "it works out of the box on some distros" and "it works out of the box for Conda users (and nobody else)."

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 11:42 UTC (Thu) by khim (subscriber, #9252) [Link] (23 responses)

> I think Kamilion wants to download a precompiled openssh library instead of building it from source on their workstation, and is complaining that such a package is de facto impossible to provide because the ABI is unstable.

But that's not the problem if Rust ABI: these packages don't expose anything with Rust ABI.

What you need for such an ability is an SDK: package oriented for developers that allows one to prepare binaries for your OS, preferably covering large range of OSes.

All popular OSes today do that, but in a Unix world the story was always the exact opposite: each version of OS introduced new version of packages and developers of software were spending tremendous effort to deliver anything (from object files and a linker script to autoconf and other such mess).

Rust (and most other modern languages) have rejected that madness and simply ask one to provide a new enough version of Rust: rustc 1.74.0 was released 1.5 years ago!

It's entirely not clear why developers of all programs (millions of them) have to deal with old, long-obsolete versions of tools simply because small group of OS developers (thousands, for most distros, often less) couldn't do what they needed to do ages ago and finally simply provide an SDK for their OS.

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 13:32 UTC (Thu) by pizza (subscriber, #46) [Link] (20 responses)

> Rust (and most other modern languages) have rejected that madness and simply ask one to provide a new enough version of Rust: rustc 1.74.0 was released 1.5 years ago!

> It's entirely not clear why developers of all programs (millions of them) have to deal with old, long-obsolete versions of tools

....1.5 years old is considered "old, long-obsolete" ?

I am working in an industry where the *minimum* (As mandated by law) support lifecycle is approximately *ten years* after final sale, and it typically takes several years of R&D to get a product on the market in the first place.

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 13:56 UTC (Thu) by khim (subscriber, #9252) [Link] (2 responses)

> I am working in an industry where the *minimum* (As mandated by law) support lifecycle is approximately *ten years* after final sale, and it typically takes several years of R&D to get a product on the market in the first place.

Does the law mandate the ability to use the exact same piece of software that was released on the day device was sold to you – together with all the latest and greatest features that are supported in a new versions?

Because that is what we are talking about here. Not about support time (Rust is perfectly supported and works very well today, it's just old version of Rust that are not supported).

> ....1.5 years old is considered "old, long-obsolete" ?

It's considered “superseded”. At my $DAYJOB we also have more than 10 years of support times – and yet we don't bother to support the ability to compile our code with a compiler that's more than half-year old.

If device couldn't be used with the “top of the tree” then we have separate branch for it which includes old version of everything: old version of compiler, old versions of support libraries, etc.

And it doesn't have anything to do with a stable ABI: we also provide SDK to customers and these are supporting old versions of already released devices, too.

But we don't support superseded versions of SDK. You can use them on your own risk, if you want, but if you want to get support – you have to use the few latest versions.

P.S. I wonder where the conflation of “something is supported for X years” and “something may be used for X years without software upgrade” comes from. People often conflate these even if they are clearly very different.

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 14:22 UTC (Thu) by pizza (subscriber, #46) [Link] (1 responses)

> Does the law mandate the ability to use the exact same piece of software that was released on the day device was sold to you – together with all the latest and greatest features that are supported in a new versions?

No. It mandates that whatever has shipped has gone through extensive certification processes. Changes are permitted but each (no matter how minor) has to be separately justified, documented, and extensively tested.

...As the saying goes, safety regulations are written in blood.

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 14:34 UTC (Thu) by khim (subscriber, #9252) [Link]

> Changes are permitted but each (no matter how minor) has to be separately justified, documented, and extensively tested.

Which corresponds to the “frozen branch, no new changes allowed” model. There are no chance whatsoever to drop brand new cryptography package into that mix.

> …As the saying goes, safety regulations are written in blood.

Yes, but that doesn't mean that once written they have to stay unchanged.

But as I have said that's not really relevant to the issue: if you don't need support then you may use old versions of Rust just fine, even pre-1.0 versions.

You just have to accept the code for everything else from that time, too.

Sometimes the ability to mix and match is deemed to valuable enough to support – examples include Linux kernel (but not CADT-infested distros), Windows, Android and many others… but they, notably, also don't mandate the ability to use old tools with “latest and greatest” codebase.

That's something UNIX did, essentially “because it could” – and then GNU/Linux inherited.

No one else does that.

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 7:38 UTC (Fri) by taladar (subscriber, #68407) [Link] (16 responses)

What many people miss is that Rust is not like other compilers. The current Rust compiler is perfectly capable of compiling anything Rust 1.74.0 could compile so there is no reason to have LTS versions of old compiler branches.

Obviously there can be occasionaly bugs but the same is true for old branches with security fixes and/or backports.

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 11:48 UTC (Fri) by pizza (subscriber, #46) [Link] (10 responses)

> Obviously there can be occasionaly bugs but the same is true for old branches with security fixes and/or backports.

In other words, "reason #83 why you don't make _any_ unnecessary changes, which includes swapping out the underlying toolchain"

It's not enough to say "oh, the toolchain is perfectly capable of compiling the old code", you have to *prove* that it does so correctly without introducing any unintentional changes.

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 12:18 UTC (Fri) by khim (subscriber, #9252) [Link] (2 responses)

> In other words, "reason #83 why you don't make _any_ unnecessary changes, which includes swapping out the underlying toolchain"

In that approach you would never face compatibility issues, because the reason that stop you from upgrading toolchain would also stop you from upgrading any other code, too.

Again: we are not talking about the case of “everything is frozen, every single line of change need justification”. In that mode compatibility issues don't exist simply you don't touch or change anything.

> It's not enough to say "oh, the toolchain is perfectly capable of compiling the old code", you have to *prove* that it does so correctly without introducing any unintentional changes.

Not if you already decided “to take the plunge” and upgrade some major component of your stack, be it python version or cryptography python package version.

At that point you are playing with probabilities – and, in practice, chance of regressions from upgrade of some library supported by one person in their spare time or python version, which break compatibility regularly, are much higher than chances of regressions from rust compiler upgrade.

When is Rust going to have a stable distro experience?

Posted Jun 28, 2025 21:49 UTC (Sat) by SLi (subscriber, #53131) [Link] (1 responses)

> In that approach you would never face compatibility issues, because the reason that stop you from upgrading toolchain would also stop you from upgrading any other code, too.

> Again: we are not talking about the case of “everything is frozen, every single line of change need justification”. In that mode compatibility issues don't exist simply you don't touch or change anything.

I think that's a false dichotomy. There are changes that are allowed or mandated. They are things like "we have discovered what caused the plane to explode, and we'll fix that". Then you will fix that, and _only_ that.

Would you expect something the magnitude of a Linux kernel to stay bug compatible to an old version if you swapped the toolchain used to build it?

Upgrading the toolchain is not even on the top 1000 list of things to do. Every developer has their pet peeve, but you don't even fix a typo in an error message because how do you know it won't break something somewhere, and you don't want to do typically O(weeks) of paperwork to justify it (more so for bigger changes, like changing a compiler flag used to compile one of the functions).

It's just not at all the same world where "just update the tools" is feasible.

When is Rust going to have a stable distro experience?

Posted Jun 28, 2025 22:02 UTC (Sat) by khim (subscriber, #9252) [Link]

> Then you will fix that, and _only_ that.

Means: you don't bring new version of Python, you don't bring new version cryptography and that means you don't need new version of Rust, either… where's promised false dichotomy?

> Would you expect something the magnitude of a Linux kernel to stay bug compatible to an old version if you swapped the toolchain used to build it?

Why, yes, of course. It's in the same position as everything else: on ToT branch it's built with latest approved version of clang and on frozen “security fixed only” branch it's compiled with the same toolchain that was used when that branch was cut.

> It's just not at all the same world where "just update the tools" is feasible.

Yes, it is same world. Android AOSP build is updated every quarter and that update very much includes update to the toolchain, too. Different vendors may update their branches on a different cadence, sure, but situation where you may upgrade new version of Python or bring “latest and greatest” version cryptography package but, for some strange reason, couldn't upgrade toolchain is simply not in the cards.

These are similarly disruptive operations (I would even say that upgrade of python is much more disruptive, potentially, because rust incompatibilities tend to break compilation of your code while python upgrade often can break things that your test may miss), why should they be treated differently?

When is Rust going to have a stable distro experience?

Posted Jun 30, 2025 10:22 UTC (Mon) by taladar (subscriber, #68407) [Link] (6 responses)

Actually 90% of the bugs are bugs in the old toolchain that the new one compiles correctly but the old one did not.

When is Rust going to have a stable distro experience?

Posted Jun 30, 2025 10:53 UTC (Mon) by pizza (subscriber, #46) [Link] (5 responses)

> Actually 90% of the bugs are bugs in the old toolchain that the new one compiles correctly but the old one did not.

...And what about the other 10%?

Put that into your paperwork and see how far that gets you with $regulator.

(Remember, "known bugs" can be worked around or otherwise handled. It's those unknown bugs that might literally kill someone if encountered)

When is Rust going to have a stable distro experience?

Posted Jun 30, 2025 13:20 UTC (Mon) by farnz (subscriber, #17727) [Link] (2 responses)

In the limit, this is "don't change anything", because any change can bring in unknown bugs; in practice rather than take a new mixed feature + bugfix upgrade to (say) PyCryptography (which includes a minimum required toolchain version bump), you'd be carefully following your documented process for reimplementing fixes that you need in the older dependency's source, without bumping the toolchain.

By reimplementing each bugfix yourself, following a procedure that minimises risk, you avoid the challenges inherent in taking all the changes upstream has introduced between two versions; some of those are going to turn out to be relevant bugfixes, but others will be that nasty combination of "this change did not improve anything for us" and "this change also introduced a new, previously unknown, bug".

Ultimately, it all comes back down to "who takes responsibility for things going wrong"; it's unreasonable to expect volunteer maintainers to accept responsibility for anything involving safety or money, and thus someone has to take that responsibility on. People like Red Hat, IAR Systems, Montavista, Wind River Systems (and many more, both proprietary like IAR Systems, and open source like Red Hat), along with insurers to limit your exposure to liability, have built their business on taking some responsibility for bugs in the code - and if you're in a position where bugs can be life-and-death, you'd be well advised to at least ensure that the insurance premiums to take on your liability are affordable (even if you don't actually take out insurance).

After all, even if you do use a qualified compiler like Ferrocene, or the Arm Compiler for Embedded FuSa, you still have to ensure that you only use qualified features of the language; you can't just compile arbitrary code with a qualified compiler, and assume that it now meets standards.

When is Rust going to have a stable distro experience?

Posted Jul 1, 2025 8:51 UTC (Tue) by taladar (subscriber, #68407) [Link] (1 responses)

> By reimplementing each bugfix yourself, following a procedure that minimises risk

Who does that in practice though? Because having one developer backport fixes for dozens or hundreds of projects certainly is not "following a procedure that minimises risk". And that is what pretty much all those who advocate for minimal changes (as opposed to actually zero changes which is largely impractical in most domains) are doing.

When is Rust going to have a stable distro experience?

Posted Jul 1, 2025 10:55 UTC (Tue) by farnz (subscriber, #17727) [Link]

It's a hard requirement in some safety-critical standards; you lock dependency versions down at an early phase in development, and from then on in, you have to show that every change to a dependency is done in accordance with your policy (which has to meet the standard's requirements), or start the certification process from the beginning. Such a policy will require multiple developers involved in a backport, not just one developer.

But this is one significant way in which safety-critical software (IEC 61508 compliant, for example) differs from your run of the mill software for laptops, desktops etc. And, just as you can't switch from GCC to a qualified compiler and expect your software to magically be compliant with safety standards, you can't just take the "easy" bits of safety standards (like insisting on backported fixes, without the procedure to ensure that there's two developers communicating about the fix and one not in communication with the fixer and their reviewer, auditing the resulting code for compliance) and expect good outcomes.

When is Rust going to have a stable distro experience?

Posted Jul 1, 2025 8:48 UTC (Tue) by taladar (subscriber, #68407) [Link] (1 responses)

So how exactly do you work around known bugs that mis-compile something that then fails at runtime because some optimization went awry?

When is Rust going to have a stable distro experience?

Posted Jul 1, 2025 10:09 UTC (Tue) by farnz (subscriber, #17727) [Link]

It depends whether you're using a qualified compiler or not.

If you're using a qualified compiler, and your code meets the compiler's qualification requirements, you notify your compiler vendor, and they will, per your contract with them, supply a bug fix along with the necessary paperwork for your certification to update to this new compiler. That paperwork is rather arduous, but confirms that (a) the bug was in the compiler's handling of a qualified construct, (b) that this bug fix resolves that, and (c) that this bug fix does not break the compiler's handling of other qualified constructs.

If you're not using a qualified compiler, then you change the source code or build options, until the output is what you want, without the miscompilation.

Note that because this is the safety critical world, you must audit the system for compliance with the standards; a qualified compiler allows you to audit in the source code world, any other compiler requires you to audit the binary output.

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 12:19 UTC (Fri) by laarmen (subscriber, #63948) [Link] (4 responses)

> The current Rust compiler is perfectly capable of compiling anything Rust 1.74.0 could compile so there is no reason to have LTS versions of old compiler branches.

This statement is wrong for a couple of reasons. First, there is the odd project that uses unstable features, thus relying on semantics that are by definition subject to change. The rust-for-linux project is (was?) one of those. If you work on the kernel you definitely want to keep older versions of the toolchain around. rustc itself is also one of those, btw. Building an older version of rustc with a newer one doesn't work.

Second, it's actually pretty easy to find an example of code that was fine on 1.74 and doesn't compile today. The 1.80 release famously broke any version of the time crate that was older than 3 months at the time.

I actually think that was fine, although annoying. When you have things like type inference, autoderef, lifetime inference, etc... you're bound to break edge-cases whenever you touch the algorithms, and the resulting QoL changes were probably worth the breakage. However, I do wish people would be more nuanced when mentioning the backwards compatibility story of Rust.

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 13:12 UTC (Fri) by daroc (editor, #160859) [Link] (3 responses)

The Rust-for-Linux project does still depend on some unstable features, but reducing the number is a major priority for the Rust project, and one that they have made some decent progress on. Most of the remaining items are build flags, not language features. I would not be surprised if the kernel builds with stable Rust this time next year.

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 14:49 UTC (Fri) by ojeda (subscriber, #143370) [Link]

Yeah, we rely on essentially 2 language features at the moment, which are being worked on upstream to stabilize them.

Nevertheless, to clarify on top of what Daroc said, we already support stable Rust releases >= 1.78 (i.e. more than a year of releases at the moment).

In other words, from the kernel side we are able to support several versions of the compiler even if some details here and there may happen to change. It is essentially the same as supporting C flags or attributes conditionally, or having a workaround for a compiler bug.

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 14:57 UTC (Fri) by archaic (subscriber, #111970) [Link] (1 responses)

Can we use this as one of Jon's famous year-end predictions? :)

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 15:04 UTC (Fri) by daroc (editor, #160859) [Link]

He asks for suggestions from the rest of us when putting those articles together, so I'll certainly throw this one into the ring. Of course, by December we might have a clearer idea of exactly where things will stand.

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 18:04 UTC (Thu) by NYKevin (subscriber, #129325) [Link] (1 responses)

> Rust (and most other modern languages) have rejected that madness and simply ask one to provide a new enough version of Rust: rustc 1.74.0 was released 1.5 years ago!

This story is about Python, so I focused on the Python-specific issues, which are very different to Rust's packaging situation.

Python, unlike Rust, actually does want to distribute precompiled binaries as the "standard" form of its (non-Python, native code) libraries. But this turns out to be somewhere between difficult and impossible on Linux, unless you either reinvent Flatpak (i.e. vendor everything and stick it in a container) or reinvent Conda (i.e. extend the scope of your packaging repository until it's most of the way to being an independent Linux distro). Since the Python folks can't even agree on which tool we should invoke to manage packages, those are both complete non-starters (as standard, language-level solutions - obviously both Flatpak and Conda do exist and can be used for this purpose). The result is that source distributions are the de facto standard way to package native code Python extensions, and binary wheels mostly only exist as an optimization for people who conveniently happen to have exactly the right distro etc. on their systems already.

This is not a problem on Windows or Mac for two reasons:

1. They have richer and more elaborate OS-level APIs than just libc. Most distros also provide libraries that are not libc, but if you're packaging for "Linux," you don't know the distro in advance and can't rely on anything that is not libc (or Python.h, of course).
2. If you need something the OS doesn't provide, you can just vendor it and nobody will yell at you.

When is Rust going to have a stable distro experience?

Posted Jul 4, 2025 3:59 UTC (Fri) by zahlman (guest, #175387) [Link]

> Since the Python folks can't even agree on which tool we should invoke to manage packages

Speaking as "Python folk" (and generally outside of the world of non-Python dependencies), I *actively don't want* such agreement. I instead want the community to keep doing what it's doing with developing interoperable standards. Having a standard choice for the package manager goes against my mental model of how FOSS works. In that world, problems in that package manager can only be addressed by joining that team (and submitting to its contributor agreements etc.) or by making a fork that everyone has an explicit vested interest in ignoring. And anyway if we were going to do things that way, the effort should have started in 2011 when the Conda people first complained. And that, in turn, would likely have made it even harder to get away from all the ugly issues with `setup.py` and harder to move towards using it purely for build orchestration.

> and binary wheels mostly only exist as an optimization for people who conveniently happen to have exactly the right distro etc. on their systems already.

Manylinux (https://github.com/pypa/manylinux) compatibility is pretty broad, honestly. Especially if you build wheels for multiple manylinux tags. When I switched over to Linux it never even occurred to me to wonder whether Numpy wheels would work. They did.

> They have richer and more elaborate OS-level APIs than just libc. Most distros also provide libraries that are not libc, but if you're packaging for "Linux," you don't know the distro in advance and can't rely on anything that is not libc (or Python.h, of course).

There is musl support now, too. But from what I can see, the most popular packages don't find themselves needing to rely on things outside the standard library (well, I guess a handful of projects build *against Numpy's* ABI).

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 14:21 UTC (Thu) by lunaryorn (guest, #111088) [Link] (7 responses)

Just install a more recent copy of Rust with e.g. rustup? You're okay with pulling directly from PyPI, so presumably rustup would not be an issue either?

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 20:26 UTC (Thu) by Kamilion (subscriber, #42576) [Link] (6 responses)

> You're okay with pulling directly from PyPI, so presumably rustup would not be an issue either?

Sorry, I don't have a habit of curling random scripts from the commandline. I have this tool, see, it's called a package manager. It's supposed to manage packages. But for some strange reason, it never seems to be the tool people want to use anymore.

I'm stuck with package versions from 5+ years ago, strange ABI changes (OpenSSL1.x -> 3.x), and all sorts of other annoyances. Free threading python 3.13t? Hah, no. OpenSSH10? Nope.

When can I expect a stable ABI build of rust to be in the package manager? When can I assume the churn has stopped enough for code to compile cleanly for two years or more without demanding a fresh compiler? Where's my python 2.7 equivalent from rustland? Where's the static library linking support?

Like, is all this free-threaded python going to end up being the new python4? having to run 3to4 until it's deprecated and removed like 2to3?

I'm so tired of running around trying to fix these stupid problems of programming language mixture.
(Not venting at you, lunaryorn, just annoyed at the world, frustrated with apt, vehemently dislike rpm, have made peace with opkg...)

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 21:01 UTC (Thu) by mb (subscriber, #50428) [Link] (1 responses)

> I have this tool, see, it's called a package manager

Ok. Why don't you install your Python packages from it?

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 21:41 UTC (Thu) by Kamilion (subscriber, #42576) [Link]

I do :)

Further down, I note the python cryptography error message is posted at https://ft-checker.com/ as part of their free-threading compatibility matrix. It's evident that their buildbox/CI system is using some ancient version of rust "from 2022".
I am not running into the problem myself; just found it mildly annoying to see.

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 21:03 UTC (Thu) by daroc (editor, #160859) [Link] (1 responses)

Depending on your distribution, rustup may be available via your package manager. Fedora has it. So in that way it's not all that different from pip.

And Rust already supports static linking (in fact, it's the default). That's one reason that the developers haven't focused on ABI stability — Rust libraries from years ago are compatible at the source level with modern libraries, not at the binary level, but you would hardly notice that given that they're all statically linked.

That said — yeah, chasing down things that break is really annoying. I definitely sympathize. The user-experience for these things is in tension with so many other goals that it isn't nearly as good as it could be if it were the subject of everyone's focus.

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 22:08 UTC (Thu) by Kamilion (subscriber, #42576) [Link]

Thanks, Daroc. Appreciate you chipping in.
In this case, rustup is *not* yet available in debian stable.
https://packages.debian.org/search?keywords=rustup
Shortly it should be available in trixie; and I've already got a pair of nodes running testing and unstable respectively.

And yes, I'm aware that the artifacts rustc generates are "static", that's part of the problem.

> Rust libraries from years ago are compatible at the source level with modern libraries, not at the binary level, but you would hardly notice that given that they're all statically linked.

Yeah, except for the minor problem that *I do notice that*, particularly in the case of building game engine artifacts.
For *that* side project, we still have a ubuntu 18.04 node set aside to do builds on due to it's lower glibc version (2.27).
All of our steam builds run across distros, and only musl-based distros need special attention.

The other problem is, I'm not a "coder". I can read most of the ALGOL-syntax derived languages (All the languages that like parameters in parentheses) and even write some functional if or switch blocks. But at best, I'm just a scripter/automater. I invoke other tools/objects, because I don't consider myself competent enough to write my own, nor do I consider it a good use of my time.

> That said — yeah, chasing down things that break is really annoying. I definitely sympathize. The user-experience for these things is in tension with so many other goals that it isn't nearly as good as it could be if it were the subject of everyone's focus.

At best, I'm skilled at packaging. I used to roll my own spin of ubuntu ISOs with Xen and TORAM=Yes, but they've made that progressively more difficult to the point where chromium became a snap without a backing .deb, so I just gave up trying to work with canonical and lubuntu, and went back to debian. Lots of foolishness around openvswitch and ceph because they were pushing openstack hard, and I didn't want that kind of enterprise girth for no good reason. So many packages moving to docker-compose, like Sentry. Same nonsense happening now in homeassistant; they're abandoning pip installs for their HASSOS docker minimal "distro", and I've found it's nearly impossible to debug problems.

It's a mess, a proper clusterfsck that nobody seems willing to crawl back out of, just add more layers to make it worse.
Hardware Virtualization has been around in every x86-64 for what, *twenty* years now? Everything has moved to PCIe, and Xen does one thing and does it well, manage access to PCIe devices. And yet we're still arguing over vulkan and wayland and AMD drags their feet with GIM (GPU-IOV Module) to enable split functions on consumer hardware... Let alone nvidia's disdain for linux and vGRID license greed.

I'm still kind of wary of BPF, still rather annoyed that io-uring is "Barely" made use of, still peeved that kdbus flopped and there's still no sane RPC mechanism besides "well, maybe you can cobble it together with openssh or grpc?", still waiting for wireguard support in embedded devices (ESP32), still chomping at the bit to make use of pidfds and the new mounting syscalls... Still waiting for /proc to die, still praying for perl to finally be buried and laid to line noise rest, blessed be thy commented code...

*sigh*

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 10:22 UTC (Fri) by intelfx (subscriber, #130118) [Link]

> I don't have a habit of curling random scripts from the commandline.

Rustup is not a script, not really a random one, and you don't have to curl it from the commandline.

> I have this tool, see, it's called a package manager. It's supposed to manage packages. But for some strange reason, it never seems to be the tool people want to use anymore.

I certainly sympathise (I do, I hate all the language-specific packaging silos with passion), but you have given up on the system package manager the moment you decided to use `pip`. Why do you accept using one language-specific package ecosystem (pip) but not the other (rustup+cargo) is therefore a question.

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 13:28 UTC (Fri) by lunaryorn (guest, #111088) [Link]

> Sorry, I don't have a habit of curling random scripts from the commandline.

But... isn't this exactly what pip does? ;)

It curls some tarball from some site and then runs some Python script from that tarball. Not much of a difference to "curl | bash", isn't it?

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 20:59 UTC (Thu) by Kamilion (subscriber, #42576) [Link] (14 responses)

Sorry, should have noted: the python cryptography error message is posted at https://ft-checker.com/ as part of their free-threading compatibility matrix. It's evident that their buildbox/CI system is using some ancient version of rust "from 2022".

I am not running into the problem myself; just found it mildly annoying to see.

NYKevin: Yes, your assumptions were correct on openssh; and apparently I'm not allowed to build it myself. I'm not clear on it myself, our auditor basically told us we couldn't use Alpine, Arch, or Gentoo, It's something dumb with the way they certify things.
I'm just the sysadmin, I don't make the rules, I just do my best to blindly follow them.

I can migrate our frontend server to unstable/testing Debian, but that just seems insane to put on the public internet. I could mix unstable packages on top of Bookworm, but that's a recipe for future disaster. "If I was still running ubuntu, i could have used a PPA." but canonical burned me too many times.

> But that's not the problem if Rust ABI: these packages don't expose anything with Rust ABI.
Khim: Perhaps we're speaking past eachother. The ABI to me, is the versioned symbols exposed in the libraries (including the stdlib bindings) so anything dlloading from a rust .so by necessity, exposes an ABI. The problem, is that rust's keeps churning for no apparent reason. I see version number go up, but I don't see the benefit. I'm not slapped with a release notes like Python3 that informs me of the major differences. If there is such a thing, I must have missed it, apologies in advance.

> P.S. I wonder where the conflation of “something is supported for X years” and “something may be used for X years without software upgrade” comes from. People often conflate these even if they are clearly very different.

"supported" is an overloaded term. Most normal people assume "support" means it will continue to operate as intended, and some communication facility is in place to make inquiries/request replacement. ("If it breaks, you get to keep *both* pieces.")

In computer science, it has a completely different meaning, indicating if a facility is available or unavailable. ("Ethernet/Wifi/Bluetooth support")

In open source, "supported" also has a different connotation: Is the original author willing to make changes based on consumer feedback? If the answer is no, then the software is considered "unsupported" but remains operational.

Average humans are rather bad at unwinding overloaded terms. It takes a nerdling to stop and think and disambiguate their meanings on the fly, or so it seems. (No offence intended, nerd is a positive attribute to me.)

> No. It mandates that whatever has shipped has gone through extensive certification processes. Changes are permitted but each (no matter how minor) has to be separately justified, documented, and extensively tested.

> ...As the saying goes, safety regulations are written in blood.

pizza: Just curious, in this context, what does "shipped" mean? Providing new downloads? Mailing a storage device? Exchanging a 1U rack appliance?

When is Rust going to have a stable distro experience?

Posted Jun 26, 2025 21:39 UTC (Thu) by pizza (subscriber, #46) [Link] (13 responses)

> pizza: Just curious, in this context, what does "shipped" mean? Providing new downloads? Mailing a storage device? Exchanging a 1U rack appliance?

As in the sale/delivery of a physical product from a manufacturer to its customer[1]. If that customer eventually resells said product to a third party, the original manufacturer's obligations transfer over to the new owner.

(Think medical devices, automobiles, or anything else that could be considered safety-critical or whose behavior is highly regulated)

[1] More often than not, this is the date of the _final_ sale/delivery of a given product.

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 1:49 UTC (Fri) by Kamilion (subscriber, #42576) [Link] (12 responses)

Noted. Appreciate your term expansion within that domain of expertise.

Disregard the following, if you would.
<rant>
Although, just from your shortlist, I already "know" some corner cases.

Medical Devices? *shudder* Last time I was in a hospital, I witnessed several patient monitoring devices clearly operating on top of Android. I doubt they have Playstore available on them, but I assume they've bodged up some other OTA mechanism, as there's no way they could have gotten things right the first time.

Automobiles? *shudder* My 1996 honda civic has never required a firmware update to my knowledge. My acquaintances' modern vehicles seem to defy this concept, requiring frequent OTA pushes (with no apparent oversight) that can affect safety-critical devices on the CAN busses. Generally they have some sanity interlocks, but the telematics system is in full control over all of the other busses in the automobile. Blessings upon SocketCAN, my beloved userspace problemsolver. Why yes, I *can* change the configuration of your daytime running lights after an interstate move.

Aviation? *shudder* I'll take my chances on a train. They won't fall out of the sky if something goes wrong. Sure, there's plenty of other problems with rail, but it's still a lot safer than automotive statistics. Boeing isn't exactly winning any favors recently; anyone remember how proud they were to use ADA/Spark? Meanwhile the whole geolocking from newag just reinforces my point. Give them a picometer, and they'll take a kilometer.

I respect MISRA as much as the next guy, but I also interact with a lot of code artifacts that are the absolute inverse of mission critical. Entertainment code is... Yeah, there's an XKCD about voting machines? That one. Take it into the desert and burn it. Wear gloves.

When *IS* the date of the final sale/delivery of a product in this era? (this is rhetorical, and doesn't require a serious answer, I've got plenty of purchase orders and invoices to reference.)
And at what point do we get a warranty extension from a vendor's update? (At their discretion, of course. Which is, basically never, unless the consumer recalls twists their arm. How many recalls is GM up to for a single model now? 13? 14?)
Is anyone going to bother getting that in law, or are we going to continue waffling about generative AI for the next decade? (D: All of the above.)

I'm seriously tired with the obsequious Terms of Service that I *must* agree to, in which the other party has demarked the ability to change the rules at any time, and denied me the same. It's not that I generally *want* to change the contract, it's just become so one-sided these days that consumer rights have almost become a joke like military intelligence, canning jars, jumbo shrimp, or advanced BASIC.

That's part of the reason why, despite all the pain and vitriol, I remain committed to the GPL; which appears during the process of copying, and vanishes as soon as the copy has concluded.

</rant>

When is Rust going to have a stable distro experience?

Posted Jun 27, 2025 11:41 UTC (Fri) by pizza (subscriber, #46) [Link] (2 responses)

> When *IS* the date of the final sale/delivery of a product in this era? (this is rhetorical, and doesn't require a serious answer, I've got plenty of purchase orders and invoices to reference.)

Generally, it's when the manufacturer ceases selling the device, or delivers the final example if those two dates are not the same.

> And at what point do we get a warranty extension from a vendor's update?

Warranties universally kick in at the time of sale, with a fixed scope and duration, and may or may not be transferable upon resale. Repairs _may_ yield extensions to the general warranty, but it is rare that the extension covers anything other than what was scoped in the repair. But warranties are generally a contractual term that can be altered or waived. Laws/regulations transcend that.

Let's say I have a 3 year warranty on a car; I get a repair done at 2.5 years; that repair has a 1yr warranty. If the repaired part breaks at year 3.1, they have to fix it for free, but if anything else breaks, I have to pay if I want it fixed. Let's also say that my specific car was was manufactured and sold in 2020, and was sold until early 2021. This means the manufacturer is on the hook to supply certain spare parts and perform safety-related recalls at no charge for my specific car until until 2031 (ten years after the final unit was sold, but eleven after I purchased it)

This is an oversimplification but I hope it offers some clarification.

> I respect MISRA as much as the next guy, but I also interact with a lot of code artifacts that are the absolute inverse of mission critical.

If you *shudder* so much thinking about the state of code in automotive, medical, or aviation, consider that those are overwhelmingly superior in quality to everything else in your life. It's quite depressing.

(But I'd also caution you to recognize that not every bit of code in a car, airplane, or medical device has "life or death" safety implications. There are strict redundancy, robustness, and isolation requirements for the latter..)

When is Rust going to have a stable distro experience?

Posted Jun 28, 2025 2:57 UTC (Sat) by NYKevin (subscriber, #129325) [Link] (1 responses)

> (But I'd also caution you to recognize that not every bit of code in a car, airplane, or medical device has "life or death" safety implications. There are strict redundancy, robustness, and isolation requirements for the latter..)

Indeed, the amount of code that has safety implications in aviation is probably dwarfed by the amount of code that's just there to make the seat-back entertainment system work.

(And no, that's not a problem. The entertainment system is or should be fully air-gapped from the avionics. It's really just an elaborate HTPC-like-thing with a lot of screens and a terrible bespoke UI. If it breaks, oh well, the passengers can't watch movies, and maybe we have to do the safety presentation the old-fashioned way instead of playing the fancy video that marketing told us we're supposed to play for that purpose.)

When is Rust going to have a stable distro experience?

Posted Jun 28, 2025 22:13 UTC (Sat) by SLi (subscriber, #53131) [Link]

Eh, yes, should be. Cost cutting always results in "there's an obviously idiot proof software solution, nothing can go wrong." 🙈 Which might even work well enough absent hostile attacks. In practice, although I don't know all the safety critical domains, I'm afraid it's more like VLANs instead of physically separate networks. And that... probably works, absent malice, which the industries are only learning to think about.

When is Rust going to have a stable distro experience?

Posted Jun 28, 2025 22:09 UTC (Sat) by SLi (subscriber, #53131) [Link] (8 responses)

> Medical Devices? *shudder* Last time I was in a hospital, I witnessed several patient monitoring devices clearly operating on top of Android. I doubt they have Playstore available on them, but I assume they've bodged up some other OTA mechanism, as there's no way they could have gotten things right the first time.

Having worked in that and other safety critical domains I can say the needed shift of mindset is not easy coming from a normal world. But no, I don't think running on Android is a problem, especially if it's an old version of Android.

The big principle here is that you've supposedly thoroughly verified that your product does what it should, in a way that avoids danger. You want to guarantee that it will keep behaving _exactly that way_, down to having the same buggy behavior, unless there's a really good reason to make a change—and be prepared to justify that well.

That means you don't upgrade your Android. That would be madness. It worked in 2014 and doesn't kill anybody; why would it suddenly have stopped working if used the same way? As a general rule, you're not supposed to expose these things to anything hostile, and I find that's one place where the safety critical industry is still coming to the realization that they need to be able to do better than to wave hands around "the hospital network is a secure private network", but "doesn't kill the patient in a non-malicious context" still by far trumps that. The human hardware and software hasn't changed much since 2014, and you don't connect it to anything fancy new uncertified.

It's also my understanding that modern airplanes come with erratas that are much thicker than the manuals. That's all known bugs that are seemed not severe enough to warrant fixing given they do not endanger humans or prevent operating. As an example, one plane model had a bug where a landing system would reboot (we avoid the word "crash" here) if you tried to land on a runway with a heading of 0.0°. Then it would reboot and quickly come back online.

The errata gives a workaround: You set it to 0.0° and, if needed, land slightly off the middle line to compensate.

Do you really think that an industry that prefers this to fixing the software to jump happily when you tell them "just upgrade the compiler"? It probably won't even run on the computers they're allowed to use to build that software from 2014 :D

When is Rust going to have a stable distro experience?

Posted Jun 28, 2025 22:35 UTC (Sat) by mb (subscriber, #50428) [Link] (7 responses)

> Do you really think that an industry that prefers this to fixing the software to jump happily when you tell
> them "just upgrade the compiler"?

No.
Just don't upgrade *anything*.
It will keep working and compiling.

Expecting to be able to upgrade random A while avoiding upgrading fundamental B is beyond my understanding.

When is Rust going to have a stable distro experience?

Posted Jun 28, 2025 22:47 UTC (Sat) by Wol (subscriber, #4433) [Link] (6 responses)

> It will keep working and compiling.

I think North American Air Traffic Control would beg to differ. They can no longer find a reliable source of 5 1/4" floppy disks, I believe ...

Cheers,
wol

When is Rust going to have a stable distro experience?

Posted Jun 28, 2025 22:52 UTC (Sat) by mb (subscriber, #50428) [Link] (5 responses)

I was obviously talking about software.

When is Rust going to have a stable distro experience?

Posted Jun 30, 2025 10:39 UTC (Mon) by taladar (subscriber, #68407) [Link] (4 responses)

Even with software achieving the state where you don't upgrade anything at all can be hard due to changes in your environment (e.g. systems you need to talk to change, legal requirements change, the hardware you run on changes because the old version is no longer available).

The really big flaw, however, is the idea that changing a few things is almost as good as not changing anything, especially when changing those few things results in a version that is much less tested than the latest upstream stable version of a piece of software (e.g. backporting just security fixes). All you get is a changed version, often changed by people with a lot less experience with the software, that is less tested and immediately sent to the people with the highest stability requirements as the first users to discover all the newly introduced bugs.

When is Rust going to have a stable distro experience?

Posted Jun 30, 2025 11:03 UTC (Mon) by pizza (subscriber, #46) [Link] (3 responses)

> The really big flaw, however, is the idea that changing a few things is almost as good as not changing anything, especially when changing those few things results in a version that is much less tested than the latest upstream stable version of a piece of software (e.g. backporting just security fixes).

You forget that (1) upstream's tests don't cover *your* code, (2) upstream may *intentionally* change how something behaves vs an older version, introducing a regression that upstreams do not consider a bug (this is the unfortunate norm for Python, for example), and (3) most upstreams don't have "stable" vs "unstable" distinction, freely mixing fixes for old problems in with new development.

RHEL covers all three situations -- they backport fixes to their own "stable" branches, run all upstream tests, and also have a comprehensive in-house test suite (often including [propritary] customer software) that includes looking for ABI/API changes. Actual RHEL customers pay a lot of money for this work because they find it valuable (And as an aside, everyone who uses CentOS, Alma, Rocky, or any of the zero-cost RHEL rebuilds also finds it quite valuable, but for some reason feel entitled to get it all for free..)

When is Rust going to have a stable distro experience?

Posted Jul 1, 2025 8:57 UTC (Tue) by taladar (subscriber, #68407) [Link] (2 responses)

> Actual RHEL customers pay a lot of money for this work because they find it valuable

Because they find it valuable to have someone to blame, not because the actual work is valuable. RHEL is one of the most painful distros to use and administer out of all I have ever used and things break much more often than on e.g. Debian despite RHEL having a small fraction of the packages.

> And as an aside, everyone who uses CentOS, Alma, Rocky, or any of the zero-cost RHEL rebuilds also finds it quite valuable, but for some reason feel entitled to get it all for free

Mainly because they need to be compatible with RHEL for some requirement dictated externally (e.g. build some binary to run on RHEL, some driver is only developed for RHEL,...) not because those distros are easy to use or even particularly stable.

When is Rust going to have a stable distro experience?

Posted Jul 1, 2025 14:03 UTC (Tue) by pizza (subscriber, #46) [Link] (1 responses)

> Because they find it valuable to have someone to blame, not because the actual work is valuable.

Make up your mind; either what they provide is valuable, or it's not.

Keep in mind Red Hat is bringing in about $6.5 billion in annual revenue; that works out to somewhere between 2.3 million and 32.5 million individual RHEL licenses (using the $200->$2800/yr fees they list on their web site).

> Mainly because they need to be compatible with RHEL for some requirement dictated externally (e.g. build some binary to run on RHEL, some driver is only developed for RHEL,...) not because those distros are easy to use or even particularly stable.

There you go redefining terms again. ISVs and end-users clearly find that multi-year supported "stable" target to be quite cost-effective, and definitely more so than the alternatives.

When is Rust going to have a stable distro experience?

Posted Jul 3, 2025 8:14 UTC (Thu) by anselm (subscriber, #2796) [Link]

Keep in mind Red Hat is bringing in about $6.5 billion in annual revenue; that works out to somewhere between 2.3 million and 32.5 million individual RHEL licenses (using the $200->$2800/yr fees they list on their web site).

Sure, but presumably a certain number of these licensees run RHEL not because they think RHEL and its policies are the bee's knees, but because they're really interested in running something else that requires them to have RHEL underneath it, so they don't really have a choice in the matter (and the “something else” is so expensive that the RHEL licenses disappear in the noise floor).

When is Rust going to have a stable distro experience?

Posted Jun 29, 2025 23:08 UTC (Sun) by cjwatson (subscriber, #7322) [Link]

While I'm not sure I really see the connection to this article, I uploaded OpenSSH 10.0 to Debian stable-backports last month. You can use it from there.

If the free-threading model breaks so much...

Posted Jul 5, 2025 10:11 UTC (Sat) by lproven (guest, #110432) [Link] (1 responses)

... Then perhaps this should have been Python 4?

Just a thought.

The team showed it was willing to break backwards compatibility and strange a megatonne of stuff high and dry with a new release once already. Actually, I respect that... but then, I am not a Python coder at all. But if it's happening again, for very different reasons but good solid reasons, because the GIL has to go, then maybe this should be a clean split. Call it Python 4 and let the ecosystem gradually catch up. Meanwhile, keep the GIL-based version in maintenance mode?

If the free-threading model breaks so much...

Posted Jul 8, 2025 8:15 UTC (Tue) by sammythesnake (guest, #17693) [Link]

The no-gil version will still run so the same code, it'll just turn the GIL back on where required. That's a very different situation from 2->3


Copyright © 2025, Eklektix, Inc.
This article may be redistributed under the terms of the Creative Commons CC BY-SA 4.0 license
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds