Is windows actually better at never breaking user space?
Posted by kantvin@reddit | linux | View on Reddit | 158 comments
I remember linus saying there's really only one rule in the kernel, which is "don't break user space", everything else being a "guideline", even "not doing dumb shit". It does frequently happen, however, at least to me, that linux has a bunch of software that gets regularly broke and stops working, e.g. when a braile driver on ubuntu cause arduino ide to malfunction in my machine.
It seems that linux is very temperamental with compatibility issues in general, while Windows is always just "plug in and it works". Does that mean microsoft is better at not breaking user space than linux kernel devs? Or was linus talking about something even more specific about the kernel? And if so, how are the kernel devs better than Microsoft at that?
_jetrun@reddit
What Linus is talking about is more narrow. He's talking about not breaking the ABI/API contract with userland.
What tends to breaks is other stuff, like drivers, desktop environments, userland libraries, daemons, and apps. And this is where you can say that Windows is better at preserving *backwards compatibility*, even if Linux is as good at maintaining the kernel-userland APIs.
undrwater@reddit
Can you help me understand what you mean by backwards compatibility in your statement?
You highlighted it, so I assume you have a specific meaning.
ghost103429@reddit
You can run a program from 30 years ago on windows without worrying about compatibility with your current gcc version
_mr_crew@reddit
But can you? 30 years ago, we still had 16 bit software. Drivers from that era definitely don’t work.
-cocoadragon@reddit
Actually this code is the reason there is no Windows Nine. 9x means every version of windows 95 and 98 is still in windows 10 & 11.
not_some_username@reddit
Yes you can. You can blame MS for a lot of things but backwards compatibility was always a concern for them and also one of the reasons windows codebase is bloated.
_mr_crew@reddit
Tell me more about how your drivers from even the XP era still run? Or how “edit.com” or how “qbasic” runs in modern computers without dosbox?
D3PyroGS@reddit
doesn't change the fact that Microsoft's backward compatibility is legendary, including emulating obscure ancient bugs
_mr_crew@reddit
It didn’t make sense in response to my comment though.
SergiusTheBest@reddit
Some drivers compatibility has been broken in Vista and it's well documented and known. But aren't we discussing breaking userspace here?
Dub-DS@reddit
32 bit windows 10 can still run 16 bit software. 64 bit windows has to emulate it.
That being said, much more meaningful is the reverse. You can compile software with Windows 11 and the latest SDK and still target Windows Vista. Older than that is technically "unsupported", but you can still do it to run real world software under Windows 98. I've done it with gwdevhub/GWToolboxpp. And you can compile your applications fully static without any meaningful limitations. The dynamic loader is part of the OS, so you can load fully static dll's in your fully static applications. Or you can target the shared runtime and install it on any windows version without bricking your system.
Meanwhile, glibc refuses to link statically and musl just says fuck it, if you link against libc statically, you don't get a dynamic loader at all.
AsrielPlay52@reddit
You can run Black and White the game if you remove the stupid DRM on Win11 just fine
The thing about Windows is that they have to balance between bug fixes and user compatibility. My favorite examples is Lego Island
On Win98, Lego Island called for a title bar on Fullscreen but you never see it, on Win10 and after, this was "Fixed" and you do see it
needCUDA@reddit
Im so sad Black and white is not on steam.
MaNbEaRpIgSlAyA@reddit
Are you familiar with the de-compilation project that MattKC and others have been working on for the past few years? It's a fascinating case study into old Windows APIs.
AsrielPlay52@reddit
I did, that's where I learned it from
And yeah, but more like it's fascinating to see how old code were made
Like, an obvious flaw that isn't precent untuk decades later
ontario-guy@reddit
Yeah, that’s not always true, there’s a lot of petrochemical industry specific software that’s still only Windows XP or 7 compatible. And there was some Honeywell software we had to run on a Windows 3.1 laptop the same laptop that the Maclaren F1 needs: https://www.theverge.com/2016/5/3/11576032/mclaren-f1-compaq-laptop-maintenance
Negative_Link_277@reddit
You can still run Calc 1.0 that came with Windows 1.0 in Windows 11.
syldrakitty69@reddit
Ironically, in this video, something based on WINE is actually used to run it because Windows 11 can't run 16-bit programs.
whatyoucallmetoday@reddit
Dave Plummer has a video of him running the original task manager on his modern computer with many CPUs. https://youtu.be/Ve95Nh690l0
craigmontHunter@reddit
Drivers changed with the Vista transition, but Windows 10 32-bit supports 16-bit applications, Windows 11 is when they really broke that compatibility.
For all windows issues I can’t really fault backwards compatibility, they do that incredibly well.
gmes78@reddit
That's because they finally dropped the 32-bit version of Windows.
64-bit versions of Windows were never able to run 16-bit apps.
Kobymaru376@reddit
Not drivers but applications generally still do. Also 30 years ago was 1995 and we did have 32 bit programs then
Ffom@reddit
Ehhh
That would be 1995 at this point
I'm sure there are 32 bit programs from that year
_mr_crew@reddit
What I meant is that we hadn’t transitioned off of 16bit yet.
_ragegun@reddit
I mean, technically your GCC version should only a problem if you're building the program. Windows gets around that issue by distributing binaries, surely
ghost103429@reddit
Gcc version usually matters a lot when it isnt statically linked which is the case for a vast majority of software in Linux.
nelmaloc@reddit
You probably meant glibc, which is wrong because glibc has a very good backwards compatibility record.
Dub-DS@reddit
Backwards, yes. Forward, absolutely not. That means you need to run ancient, unsupported operating systems for your builds if you intend to distribute binaries. And keep patching source code and build systems because they're rarely maintained for said unsupported, ancient operating system versions.
Xotchkass@reddit
AHAHAHAHA
https://github.com/ValveSoftware/Proton/issues/6051
https://qa.fmod.com/t/glibc-2-41-breaks-loading-fmodstudio-libraries-in-standalone-linux-builds/22592
gmes78@reddit
Applications using glibc did not break because of that change. It was only an anti-cheat that was inspecting the data inside the executable that broke, because it did not support a format that glibc used.
That one was on purpose, for security reasons. In the case you linked, FMOD only broke because it was unnecessarily requesting an executable stack. If the FMOD developers had set up their build options correctly, it would never have broke.
There really aren't many more glibc-related breakages.
nelmaloc@reddit
A format, I'd add, that had been deprecated for 20 years.
Kobymaru376@reddit
No, it's also about the GCC runtime and the glibc that's linked to the program.
Mynameismikek@reddit
30 years ago? Probably not. But unless you’re using any massively obsoleted apis you can compile a 40 year old windows app and it’ll probably still be mostly ok.
Negative_Link_277@reddit
Windows Calc all previous versions running on Windows 11. Even Windows Calc 1.01 that shipped with Windows 1.01 that shipped in 1985 still runs.
ChaiTRex@reddit
Note that Windows 11 isn't running the apps (it says "This app can't run on your PC" for more than one version of calc.exe). You might as well say that Windows 11 can run Mac apps because you can run Intel macOS in a virtual machine. That's not what people mean when they say Windows 11 is running something.
ChaiTRex@reddit
Note that Windows isn't running the apps (it says "This app can't run on your PC").
s3gfaultx@reddit
It only still runs because it's running with wine. FWIW, it runs on Linux too.
Pure-Nose2595@reddit
Windows NT was 1993, there's definitely software from that year still working.
_jetrun@reddit
I meant 'backward compatibility' in the general sense, which would include more than just the kernel interface. Vast majority of applications will have dependencies on other userland libraries and if those change, your application will break (unless it explicitly pulls in the correct version).
For example, on the windows-side, Win32 API is a core userland library that has maintained binary compatibility with legacy software (10-20 years old). On the linux side, you have something like glibc, that is pretty stable but I would guess a 10-20 year old app wouldn't be able to just run with the current version (at least not without recompile ).
DGolden@reddit
Well, I've mentioned chrooting to older linux distro userspaces twice recently on this subreddit. Been doing it for a long time. Bit like newfangled containers but... the old ways, with one line instead of a huge song and dance. So long as "the kernel doesn't break userspace", and you know you can trivially chroot to old userspaces, the typical linux distro backward compat story is ....really good not bad? People coming from microsoft windows to linux distros may not realise that things like that exist though or know to look, while old timers like me just use 'em without mentioning them enough.
/r/linux/comments/1kytvfe/linuxvia_wine_lets_me_run_my_16_bit_32_bit_and_64/mv1xt6z/
AsrielPlay52@reddit
I think most Linux user don't even realized you can. Because this is first time hearing it
DGolden@reddit
I dunno, discoverability issue...
Very loosely analogous to the Linux ability to just chroot to older distro version userspaces to launch a binary executable, Microsoft Windows has a "Compatibility Mode" visible in its "Explorer" GUI desktop shell's icon Properties dialog for executable files, with a shortlist of specific windows version compatibility profiles that you can try to run an executable under if it doesn't work immediately on modern windows.
But that does mean the GUI pointy-clicky types see it. Whereas there's typically no Linux KDE/GNOME/etc. desktop GUI right-click menu option "Compatability: run this in a 'Debian 9 Stretch 32-bit' chroot environment". While I use do use a GUI environment I typically have a command line open, I just know I can type
schroot -c stretch32 ~/Games/SomeOldGame/executable
or whatever (well, after once-off debootstrapping the stretch32 chroot in the first place)The schroot changelog goes back to 2005 and raw chroot existed well before then, schroot is just a wrapper to make it tidier for the common case. So decades-old Linux functionality. Obviously you could do all this with newfangled full containers of old distro userspaces (or full virtual machines), but good ol' schroot still works. Especially since it's not a use case that demands stronger isolation I suppose.
It also used to be disk space was a bit of a concern for for storing chroots if you made too many, but right now my various chroots are taking up <20G of an aging 1T nvme ssd, meh.
shroddy@reddit
And here is a nice quote from https://wiki.debian.org/Schroot
DGolden@reddit
well, that's a wiki for you. They definitely shouldn't be encouraging
xhost +
like that (though chances are your X11 server isn't network-exposed/listening-for-tcp/ip anymore, it's still bad practice). I also don't actually do that to run X11 GUI apps inside my schroot-managed chroots, I have various things bind mounted in that mean that would be unnecessary (such as, you know, my /home, so apps inside the chroot see my ~/.XAuthority anyway, and my main /tmp so they see /tmp/.X11-unix/X0 anyway). schroot package comes with as /etc/schroot/desktop profile with such bind mounts.wayland is another matter, though we're not to the point I have old wayland apps in old chroots I suppose, and if I get to running wayland on my host, well there'll stll be xwayland for a while, that old x11 apps inside the chroots could presumably still hit.
nelmaloc@reddit
That's what Windows app do.
A 10-20 old app would definitely will run. Ubuntu came out in 2004.
Thirstythursday00@reddit
This thread discusses windows backwards compatibility at some length; that might give you the context you are looking for: https://www.reddit.com/r/Windows10/comments/wznszw/microsofts_backwards_compatibility_is_legendary/
eepyCrow@reddit
Only ABI! The API isn's yet guaranteed to be stable, but some kernel developers want to at least have rolling stability guarantees.
https://www.phoronix.com/news/Linux-API-Spec-Framework
gmes78@reddit
That is not about API stability. It's about having a more reliable way to define interfaces for user space to use.
nelmaloc@reddit
API compatibility is a requirement for ABI compatibility.
Ieris19@reddit
User space is not what you as a user interacts with.
It is what the kernel lets applications do, and by application I mean everything else except drivers and other kernel modules you can install.
Just because the kernel doesn’t break user space (which includes the root user) doesn’t mean the user space apps don’t break sometimes.
Window’s kernel is bundled with a DE, but when it breaks you get a BSOD. And that happens WAY more often on Windows than any sort of kernel panic happens on Linux
jaaval@reddit
I’ve only had bsod on windows in the past 10+ years due to faulty hardware. And I guess possibly once due to buggy graphics driver. I don’t think I have seen the kernel itself fail since windows vista. Most drivers can’t crash it either anymore even if they are bad.
Ieris19@reddit
Congrats? I’ve had about a dozen in the last 5 years
How many times have you heard of Linux having a kernel panic?
jaaval@reddit
Many times. For the same reasons windows does.
Kitten_Basher@reddit
I get multitudes every year, but then again, I’m a menace, and windows would shit the bed just as hard if it let me do the things I do to Linux.
iamthecancer420@reddit
>Window’s kernel is bundled with a DE, but when it breaks you get a BSOD.
??? why do you lie on the internet, this hasn't been the case since Windows XP, graphical elements and even drivers gracefully crash and restart themselves without bringing the computer down
MorallyDeplorable@reddit
"Windows BSoDs and Linux is stable" is a very 2009 line of thinking.
Ieris19@reddit
I never said that. I said that if anything Windows has the more unstable kernel.
But I agree with the sentiment elsewhere in this thread. This is a pointless comparison
MorallyDeplorable@reddit
Uh, these are your words, right?
Ieris19@reddit
Which is true, Linux kernel almost never panics.
I never said Windows BSOD and Linux stable.
I only said that if we’re comparing Windows shit 3rd party drivers and anti-cheat breaks more often than the Linux kernel. Which is true. But that isn’t really Microsoft’s fault I will admit.
derangedtranssexual@reddit
Yes windows is the king of backwards compatibility, you can run decades old binaries on windows that’s just not the case with Linux or Mac. There’s cons to Microsofts approach and I think since Linux just has much less proprietary software it’s easier for them to get away with less backwards compatibility.
BarracudaDefiant4702@reddit
You have to be kidding... I can run decades old linux software on newer kernels. As long as it was statically linked and console only it will almost certainly run.
Technical_Strike_356@reddit
Statically linked? Lmfao, literally nothing is. Glibc forces everyone to link libc dynamically because of some legal nonsense. Ever tried to compile a program and send it to your friend? Good luck getting it working if their glibc is even a day too old.
BarracudaDefiant4702@reddit
Just tested... compiled a program on Debian 12 with GCC 12.2 and ran it on an old system running Oracle linux 7 (it's designed for GCC 4.8.5). It ran fine.
Then I tested the more common case... compiled on EL7 and it ran fine on Debian 12.
You are obviously doing something wrong if it doesn't work for you. Glibc does not force everyone to link libc dynamically and you should try not to confuse your own inability to do something with some sort of tool restriction. What error did you get? You probably did a noob mistake like not even installing the static libraries on the machine you are compiling from.
Technical_Strike_356@reddit
Your """statically linked""" glibc is not actually static. You would know that if you actually... y'know... tested it. The main problem with statically linking glibc is that it uses dlopen to load extra libraries at runtime* (the one that comes to my mind is libnss), and that behavior of glibc cannot be changed trivially to the best of my knowledge. Because of that, you lose DNS lookups and locale detection.
As for the legal problem, the issue is that glibc is licensed under LGPL. That license does allow you to statically link code which uses that license, but the issue is that you need to provide your statically linked application in a form that allows users to relink it with a modified version of glibc, as you are technically creating a derivative work when you perform static linking. See section 6 of LGPL v2.1.
Before you call someone on the Internet a "noob", get your own crap straight.
BarracudaDefiant4702@reddit
Actually it is. I verified with objdump -T, and nothing is linked dynamically. If compiled without static linking, then many glib references show in objdump. Sorry, but your inability to make a static only binary in Linux is a you problem.
Technical_Strike_356@reddit
Again, you show yourself to have no idea what you're talking about.
I specifically said that glibc uses dlopen(3) to open the shared objects it needs, which obviously went straight over your head.
objdump -T
shows the dynamic symbol table of an ELF binary, i.e., only symbols which were linked at build-time. Since glibc usesdlopen
manually to only load libraries when they're needed, your test appears to work, since you probably didn't use any of the APIs which require dynamic libraries.All the information provided in my previous comment is available online, and searchable using free-to-use search engines. I don't know why you can't accept the facts.
BarracudaDefiant4702@reddit
If you statically link all libraries, then dlopen never gets called. As you say, it uses dlopen to open "shared objects it needs". If everything it needs is statically linked at build time then dlopen never runs. There is only a couple of libraries that you have to avoid, namely pthread, and nss will also try to be dynamic for host consistency but you can force that to be static.
BlueCannonBall@reddit
The other commenter is right about dlopen. But even if you could fully statically link glibc, you could only do so if your code is open source or you distribute the build artifacts necessary to "relink" your program to another glibc. This is due to the terms of the LGPL. Statically linking glibc is mainly a problem for proprietary programs, since proprietary programs are the ones distributed as one binary that meant to work on all distros and with all glibc versions.
nelmaloc@reddit
No, it's because it allows them to maintain shared state.
That's forwards compatibility. Windows doesn't have that either.
False.
Standard-Potential-6@reddit
Static linking comes with notable tradeoffs in terms of being unable to deploy security and even performance updates without recompiling all statically linking apps, as well RAM usage, and disk usage. That said, the compromise does sometimes makes sense today where it usually didn’t say 15-25 years ago.
Most Linux software is free and can be recompiled as is optimal by the distribution, so it doesn’t need to statically link, or else it can use a FlatPak or AppImage to bundle dynamically linked libraries. These solutions were late onto the scene, though. A great deal of closed-source software is statically linked. I can’t speak to your experiences with a “day too old” glibc at all though. ‘objdump -T’ on a binary can reveal required glibc symbols and their versions.
As far as I’m aware glibc is simply not designed to be statically linked, and there are gotchas if you try. The details are over my head but I believe character encoding flexibility was prioritized. uClibc and now Musl are commonly statically linked, though.
I believe the bigger issue may be that the interface between these libc and the kernel is not stable. This old Solaris article discusses it in detail, and I believe the problem remains with Linux for now: https://blogs.oracle.com/solaris/post/static-linking-where-did-it-go
derangedtranssexual@reddit
Okay you can say that about almost any operating system
is_this_temporary@reddit
Those are two pretty significant caveats.
nelmaloc@reddit
It is, if you make it right.
mina86ng@reddit
I’ve just started Opera 12.16. Couple years ago I’ve also successfully started Netscape Navigator 4. If you pick and choose, there’s a lot of old Windows software which runs on Windows 11 just fine, but if you look at all of it, there’s also bunch of software which doesn’t.
Maerskian@reddit
Adding up on this: i have a pretty old Win95/98 era scanner that stopped working on newer Windows versions quickly, while i can make it work on Linux nowadays. This and many other examples portrayed Linux as the ideal option for hardware retrocomatibility for years & years.
Then again, it's just cherry picking unless you go over a really long list of devices.
serverhorror@reddit
Overall, yes Windows does a way better job here.
Linus is talking about "never" breaking
libc
(or whatever else calls the kernel).Quite few people seeing
that's not the kernel breaking user land. That's user land breaking user land.
nelmaloc@reddit
That's forward compatibility. Windows doesn't have that either.
Dub-DS@reddit
Yes it does. Windows 11 is officially forward compatible all the way to Windows Vista by defining one (or a maximum of two) macros before including windows.h. Inofficially, without guarantees, it's actually forward compatible all the way to Windows 98 and probably before, despite extensive WinAPI usage. I just haven't tested anything older.
serverhorror@reddit
How is this forward compatibility?
dev-sda@reddit
Because that error happens when the program was built with a newer version of glibc than the one installed. You also can't build an app for Windows 11 and have it run in 95.
nelmaloc@reddit
Because you are trying to run a new program on an old glibc.
BlueCannonBall@reddit
At least on Windows, it's trivial to install multiple versions of the C runtime.
nelmaloc@reddit
I agree that updating to a newer glibc (on most package managers) isn't easy. Although I would argue that, for any non-trivial purpose, you should use Flatpak and Snap for distro-independent programs.
Ybalrid@reddit
you can get a binary compiled in 1995 for the win32 platform, and you can expect it to work mostly alright under SysWow64 inside the latest update of Windows 11 64bit, if it does not do calls to APIs that are too obscure or weird, or depend on drivers that do not exist anymore.
Linux on the Kernel side, is also pretty good at this too. But the rest (anything that is a dynamically linked library, all those .so files) it's another story.
CornFleke@reddit
Linus was probably talking about the kernel as he doesn't have any direct work with how desktop environment behave or how software are packaged. If a software creates a dependency hell that's on the package maintainer side.
If we are talking about all distro I'm mostly giving my interest to immutable distro and with flatpak and immutability/atomicity most of these issues are less spread and less dangerous.
Dub-DS@reddit
> If a software creates a dependency hell that's on the package maintainer side.
Glibc does that for you, you don't need to do it yourself.
jaaval@reddit
In that talk several years ago he was actually talking about desktops and packages. He was answering a question about what’s the problem with Linux desktop. He said that in kernel they have one rule. Don’t break userspace. But distros go breaking it all the time and just telling everybody to recompile. And that makes developing Linux applications painful. Compare to windows where you can just make a binary and it will probably run 20 years from now.
There are things like flatpak now that attempt to solve this problem by allowing multiple runtimes. A bit like windows does.
kombiwombi@reddit
Honestly, you are looking at the wrong place. The major 'brwaking user space" in the sense you intend was the Python 2 to 3 transition. That affected all operating systems
Ok-Bill3318@reddit
No. Try run a heap of games released on windows 95
zocker_160@reddit
Given that binaries from Windows 95 still work on Windows 11 meanwhile packages on Arch often don't even last a month until ABI breaks again, I would say yes.
MadeInASnap@reddit
When Linus talks about userspace, he’s talking relative to the kernel. The kernel is the only thing he works on. Basically every single program you run (including systemd, your desktop environment, your network manager, your file browser, etc.) are considered userspace to him, even though you would probably consider those part of the operating system.
Spare-Builder-355@reddit
Too much of engagement with a bot post for a community that's supposed to be tech savvy
kantvin@reddit (OP)
It's not a bot post 😭
Spare-Builder-355@reddit
You should attach some facts to your post statement so that we can have a meaningful discussion.
As it is your post is a typical rage bait.
kantvin@reddit (OP)
I'm not claiming anything and this is not ragebait, I am anouncedly an ignorant on the topic and asking for clarification about this one question.
shikkonin@reddit
Microsoft breaks userspace with every single major version. How are they better about it?
yebyen@reddit
Microsoft has preserved the capabilities of the Windows API since time immemorial. Take a .exe from Windows 3.1 and attempt to run it on a modern Windows 11 and you will find that it runs absolutely fine.
However, if you want to run software that depends on other APIs, you will need that API to maintain the same compatibility guarantee in order to enjoy the same benefits.
In that sense, Linux is every bit as good.
Yes, lots of software is changing, and some software like Xorg or Unity might not be supported anymore. You also don't have the Windows 95 start menu in modern Windows, instead you have this absurd React app with advertising served inside it. Some features deserve to die off and not be preserved.
What's that you say? Ubuntu still supports Unity even now? Maybe that was just some wishful thinking... 🤣
leonderbaertige_II@reddit
Especially games tend to often stop working on modern versions of Windows.
For example Star Wars Empire at War Forces of Corrpution didn't work on 7 without a patch. I still can't get Dangerous Water to work on Windows 10 and there is also the yt channel Nathan Baggs fixing various older games here and there.
AsrielPlay52@reddit
Often time this is because of shitty DRM from shitty Devs using features that windows don't intended for it... Or being very much a security issue
Black and White need a patch to remove the DRM, but once does, you can play even on modern Windows machine
dodexahedron@reddit
Well... So long as it is not a real mode 16-bit binary, which is a pretty high probability if going all the way back to 3.1. Those do not work on 64-bit NT kernels. You can run them in dosbox, though.
Negative_Link_277@reddit
Windows Calc 1.01 running on Windows 11. It came out with Windows 1.01 in 1985.
dodexahedron@reddit
That was not the original binary. It was recompiled.
Real mode 16-bit binaries will not run on 64-bit windows. Any version since XP.
Negative_Link_277@reddit
LOL @ denial of reality. Where was it recompiled in the video? Watch the whole video.
dodexahedron@reddit
What part of the CPU running in long mode being incompatible with natively running a real mode applications is denial of reality?
It is literally not doable without emulation or a thunking layer at minimum, which is not included in Windows 64-bit editions, and it has been that way since Windows XP 64-bit.
LOL yourself. 🙄
Dwedit@reddit
It's running on OTVDM, not base Windows.
Cats7204@reddit
Yep, they should've clarified only 32-bit apps work from Windows 3.1. Still great backwards-compatibility but that's why Windows 2 or 1 apps won't work on Windows 11 or Windows 10 x64. Dosbox doesn't count because that's an emulator, with that logic Windows can run literally anything from any era and almost any platform.
Negative_Link_277@reddit
Windows Calc from Windows 1.01 working on Windows 11.
dodexahedron@reddit
Man, some of the transition period from software designed for real mode to software designed for protected mode back then was PAINFUL, despite all of Intel's claims of compatibility. And Microsoft hit everyone with a hard cut from Win 3.0, which still supported real mode, to 3.1, which dropped that compatibility. And then Win32 came along with Windows 95.
It wasn't uncommon to have two binaries for something - one which would run in real mode and one which would run in protected mode, or one compiled against win32 and the other compiled against the older APIs (so, for example, you'd have a DOS version and a windows 95 version of some programs).
And modern CPUs STILL start in real mode and are just very quickly tranditioned out of it. Supposedly there was talk of finally killing that off recently, but I don't know where that ended up.
Dwedit@reddit
The .exe from Windows 3.1 requires a 32-bit operating system, since they took out 16-bit application support and DOS support out of 64-bit versions of Windows.
However, you can run Windows 3.1 programs by using OTVDM (powered by Wine code).
formegadriverscustom@reddit
Isn't Windows 11 64-bit only? I thought 64-bit editions of Windows couldn't run 16-bit executables.
KnowZeroX@reddit
Not directly, but windows does have running stuff in compatibility mode. But it wasn't uncommon for exes to stop working and told to use an old compatibility mode.
And drivers broke all the time between versions with many never working on new version even if you force it. I for example couldn't get my usb fax to work after windows 7 no matter what.
Raphi_55@reddit
As much as I hate it, you are right. Winword6 still work on win11
arwinda@reddit
How many users do use Winword6 on Windows 11?
Raphi_55@reddit
In the entire country? Around 10k... We are slowly moving to word m365, our unit was one the first to do so.
ventus1b@reddit
True statement.
Say what you want about Windows, but its backwards compatibility is phenomenal.
kantvin@reddit (OP)
I don't know, that what I'm asking lol
knappastrelevant@reddit
Yes but it's also to their detriment. Microsoft is so hell bent on preserving backwards compatibility that for a long time you had two taskbars, and the new notification bar would put things over the old taskbar, they were literally fighting for space.
spin81@reddit
What in the frick are you talking about
knappastrelevant@reddit
The notification center was supposed to take over from the old taskbar notifications, but they couldn't get rid of the old taskbar notifications because legacy programs were slow in migrating to the new notification center.
So on Windows 10 for example I had a long period where my Cisco AnyConnect VPN notifications would be hidden by the notification center notifications.
daemonpenguin@reddit
No, it doesn't. Linus is specifically talking about the kernel and its ABI. The kernel does not break compatibility with userspace. (With one or two very specific exceptions due to bug fixes over the past 30 years.)
What you are encountering is something entirely different and has nothing to do with what Linus was talking about.
Windows is definitely not like this. Every version of Windows breaks stuff from the previous version.
non-existing-person@reddit
What are the bugs? I am curious how badly they were, they decided to break ABI.
reveil@reddit
In short you can take any distro and build any newer kernel and it should always work as it is backwards compatible. The problem is it is only for the kernel so any library even glibc does not adhere to this. So any newer library version may break programs linked with it. Essentially an important guarantee between the kernel and userspace is broken because userspace libraries suck. This is the reason we have containers and languages like golang that just statically link everything to avoid this problem.
nelmaloc@reddit
glibc has a very good backwards compatibility record.
ertugyigit92@reddit
Man since he nuked his Linux installation while trying to install steam I don't even pay any attention to him
nelmaloc@reddit
Wrong Linus.
Richard_Masterson@reddit
Yes. Of the few good things about Windows it's the fact that it doesn't break compatibility for users too often. Office 2003 still runs on modern Windows, they're still patching Internet Explorer for the few corporations that still depend on it, etc.
Meanwhile on GNU world everything must be recompiled for every new version of glibc because they're not compatible with each other, GNOME devs purposedly break things between releases, etc.
nelmaloc@reddit
glibc has a very good backwards compatibility record.
spin81@reddit
I doubt they're doing it for free...
MoussaAdam@reddit
it's not an OS thing. both have a stable interface.
Linux developers tend to rely on dynamic linking. wheras window developers tend to rely on static linking.
It's the kernel that's breaking your userspace, it's all the libraries your programs depend on. when the library updates, it may break old versions. linus is responsible for the kernel, not for rhé software running on top of it.
the community of developers around Linux feel comfortable doing this because most code is open source, so they can recompile for newer versions when the ABI changes. and they have pacakge managers that make dependency management a non-issue, so they can rely on the package manager to ensure the needed libraries exist, instead of shipping with the libraries
spin81@reddit
Not if they're developing in Go
Slight_Manufacturer6@reddit
The Linux kernel doesn’t break user space… user space libraries, apps, packaging and other user space breaks user space.
The stability is more determined by the stability of the distro packaging itself. Many distros are far more stable and less prone to breaking than Windows… others run more bleeding edge and are therefore more susceptible to breaking.
One key difference is anyone can run beta or even alpha versions of Linux but nobody purposely runs beta/alpha versions of Windows except Microsoft employees.
You just need to pick a distro that fits you…. Update often or rarely.
skoove-@reddit
i dont know, i just know that i have never had a kernal panic in 3~ years of linux usage, and at least one a year on windows (one yesterday not even 3 hours after installing it)!
jdfthetech@reddit
Windows breaks user space all the time. Currently I am seeing tons of computers that are having major issues running because users upgraded to windows 11 and their PCs can't handle the OS.
Dwedit@reddit
One of the biggest changes I can think of is how
GetWindowRect
changed significantly after Windows Vista.In prior versions, there were two rectangles associated with a window, the "Window Rect" that included the title bar and borders, and the "Client Rect" that was the application's work area. But Vista/Windows 7/Windows 10 added much more area on to the Window Rect, now it includes the drop shadow area, and invisible resizing area. So they added in a third rect, called the "DWM Extended Frame Bounds", which does not include any of the drop shadow area or invisible resizing area. It's basically the old Window Rect. But when you try to get the DWM Extended Frame Bounds, it's not DPI-adjusted, you get real pixel values back. Unlike GetClientRect and GetWindowRect, which do return DPI-adjusted values.
Then as a compatibility hack, they made GetWindowRect change depending on whether the window has been shown or not. If it's not yet shown, it will behave like previous versions of Windows, and not include any drop shadow or resizing area. But once the window has become shown, it now includes those.
(Heck, the DWM itself was a huge breaking change to Windows.)
Charming-Designer944@reddit
Short answer is yes. Windows cares a lot more about backward compatibility with old application binaries than the average Linux system, and is part why it is as bloated as it is.
Longer anser is no. Linux has a much more stable kernel ABI. . The userspace has a lot more churn than Windows however and distributions do not keep many older versions of libraries around. The solution to this is containerized applicaotlns (i.e. Docker, appimage,snap, etc) which enables applications to run with an older runtime separate from the host distribution. So.instead of the base distribution providing complete backwards compatibility the application runs in separate userspace runtime matching its expectations.
This all works thanks to the very stable kernel interface, allowing you run mostly any distribution runtime ever built on top the same kernel shipped with your modern distribution.
79215185-1feb-44c6@reddit
No, Microsoft added functions to Win32 over the years which break support for Windows XP, Vita, and 7 and even if you're compiling for v141_xp (which is a really old toolchain) you're going to run into issues.
This is also why some modern languages like python, go, and rust have to drop Windows XP / Vista / 7 support at one point or another.
DuendeInexistente@reddit
Windows is developed by a monolitic company. Linux userspace is thousand of indepdendant devs mostly working on a single app each.
arthursucks@reddit
That is not a shared experience. Linux is often far more stable than Windows.
kantvin@reddit (OP)
Elaborate
Cats7204@reddit
Drivers (except nvidia) have almost always been a surprisingly pleasant experience for me in Linux. I was used to hunt for drivers either through googling, which for some obscure devices like CH340-based ones might have ended up with me downloading them through a sketchy chinese/russian website, or by using bloated adware driver installer tools. Sometimes, like with drivers for my old laptop, they might've just been unavailable due to deprecation. And let's not even talk about PRINTER DRIVERS.
However in Linux, when I used AMD gpu I was met with the drivers already installed out of the box. Same with CH340, and most Wi-Fi and Bluetooth cards as well. Hell, my HP printer known for being a headache on Windows literally worked plug-and-play on Linux even wirelessly, probably something to do with CUPS.
Drivers are way better on Linux. The only exception I know of is nvidia, and that's not even Linux's fault.
leonderbaertige_II@reddit
Broadcom? Mediatek? (ok their drivers suck on any OS but still)
dread_deimos@reddit
Elaborate what? A summary of personal experience? I can say that whenever I try to do anything interesting on windows beyond using a browser and steam, shit breaks half the time and requires troubleshooting.
kantvin@reddit (OP)
Yep, I was asking for personal experience. It may be that, because I didn't use windows for long, I didn't get to experience its buggy side...
PrefersAwkward@reddit
Windows breaks things plenty. I'd been using it since 95 and stopped using it in my personal life just before 11 came out. I still use Windows at work. In their history, they've deleted files, broken first-party VPNs, broken drivers, 3rd party software, 1st party software, etc. Still happens all the time.
And when it comes to issues where you need long term compatibility as a top priority, it's arguably nowhere near as good as the Linux ecosystem.. Microsoft is reducing the number of concurrent versions where you have to stick to editions of Windows 11 now. Now you can pay for and receive extra support time for them, but remember it is a black box and you will always be at the mercy of their support staff. Microsoft has repeatdlu told us through their delays and actions to go pound sand before. Yo be fair to MSFT, Oracle is like this as well
In the Linux world, you have LTS distros which will continue to receive critical updates while not making large, breaking changes. You can also readily use things like Flatpaks and distro boxes if you want your core OS to operate to more recent versions but preserve software compatibility for various apps. Yes, you may need to pay for commercial or enterprise support, but at the end of the day, at least your shop can patch software that breaks, or 3rd parties you pay can do so. It's open source and ubiquitous after all. You and your support teams can even coordinate with other companies on the same efforts as you both rely on the same things.
We don't tend get options anything like these for black box software, whether you pay them or not. When you work with a black box, you work with 1 party and they know you're stuck with them no matter how slowly or incompletely they respond to your needs. You can't simply jump ship for someone else when you get tired of that.
flecom@reddit
I can't even run an app from 5 years ago, which is why my HTPC has to keep running Ubuntu 20.04
MatchingTurret@reddit
Not if you want to run a binary compiled 25 years ago on a modern distro. Apart from libc and the kernel, everything else will not be compatible.
Metro2005@reddit
He didnt say stable, he said compatible. How much linux native software from say 10 years ago or older still work today (without recompiling it for newer versions of various libraries). Close to zero. Windows will run software from 10,20 or even 30 years ago with little to no issues
eepyCrow@reddit
Relevant flair.
Metro2005@reddit
Linus was talking about something different, namely the kernel. That being said, windows is better at 'not breaking userspace' than linux is, by far. I work in IT and among others i support software that was originally written over 25 (!) years ago, besides the underlying database which we have updated everything still works on windows 11. Also almost all older games still work on windows whereas linux native games from not even 5 years ago will probably be broken by now if they were not updated.
is_this_temporary@reddit
Your braille terminal is probably a serial device, as are Arduino boards.
I can probably help you fix Arduino IDE; Presumably you just need to configure it to not try to use the braille terminal's serial device as a programmer / Arduino board.
It's likely you would have the same problem on Windows (also probable that devices are enumerated in a way that just happens to not trigger this problem in Windows by chance rather than design. I don't know the details of how Windows handles serial devices or braille terminals).
If you'd like that help, please move that discussion to a new post in r/linuxquestions .
kantvin@reddit (OP)
Actually I already solved the issue! In the most Linux fashion way possible, I just uninstalled the driver without thinking twice... and that solved it!
Reminds me of when the Nvidia graphical drivers would make my ubuntu bluescreen every now and then. Just un-installed it, and problem solved.
Emotional_Pace4737@reddit
You're somewhat correct, the windows stack is by far more well maintained. But that's because it's all controlled by one entity. In Linux you have a large variety of projects with their own goals, their migrations, etc. In theory the way this gets resolved is with the distributions, who have to select which version of each software to deploy. The major problem is that this layer is actually very difficult to maintain because most distros have tens of thousands of packages.
If you want stable Linux, really debian is the go-to, they don't brother with most of the rigamarole and churn of software. Instead trying to put a solid image of a working system together. The problem with this is that software updates and features that many users want can often be delayed by years. And not just 1 or 2, but sometimes up to 5 or 6 years.
Really, projects like flatpack and snap is a great move forward, and I will suspect you'll only see this type of system take more of a roll. Since it breaks the linkage to system libraries, developers can more easily deploy their packages in a system agnostic way which takes a work load off of the system maintainers. And since applications will always have the version of libraries that they want, you don't have nearly as complex of a dependency graph. But this does have a problem where applications have to interface with hardware.
On windows, hardware actually does break more frequently than people believe. There's a reason why game developers always have to tell people to update their graphics drivers on windows. Many of these updates are handled in the background so users don't see it. But the real reason, is because hardware vendors do put a large effort to keep their hardware working on new machines.
While exes might work from all time, hardware is more hit and miss. Try getting some unique hardware from 1995 working on windows 11 and you're going to run into all sorts of issues.
Candid_Report955@reddit
The culprit is poor hardware vendor support and it's not limited to Linux, although they don't even think about Linux unless it's Dell or Lenovo's business laptops. Most consumer Windows PC vendors don't bother to provide new updates to Microsoft for inclusion in later version of Windows. Linux is often trying to reverse engineer drivers to make Windows PC devices compatible with Linux.
If you want a low-trouble experience then stick with better laptops, like Thinkpads or Dell Precisions.
kantvin@reddit (OP)
Now that you say it, windows has this problem on my nitro-5 laptop where it constantly bluescreens. It may be related to oxidation issues in a large batch of chips used to make Nitro-5's. Either way, ubuntu only rarely presents this bug on my laptop.
AKostur@reddit
Windows definitely does not preserve userspace. See the great number of older games that no longer function in more recent versions.
Linus is definitely talking about specifically the kernel<->userspace boundary. You didn't mention where your braille driver came from.
kantvin@reddit (OP)
All I know is that it came pre installed, and after I deleted it, arduino ide started working just fine
DividedContinuity@reddit
Is there a purpose to this dick measuring contest?
Zeznon@reddit
To prove the Linux one is actually larger, obviously /s