[HN Gopher] Why is Windows still tinkering with critical section...
       ___________________________________________________________________
        
       Why is Windows still tinkering with critical sections? - The Old
       New Thing
        
       Author : OptionOfT
       Score  : 113 points
       Date   : 2025-09-24 17:32 UTC (3 days ago)
        
 (HTM) web link (devblogs.microsoft.com)
 (TXT) w3m dump (devblogs.microsoft.com)
        
       | jojomodding wrote:
       | How is a critical section different from a lock?
        
         | bitwize wrote:
         | It's a kind of lock. Critsecs are faster and lighter weight
         | than mutices (kinda like a futex), but cannot be shared between
         | processes, only threads within a process. Mutices can be shared
         | between processes but because of that they have to make
         | syscalls every time they're locked or released.
        
           | eterm wrote:
           | Mutex isn't latin. The plural of mutex is mutexes.
        
             | verandaguy wrote:
             | It's a running joke in the field to have exotic
             | pluralizations. Mutex->mutices is one, box->boxen (by
             | analogy to oxen) is also pretty common.
             | 
             | We need more casual light-heartedness in this line of work
             | considering how much casual bullshit there is.
        
               | zabzonk wrote:
               | > box->boxen (by analogy to oxen) is also pretty common.
               | 
               | Not to mention (from way back when) VAX -> VAXen.
        
               | hcs wrote:
               | > there's two hard problems in computer science: we only
               | have one joke and it's not funny.
               | 
               | https://news.ycombinator.com/item?id=42046226
        
             | remix2000 wrote:
             | Except it actually is Latin. Both "mutual" and "exclusive"
             | are borrowings from Latin.
        
               | tialaramex wrote:
               | No, it's an English word. The fact it's related,
               | distantly, to some words in Latin doesn't mean mutex is
               | Latin.
        
               | remix2000 wrote:
               | I'm pretty sure you could construct it in many other
               | modern languages that have some Latin influence as
               | well... So why do you think "index" is a Latin word and
               | "mutex" isn't then?
        
               | tialaramex wrote:
               | I don't think "index" is a Latin word? You're probably
               | asking the wrong person, I am quite comfortable to say
               | indexes, and indeed sheeps -- it's an English word I can
               | just put the -S noise at the end to pluralize it and
               | that'll be fine even if (as with ox) there is a special
               | case rule that some people insist matters for this word
               | or that one.
               | 
               | Likewise I'm comfortable with "Can't nobody prove
               | nothing", which I think is a succinct way to express an
               | opinion that would be rather awkward when expressed in
               | the prestige dialects of English instead.
        
             | anticensor wrote:
             | plural of mutex is indeed exmut (exclusive mutation) :)
        
         | nitwit005 wrote:
         | They gave the different sorts of locks different names. Locks
         | usable across processes are mutexes, and locks only usable
         | within a process are critical sections.
        
           | Dwedit wrote:
           | Different names can be a huge source of confusion. The C++
           | standard library uses `std::mutex` as a lightweight
           | synchronization lock. But on Win32, `Mutex` refers to a heavy
           | kind of lock that can be used across processes. Very
           | different things despite both using the same word "mutex" in
           | the name.
           | 
           | Here's another example of confusing terminology. In the C
           | standard library, `fflush` just advances you to the next
           | step, where your buffer goes out to the 'write file' system
           | call, where your data sits in the disk cache to be written
           | later on. Meanwhile, Win32's `FlushFileBuffers` actually
           | forces everything out to the disk, acting much more like
           | `fsync`. Yet again, very different things despite using the
           | same word "flush" in the name.
        
             | o11c wrote:
             | Really, the oddity is that Microsoft thinks there's a
             | significant difference between in-process communication and
             | cross-process communication. They're all running on the
             | same physical memory and the kernel can share access to
             | that.
        
               | Dwedit wrote:
               | I mean you can put a critical section inside of shared
               | memory, but the heavy mutex is used for situations where
               | you need to actually name the mutex, then have another
               | process open it by name. Example uses include preventing
               | multiple instances of a single program from running. Not
               | the kind of thing you'd use a std::mutex or critical
               | section for.
        
             | jeroenhd wrote:
             | The Mutex thing kind of makes sense. std::mutex came in at
             | C++11, while Microsoft's CreateMutex call goes back to at
             | least Windows 95. "Mutex" just means "a particular type of
             | lock", it doesn't say anything about the implementation,
             | nor about the performance. It'd be dangerous to assume the
             | performance characteristics of C++'s std::mutex and Rust's
             | std::sync::mutex are anything alike either.
             | 
             | fflush and FlushFileBuffers both just happen to have
             | "flush" in the name. The fact someone decided that fflush
             | doesn't actually flush the file buffer and added fsync to
             | actually flush the buffers, does make for a very
             | frustrating experience, but I find most of the POSIX API to
             | be like that. See also: sync(void) vs fsync(int fd) vs
             | syncfs(int fd).
        
               | 1718627440 wrote:
               | fflush does flush the userspace buffer, if it should
               | affect the kernel, it needs to be the syscall, which is
               | called fsync.
        
         | ajross wrote:
         | It's just a lock. It's analogous to a pthread_mutex_t (which on
         | Linux is a futex), where the operation in the uncontended case
         | is a single atomic access to shared memory. The contended case
         | needs to enter the kernel to suspend, or to make a decision
         | about who to wake up, and that seems to be the subject of the
         | blog post.
        
         | the__alchemist wrote:
         | In embedded (not sure how applicable here?) you invoke a
         | critical section to access a lock. You will have an interrupt
         | handler. Inside that, you will invoke a critical section, which
         | prevents other processes from interrupting it. Inside the CS,
         | you an get a handle to a mutex that has shared state. The mutex
         | is what I would call the "lock" in this convention.
        
         | TinkersW wrote:
         | Critical sections are very old, and bloated version of a mutex,
         | but there isn't a good reason to use them today.
         | 
         | Today you can use SRWLock or WaitOnAddress on Windows(or
         | std::shared_mutex for portable impl, but not std::mutex because
         | reasons).
        
         | ack_complete wrote:
         | To add to what others have said, additional characteristics of
         | a Win32 critical section:
         | 
         | - It is purely an in-process lock, and originally the main way
         | of arbitrating access to shared memory within a process.
         | 
         | - It is counted and can be recursively locked.
         | 
         | - It defaults to simple blocking, but can also be configured to
         | do some amount of spin-waiting before blocking.
         | 
         | - CritSecs are registered in a global debug list that can be
         | accessed by debuggers. WinDbg's !locks command can display all
         | locked critical sections in a process and which threads have
         | locked them.
         | 
         | Originally in Win32, there were only two types of lock, the
         | critical section for in-process locking, and the mutex for
         | cross-process or named locks. Vista added the slim
         | reader/writer lock, which is a much lighter weight, pointer-
         | sized lock that uses the more modern wait-on-address approach
         | to locking.
        
         | wpollock wrote:
         | A critical section is code that accesses mutable shared data in
         | a non-atomic way (i.e. as several steps, the classic example
         | is: fetch data into a register, process that data, store the
         | result back into memory). A lock is a mechanism that protects
         | such data by preventing other code (or other threads running
         | the same code) from accessing that data until the critical
         | section completes.
         | 
         | Locks come in several types. A developer picks one type
         | depending on the use of the protected data; for example,
         | exclusive, reader-writer, and others.
         | 
         | Locks are great at preventing data corruption and data loss,
         | but come with issues. They can hurt performance, can cause
         | "liveness" and other issues, and are usually "advisory"
         | ("mandatory" locks which are enforced by the OS are rarely
         | available) so developers must remember to protect data by using
         | locks around every critical section.
         | 
         | Modern hardware includes support for many lock-free mechanisms
         | that can greatly reduce the need for locks.
        
       | jeffrallen wrote:
       | This is hands down the worst Old New Thing he ever wrote. He
       | either is, or at least should be, ashamed of the poor engineering
       | his colleagues are doing, and trying weakly to defend them.
       | 
       | Monkeying with critical sections is hard. Monkeying with them due
       | to performance and memory optimization while maintaining
       | correctness is incredibly hard. If they'd done a good job of it,
       | no one would have noticed, and Raymond would have had a cool
       | story to tell. Instead we got this.
       | 
       | Sigh, Microsoft, what's happening over there?
        
         | spookie wrote:
         | Never break user-space and all
        
         | jofla_net wrote:
         | After a while that kool-aid, chilled to optimum temperature, on
         | infinite tap, becomes an aqueous sanctuary, even the most
         | staunch hold-outs cannot resist.
        
         | wat10000 wrote:
         | If they'd done a good job, they wouldn't have made a change
         | that used a little more stack space and triggered an old bug
         | where GTA used an uninitialized local variable? Huh?
        
           | toast0 wrote:
           | Perhaps not, but setting the compatability mode should maybe
           | get programs that worked before to work again.
           | 
           | Using extra stack space has got to be on a list of things
           | likely to cause trouble.
        
             | wat10000 wrote:
             | So adding a local variable to any function in the system
             | needs to be considered dangerous, and have a way to run an
             | old version of that function that doesn't have a new local
             | variable? How could that possibly be practical?
        
               | toast0 wrote:
               | If compatability is important, it should at least be
               | considered. For 20 years, this particilar system function
               | did not touch that part of the stack, and GTA used it. In
               | real estate, after ten years, GTA would have a
               | prescriptive easement under Washington State law. :P
        
               | wat10000 wrote:
               | It's just not feasible, unless your plan is not to change
               | anything at all.
               | 
               | When you have apps doing things like relying on values in
               | uninitialized memory, literally any change anywhere can
               | potentially break them.
               | 
               | A company like Microsoft that cares about compatibility
               | will test third party apps to try to catch this sort of
               | thing, but there's only so much testing you can do. It's
               | not feasible to test games from two decades prior so
               | throughly that you'd notice that one particular vehicle
               | never spawns.
        
               | toast0 wrote:
               | I don't mind that they didn't find this, it would have
               | been hard to find it, given the situation.
               | 
               | But it's still kind of bogus that compatability mode
               | doesn't make things compatible.
        
               | wat10000 wrote:
               | That wouldn't be compatibility mode, that would be
               | shipping an entire copy of an older OS version.
               | 
               | From a quick search, it looks like compatibility mode
               | entails interposing a library between the app and the OS
               | libraries, and the library emulates the behavior of an
               | older OS. It's not automated, each compatibility fix is
               | crafted to work around a specific issue. In theory a fix
               | could be made for this issue, but they'd have to find it
               | and debug it first.
        
         | sudosysgen wrote:
         | But they did a good job of it? The change of behavior is San
         | Andreas is due to an invalid memory access reading out of
         | bounds into an area of the stack that was only coincidentally
         | initialized by a previous iteration.
         | 
         | They didn't make any changes in correctness. The game itself is
         | broken, and it's normal to undefined behavior from out of
         | bounds accesses will change between OS versions, even just for
         | security reasons. In fact, other versions of the game did fix
         | this bug in a patch, it just didn't get picked because people
         | go out of their way to downgrade the game in order to maintain
         | some cut assets and features.
        
           | mherkender wrote:
           | 'No Way To Prevent This', says only OS where this regularly
           | happens.
        
             | detaro wrote:
             | Which other OSes prevent this consistently?
        
               | mherkender wrote:
               | Open-source Linux is great at updating old software.
               | 
               | Most other OSes (Android, MacOS, iOS, game consoles) rely
               | on versioning, which makes it easier to provide
               | compatibility layers or at least know when a piece of
               | software just isn't supported anymore.
               | 
               | Personally I think Windows should have specialized VMs
               | for old software, so they can be compatible forever even
               | if they have bugs.
        
               | detaro wrote:
               | So other OSes prevent this by not even trying to run old
               | software? Yeah, not particularly helpful
        
               | mherkender wrote:
               | Better to have a strategy for software compatibility and
               | evolution vs Microsoft's strategy of doing nothing.
               | 
               | Pretty much every game console ever made still works with
               | every game for that console, but when it's Windows you
               | never know.
        
             | pjmlp wrote:
             | And yet Valve has to translate Windows APIs if they want to
             | have games, because not even the studios targeting
             | Android/Linux care about GNU/Linux, in spite NDK having the
             | same audio and 3D APIs available as C and C++ libraries.
             | 
             | All because game developers prefer to target this OS full
             | or warts than dealing with GNU/Linux fragmentation.
        
               | mherkender wrote:
               | Windows is roughly 25% of the gaming market and I don't
               | know why you're bringing up Linux. I haven't ever had a
               | console unable to play a game built for it, just Windows.
        
               | pjmlp wrote:
               | Because HN is all about SteamDeck when complaining about
               | Windows.
        
             | anonymars wrote:
             | Where what regularly happens? Wrong code coincidentally
             | works and then doesn't? Which other OSes bend over
             | backwards to the degree that Windows does in order to keep
             | incorrect code working?
        
         | zaphar wrote:
         | What? They did in fact maintain correctness. GTA was
         | emphatically in the wrong here and only accidentally worked for
         | a long time because of some internals of the CriticalSection
         | code that they didn't even know they were depending on. The
         | changes to that code didn't modify correctness. The issue was
         | that GTA was relying on undefined behavior. GTA didn't know
         | they had a bug because the undefined behavior happened to be in
         | their favor for a long time. But it's a minor miracle that it
         | hadn't broken before this in a myriad of other ways.
        
           | sudosysgen wrote:
           | Rockstar actually did fix this bug some years ago, but
           | because some content was removed, people instead downgrade to
           | an earlier version that still has the bug and rely on
           | community patches.
        
         | diath wrote:
         | Please read the original article that this is in response to.
         | The poor engineering was on Rockstar's side.
        
       | twoodfin wrote:
       | hn discussion of the GTA bug that triggered this post:
       | 
       | https://news.ycombinator.com/item?id=43772311
        
       | kchoudhu wrote:
       | Given how awful performance on my Windows desktop is, I am
       | shocked that Microsoft is still investing in performance.
        
         | chongli wrote:
         | It's really funny to me as well. All this effort put into low
         | level performance seems like picking up pennies in front of a
         | steamroller. The operating system (and core business software
         | such as Office) is overflowing with bloat that absolutely tanks
         | the performance and responsiveness of the system. On a fresh
         | boot I might as well go for a 15 minute coffee break lest I end
         | up with multiple hung applications blocked on the UI thread.
        
           | xenophonf wrote:
           | It's bad everywhere. Every time I've upgraded Ubuntu on my
           | old laptop, performance gets worse and worse because more and
           | more junk keeps getting added. Absolutely maddening.
        
             | exe34 wrote:
             | my nixos with just xmonad works really well, I haven't
             | noticed any degradation in the last 10 years of updates.
        
               | xenophonf wrote:
               | NixOS looks super cool, but it also looks too much like
               | actual work. As a FreeBSD main for two decades, I've
               | played that game already and have the (sadly, now long
               | dead) tinderbox and poudriere installations to prove it.
        
             | Scramblejams wrote:
             | Is it the desktop environment or background stuff that's
             | getting worse for you? If the former: FWIW I was pleasantly
             | surprised when I switched back to Kubuntu. KDE's
             | surprisingly resource efficient these days, actually seems
             | pretty close to XFCE.
        
               | xenophonf wrote:
               | I'm not sure and don't have the patience to check.
               | 
               | I might go back to Debian. I'm only really using Ubuntu
               | since that and RHEL are what we use at work.
        
           | thewebguyd wrote:
           | It's so bad that Microsoft is actually going to start
           | preloading Office on boot to speed up the application start
           | times.
           | 
           | It was quite the shock to me recently when I had to use a
           | Surface Laptop (the ARM one). Snapdragon X Elite & 32GB of
           | RAM and took almost double the time to get to the desktop
           | from a cold start compared to my M2 Air. Then even once
           | everything was loaded, interacting with the system just did
           | not feel responsive at all, the most egregious being file
           | explorer and the right click menu.
           | 
           | And I have my own gripes with macOS feeling like it's slow
           | due to the animations and me wanting to move faster than it
           | can. Windows used to happily oblige, but now it's laggy.
           | 
           | Microsoft is too caught up in shoving Copilot everywhere to
           | care though.
        
             | tredre3 wrote:
             | > It's so bad that Microsoft is actually going to start
             | preloading Office on boot to speed up the application start
             | times.
             | 
             | Office has been preloading on startup since Windows 95.
        
         | thevillagechief wrote:
         | It's just ridiculous. Windows 11 currently has this bug where
         | the file explorer just freezes all the time. Everyone is
         | experiencing it at work. I cannot believe how a core product
         | gets away with this.
        
           | zamadatix wrote:
           | A tale as old as time. It always seemed wild to me File
           | Explorer is allowed to have so much synchronously driven
           | activity. Like sure, display a loading symbol in the content
           | area if I open a network share that's not already mounted (or
           | whatever else it may wait on)... but don't lock the whole
           | darn window so closing it becomes unresponsive!
        
           | pixl97 wrote:
           | Since I'm not seeing issues like this I'm assuming these are
           | computers on an active directory... I remember XP having a
           | few fun issues like this when a GPO refreshed links to a file
           | that didn't exist and froze for a moment trying to resolve
           | them.
        
             | Rohansi wrote:
             | I get this all the time without being on an active
             | directory. It's nothing network related from what I can
             | tell. The explorer tab just stops being interactable
             | seemingly randomly. Closing and reopening the tab works
             | around it.
        
           | r721 wrote:
           | Process Monitor is invaluable for investigating cases like
           | that - at least one can look at what Windows is actually
           | doing at that moment of freezing:
           | 
           | >Process Monitor is an advanced monitoring tool for Windows
           | that shows real-time file system, Registry and process/thread
           | activity. It combines the features of two legacy Sysinternals
           | utilities, Filemon and Regmon ...
           | 
           | https://learn.microsoft.com/en-
           | us/sysinternals/downloads/pro...
        
           | jeroenhd wrote:
           | Every time I've investigated an issue like this, it was
           | something outside of explorer. Most of the time some kind of
           | plugin that I didn't want (PDF readers, Tortoise SVN/Git,
           | document preview handlers, you name it), mapped network
           | drives not responding, or file system corruption that went by
           | seemingly unnoticed.
           | 
           | At some point I started Autoruns and just disabled every DLL
           | that didn't come from Microsoft and that I didn't strictly
           | need. It sped up Windows immensely, and I went back enabling
           | maybe one or two of those DLLs at a later point because it
           | broke functionality.
           | 
           | I could've saved weeks of my life if Microsoft had just added
           | a little popup that says "7zip.dll is adding 24% extra time
           | to opening right click menus, disable it Y/N" every time a
           | badly programmed plugin slowed down my shell.
        
             | chubot wrote:
             | Yup, back when I used windows, my solution to software rot
             | was "just don't install things that aren't absolutely
             | essential"
             | 
             | Same goes for OS X now -- it seems every OS grows
             | incomprehensible to the company that makes it
             | 
             | Which is sad, because one of the main functions of an OS
             | should be to protect you from misbehaving applications
             | 
             | Linux is a bit better, but I think even the Debian GUI
             | suffers from trying to be convenient/magic rather than
             | predictable/robust
        
           | Zambyte wrote:
           | Stop using it.
        
             | zamadatix wrote:
             | This feels like a "if you don't like where you live just
             | move to a bigger house in a better neighborhood" style
             | response to work related software problems. I.e. many
             | people don't get to choose to run whatever software they'd
             | like to on their work machines, nor are they able to
             | justify changing jobs over control of a bug in the file
             | browser.
        
               | Zambyte wrote:
               | Then maybe they actually can believe that Microsoft gets
               | away with it. My comment was multifaceted :P
        
               | zamadatix wrote:
               | Ah, I get ya. To me, the hard to believe part is not how
               | individual end users can't solve the problem/pressure
               | Microsoft - it's how enterprise IT teams across the
               | country pay massive licensing/support fees but core parts
               | products like this have regular outstanding hanging bugs
               | of the same family for extended periods over decades.
               | You'd think there would have been enough pressure to make
               | File Explorer more asynchronous by now, given Microsoft
               | are talking about how they still tinker with the low
               | level stuff from decades ago! I know even just mid sized
               | individual companies I've work at have gotten custom
               | patch requests/minor changes in before.
               | 
               | The tough part with (implied) multifaceted comments is
               | nobody can just say things like that, they have to assume
               | what meaning could still make sense to them (which is a
               | dangerous game) or just not engage.
        
             | thevillagechief wrote:
             | If you can convince corporate to ditch Microsoft and Azure,
             | I'll buy you a beer.
        
           | toyg wrote:
           | The reskin of File Explorer in win11 was the most unnecessary
           | thing. Someone's need to justify their job is bringing misery
           | to the masses.
        
             | cma wrote:
             | It seems to be almost impossible to have a new explorer
             | window open in your home folder. Instead you get a
             | different Home with duplicates of what's already pinned and
             | visible in the sidebar.
        
           | rrrrrrrrrrrryan wrote:
           | It's usually because there's some non-local stuff on your
           | sidebar that it's trying to load - either a pinned item or a
           | recently opened / frequently opened thing that's on network
           | storage.
           | 
           | It's stupid but Windows has choked on that situation for many
           | years.
        
             | vjvjvjvjghv wrote:
             | It seems they haven't heard of multi threading...
        
               | keanb wrote:
               | You can add as much multi threading as you want, but if
               | you need to wait until all threads are done, the entire
               | window will stall to show you that context menu you
               | requested.
        
               | kenjackson wrote:
               | The issue isn't multithreading. Of course they know that.
               | It's that they want the UI to show all menu items when
               | you click it (otherwise you'll say "sometimes PDF Reader
               | is available and sometimes it's not!!"
               | 
               | Windows doesn't have performance requirements for most
               | plugins/extensions. It would be great if they did, but it
               | hasn't been the culture of their ecosystem thus far.
        
           | jmull wrote:
           | Not that it makes it any less frustrating to you, but it's
           | probably triggered by something relatively rare/obscure in
           | your environment.
           | 
           | Probably all you can do is keep poking your IT support and
           | hope it goes up the line until someone finds or creates the
           | fix/workaround.
        
           | wackget wrote:
           | That can happen if you have a mapped network drive which
           | isn't immediately responding or which is offline. If you
           | hover over the drive in Explorer (even accidentally) it will
           | immediately try to query the network location. This can cause
           | massive delay.
        
           | Akronymus wrote:
           | I havent experienced that one myself, but I have other
           | problems with the win 11 explorer. Like how when using the
           | keyboard to navigate the right click menu, you cant just
           | navigate into a submenu, but have to navigatw up or down
           | after navigating into it, then the other way, to select the
           | topmost item. And thats one thing I encounter many times a
           | day at work.
        
             | EvanAnderson wrote:
             | As a heavy Windows keyboard user I've found the level or
             | disrespect for my muscle memory skyrocketed with Windows
             | 10. (I'm frustrated daily with the "Sign out" and "Switch
             | user" in the menu to close Explorer. That stupid choice to
             | rename "Log off" turned a deterministic muscle memory
             | operation into a "now I have to look at the screen"
             | operation.)
        
               | Akronymus wrote:
               | And there's also the focus stealing exhibited by office
               | applications. Like the 15 minute reminder of outlook for
               | a teams meeting. That one gets me almost daily.
        
           | ravenstine wrote:
           | Having worked in software for over a decade, I believe it.
        
         | cogman10 wrote:
         | It's really stark when you compare it to something like a linux
         | desktop running KDE or Gnome. Both pretty full featured
         | desktops that were built for the computers I used as a kid.
         | 
         | While there's been a bit of polish, the two simply sip hardware
         | requirements. So much so that you can put them on things like a
         | raspberry pi 3 and still get a decent experience.
        
         | DobarDabar wrote:
         | The new M$ slop Explorer is horribly optimized and full of
         | unnecessary IPC so no wonder it's so slow.
        
       | thw_9a83c wrote:
       | This shows that having a legal way to run outdated operating
       | systems is always important to guarantee that old software runs
       | _exactly_ as intended. Online activation schemes make this
       | problematic.
       | 
       | The solution seems to be installing and fully activating the
       | operating system in the VM while it's still possible, then
       | archiving the VM image. However, I don't know how reliable this
       | method is, since the Windows OS may require reactivation if the
       | hardware configuration changes significantly. Therefore, if the
       | future VM host machine exposes slightly different hardware to the
       | guest machine, the activation might be gone.
        
         | benoau wrote:
         | Hopefully the "Stop Killing Games" movement will create some
         | formal obligations around those activation schemes too since
         | it's pretty much the same problem from a different angle.
        
         | layer8 wrote:
         | This particular example actually doesn't show that. The
         | misbehavior is caused by a bug in the original game, which was
         | initially hidden only by pure chance, and was already fixed 20
         | years ago in updated releases of the game, and can be fixed in
         | any version by adding the missing parameters in a plain-text
         | asset (or running the existing patcher add-on).
         | 
         | I agree in the general case, but this particular case isn't a
         | good argument for it.
        
           | thw_9a83c wrote:
           | I would argue that this case also demonstrates the
           | aforementioned problem. Apparently, an older version of the
           | Windows OS was _tolerant_ to this specific bug, and the game
           | worked just fine. Future users might not be even aware that
           | an updated release of the game fixed this bug, or they might
           | not have access to the update.
           | 
           | You can't blame the user for the fact that the old software
           | contains something that is, technically, an invalid use of
           | the API, meaning the software shouldn't have worked, even in
           | the past. The only way to reliably make the old software work
           | as intended is to have an OS version from that time
           | available.
        
             | layer8 wrote:
             | Just to be precise, the bug isn't about invalid use of an
             | API. The software uses uninitialized values on the stack,
             | which under older Windows versions happen to be preserved
             | from earlier calls to the same application-level function,
             | despite intermediate calls to other functions, which happen
             | to also involve Windows API calls. In newer Windows
             | versions, these latter functions happen to use more stack
             | space, leading to the old values not being preserved on the
             | stack anymore.
             | 
             | I won't argue about your other point, as there are
             | arguments either way. I just don't think this particular
             | example makes a good case, and I suspect that it wouldn't
             | have been made if the full workings of the bug had been
             | properly understood.
        
       | jofla_net wrote:
       | Criticisms of his post aside. Isn't it unfortunate, the absolute
       | degree everything legacy is at least in some way tethered to
       | windows. If only there had been an open alternative, it would
       | allow huge communities to emerge keeping very old software/games
       | working indefinitely. Not that linux was even remotely close to
       | being usable even only twenty years ago. Relying on a giants
       | benevolence is never going to work in the long run. Their
       | contemporary direction is only a function of what side of the bed
       | theyd like to turn on today.
        
         | grishka wrote:
         | ReactOS is a thing.
        
           | ravenstine wrote:
           | And it's garbage.
           | 
           | Every time I've tried it, from 2007 to now, it's been a buggy
           | hunk of crap. I normally try not to disparage peoples
           | software projects, but I really don't get ReactOS. I tried it
           | again actually just a few weeks ago. It's barely usable.
           | You'll have far fewer problems just using Wine with Linux.
        
             | grishka wrote:
             | It's been getting better lately.
             | 
             | That's the thing with these kinds of projects that aim to
             | run vast libraries of preexisting software -- they're crap
             | for a long, long time, until suddenly there's enough
             | compatibility that _hey, it 's actually usable_. The time
             | vs usability graph for them is _very_ non-linear.
             | 
             | Wine was "garbage" for decades as well. For a long time, it
             | wouldn't do a satisfactory job of running anything but
             | simplest win32 apps.
             | 
             | Same for Ruffle, the open source flash player, but it got
             | to that point much quicker because the API surface is
             | orders of magnitude smaller.
        
             | bitwize wrote:
             | > Every time I've tried it, from 2007 to now, it's been a
             | buggy hunk of crap.
             | 
             | So, VERY much in keeping with Windows tradition, then!
        
         | diath wrote:
         | How would an open operating system fix a bug caused by sloppy
         | game developers? I don't think anyone would think "let's not
         | optimize the (equivalent of) critical sections in our operating
         | system so that we don't break GTA", unless you're suggesting
         | providing 100s of different implementations of different parts
         | of the operating system that people can choose from to run a
         | specific game, which I don't think is viable either. Patching
         | individual games is far easier and is actually viable, which is
         | precisely what GOG (Good Old Games) successfully does on a
         | significantly large scale.
        
           | anonymars wrote:
           | If anything, what Microsoft was way, way better at was
           | finding and working around these types of problems in the OS.
           | Many developers have a more idealistic and less pragmatic
           | approach instead of empathizing with their users: "it's the
           | program's fault, why should we deal with it?"
        
             | aleph_minus_one wrote:
             | > Many developers have a more idealistic and less pragmatic
             | approach instead of empathizing with their users: "it's the
             | program's fault, why should we deal with it?"
             | 
             | In the retro-games emulation scene there exist quite some
             | people who write _binary patches for popular retro games_
             | to fix such bugs. Perhaps this approach (and the necessary
             | skills for it) should become more popular outside the
             | retro-games emulation scene.
        
             | kenjackson wrote:
             | My sister who was at the time a professor had just moved to
             | a Mac. There was some major statistics app that broke on an
             | OS Update. She contacted the stats company and they said
             | that Apple broke them. She contacted Apple and they said
             | the stats company was given notice and access to beta
             | builds. She was just stuck for months with it not working -
             | and eventually loved back to Windows. She says it's ugly,
             | but it works.
        
               | bitwize wrote:
               | Apple was always like that.
               | 
               | "Once upon a time, pointers on the Macintosh had 24
               | bits..."
               | 
               | https://news.ycombinator.com/item?id=44632615
               | 
               | Though at least back then, they provided backward-
               | compatibility modes for old software. You know, back when
               | the expected service lifetime of your Mac was longer than
               | that of your dog.
        
           | dixie_land wrote:
           | > unless you're suggesting providing 100s of different
           | implementations of different parts of the operating system
           | that people can choose from to run a specific game
           | 
           | You just invented "run in compatibility mode"
        
         | nextaccountic wrote:
         | The open alternative is Wine, and for very old games Wine is
         | already more compatible than newer versions of Windows itself
        
         | rwmj wrote:
         | _> Not that linux was even remotely close to being usable even
         | only twenty years ago_
         | 
         | I've been using Linux only as a desktop for 30 years, so that's
         | a strange comment. For sure games and other software that was
         | written to run on Windows exclusively, ran best on Windows (who
         | could have predicted it!). But as a desktop, Linux has been
         | usable for many decades.
        
           | johannes1234321 wrote:
           | It works for some domains, but, games ain't the only thing.
           | There is a lot of business software and "technical" software
           | (for controlling manufacturing machines or whatever), which
           | runs on Windows only, as it is the "default" platform. And
           | those applications are low quality special purposes software,
           | nobody knows much about ...
        
         | secondcoming wrote:
         | > it would allow huge communities to emerge keeping very old
         | software/games working indefinitely
         | 
         | Windows is actually excellent at maintain backwards
         | compatibility. A program written 30 years ago probably still
         | works today.
        
           | aleph_minus_one wrote:
           | > Windows is actually excellent at maintain backwards
           | compatibility.
           | 
           | Rather: Windows is actually excellent at maintain backwards
           | compatibility _for binary programs_.
           | 
           | There exist lots of other backwards-compatibility topics like
           | 
           | - being backwards-compatible in the user interface (in a
           | business setting, ensuring that the business-critical
           | applications still run is a problem of the IT, but if the
           | user interface changes, people will complain. I just say
           | "Windows 8" or "Office ribbons" (when they were introduced)).
           | I would for example claim that very specifically for the
           | shell interface, the GNU/Linux crowd cares a lot more about
           | user-interface backwards compatibility than what Microsoft
           | does.
           | 
           | - being backwards-compatible in the hardware requirements
           | (i.e. "will it still run on an old computer"). I just want to
           | mention the drama around Windows 11 because it doesn't run on
           | still actively used hardware so that Microsoft cannot force
           | the update on all Windows 10 users, but on the other hand
           | wants to terminate the support for Windows 10.
        
             | vel0city wrote:
             | > I would for example claim that very specifically for the
             | shell interface, the GNU/Linux crowd cares a lot more about
             | user-interface backwards compatibility than what Microsoft
             | does.
             | 
             | Maybe if you ignore things like systemd radically changing
             | how services and init systems work. Massive changes with
             | Network Manager and firewalld compared to iptables. Gnome
             | today looks pretty much nothing like it did when I first
             | started using Linux. Now we install software through snaps
             | and what not, or move from yum to dnf or other package
             | managers.
             | 
             | Using Linux today feels _very_ different than it did 20
             | years ago. I bet most scrips I wrote for Ubuntu over 20
             | years ago would fail to execute today on a fresh modern
             | install.
        
               | aleph_minus_one wrote:
               | > Maybe if you ignore things like systemd radically
               | changing how services and init systems work.
               | 
               | I am explicitly talking about the shell (Bash, ksh, zsh).
               | Other parts of the GNU/Linux stack changed a lot.
        
               | vel0city wrote:
               | Well then, can't one also say Windows hasn't changed much
               | since XP, which was one of the last major times CMD.exe
               | changed?
        
               | aleph_minus_one wrote:
               | cmd.exe is only some mostly deprecated tool that was only
               | used by power-users to do some specific tasks.
               | 
               | The Windows analogue of some UNIX shell is rather
               | explorer.exe, and this is exactly what my Windows 8
               | example refers to.
        
               | vel0city wrote:
               | > cmd.exe is only some mostly deprecated tool that was
               | only used by power-users to do some specific tasks.
               | 
               | And bash isn't "some mostly deprecated tool that was only
               | used by power-users"? Think people are mostly using bash
               | for their interface on their steam decks and Android
               | phones and what not? Do most people boot Ubuntu straight
               | into text mode or immediately launch a DE? Grandma using
               | lynx to browse Facebook?
               | 
               | Explorer is a desktop environment. Which, yes, the
               | desktop environment landscape in Linux these days looks
               | pretty different from what was around 20 or so years ago.
               | 
               | You're constantly moving the goal posts and comparing
               | apples and oranges here. Originally saying GNU/Linux user
               | interfaces, then shifted to only text shells, and then
               | comparing those text shells to entire desktop
               | environments while ignoring the forest of constantly
               | changing desktop environments of Linux.
               | 
               | And even then, most of those bat scrips I wrote since XP
               | that only use system tools and commands will largely all
               | still run and do the same thing today. I can't say the
               | same for the same time frame on most major Linux distros
               | that have changed out large parts of their internal
               | tooling.
        
           | avidphantasm wrote:
           | Also, Windows containers are a thing (not that I've ever used
           | them). Shouldn't it be possible to containerize old games
           | bundled with versions of win32 libraries that were stable
           | when the game was released? Then the games could be run in
           | perpetuity so long as the low-level interfaces needed by the
           | container runtime is maintained.
        
             | keyringlight wrote:
             | Windows containers are definitely a thing, but I think the
             | implementation is at the "how to draw an owl: draw two
             | circles..." stage and needs a lot of "...now draw the rest
             | of the owl" in terms of being usable to the general
             | consumer audience where their eyes are likely to gloss over
             | if you say "go and install docker desktop". Having a simple
             | method to maintain old software as usable would be
             | beneficial, but it's hard to see what organization would
             | want to do work to make it happen.
             | 
             | Legacy compatibility is one of windows biggest strong
             | points, neatly containing 'old windows' and providing the
             | best experience for it would solve the puzzle of why users
             | should stick with windows if MS did want to prune the core
             | OS without giving users reasons to move away.
        
           | EnnEmmEss wrote:
           | People say this but I really don't consider it to be as true
           | as it once was. I can't even move my taskbar to the side in
           | windows 11 without installing a third-party program to patch
           | explorer.
        
         | aleph_minus_one wrote:
         | > Isn't it unfortunate, the absolute degree everything legacy
         | is at least in some way tethered to windows. If only there had
         | been an open alternative, it would allow huge communities to
         | emerge keeping very old software/games working indefinitely.
         | 
         | Have a look at ReactOS:
         | 
         | > https://reactos.org/
         | 
         | > https://en.wikipedia.org/wiki/ReactOS
        
         | Barrin92 wrote:
         | > it would allow huge communities to emerge keeping very old
         | software/games working indefinitely.
         | 
         | That's a completely backwards take though. Windows is
         | practically the only platform in the world that cares about
         | backwards compatibility. On Windows you can run a 20 year old
         | executable and you've got pretty good chance it runs. With
         | Linux operating systems you have no idea if something compiled
         | on the last LTS release runs on the next one.
         | 
         | This is one of the few issues where having a private company
         | control the entire stack and providing a stable ABI for decades
         | is actually a benefit, to the point where your target if you
         | want to build games on linux is...Win32
         | (https://blog.hiler.eu/win32-the-only-stable-abi/)
        
         | ThrowawayR2 wrote:
         | That can already be done with Proton for anyone who wants to.
         | But few, if any, are going to step up for the more obscure
         | games. Relying on the benevolence of volunteers is never going
         | to work in the long run either.
        
         | majormajor wrote:
         | > Not that linux was even remotely close to being usable even
         | only twenty years ago.
         | 
         | Running Linux on regular consumer hardware in 2005 was not
         | really any harder than it is today. In fact, many of the same
         | problems still exist! GPU drivers and janky wifi and power-
         | saving modes, same shit, different decade.
         | 
         | There's Steam Deck now, and Android, but those are still quite
         | proprietary driven by single companies, so I'm not really sure
         | they fit what you mean about an open alternative.
        
         | electroly wrote:
         | > it would allow huge communities to emerge keeping very old
         | software/games working indefinitely
         | 
         | The Linux community _already_ stumbles at this and needs
         | Windows to help it out.  "Win32 is the only stable ABI on
         | Linux" has been said so many times it isn't a joke any more.
         | Keep in mind that the OS being open doesn't make _the games_
         | open. Wine is possible because of Win32 's die-hard commitment
         | to long-term binary compatibility. I'm not so sure we're in a
         | bad situation here. The Linux userspace has never had this
         | degree of backwards binary compatibility. The kernel doesn't
         | break userspace but userspace breaks _itself_ all the time.
         | 
         | Linux userspace gets lots of other benefits from this rapid-
         | iteration approach that doesn't concern itself with literally
         | decades of binary compatibility, but keeping old games running
         | indefinitely isn't one of them.
        
       | 2OEH8eoCRo0 wrote:
       | Task manager takes 5 seconds to open on Windows 11 now
        
       | jmkni wrote:
       | Raymond Chen has such a unique style that I know it's going to be
       | him before even clicking on the link
        
       ___________________________________________________________________
       (page generated 2025-09-27 23:02 UTC)