An interesting bit of history: for a long time Rust maintained first party support for Windows XP, after other parts of ecosystem generally gave up. This was because Firefox needed it.
I wish more languages support old platforms. I'm working in a company and a lot of our customers are running Windows 7 and 8, few of them running Vista. I have to use ancient versions of development tools to target those. For example stuck on Java 8 for eternity. It's PITA.
The problem is, as usual, that some people want that support, but nobody is actually interested in helping out with that support - and that doesn't only include people willing to help out with the code, it includes things like CI. Just how the riscv targets won't be able to reach tier 1 without GH or someone else offering CI support.
Rust's target tiers, while historically not as enforced as they are today, have requirements attached to them that each target has to fulfill; demoting a target or removing support isn't done for fun, but because of what the reality reflects. In Windows 7's case, support from the Tier 1 Windows target was not so much removed as it was acknowledged that the support guaranteees just didn't exist - host tools had long been dead with LLVM having removed support for running on Windows 7, and tier 1 support wasn't guaranteed without any CI to test it on. Thus support was removed, and very soon contributors popped up to maintain the win7 target which is tier 3 and accurately reflects the support gurantees of that target.
(Not a jab at your situation btw, and I wish I could offer you a solution beyond the win7 target - but as it's essentially the preexisting Windows 7 support extracted into a target that matched its reality, it works quite well in practice)
I do wonder how much support is removed because of genuine maintenance or compatibility burden, because I've encountered enough examples where it was done solely because some target was deemed "too old" arbitrarily, even if it would still work without any modifications.
> even if it would still work without any modifications
even in this case, maintenance burden is still real. supporting the old target often prevents you from using features/tools that make maintenance easier
Perhaps the best example I can think of is the whole situation
InstallShield is....massive crapware and actually generated 16 bit installers way way after anyone was using 16bit PCs. Nobody notices until, I think it was W8 or W10 dropped support for running 16bit executables (something about dropping the subsystem that supported them.
Windows 11 drops IA32, and thus (first party) MS-DOS and Windows 3.x support.
Windows actually has some special cased support for (at least some of) the problematic 16 bit InstallShield installers to run a 32 bit version instead on AMD64.
From InstallShield’s perspective, why would they replace working 16-bit code which is still natively compatible with Windows and x86? Because Windows and/or Intel might (or might not) drop support a decade later?
In Rust or in general? Because an arbitrary "too old" moniker is not something I've seen happening, and the only target that was removed instead of demoted in recent times was i586-pc-windows-msvc, aka Windows 10 without SSE, which was...utterly pointless since Windows 10 requires SSE.
If anything, I quite like the way Rust handles it with target tiers and easy switching between targets, because it's an honest approach about how well a target is supported. Having a win7 target that is tier 3 is a reflection of the support it has, and much better than stringing it along in the main Windows target that promises tested support when there isn't even a Windows 7 CI to test on.
Languages that compile to C (e.g. Nim) are great on older systems. If a system has a working C compiler (or cross-compiler), there’s a good chance that it’ll just work.
I’ve myself compiled Nim on Windows 7, Windows XP, and Haiku, and have run simple Nim programs on the C64 and GameBoy Advance.
Tried to use Nim with VBCC to cross-compile to Amiga, but I failed. I think Nim does some pretty heavy assumptions about the C compiler that is used to compile the generated code.
I'm not aware of any working LLVM solution? All I know is that LLVM supports MC680x0 as a backend, can spit out 68k-but-non-amiga-objects and some brave souls have trying to use vlink or mold to produce Amiga executables. Have you seen any working LLVM-based Amiga (680x0 in hunk format) cross-compilers in the wild?
Actually I wasn't able to do it also with Bebbo's GCC fork.
Never used Nim before so I might be doing something wrong though.
I wish retro Amiga had Rust support. I've briefly skimmed what would be necessary to do, based on the rust-mos (Rust for commodore-64 fork), but I'm too weak in LLVM internals to actually do it.
> Never used Nim before so I might be doing something wrong though.
With Nim on weird targets you usually want:
- OS target = any
- Memory Management = ARC
- malloc instead of default Nim allocator
- turn off signal handler (if not POSIX)
- disable threads (most of the time)
Then look at how C is compiled and copy all compiler+linker flags to your Nim configuration.
Here's an absolute minimal `config.nims` I used to compile Nim for C64 with LLVM-MOS[1] toolchain:
Nim side was easy, because I have already compiled Nim to WASM at that point and the flags are similar. Hard part was figuring out the C compiler flags: e.g. cmake structure and why compiler complains about missing symbols, when they're not missing (answer: include/lib order is very important).
I thought the entire point of Kotlin was to allow you to write in a more modern language, and then compile to older versions of Java no? I've not kept up with Kotlin much, but I would expect it to help a little.
I know uh FreePascal targets everything including the Gameboy. But then Pascal isn't super modern or sexy unfortunately.
seeing Windows 8 called old really did some psychic damage to me. If it's not a secret, what kind of customers do you have? Is it some industrial stuff as usual?
Medicine. I'm living in third world country and probably they don't have enough money to upgrade often, they just install something and work with it for many years. Works for them, I guess, I often see computers with 2-4 GB RAM and some ancient Celeron.
My dentist had a system running Windows XP for X-rays until 2 years ago.
The vendor stopped supporting it (they technically still did, but would dodge replacing parts, etc.) so I eventually fixed some minor issues for her which turned out to just be software related.
A key thing is that the machine was not network attached.
I can't speak for medical equipment, but lab equipment in testing labs (including the ones in hospitals) needs to be calibrated correctly and run exactly to the vendor's specifications. They will continue to sign off on old hardware they continue to support, even if it's actually a Pentium 3 running Windows 95 with the expensive lab device attached via the parallel port.
If you try and switch out the host computer to something newer, the software may or may not work, but you will definitely fail your audits for changing software without the vendor's approval.
For their part, the vendor supports you buying the new version of their device for a few million quid and it now runs via USB attached to a Windows 10 computer running their proprietary software.
In my country the Government requires any salesman to have some computer for the sake of sending the info about any sell preferably immediately. I don't know why does they need this, maybe it is making easier for them buying the gold toilets. For example we still have corona-style limitations like no paying with card if the country is bombed somewhere or the businessman risks to be fined. The thing is that nobody wants to buy something more expensive than Pentium 4 or Core2duo especially because most of accounting software still does not support multithreading. So we the businessmen use to mass-buy that cheap hardware, then we install W7 as a good enough OS with no irrigating/pesky/unneeded nanny notifications. The used motherboard if dies it makes no problem, it costs $10. Believe me, the 7 is a perfect OS for self-spying to our Governments and if you want to lobby Rust into this business you have to support W7 somehow.
In my country the Government requires any salesman to have some computer for the sake of sending the info about any sell preferably immediately. I don't know why does they need this, maybe it is making easier for them buying the gold toilets.
If that country happens to be Germany, it's to combat tax fraud.
Germany still does not generally require this. It's required if you use an electronic cash register (and only since recently), but if you don't, it's perfectly legal to just tally the money with pen and paper at the end of the business day. It's how all the small fast food restaurants do tax evasion: just scribble half of what you actually sold on the back of a napkin, and that's enough "proof" for the tax authorities.
The current governing coalition has come to an agreement that electronic cash registers will be mandatory starting in 2027, but that law hasn't been passed yet.
In Germany there are no such pastime as shitting gold. BTW Germany is well-known country who shitted its IT revolution in exchange of migrants. Keep working dear Germans, that Algerian guy with no job but with Lambo will not survive without your taxes. (if somebody is isterested, he has a big family but takes all the money from all his daughters because this is his business plan to pet Lambo with no effort).
Big assumption there... chances are they would rather keep the money or spend it elsewhere, instead of "unnecessarily" upgrading when things still work
If its medical industry those machines are offline. Same thing with CNC machines still running windows 98 in some workshop. Hell we still use some windows XP laptops here with the networking disabled because places are still running fire alarm panels from the 80s/90s and using serial comms via Virtual Machine is finicky as fuck on a modern laptop.
The question is how much are people willing to pay for this trouble. Usually industries that stick to very old system did so because they didn't want to invest resources in the migration.
> Usually industries that stick to very old system did so because they didn't want to invest resources in the migration.
That can be the case, but there's also a lot of instance where it's not a matter of not wanting to invest, but that being stuck on an older system is the only option until a larger component also goes EOL or dies and cannot be repaired.
I see this all the time in manufacturing. User control interfaces that run on Windows XP or 2k. Machine is still great, can still get parts & repair it, but the software has long ago since stopped being supported. The manufacturer isn't going to spend 6 figures to replace a machine that hasn't fully depreciated yet.
In these instances, you just air gap it off and you're fine.
It's not hard to do either, especially on Windows where backwards-compatibility is almost completely guaranteed.
Of course those in the planned obsolescence mindset would fight hard against it, because then it would be harder for us to take the good without the bad.
I think it's more like your gen1 wi-fi enabled Philips screwdriver stops working because it's EOL as opposed to because nobody uses Philps screws anymore. Sometimes it's the latter, but not always.
A more direct analogy is right there; your Phillips head screws cam out more easily than Torx. Everyone who wants screws that don't shred as easily moves to that weird 6 pointed star pattern, and your Phillips head screwdrivers are suddenly EOL'd.
I’m a huge Java fan, modern versions are amazing, but being stuck on 8 is the only time I’d recommend just using Kotlin or Scala and compiling to v8 byte code. 8 is just a miserable experience.
Other than that, I think we’re all waiting for Josh Bloch to put out Effective Java 4th edition.
The main benefits of the post-8 world that I would look into learning are: pattern matching and destructuring, sealed (sum) types, records, and switch expressions.
In the library/framework space I think learning about quarkus, microprofile, and jakarta data would be valuable. It’s looking like that’s the future of Java on the server.
Less important things to learn about would probably be runtime changes like virtual threads, ZGC, or the AOT cache stuff coming out of project Leyden. Long term things to keep an eye on are value classes if we ever get them.
Modern Ubuntu is a laughable example with a lot of untested Rust components added just for the sake of some big corporations.
Defining better OS is almost as complicated as defining better philosophy. Somebody is leftist, somebody is rightist you know what I mean. When you see what's better usually you can not unseen it.
For me Woedows 7 can give:
1. years of uptime (still with regular browsing! and with using S-states!);
2. native support of god-like NTFS, all my personal backups has it;
3. better support on laptops, for example just try to ditch the UnneededD (Devuan) and you are going to say buy-buy to predictabrle S-states, stable USB performance when using multiple devices and who knows what else;
4. the best battery time among all the market;
5. some old hardware like ATI videocard can not be run on modern kernell, also some old hardware like my digital oscilloscope, my friend's digital syntheiser - all of that makes me not just use but love he Bill Gate's crap. You don't even tied to any version of your appreciated Debian.
6. A lot of industry-best software at least requires me to have Wine. Foobar as the best audio player, STDU as the best book reader, Viktoria as the best HDD tester etc. I have a terabyte of music, hundreds gigs of books and dozens of external disk drives, consuming all of that is my typical non-work activity.
7. I also still use it for my daily job which involves using Internets. No viruces gotten, no unexpected behaviour observed, just working.
I meant it's not malicious compared to similar offerings. If anything, Microsoft has been extremely generous when it comes to support. Albeit not so much today (more on that later). It's a half-joke that the only stable ABI on Linux is Win32.
You can have Linux and waste your time, and then stuff updates and Linux breaks. You can have MacOS and lock yourself into a padded Mac themed cell, for five years, then you have to upgrade or stuff will stop working (I'm on Intel Mac, less and less stuff works each day).
---
As for your question.
Short: Blame capitalism and its current setup.
Long: MSFT needs to beat the inflation; otherwise, it's falling behind. And because Windows is no longer growing, you can't really do anything other than rent extraction. It's reached saturation point, which means that money needs to be extracted in some other ways - via ads, via upselling (buy an Xbox 365 subscription), via selling data, etc.
The language runtime maintainers specifically change parts that already work fine to use newer APIs that do the same thing. IIRC, the Go runtime changed which win32 function they call to generate random numbers. It would've been free for them to just not touch it.
Shameless plug: Some of my hobby projects written in C (e.g. https://github.com/pts/bakefat) can be built reproducibly for Linux >=1.0 (1994), FreeBSD (same ELF executable program file as for Linux) and Win32 working on all versions of Windows (Windows NT 3.1 (1993)--Windows 11). The C compiler (running on Linux i386 and amd64 host) used for the release build is self-contained and included in the project, along with the libc.
Doing such backward compatibility is definitiely possible for command-line tools. Once set up, it's automatic, and it needs extra testing after major changes.
You can compile JimTCL with MinC under XP, and maybe T3X0 too.
With JimTCL you can build a quick TCL expect clone, some netcat clone too with TLS can be done in minutes too, really good for debugging or to create a simple IRC/Email/Gopher/Gemini client in text mode.
Rust has 3 "platform support" tiers (effectively - guaranteed to work, guaranteed to build, supposed to work). However, these are (obviously) defined only for some of the target triples. This project defines "Tier-4" (which is normally not a thing) unstable support for Windows Vista-and-prior
tiers 1-3 are policies[0] for in-tree targets, so by saying tier 4 they mean one implemented in a fork. Though that kind of skips over targets that can get away with just a custom target spec[1] and not modifying the source.
In my mind the most common cases of people running ancient operating systems are computers in control of hardware. Plenty of hardware lasts much longer than 30 years, consequently there's still stuff out there that shipped with Windows 95 and never got new drivers. If you want new software for that environment Rust sounds like a great choice
https://github.com/rust-lang/compiler-team/issues/378 (major change proposal to drop Windows XP support) notes this history and links to other relevant pages.
Rust's target tiers, while historically not as enforced as they are today, have requirements attached to them that each target has to fulfill; demoting a target or removing support isn't done for fun, but because of what the reality reflects. In Windows 7's case, support from the Tier 1 Windows target was not so much removed as it was acknowledged that the support guaranteees just didn't exist - host tools had long been dead with LLVM having removed support for running on Windows 7, and tier 1 support wasn't guaranteed without any CI to test it on. Thus support was removed, and very soon contributors popped up to maintain the win7 target which is tier 3 and accurately reflects the support gurantees of that target.
(Not a jab at your situation btw, and I wish I could offer you a solution beyond the win7 target - but as it's essentially the preexisting Windows 7 support extracted into a target that matched its reality, it works quite well in practice)
even in this case, maintenance burden is still real. supporting the old target often prevents you from using features/tools that make maintenance easier
InstallShield is....massive crapware and actually generated 16 bit installers way way after anyone was using 16bit PCs. Nobody notices until, I think it was W8 or W10 dropped support for running 16bit executables (something about dropping the subsystem that supported them.
https://devblogs.microsoft.com/oldnewthing/20131031-00/?p=27...
Windows actually has some special cased support for (at least some of) the problematic 16 bit InstallShield installers to run a 32 bit version instead on AMD64.
Nope, that would be Windows 11! There is a 32-bit version of Windows 10.
If anything, I quite like the way Rust handles it with target tiers and easy switching between targets, because it's an honest approach about how well a target is supported. Having a win7 target that is tier 3 is a reflection of the support it has, and much better than stringing it along in the main Windows target that promises tested support when there isn't even a Windows 7 CI to test on.
I’ve myself compiled Nim on Windows 7, Windows XP, and Haiku, and have run simple Nim programs on the C64 and GameBoy Advance.
I'm not aware of any working LLVM solution? All I know is that LLVM supports MC680x0 as a backend, can spit out 68k-but-non-amiga-objects and some brave souls have trying to use vlink or mold to produce Amiga executables. Have you seen any working LLVM-based Amiga (680x0 in hunk format) cross-compilers in the wild?
Never used Nim before so I might be doing something wrong though.
I wish retro Amiga had Rust support. I've briefly skimmed what would be necessary to do, based on the rust-mos (Rust for commodore-64 fork), but I'm too weak in LLVM internals to actually do it.
With Nim on weird targets you usually want:
- OS target = any
- Memory Management = ARC
- malloc instead of default Nim allocator
- turn off signal handler (if not POSIX)
- disable threads (most of the time)
Then look at how C is compiled and copy all compiler+linker flags to your Nim configuration. Here's an absolute minimal `config.nims` I used to compile Nim for C64 with LLVM-MOS[1] toolchain:
Nim side was easy, because I have already compiled Nim to WASM at that point and the flags are similar. Hard part was figuring out the C compiler flags: e.g. cmake structure and why compiler complains about missing symbols, when they're not missing (answer: include/lib order is very important).[1] https://github.com/llvm-mos/llvm-mos
I know uh FreePascal targets everything including the Gameboy. But then Pascal isn't super modern or sexy unfortunately.
The vendor stopped supporting it (they technically still did, but would dodge replacing parts, etc.) so I eventually fixed some minor issues for her which turned out to just be software related.
A key thing is that the machine was not network attached.
If you try and switch out the host computer to something newer, the software may or may not work, but you will definitely fail your audits for changing software without the vendor's approval.
For their part, the vendor supports you buying the new version of their device for a few million quid and it now runs via USB attached to a Windows 10 computer running their proprietary software.
If that country happens to be Germany, it's to combat tax fraud.
The current governing coalition has come to an agreement that electronic cash registers will be mandatory starting in 2027, but that law hasn't been passed yet.
That can be the case, but there's also a lot of instance where it's not a matter of not wanting to invest, but that being stuck on an older system is the only option until a larger component also goes EOL or dies and cannot be repaired.
I see this all the time in manufacturing. User control interfaces that run on Windows XP or 2k. Machine is still great, can still get parts & repair it, but the software has long ago since stopped being supported. The manufacturer isn't going to spend 6 figures to replace a machine that hasn't fully depreciated yet.
In these instances, you just air gap it off and you're fine.
People need to upgrade. I'm surprised any machine running Vista could even use the modern web.
Somewhere out there is a Windows 98 machine controlling an industrial machine that will out live early posters on HN.
Of course those in the planned obsolescence mindset would fight hard against it, because then it would be harder for us to take the good without the bad.
Without sarcasm, it is entirely reasonable that when the OS is EOL by the 1st party, software support for it by 3rd party also ends soon after that.
Bugs and vulnerabilities are always being found, with fewer and fewer people in the pool that might even theoretically want to pay for fixing them.
Also, hardware does deteriorate, and the story is the same for adding software support for whatever is currently available in hardware.
none which haven't been there from the beginning
My last job used Java 8 exclusively and it was indeed a miserable experience, but I am contemplating using modern java for my next project.
Other than that, I think we’re all waiting for Josh Bloch to put out Effective Java 4th edition.
The main benefits of the post-8 world that I would look into learning are: pattern matching and destructuring, sealed (sum) types, records, and switch expressions.
In the library/framework space I think learning about quarkus, microprofile, and jakarta data would be valuable. It’s looking like that’s the future of Java on the server.
Less important things to learn about would probably be runtime changes like virtual threads, ZGC, or the AOT cache stuff coming out of project Leyden. Long term things to keep an eye on are value classes if we ever get them.
Defining better OS is almost as complicated as defining better philosophy. Somebody is leftist, somebody is rightist you know what I mean. When you see what's better usually you can not unseen it.
For me Woedows 7 can give:
1. years of uptime (still with regular browsing! and with using S-states!);
2. native support of god-like NTFS, all my personal backups has it;
3. better support on laptops, for example just try to ditch the UnneededD (Devuan) and you are going to say buy-buy to predictabrle S-states, stable USB performance when using multiple devices and who knows what else;
4. the best battery time among all the market;
5. some old hardware like ATI videocard can not be run on modern kernell, also some old hardware like my digital oscilloscope, my friend's digital syntheiser - all of that makes me not just use but love he Bill Gate's crap. You don't even tied to any version of your appreciated Debian.
6. A lot of industry-best software at least requires me to have Wine. Foobar as the best audio player, STDU as the best book reader, Viktoria as the best HDD tester etc. I have a terabyte of music, hundreds gigs of books and dozens of external disk drives, consuming all of that is my typical non-work activity.
7. I also still use it for my daily job which involves using Internets. No viruces gotten, no unexpected behaviour observed, just working.
You can have Linux and waste your time, and then stuff updates and Linux breaks. You can have MacOS and lock yourself into a padded Mac themed cell, for five years, then you have to upgrade or stuff will stop working (I'm on Intel Mac, less and less stuff works each day).
---
As for your question.
Short: Blame capitalism and its current setup.
Long: MSFT needs to beat the inflation; otherwise, it's falling behind. And because Windows is no longer growing, you can't really do anything other than rent extraction. It's reached saturation point, which means that money needs to be extracted in some other ways - via ads, via upselling (buy an Xbox 365 subscription), via selling data, etc.
https://github.com/mrk-its/rust-mos
It works, and builds binaries that are ready to be executed by Vice emulator.
https://news.ycombinator.com/item?id=23313577
https://news.ycombinator.com/item?id=31112273
https://news.ycombinator.com/item?id=37787161
https://news.ycombinator.com/item?id=38810782
Doing such backward compatibility is definitiely possible for command-line tools. Once set up, it's automatic, and it needs extra testing after major changes.
https://minc.commandlinerevolution.nl/english/home.html
IronTCL for XP and up
https://minc.commandlinerevolution.nl/english/home.html
Updated SSL/TLS certs, again for XP and beyond:
https://legacyupdate.net/
Tiny Pascal-like language targetting DOS, CP/M and Unix:
https://t3x.org/t3x/0/index.html It's no Free Pascal but it can do good stuff with very little:
https://t3x.org/t3x/0/programs.html
JimTCL, a tiny TCL with bundled TLS, JSON, Sqlite3 and, optionally, some SDL2 support:
https://github.com/msteveb/jimtcl https://jim.tcl-lang.org/home/doc/www/www/index.html
You can compile JimTCL with MinC under XP, and maybe T3X0 too. With JimTCL you can build a quick TCL expect clone, some netcat clone too with TLS can be done in minutes too, really good for debugging or to create a simple IRC/Email/Gopher/Gemini client in text mode.
[0] https://doc.rust-lang.org/beta/rustc/target-tier-policy.html [1] https://doc.rust-lang.org/rustc/targets/custom.html
3.11, Win32s (so still using 32-bit, not 16-bit code.)
https://www.mikekohn.net/micro/amiga_java.php
https://nitter.net/turbolent/status/1617231570573873152
Just because you’re targeting windows xp doesn’t mean you need to run windows xp to do development.