Win32 is the stable Linux userland ABI (and the consequences)
sporks.space
sporks.space
My understanding with the suspend/resume stuff they've talked about for the Deck is less about actually suspending/resuming the game by syncing some low-level state like memory or graphics, and more about quickly syncing save games via Steam cloud saves.
I only had a quick look over their docs when the Deck was announced and from what I could tell you basically opt into a new system-level save behavior where at any point the Steamworks library can tell the game "this device is going to suspend now, save your progress" then another computer can start the game and immediately load up the save file, giving the impression of seamless suspend/resume.
So as long as your save game files aren't OS specific in some way there's no reason why this should lock you into any specific platform, Windows or otherwise.
Anything else also would be insanely hard.
Just trying to "store the GPU state" on a system with AMD GPU and resume it on a system with a NVIDIA GPU (or just old GPU and new GPU from same Vendor) is likely around the area of "lets treat it as impossible".
When you are writing a program, there are a lot of states, some of them are visible to code, some of them are not, some of them are about game logic, some of them are tight to machine physical states. And you are almost not going to separate them unless specifically designed it to.
And that is called save system.
But the problem of save system is: that is slow to load, because you need to initialize everything from ground up. All the textures, stage data, enemy entities will need to be reloaded even it is technically fine to reuse all of them.
And that is what xbox do(I think steam is unlikely to copy that?)
The idea of quick resume is to sacrifice storage spaces, just store everything(even things tight to hardware) to skip the initialization process for fast loading, which is completely opposite for what steam want to do.
Until now, only xbox implemented that (on same machine only)
But I just can't see it working across OSes.
Maybe if you limited it to same ARCH (or even vendor, AMD here) and dump everything but use some tricks wrt. GPU state? (And also not dumping OS discardeable caches, no idea if that is used by games though).
checkpoint restore of gpu state is much further along than you credit.
You really just need to dump textures and set up a matching context, which at worst should require an indirection shim to translate handles if they are stored by the application but generated by the driver with no way to force custom values during object creation (like how Linux allows custom PIDs for checkpoint/restore and other replay tech like rr).
Even if have a perfect wrapper that achieves all that you now have to save all application-supplied texture and shader data in the original form even where that memory could normally be freed after translating it to GPU-specific formats.
But "restricting yourself to a shared subset of OpenGL" alone already makes this unviable for anything demanding as it also means restricting yourself to the lowest common denominator for all limits including VRAM size, maximum texture sizes, essentially guaranteeing your solution to run worse on both systems.
The texture size issue I don't see as a problem (I thought we grew out of that being an issue years ago?), and the VRAM issue shouldn't be that hard, as games tend to not use spare VRAM for dynamic time-memory tradeoffs (unlike OS kernels with their pagecache).
On top of that, it's not like you need this functionality to deliver top performance from games that don't want to play their part to make this efficient. Working seamlessly at "just" 30% less FPS should already be very useful.
But they also provide a hook so the game has a chance to save and sync to the cloud before being suspended, so the user can pick up from the same point on another steam device. Loading the game normally of course.
That was very interesting to me.
Give it time, WSL support for graphics is in preview: https://docs.microsoft.com/en-us/windows/wsl/tutorials/gui-a...
[1]: https://reactos.org/
Edit: I also think it would have made a lot of sense for Valve to invest in getting ReactOS running on their Steam Deck hardware, so they could use that instead of Linux. They're clearly a Windows-first shop, and ReactOS is modeled on NT right down to the kernel. Having a Unix-like OS running underneath, when one really just wants to run Windows code, adds an extra translation layer and impedance mismatches that might even be user-visible.
Also, Valve's interest in GNU/Linux is broader than just Deck.
ReactOS is Windows APIs running on the from-scratch ReactOS kernel that is not very good.
The ReactOS project is not the source for most of the APIs a game is going to use. Many of the come from WINE.
Using ReactOS instead of WINE on Linux makes little sense at this point. It would certainly be a lot more expense and time to create a commercial quality product. Most of the work creating API support to WINE / Proton is portable to ReactOS of the kernel ever gets there.
To me it seems like cutting the compatibility arm is worth the price of having to keep a shitty, inconsistent behavior.
Apple has nailed it so well (don't make it backward compatible) for the last decade afterall, since Apple realized one the internet is so much better and source code management (and repository, backup, disaster recovery) became more accessible so that the cost of port became much lower.
It's a constant issue around me. I know people still keeping 10.6 Macs and sweating profusely at the idea that one day they'll stop working, as the tools they use haven't been ported upwards (because most often the developer of the proprietary app is dead) and will stop too ; imagine an artist whose favorite signature brand of crayons closes door.
The ideal solution would be to have a compatibility shim (like Wine) to provide the old behavior while being able to make the native behavior more consistent.
WINE is an open-source project that explicitly wants to run as much Windows software as accurately as possible on non-Windows systems. If something's broken, anyone can fix it.
This isn't true for the proprietary software that is Windows and C&C, albeit C&C Remastered is partially source-available now, so that could improve matters somewhat.
But all in all, I'd say go with OpenRA. My friend and I played it for a couple of weeks and we scratched the itch of the original games, with none of the hardships and a bevy of wonderful changes to the core gameplay.
https://www.howtogeek.com/688970/what-was-ibms-os2-and-why-d...
> Also, OS/2 had a chicken-and-egg problem. Its best selling point was its compatibility with MS-DOS and Windows applications. However, this meant few developers took the time to write OS/2-native apps. So, why run OS/2 at all?
Of course, since "linux api" is open/public/floss, wsl may have an advantage in compatibility. What is hard to determine is which side this advantage will benefit.
That just led to the BB appstore getting flooded with low quality Android apps that looked out of place and had terrible performance.
Which is not to say that BB10 would’ve succeeded if it had better apps, but it certainly didn’t help.
But with Proton/Wine it’s different because the games actually run really well, sometimes even better than they do on Windows, and it’s completely transparent to end users (unlike BB10, where Android apps behaved/looked different)
Plus, it doesn’t make a difference to the Linux desktop’s success whether devs write native apps or not. If a new business makes a real effort to develop and sell a Linux desktop product, the only thing that will matter is if customers can adopt it without losing access to the software/workflow they’re familiar with.
If they can pull that off, then competing against Windows shouldn’t be that hard; just don’t have a seething hatred of your own customers, and you’ll have a head start on Microsoft.
The only issue I see with the Proton reliance is the risk that Microsoft will do Microsoft things, and start introducing subtle API changes designed to break Proton/Wine and sabotage the competition. That’s a legitimate concern, but maybe today’s antitrust climate will make them a little hesitant to do that kind of thing? (Probably not)
I don't think this is comparable to the Win32 vs. (GNU/)Linux situation. There do exist lots of people who did write Linux-native applications in the past, but the APIs of many userland libraries of the GNU/Linux ecosystem tend not to be stable for a very long time, so these applications simply did not work anymore at some point in time.
Because of the technical complications that shipping GUI applications for GNU/Linux involves, a lot of companies concluded that developing and shipping applications for GNU/Linux is not worth it.
Eventually DOS will die down due to its limitations (like TSR, interrupts, lack of VM, inability of handling devices in safe manner) with ever increasing hardware power.
Porting over to OS/2 ensures it will have a much smoother way of keeping an edge over the competitors, if OS/2 ever did have a sequel. Thanks, Moore's Law!
Of course, OS/2 is ill-fated due to corporate thinking and the disagreement in both sides, but the ideas are rooted deep within Windows 95/98.
Not to be inflammatory, but I don't want to be monetised when I'm just using my computer.
It has been since _NSAKEY shipped in Windows 95 OSR2's ADVAPI32
http://www.stat.rice.edu/~dobelman/kstorm.txt
https://www.geoffchappell.com/studies/windows/win32/advapi32...
Anyhow, Privacy is not a boolean (Either you have it or not), but more of... A gradient? Running Google stuff and Linux as system, is certainly more towards privacy, than Windows + Google.
Proton is nice, but still is a wrapper 'behind' what Microsoft can decide to do to make sure they are 'ahead'.
From a strategic point of view, this is annoying for Valve. It makes more sense for Valve to try to get more SteamOS only games (and the Steam Deck should help with that), because they control that platform end-to-end (apart from manufacturing their CPU, it's close to what Apple does: Steam store + Steam hardware )
Proton is basically wine + dxvk + esync/fsync/wait_v with some community patches (e.g. using a "fake" fullscreen mode that scales up to native res rather than switching resolutions explicitly) and integration for e.g. steam input handler.
In other words they're bundling up a bunch of open source tech with sane configuration and adding a few steam integration patches. And it's all open source, on github, too. There isn't much that Valve does explicitly in regards to what windows APIs are supported, and what they do develop and fix gets submitted to upstream wine (though not everything is accepted, I guess).
I suppose, if Proton usage explodes such that the bulk of patches to wine get submitted by Valve devs, what you said would be true, but so far that isn't really the case.
Windows apps running via wine and old linux apps running via chroot or any other container (AppImage, snap or Flatpak) all work.
The problem is not having specific (major) versions of old libraries in the new OS. If you manage to install them, they will work - this is difficult in most distributions.
Last time I had to run some ancient software on Linux I just spun up a Virtual Box image with the Linux version it was released for (of course all the mirrors for that where offline by then too).
When a user needs to run a program, but the inconsiderate lazy dev only built, packaged, and tested the program on 24 ABIs (4 versions of 6 distros) rather than 25 ABIs like he should have, this is what the user wants to see:
/data/source/vcpkg/installed/x64-linux/debug/lib/libglib-2.0.a && : /data/source/vcpkg/installed/x64-linux/debug/lib/libglib-2.0.a(gmain.c.o): In function `g_get_worker_context': /data/source/vcpkg/buildtrees/glib/src/2.52.3-34a15219ec.clean/glib/gmain.c:5848: undefined reference to `pthread_sigmask' /data/source/vcpkg/buildtrees/glib/src/2.52.3-34a15219ec.clean/glib/gmain.c:5853: undefined reference to `pthread_sigmask' /data/source/vcpkg/installed/x64-linux/debug/lib/libglib-2.0.a(gregex.c.o): In function `match_info_new': /data/source/vcpkg/buildtrees/glib/src/2.52.3-34a15219ec.clean/glib/gregex.c:588: undefined reference to `pcre_fullinfo' /data/source/vcpkg/installed/x64-linux/debug/lib/libglib-2.0.a(gregex.c.o): In function `g_match_info_next': /data/source/vcpkg/buildtrees/glib/src/2.52.3-34a15219ec.clean/glib/gregex.c:734: undefined reference to `pcre_exec' /data/source/vcpkg/installed/x64-linux/debug/lib/libglib-2.0.a(gregex.c.o): In function `get_matched_substring_number': /data/source/vcpkg/buildtrees/glib/src/2.52.3-34a15219ec.clean/glib/gregex.c:1076: undefined reference to `pcre_get_stringnumber' /data/source/vcpkg/buildtrees/glib/src/2.52.3-34a15219ec.clean/glib/gregex.c:1079: undefined reference to `pcre_get_stringtable_entries' /data/source/vcpkg/installed/x64-linux/debug/lib/libglib-2.0.a(gregex.c.o): In function `g_regex_unref': /data/source/vcpkg/buildtrees/glib/src/2.52.3-34a15219ec.clean/glib/gregex.c:1262: undefined reference to `pcre_free' /data/source/vcpkg/buildtrees/glib/src/2.52.3-34a15219ec.clean/glib/gregex.c:1264: undefined reference to `pcre_free' /data/source/vcpkg/installed/x64-linux/debug/lib/libglib-2.0.a(gregex.c.o): In function `g_regex_new':
Clear as mud.
Of course you could use the buggy 16 month old version from the package repo.
(One potential problem I can see with really old Linux userlands/games is old Mesa wanting the old user mode switching drivers from Linux, that are long removed. You'd need at least newer versions of Mesa, I think, which may be impossible to achieve due to dependency hell)
This comes down to arguing semantics but I don't think this really constitutes a stable "userland ABI" in the sense it's used to describe Windows. Yes, you can use containers to effectively create independent copies of old userlands and run your code in them. But you can't just run old software without matching copies of the specific libraries it expects, which themselves have a rat's nest of dependencies, necessitating having ~N complete copies of Linux userlands floating around for N programs.
One way we could circumvent this problem is static linking, since they the only interface would be the kernel one, that is mostly backwards compatible. That has its own problems (e.g. inability to patch libraries independently), but is probably better than just keeping copies of the shared object files in their entirety in containers...
Out of the question for any app using the GPU.
As that means statically linking with a given GPU user-mode driver version, not being able to get updates or support for any future GPU.
isn't that why windows can run old applications though ? every game used to come bundled with their own copy of everything down to the C & C++ runtime (and that's why they still can run)
What doesn't work is relying on random other libraries to be present, but you will run into the same problem if you rely on whatever some other program dumped into system32 on windows. You also can't link against a newer glibc/etc. and then expect to run on older versions - that is not inherently different on Windows either but the SDK does let you target older versions from modern toolchains (whith limitations), something that GNU unfortunately does not care to provide so you have to make your own (or search for one).
libc.so.6 libasound.so.2 libfreetype.so.6 libX11.so.6
Each glibc/ALSA soname bump can spell death to entire generation of binary software.
In theory, you can link libX11, openssl and other important libraries statically, but many developers don't do it, because of weird concerns about "security", "compatibility" etc.
Compare it to Windows, where libraries like kernel32, user32 and gdi32 remained stable for decades and statically linking to them is unnecessary by design.
Only OEMs have the ability to directly use Linux, doing so from userspace means using what Google considers as being private APIs.
Not to mention that Google could at any moment change it by Zircon, if they could so feel inclined.
So Android is hardly the best that Linux could make it as desktop.
[0] - Native Development Kit/Android Game Kit
Chrome OS Flex might be interesting when it does, eventually, support the linux environments.
What made Android successful is Google seeing that mess and creating an entirely new operating system, from kernel to especially userspace. Android in a way turns Linux into a system that is much closer to a microkernel based OS. The binder IPC on the kernel side resembles the message passing systems of microkernels and almost all communication, except a couple of system stuff, passes through it. From allocating display buffers to "Share" buttons all of them uses this system. It has nothing to do with classical desktop system nor the Unix "way" of doing things, which is oversimplifying the system layer to the point of almost uselessness.
While the build system of AOSP and Android apps gives me shivers, the OS works beautifully and it can be continuously upgraded and be kept secure, if greedy SoC and device manufacturers released driver updates.
glibc is quite good about ABI compatibility - not any worse than Win32.
X11 also has a stable protocol. Even with Wayland there is Xwayland for backwards compatibility.
OpenGL and Vulkan have stable ABIs.
Your program location doesn't matter - unless you are installed via the package manager (in which case the package specifies the location) you can load everything relative to the binary.
User config location is gained a new standard for where you should put things to not mess up the home directory but that does not break anything. Old programs can still write to ~/.yourfancydotfile.
Evenvironment variables only matter if you wrote your program for them to matter.
Preinstalled libraries are irrelevant - ship your own like you have to do on windows for anything that is not part of the base system.
Acceptable keyboars shortcuts and standard dialogs are integration concerns and not strictly needed. Not saying that you shouldn't provide DE-integration where that makes sense but that can be done on top of sane fallbacks. Also, there is now a cross-DE API for standard file dialogs: xdg-desktop-portals
.desktop files have been standardized for a long time so you should not have problems registering file types - it is of course up to the DE to manage the default and that is a good thing.
• Does copy-and-paste work?
• Does the file picker dialog default to a logical location, or does it start out in some weird directory?
• If you click on a URL, does it open in your default web browser?
• Can you screen-share the application from Zoom?
I'd also be curious whether there's a performance impact beyond disk usage.
Basically, I'm wondering if the UX is substantially better than using a VM. VMs are great for backwards compatibility, but the UX sucks, because apps don't exist in a vacuum.
If chroot does work seamlessly for GUI apps, that strikes me as a perfectly reasonable backwards-compatibility solution, and better than what Windows does in some ways. Heck, distros should consider automating this when users try to launch old software.
Edit: I also wonder how much of this problem would go away if Linux devs were willing to ship statically-compiled binaries. (Or mostly-statically-compiled binaries, since I know including e.g. gpu libraries is problematic.)
X11 as a protocol if anything is probably more backwards compatible than windows has ever been, and most of the extensions that enable the things you're asking about have been available for decades. ABI and libc aside xclock from 1996 probably still works on ubuntu 22.04.
> Heck, distros should consider automating this when users try to launch old apps, if at all possible.
This is more or less what snap and flatpak are trying to do.
(If you can't tell, I'm not a Linux user, I was many years ago and I'd like to go back some day. These types of library compatibility issues are a major part of what's keeping me away—I want to know that most apps from 15 years ago will still work, and most of the apps I have today will still work in another 15 years.)
Some of the things you listed as problems would be problems anyways in wayland, because they have to do with the fact that wayland doesn't, for example, give unrestricted access to every single program's image buffer from any program (for good reason).
For reasons that do not apply to all use cases like local applications that already have full access to ~/.
As for copy/paste, it is a bit of a mess but it's a mess that works pretty well for this kind of situation. If the copyer and paster windows are in the same x11 context and use the same (widely used) protocol over x11 window properties, they will be able to copy and paste with each other regardless of if they're running natively, in a chroot, in a vm, or on a remote machine.
Incidentally I really miss having the second "select/middle click" copy/paste context when I'm using windows or a mac. It's really frickin' useful and by far more useful than almost any other middle mouse button uses I've ever seen in any non-game. But then I also miss having normal copy/paste in the common linux gui terminal emulators so...
> and the copy&paste mess it provides is, well, a mess.
Still much better than any windowing system that only has a single paste buffer.
The key word is chroot here, and managed. Sure, a technology enthusiast might manage to run binaries from 2007 on a chroot, as in, after having invested hours of work to find an outdated copy of an entire distro and then wasting gigabytes of hard drive space on making it work. But this doesn't help the average linux gamer who just wants their downloaded game from 5 years ago to still work. Nor does it help the ISV vendor who wants to sell GUI software that can be used on modern linuxes as well.
you mean
docker run -it debian/eol:potato /bin/bash
?(debian potato was released in 2000 for the curious)
The only acceptable user experience for this sort of thing is "double click on the icon and it just runs".
maybe, but absolutely no OS provides this as of today.
My experience was that often it is the opposite problem. Games came with bundled libraries of old versions (e.g. libSDL) that do not work properly with the rest of the OS. When they are forced to use system versions of libraries, they started to work.
Eventually people would get tired of patching old ones, but at that point you just freeze them and have people use a VM to avoid the security holes.
Windows has compatibility mode for older windows. And it's great.
Does that matter? If there is a stable driver that's what's important, and FreeBSD has if anything a better track record for maintaining drivers for longer, even if those drivers were originally ported from elsewhere.
> Linux is undeniably a safer, more conservative business decision than FreeBSD.
I disagree; safe and conservative is exactly what FreeBSD does better than Linux.
For example, a lot of the tricks that Proton relies on explicitly use patches to the Linux kernel to do with FUTEX_WAIT implementation, which have only been patched into mainline since 5.16 afaik, as well as bleeding edge Mesa/xorg versions, the current state of things is that it makes sense for them to base on a rolling release where they can frequently push system images with bleeding edge versions to the deck hardware.
Maybe a few years down the line it'd make more sense to base on something more stable like BSD, but things are moving very quickly in Linux+wine gaming support and it's actually helpful right now to be on experimental/unstable versions of certain things.
Bullseye is the good enough point for basically everything other than gaming on debian distros, not much you can't do with juat the bullseye repos.
Now that Valve has decided Linux gaming is a real thing, within a few years Debian will probably be good enough for that..
Not that it will stop them from constantly changing stuff in breaking ways for 3% better performance....
The only thing Sony needed from FreeBSD was x86 support and generic kernel facilities such as memory, process and IO management. Everything else they wrote themselves for their proprietary hardware and userspace.
Steam (or whoever at this point) could bring together the efforts put in static linking of Linux apps and combine it with some sort of app isolation (freebsd like "jailing"... maybe doable with lxc?) so that a game binary once linked doesn't need anything other than the kernel and the isolation keeps it from affecting other apps in case it is exploited because of vulnerabilities in statically linked parts of the binary.
This way, we could have forever running apps if that is what we want.
funnily enough, though, Red Hat failed with LSB, but systemd is, for better or worse, accomplishing much of the same goals, causing many of the same issues of poor extensibility and customizability.
The new trendy solution seems to just be having different tiers for devices that can't handle the full thing.
Customizability itself is, to some degree at odds with pretty much all of what the majority of users who are not hobbyists want, so I'm not sure it's the best plan to prioritize that.
On the other hand, the current solution of pretending that only Ubuntu and Red Hat exist and leaving other distros to figure out the compatibility for themselves seems to be a slight less restrictive de facto standard that works well for most.
But the things I wrote for Linux need permanent updates because they break some function change. Especially major versions changes qt4 to qt5 or gtk2 to gtk3...
In that sense I agree that Wine provides a benefit of preservation and very long term support that native Linux ABIs don't.
I completely disagree about regular desktop applications though. Games use case is different becasue they are developed as one time project and game companies move to the next game abandoning support for the old ones in essence after a relatively short time. Such kind of programs need stable ABIs to be usable long term.
Desktop applications on the other hand (like browsers for instance) are evolving and are actively developed continuously. They don't need Wine on Linux. I'd simply stay away form those desktop applications which are abandoned.
This would be playing to their strengths. There is a much nicer command line/shell ecosystem in Linux and a much nicer GUI ecosystem in Windows.
That is why so few bother to support Linux OEMs, having some kind of POSIX support is enough for the large majority.
However I still disagree, structured shell with REPL like capabilities like PowerShell are so much better and so much closer to the Xerox PARC experience.
Not the GP but generally speaking it’s not a great reach to say that Linux is more widely supported than POSIX. GNU-only flags are often used in shell scripts and you’ll often find binaries are packaged as a snap or Docker container thud anyone running a non-Linux system is left to compile that project themselves.
Even WINE itself doesn’t officially support all POSIX-compatible UNIXs.
For better and worse, the POSIX spec is dead. Besides a few niche use-cases where compatibility with archaic software is necessary, Linux is the new standard for this stuff.
Linux is not a standard, because in opposite to, say, POSIX, it is not standardized, but is an everchanging implementation.
The kicker is that nobody can really undermine them unless you can create a true alternative with a more compelling license than GPL. If our industry wants to return to a truly standardized status-quo, we need to put aside our differences and collaborate on a next-gen spec that works. Considering that we barely did this in the 80s with POSIX, I seriously doubt today's developers and researchers are capable of doing it again. I'd love to be proven wrong though.
But I can see it being attractive for full attention/fullscreen apps (like games) that don't use those things or by design bring their own implementations for those things, where the benefit is the reduced decision space for the developer, at the cost of the increased complexity. However, as the article states, ports are often using "compatibility layers" that are just worse versions of Wine though, so for such quasi-ports, there really is no increased complexity in using Wine instead.
https://www.theregister.com/2021/10/26/microsofts_uwp_unwant...
It’s not a huge surprise why Microsoft can’t rally developers behind anything.
Unfortunately, the execution was a mess. Not having any way to opt out of the sandbox was an insane decision and it led to crazy workarounds; even first-party Windows software has to do things like ship a sidecar exe to bypass the sandbox (the Store does). And troubleshooting issues with the sandbox was a pain, configuring capabilities was a pain, and there was very little in the way of iOS-style user-facing permission controls.
And don't get me started on the marketing; MS flacks kept telling devs how sandboxing benefits users while doing virtually nothing to convey those benefits to users.
It's been a while since I've laughed out loud like when I read that.
and its not an insult to linux, but I've been hearing about the year of linux on the desktop like I've been hearing about the apocalypse. Believing of the year of linux on the desktop is the same as believing in Nostradamus.
I fully believe that Windows will _eventually_ be replaced with a desktop environment running on top of the linux kernel.
maybe when WSL starts actually being Linux instead of just a cobbled together mess running under the NT kernel
But it's also not like Windows has ever had the same backwards compatibility guarantee for drivers as it has had for applications.
Then again, maybe it doesn't need fixed, since it seems to be working great. Distros just need to ship with WINE preinstalled and better-integrated. Hell, write an entire distro using win32 apps.
It would be trivial to go on about all the ways and means that this couldn't possibly work but that would be almost besides the point. The fact that you want this to work is by itself problematic. It's a toxic sort of entitlement to a universe that is a little less complicated and a little less free in order to be a little more convenient and its so problematic that the universe is better off without anything that might be contributed in such a spirit.
Linux isn't a sub project of gnome nor will anyone accept it being run like one and why would they? People and projects own their particular contributions they don't own the community and the right to tell others how to use them or their own hardware. Developers of a particular project can rightly say nonpaying users have no right to software they paid nothing for working in a certain fashion but likewise by throwing their software to the wind they have acquired no consideration in return. This means they don't owe you not speaking negatively about said changes, they don't own you not forking, they don't owe you not replacing your software with software that works how they would prefer.
People are liable to experience disappearing functionality,software,options as a loss and react accordingly. If a change would be experienced by users as a loss that is paid for not with tangible benefits but with for example developer productivity or satisfaction its unlikely to garner users. Commercial software that is sold outright version on version promotes understanding this. Nobody ever sold version n+1 with the idea that you would accept less features in exchange for a simplified code base unless the software is being sold by developers to developers. End users will never make such a trade. Developers of such software know that they have in fact to compete with their own software n+1 needs to be tangibly better for end users.
For example if Wayland were actually desirable AS IS and successfully communicated to its intended users considering what OS, OS version, and software then more than 15% will be using it. 15% update 14 years in is either a failure to be meaningfully better in ways that people actually care about or a failure to communicate.
Instead of wishing you could make people use it just keep improving it until people are willing to adopt it.
But above all, a stable ABI is only needed for proprietary programs which I abhor for not being FLOSS. As a programmer, I really do think the 4 freedoms are important and loathe anything non-compliant.
Win32 covers a lot more than xlib, athena and motif. And still I have to resort to porting over bits and pieces from the FreeBSD C library because in a pure win32 project (no msvcrt), things are missing.
The thing is, getting all the details right requires extensive research and a lot of extra nonsense that shouldn't be necessary. For compatibility, accessibility, consistency, etc. Sometimes it's amazing things work at all.
Plenty of details documented across MSDN and Technet, and these old technology called books.
Only masochits do pure C Win32, even back in the Win16 days we were better with OWL, MFC and VB.
I've found win32 to be a bit hard to find documentation on sometimes (the official documentation is complete, but sometimes know which hook or function to use is up for debate, stackoverflow has good answers there), but overall it's a very good API that gets out of the way and lets me just build.
I've found a good reference here: https://github.com/mity/old-new-win32api
The message loop (using MsgWaitForMultipleObjectsEx) was somewhere around 20 LOC, to enable all the things that the application had to do (including correct handling of dialogs). I don't count that as getting out of my way.
If it's helpful, I'd like to mention that Charles Petzold's "Programming Windows" has been pretty much the reference for writing Win32 apps since the '90s. (It's the same person that wrote "Code" and "The Annotated Turing".) You probably want the 5th edition as that's the last pure Win32 version; the 6th edition seems to be oriented towards C# based WinRT apps.
I found that Pavel Yosifovich's "Windows 10 System Programming" was an excellent complement to Petzold; it fills in a lot of gaps, and it's quite recent which is nice (there were some bits in Programming Windows that would be dropped if it were rewritten today).
My hero
That's doubly-surprising, given that there's already a web reimplementation of Winamp (https://webamp.org/) that does those things. (And it's "lightweight" in terms of not pulling in any JS frameworks; but not especially "lightweight" in terms of you needing a full web browser to run it.)
But yes, there are modern and maintained implementations that support winamp skins. I think qmmp is one of those.
If you're looking for a no-frills native Linux audio player, I recommend Quod Libet[0] wholeheartedly. Nothing fancy, but it has loads of organizational features bolstered by a rock-solid GTK3 codebase. Genuinely have no complaints with it, I'm really impressed with how polished and feature-complete it is.
But it really irritates me when the Windows version is, after all, just a bunch of scripts loaded into a scripting runtime (think e.g. Love2D, or RenPy); but then the first-party macOS/Linux downloads turn out to be WINE wrappers wrapping the Windows version of the scripting runtime, rather than using the macOS/Linux versions of the scripting runtime.
I get that people don't always have multiplatform development setups; and that there are easy-to-use tools that "wrap" a Windows application into macOS/Linux versions. But these runtimes usually also have cross-"compilation" options that are just as easy to use!
Eventually I switched to running the Windows version under Wine to get working sound… that was a while back though.
There are goods and bads to supporting the win32 abi/api with ALL of its quirks and bugs. But most of this (99%+) is trying to support dead projects that will get no support or maintenance even if the bugs turn out to be client side misuse of odd/undocumented errata behaviour.
This is a fundamental shift in culture between, release and maintain VS release fire the devs and cash a cheque. Very few closed sourced Windows projects will _ever_ get even the level of updates you get from VMware or Nvidia products during their lifecycle on Linux and these are companies betrated for being mere months behind mainline kernel developments...
In Windows, it works just as it worked in Windows XP, 7 and so on. Many years after, it still runs.
In Linux, any distro not 10 years old, it is basically impossible to make it compile. No binaries can be found that work in any Ubuntu or Red Hat that people actually use in 2022.
Whoever said static linking is bad never thought about these scenarios.
That's why both Rust and Go are using static linking. The future of not-ridiculously-slow software is going to be statically linked.
In a modern computer with modern memory, we should be using the RAM for static linked executables instead of bloated Electron runtimes.
If you are running MS Teams, Skype, Discord, and Slack all on one PC, and have Chrome tabs open... how many WebKit/equivalent runtimes is that bundled all together (assuming all of the chat apps still use Electron aka WebKit)?
Definitely not true: https://news.ycombinator.com/item?id=28978086 , Ok, the linked article talks about a "native" port, but still...
> 3/400 bug reports were port specific
it's a report about linux users being more likely to report issues in general, not being picky about port quality
No sane PM would go "hey let's take a huge chunk of our budget and spend it on native builds and QA for at least five different-enough-to-all-have-their-own-bugs linux platforms in addition to Windows, rather than spending it on actual game development for a single platform".
“We shipped Planetary Annihilation on Win, Mac, and Linux. Linux uses we're a big vocal part of the Kickstarter and forums.
In the end they accounted for <0.1% of sales but >20% of auto reported crashes and support tickets (most gfx driver related).
Would totally skip Linux.”
“By the end of my time at Uber I believe very nearly 100% of both crashes and support tickets actually for the game were still Linux related, even after significantly engineering time. Way more Linux specific time put into that project than any other platform. And again, that was for a tiny fraction of the users.
Adding Linux support ended up likely costing Uber hundreds of thousands of dollars for a few hundred dollars in sales revenue.”
https://mobile.twitter.com/bgolus/status/1080213166116597760...
> all distros and versions, each of which needs a different binary
You only need to support Steam runtime.
It's a multi-week project that needs to be funded and takes away developer resources from actually making the game good, for an absolutely miniscule userbase that could play your game just fine without any drawbacks in Proton, for free. Valve pays for it because developers can't/won't.
Even if you fund a Linux port, it basically ends up abandoned because there is no money to maintain it - updates will only go to Windows. There's even games that don't have working DLC in their Linux-native versions.
Dynamic linking should be completely abolished. This would also solve the "package manger problem" immediately because there will be no dependencies.
But on the other hand high level GPU APIs are pretty stable and in general backwards compatible. A program from the year 2000 that only links against OpenGL would still run today (with x86 libs obviously). This means to static link as much as possible still has value.
We are doomed