Demoting i686-PC-windows-gnu to Tier 2

67 ingve 36 5/26/2025, 2:16:11 PM blog.rust-lang.org ↗

Comments (36)

kstrauser · 16h ago
That seems reasonable. If you want to keep building software on by now ancient hardware, they’ll still give you the tools to do it. They’re just not going to slow down development for the platforms most people use to accommodate it anymore.

For context, that platform had 76K downloads. x86_64-unknown-linux-gnu had 135M, or about 1800x more.

DaiPlusPlus · 15h ago
> If you want to keep building software on by now ancient hardware, they’ll still give you the tools to do it

There are other use-cases, though not exactly popular or mainstream, but supposing you need dozens, hundreds, maybe even over a thousand currently-supported Windows VMs running off a single VM host box: you'll achieve a higher VM density with an x86 build of an OS compared to the x64 build; right now the only option is some cut-down custom build of Windows 10 Embedded x86[1]

...though I'm sure no-one outside of a DEFCON or CCC meetup's drinking-game will ever find themselves doing this - just so long as I get to see it in a youtube video.

[1] EDIT: Turns out they renamed the (non-CE) NT-based Windows Embedded to "Windows IoT" - which annoys me because it's perfectly allowed to make a Windows IoT build without any networking features enabled - so it'd be like calling Apple's iPod Touch as Apple's "iPod iPhone".

----

I'll admit I'm surprised that "x32" (i.e. AMD64 ISA, but with 32-bit pointers) was never supported on Windows, nor exactly popular on Linux, because (at least before Electon Apps existed) plenty of software really has no business using 64-bit pointers, so it makes sense to keep 32-bit pointers; another benefit-of-sorts is that if your program has a memory-leak then it'll crash once the leak hits 4GB - but with 64-bit pointers your process might end-up gobbling hundreds of gigs of RAM before the next malloc call fails.

While we're at it, let's also bring back Intel's 21-bit NEAR/FAR pointers ("segmented memory") if only to keep Rust programmers (and their compiler team) on their toes.

kstrauser · 15h ago
So, the Rust team didn’t say they wouldn’t support it, but more that they couldn’t. They’re don’t have in-house experts today who are experienced enough with that platform to support it efficiently. I’d say that a person or company who needs to run thousands of VMs on a single machine would be exactly the right one to step up and adopt it as a maintainer.
alerighi · 15h ago
True, but, the advantage of using 32 bit pointers to save a couple of RAM is not that important, since applications typically don't use that much pointers, thus if you half the size of them you will save probably a couple of kb of RAM.

Maintaining the support for a different architecture only for that doesn't make a lot of sense, probably the reason it was never supported. RAM is cheap these days so...

weinzierl · 15h ago
"probably a couple of kb"

Pointers are everywhere. In real world applications we see an increase between a quarter to a third. For example in 2016 Mozilla reported 25% increase from 32-bit Firefox to 64-bit [1]. Google deemed it necessary to implement pointer compression in Chrome to counter the effect. Java also has pointer compression.

[1] https://blog.mozilla.org/nnethercote/2016/07/22/firefox-64-b...

alfiedotwtf · 12h ago
It’s not just a problem for size, don’t forget you also have to copy bits across busses and several layers of cache - and doing so is not instant!

And that’s just thinking in terms of logical RAM. You then have translation tables which pointers need to index into - having them larger makes indexing even more slower, compounding the issue

karmakaze · 11h ago
It can be important, but also there are ways of using compressed pointers on 64-bit systems for similar savings. Search/prompt "What modern systems or programming/runtime environments use compressed pointers of some form?" for details.
adgjlsfhk1 · 12h ago
the counterpoint is that if you really are memory stressed, you shouldn't be using windows.
DrillShopper · 6h ago
> another benefit-of-sorts is that if your program has a memory-leak then it'll crash once the leak hits 4GB

If you want that, you can enable ulimits without changing your ABI.

SoftTalker · 13h ago
Building on a variety of architectures often shakes out bugs that might not be evident otherwise. Seems they are deciding those will just be ignored, rather than addressed. Security researchers might focus on these for potential exploits.
comex · 12h ago
i686-pc-windows-msvc and i686-unknown-linux-gnu are still tier 1. Any bugs that show up in i686-pc-windows-gnu but neither of the other two are almost certainly MinGW-specific jank, rather than anything that could have security implications on other platforms.
flohofwoe · 16h ago
This reads like it only affects the 32-bit target (which tbh is surprising to see supported at all, since afaik there are no more supported 32-bit Windows versions?)
wtallis · 16h ago
Yes, only the 32-bit target, and only the gnu toolchain. Compiling on Windows using the Microsoft toolchain to target 32-bit Windows will still be on the Tier 1 list: https://doc.rust-lang.org/rustc/platform-support.html

Interestingly, Windows on ARM hasn't made it up to Tier 1 yet.

ChrisSD · 14h ago
To be clear, tier 2 targets are still expected to be well supported. It just doesn't require CI to pass after every PR (meaning PRs aren't blocked on fixing tier 2 specific issues). However, the target is officially distributed and target maintainers are still expected to fix any blocking issues before a release. If they can't then it's likely the target will be demoted to tier 3.

Windows on ARM couldn't be tier 1 until recently as there weren't Windows ARM github runners. Now that there are I think it likely that it'll be promoted to tier 1.

wging · 12h ago
Does that end up meaning, in practice, that stable releases are never broken, but nightly might be, for a tier 2 target?
ChrisSD · 12h ago
More or less, yes. It is guaranteed that tier 2 at least builds so they'll be a nightly available every day though it's possible they might have a serious bug. To be honest though that's always a risk for nightlies even with tier 1 targets. Tests don't catch every potential problem (even if they do catch a lot) which is why there is a beta period before a release.
nikic · 14h ago
> Interestingly, Windows on ARM hasn't made it up to Tier 1 yet.

An RFC for that has been submitted recently: https://github.com/rust-lang/rfcs/pull/3817

adgjlsfhk1 · 12h ago
the problem with Windows on Arm is CI. Qualcomm cancelled their dev kit, so you run graviton/Ampere VMs, but it's pretty difficult to do automated tests on the hardware that all 5 users have.
zamadatix · 10h ago
There are Windows ARM GitHub runners now. I'm honestly not sure the dev kit would have helped, the existing Windows ARM hardware could be had for cheaper - just nobody cared to bother with it.

This is looking to go for it though https://github.com/dpaoliello/rfcs/blob/aarch64tier1/text/38... but we'll see if there is enough interest.

hulitu · 14h ago
> Windows on ARM hasn't made it up to Tier 1 yet.

Windows on ARM is irelevant. Surface is Microsoft's offering to keep execs away from Apple. And just like Apple, they are toys. All relevant Windows software is x86(-64).

malkia · 13h ago
Not true. Key point: "Cloud savings"
zamadatix · 16h ago
Windows 10 32 bit Home is supported until October. Some other 32 bit variants will remain in support until ~the end of the decade.
shdon · 15h ago
Technically there still is, for a few more months. There is a 32-bit version of Windows 10, and that won't end mainline support until October (and then a while of extended support, for those who wish to pay for such).

No comments yet

layer8 · 15h ago
32-bit apps can run natively on 64-bit Windows and are still reasonably common.
flohofwoe · 14h ago
Yes, and it's good that it is supported for running old apps. But IMHO there is little reason to build new Windows apps as 32-bit executables.
jeroenhd · 11h ago
Though I don't expect Windows targeting tools to leverage it much, using 32 bit pointers can be quite an efficient method to save memory when keeping track of lots of small objects. You're limited by 4GiB of memory per process, of course, but by switching to 32 bit you're practically halving the space spent on pointers.

Using smaller pointers also allows for better data locality and better cache efficiency depending on your data layout. If you're not close to hitting 4GiB of RAM, a few free percentage points in performance aren't a bad deal.

Microsoft isn't going to deprecate 32 bit application support any time soon, so you may as well take advantage. That said, so few people have need for it that the deprecation into tier 2 support is probably the right choice. Whatever the 32 bit ABI can do, a custom allocator can probably do just as well on x64.

Oh, and Office stll comes in 32 bit mode for some reason. If you're building an Office plugin, you may need 32 bit code.

flohofwoe · 40m ago
The upside is 32-bit pointers, but the downside is the small register set of x86. Best would be 64-bit ISA with 32-bit pointers, but I don't know if Windows supports such a mode.
kelnos · 35m ago
That mode is called "x32", and Windows doesn't support it. Linux does, but it's not particularly popular, and I believe many distros that used to support it have dropped such support.
layer8 · 14h ago
It’s friendly to users running older or LTSC versions (officially supported until 2032) on older hardware and/or in resource-constrained environments (RAM, power efficiency). There’s a large class of programs who are perfectly fine with 2 GB or less.
malkia · 13h ago
There is `clang-cl` and `lld` that can link windows executables cross platform, targeting "MSVC" without Wine hacks.
ftco · 10h ago
The bigger problem is legal concerns. Shipping MSVC headers might violate MS EULA.
mmastrac · 16h ago
This makes a lot of sense. Obscure Windows bugs make for unhappy developers. Unless you have a local windows setup, the platform is challenging to debug. I spent too much time while working at Deno on this sort of thing.
layer8 · 15h ago
They are only demoting one of two Windows targets. This isn’t about Windows, it’s about there being no maintainer for one of the two toolchains. Unfortunately, it’s the open-source toolchain that is being demoted.
josephcsible · 14h ago
It's not just one of two. There used to be four Tier 1 Windows targets, and there are still three: i686-pc-windows-msvc, x86_64-pc-windows-gnu, and x86_64-pc-windows-msvc.
dblohm7 · 15h ago
> If you rely on the *-windows-gnu targets and have expertise in this area, we would be very happy to have you as a target maintainer.

Damn, I'd love to take that on, if only I had the time...

jmclnx · 16h ago
Edit: Seems the article is only for Microsoft Windows, so what follows may be a waste of bandwidth :)

Well I guess this will cause OpenBSD to drop more packages that depend upon rust for i386:

https://marc.info/?l=openbsd-misc&m=174696055709421&w=2

FWIW, OpenBSD i386 seems to be on its way to tier 2 anyway:

https://www.openbsd.org/i386.html

I wonder if this could cause NetBSD to start dropping packages that need rust on some ports. Right now, due to NetBSD's assume Cross-Compiling, I do not think rust is an issue for NetBSD (yet).