[HN Gopher] Win32 Is the Only Stable ABI on Linux ___________________________________________________________________ Win32 Is the Only Stable ABI on Linux Author : pantalaimon Score : 329 points Date : 2022-08-15 16:19 UTC (6 hours ago) (HTM) web link (blog.hiler.eu) (TXT) w3m dump (blog.hiler.eu) | cosmiccatnap wrote: | This is a long standing question and has nothing to do with Linux | or windows. It's a design philosophy. | | Yes the win32 abi is very stable. It's also a very inflexible | piece of code and it drags it's 20 year old context around with | it. If you want to add something to it you are going to work and | work hard to ensure that your feature plays nicely with 20 year | old code and if what you want to do is ambitious...say refactor | it to improve it's performance...you are eternally fighting a | large chunk of the codebase implementation that can't be changed. | | Linux isn't about that and it never has been, it's about making | the best monolithic kernel possible with high level Unix concepts | that don't always have to have faithful implementations. The | upside here is that you can build large and ambitious features | that refactor large parts of how core components work if you | like, but you might only compile those features against a | somewhat recent glib. | | This is a choice. You the developer can link whatever version you | want. If you want to build in support for glib then just use | features that only existed 10 years ago and you'll get similar | compatibility to win32. If not then you are free to explore new | features and performance you don't have to implement or track | provided you consider it a sensible use cases that someone has to | be running a somewhat recent version of glib. | | The pros and cons are up for you to decide but it's not as simple | as saying that windows is better because it's focus is backwards | compatibility. There is an ocean of contexts hidden behind that | seemingly magical backwards support... | karamanolev wrote: | According to Wikipedia, "Win32 is the 32-bit application | programming interface (API) for versions of Windows from 95 | onwards.". | | Also from there "The initial design and planning of Windows 95 | can be traced back to around March 1992" and it was released in | '95. So arguably, the design decisions are closer to 30 years | old than 20 :) | jdsully wrote: | The main structure is from win16, although adding support for | paging and process isolation was a pretty big improvement in | win32. IMO its held up extremely well considering its 40 | years old. | [deleted] | guardiangod wrote: | I can run a Windows 95 app on Windows 10 and it has a reasonable | chance of success. | | Should Linux (userland) strive for that? Or is Year of the Linux | Desktop only covers things compiled in the last 10 years? | CommanderData wrote: | Just try changing your hosts or nameservers across different | versions of Ubuntu Server. | | The fragmentation is such a mess even between 1.x major | versions. Their own documentation is broken or non existant. | [deleted] | SubjectToChange wrote: | > Should Linux (userland) strive for that? | | The linux "userland" includes thousands of independent | projects. You'll need to be more specific. | | > Or is Year of the Linux Desktop only covers things compiled | in the last 10 years? | | If you want ABI compatibility then you'll have to pay, it's | that simple. Expecting anything more is flat out unreasonable. | cbarrick wrote: | > The linux "userland" includes thousands of independent | projects. You'll need to be more specific. | | I think it's pretty clear from the context. | | The core GNU userland: glibc, coreutils, gcc, etc. | Woodi wrote: | Here is some game from '93. Compile it yourself (with some | trivial changes). | | https://github.com/DikuMUDOmnibus/ROM | | Trivial ! | | But if you still have some obiections then let's wait ~27 years | and then talk about games developed _on Linux_ / *nix. | BugsJustFindMe wrote: | YSK, this code will likely fail in weird ways on platforms | with default unsigned char like ARM because it makes the | classic mistake of assuming that the getc return value is | compatible with char type despite getc returning int and not | char. EOF is -1, and assigning a char on ARM changes to 255 | so you'll read past the end of some buffers and then crash. | Woodi wrote: | Maybe there will be some problems on weird platforms. But | if game is good some datails can be resolved. With bad | games too ;) With source code, that is. | erk__ wrote: | Does that not miss the point of the above poster, this does | not show that Linux have good binary compatibility, but that | C is a very stable language. Would it run fine if you | compiled it on a 27 year old compiler and then tried to run | it on Linux is the question that should be asked if I am not | mistaken. | janef0421 wrote: | Is it really a reasonable goal to want an operating system | to run a 27 year old binary without any modification or | compatibility tool? There does need to be some way to run | such binaries, but doing that by making the kernel and all | core ABIs stable over several decades would make evolving | the operating system very difficult. I think it would be | better to provide such compatibility via compatibility | layers like wine and sandboxing in the style of flatpak. | kibwen wrote: | Which is also how Windows itself does it. Wanna run DOS | or 16-bit binaries, you reach for an emulator. | Woodi wrote: | I think it shows that compiling is prefered way to go. So | it's more like twisting around the point :) | | But what with old, binary only games ? Same as with old | movies you want to watch and Hollywood prefers to not show | anymore... They are super stupid IMO but maybe they have | their reasons. | | And that DT_HASH lack can be easily patched if someone | wants. And if GNU will keep to sabotage like this then | there is time to move off GNU. Ah, right - noone wants to | sponsor libc fork for few years... Maybe article is right | about binaries after all ;) | ivraatiems wrote: | It's what the kernel strives for. They're remarkably consistent | in their refrain of "we never break userspace." | | I think it would be reasonable for glibc and similar to have | similar goals, but I also don't run those projects and don't | know what the competing interests are. | pantalaimon wrote: | > I think it would be reasonable for glibc and similar to | have similar goals | | I don't think userspace ever had this goal. The current | consensus appears to be containers, as storage is cheap and | maintaining backwards compatibility is expensive | lpghatguy wrote: | Containers are not a great solution for programs that need | graphics drivers (games) or quick startup times (command | line tools). | | I've been wrestling with glibc versioning issues lately and | it has been incredibly painful. All of my projects are | either games or CLI tools for games, which means that "just | use a snap/flatpak/appimage" is not a solution. | bityard wrote: | There's no reason launching a container _must_ be slow. | Under the hood, launching a containerized process is just | making a few kernel syscalls that have very little | overhead. You might be thinking of docker, which is slow | because it's intended for certain use cases and brings a | lot of baggage with it in the name of backward | compatibility from a time when the Linux container | ecosystem was much less mature. | | There are several projects working on fast, slim | containers (and even VMs) with completely negligible | startup times. | | I don't know what is holding back container/VM access to | graphics hardware, but it can't be insurmountable if the | cloud providers are doing it. | bnieuwen wrote: | The problem with containers and graphics drivers is that | those drivers have an userspace component. This depends | on the hardware (e.g. AMD vs. Intel vs. NVidia all have | different drivers of course) and in the case of NVidia | this has to be exactly matched with the kernel version | (this is less of an issue with VMs, but then you need | something like SR-IOV which isn't quite on consumer HW, | or do dedicated PCIE throughput which doesn't allow the | host to use it). | | So version management becomes a major pita, from shipping | drivers too old to support the hardware to having a | driver that doesn't match the kernel. In the cloud this | is mostly solved by using VMs and hardware with SR-IOV. | (and a fixed HW vendor so you know which set of drivers | to include) | vetinari wrote: | > I don't know what is holding back container/VM access | to graphics hardware, but it can't be insurmountable if | the cloud providers are doing it. | | Cloud providers have graphics hardware with SR-IOV | support. It is exactly the kind of functionality, that | the GPU vendors use for segmentation of their more | expensive gear. | hu3 wrote: | Sidenote. I remember when Warcraft 3 ran better in Wine+Debian | than in Windows. Athlon II x2 CPU and Nvidia Geforce 6600 GT with | a wooping 256MB of VRAM. That was one hot machine. Poor coolers. | benibela wrote: | I tried to run WoW and Starcraft 2 with Wine, and it did not | install/run | userbinator wrote: | The change that caused the break would be equivalent to the PE | file format changing in an incompatible way on Windows, to give | an idea of how severe it is. | zzo38computer wrote: | I suppose that Win32 can be helpful if you want to make programs | that run on both Windows and on Linux (and also ReactOS, I | suppose), but might not work as well for programs with Linux | specific capabilities. | | (Also, I have problems to install Wine, due to package manager | conflicts.) | | There are other possibilities, such as .NET (although some | comments in here says it is less stable, some says it works), | which also can be used on Windows and on Linux. There is also | HTML, which has too many of its own problems and I do not know | how stable HTML really is, either. And then, also Java. Or, you | can write a program for DOS, NES/Famicom, or something else, and | can be emulated in many systems. (A program written for | NES/Famicom might well run better on many systems than a native | code does, especially if you do not do something too tricky in | the code (in which case some implementations might not be | compatible).) Of course also the different ways they have | different advantages and disadvantages, with compatibility, | efficiency, capability, and other features. | littlestymaar wrote: | At this point I'm pretty convinced that no-one at Microsoft ever | did a better job in keeping people on Windows than what the | maintainers of glibc are doing ... | [deleted] | sylware wrote: | The glibc libs should be ELF clean. Namely, a pure and simple | ELF64 dynamic exe, should be able to "libdl"/dynamically load any | glibc lib. It is maybe fixed and possible in latest glibc. | | The tricky part is the sysv ABI for TLS-ized system variables: | __tls_get_addr(). For instance errno. It seems the pure and | simple ELF64 dynamic exe would have to parse the ELF headers of | the dynamically loaded shared libs in order to get the "offsets" | of the variables. Never actually got into this for good though. | | And in the game realm, you have c++ games (I have an extremely | negative opinion about this language), and the static libstdc++ | from gcc does not "libdl"/dynamically load what it requires from | the glibc, and it seems even worse, namely it would depends on | glibc internal symbols. | adolph wrote: | Maybe a counterpoint is "x86-64 Linux ABI Makes a Pretty Good | Lingua Franca" [0] from actually pdrtable executable of Aug 2022. | | 0. https://justine.lol/ape.html | knorker wrote: | Yeah Linus's "we don't break user space" is a joke. | | Great, the kernel syscalls API is stable. Who cares, if you can't | run a 7 year old binary because everything from vdso to libc to | libstc++ to ld-linux.so is incompatible. | | Good luck. No it's not just a matter of LD_LIBRARY_PATH and | shipping a binary with a copy. That only helps with third party | libs, and only if vdso and ld-linux is compatible. | | My 28 year experience running Linux is that it's API (source | code) unbroken, but absolutely not ABI. | MichaelCollins wrote: | Linus _does_ provide a stable ABI with Linux, it 's GNU who | drops the ball and doesn't. You're criticizing Linus for | something he has nothing to do with. What's the point in that? | beebeepka wrote: | Not news. In fact, wine/proton really is the preferred wayof | doing things. | | Valve saw the light years but they weren't the first. Even | Carmack has been saying it before the whole gaming on Linux thing | became viable. | jwilk wrote: | OK, glibc ABI stability may not be perfect, but is there any | evidence that Wine is any better? That sounds implausible to me. | modeless wrote: | The difference is if Wine breaks an application that works on | Windows, it's considered a bug that should be fixed, regardless | of why. | amadeuspagel wrote: | Stable APIs on linux: https://developer.mozilla.org/en- | US/docs/Web/API | cowtools wrote: | I used to disagree with this browser-as-OS mentality, but | seeing as it's sandboxed and supports webGL, wasm, WebRTC, etc. | I find it pretty convienient (if I'm forced to run zoom for | example, I can just keep it in the browser). Just as long as | website/application vendors test their stuff across different | browsers. | ddevault wrote: | The kernel <> userspace API is stable, famously so. Dynamic | linking to glibc is a terrible idea, statically link your | binaries against musl and they'll still work in 100 years. | nibbleshifter wrote: | Trying to statically link with glibc throws specific warnings | that certain calls aren't portable. | | With musl? No such problem. | | Fuck even uclibc is more portable than glibc and its a dead | project afaik | SubjectToChange wrote: | > With musl? No such problem. | | Does musl even implement the functionality glibc was warning | about? | sylware wrote: | game binaries need to dynamically load system libs. A | statically linked binary would have to include a full ELF | loader. | kazinator wrote: | "DT_HASH is not part of the ABI" is like saying "DNS is not part | of the Internet". | myself248 wrote: | like Excel is more stable than Windows itself, you can open a | spreadsheet from the win16 days and it'll just work.... | croes wrote: | Nope, had multiple that did even work after the latest update | mananaysiempre wrote: | Personal experience: Office 2021 and Office 97 do _not_ | paginate a DOC file created (by Microsoft employees) in Office | 97 the same way, so the table of contents ends up different. | oppositelock wrote: | Many moons ago, one of the things I did was to port the Windows | version of Google Earth to both Mac and Linux. I did the mac | first, which was onerous, because of all the work involved in | abstracting away system specific API's, but once that was done, I | thought Linux would be a lesser task, and we hired a great linux | guy to help with that. | | Turns out, while getting it running on linux was totally doable, | getting it distributed was a completely different story. Due to | IP reasons, this can't ship as code, so we need to ship binaries. | How do you do that? Do you maintain a few separate versions for a | few popular distributions? Do you target the Linux Standard Base? | The first approach is a lot of work, and suffers from breakages | from time to time, and you alienate users not on your list of | supported distros. The second version, using LSB, was worse, as | they specify ancient libraries and things like OpenGL aren't | handled properly. | | End result; management canned the Linux version because too much | ongoing support work was required, and no matter what you did, | you got hate mail from Gentoo users. | perryh2 wrote: | Are these Linux app distribution problems solved by using | Flatpak? | entropicdrifter wrote: | Most of them are, yes. AppImage also solves this, but doesn't | have as robust of an update/package management system | akvadrako wrote: | Yeah, their Linux guy obviously didn't know what he was | doing. | Shared404 wrote: | Google Earth was released in 2001, and Flatpak in 2015. | That's a 14 year window of time in which this wasn't an | option. | zsims wrote: | Flatpack only came out in 2015 | jcelerier wrote: | > Due to IP reasons, this can't ship as code, so we need to | ship binaries. How do you do that? | | I build on an distro with an old enough glibc following this | table: | https://gist.github.com/wagenet/35adca1a032cec2999d47b6c40aa... | (right now rockylinux:8 which is equivalent to centos:8 and | good enough for debian stable and anything more recent than | that ; last year I was still on centos:7), use dlopen as much | as possible instead of "normal" linking and then it works on | the more recent ones without issues. | edflsafoiewq wrote: | That's the trick. AppImage has a pretty good list of other | best practices too: https://docs.appimage.org/reference/best- | practices.html (applies even if you don't use AppImages). | LawnGnome wrote: | I worked on a product that shipped as a closed source binary | .so (across four OSes and two architectures) for almost seven | years, and that's exactly what we did too -- build on the | oldest libc and kernel any of your supported distros (or OS | versions) support, statically link as much as you can, and be | defensive about _any_ runtime dependencies you have. | curt15 wrote: | >The first approach is a lot of work, and suffers from | breakages from time to time | | Are there any distros that treat their public APIs as an | unbreakable contract with developers like what MS does? | dfabulich wrote: | No, no one does. It's a lot more work to maintain all public | APIs _and their behavior_ for all time; it can often prevent | even fixing bugs, if some apps come to depend on the buggy | behavior. Microsoft would occasionally add API parameters / | options to let clients opt-in to bug fixes, or auto-detect | known-popular apps and apply special bug-fix behaviors just | for them. | | Even Apple doesn't make that level of "unbreakable contract" | commitment. Apple will announce deprecations of APIs with two | or three years of opportunity to fix them. If apps don't | upgrade within the timeframe, they just stop working in newer | versions of macOS. | salmo wrote: | RedHat claims or at least claimed that for EL. I think it's | limited to within minor releases though, with majors being | API. | | That's fine if you're OK relying on their packages and 3rd | party "enterprise" software that's "certified" for the | release. No one in their right mind would run RHEL on a | desktop. | | The most annoying to me was that RHEL6 was still under | support and had an ancient kernel that excluded running Go, | GRaalVM, etc. static binaries. No epoll() IIRC. | | Often times you find yourself having to pull more and more | libraries into a build. It all starts with wanting a current | Python and before you know it you're bringing in your own | OpenSSL. | | And they have no problem changing their system management | software in patch releases. They've changed priority of | config files too many times. But that's another rant for | another day. | | This is a place where I wish some BSD won out. With all the | chunks of the base userspace + kernel each moving in their | own direction it's impossible to get out of this place. Then | add in every permutation of those pieces from the distros. | | Multiple kernel versions * multiple libc implementations * | multiple inits * ... | | I'd never try to make binary-only software for Linux. Dealing | with packaging OSS is bad enough. | bachmeier wrote: | > The second version, using LSB, was worse, as they specify | ancient libraries and things like OpenGL aren't handled | properly. | | That was a shame. There was a lot of hope for LSB, but in the | end the execution flopped. I don't know if it would have been | possible to make it succeed. | ok_dad wrote: | Could you have used something like this: | | https://justine.lol/cosmopolitan/index.html | naniwaduni wrote: | I'd assume not without violating causality? | pxc wrote: | I took the question to be whether having something like | that available, at the time, would have solved any of their | problems with distributing Google Earth for Linux | frozenport wrote: | Wait. Google Earth has always been available for Linux? | https://www.google.com/earth/versions/ | cyral wrote: | They probably mean the old desktop one that has been re- | branded to "Google Earth Pro". The UI looks a decade old but | it's still useful for doing more advanced things like taking | measurements. | oppositelock wrote: | Yup. That's the one. If it works for you, great, but it | crashes on symbol issues for many people. | freedomben wrote: | FWIW, I use Google Earth Pro on Fedora quite often, and | I'm deeply appreciative of the work it took to make that | such a simple and enjoyable experience. | | I hate that the vocal and tiny minority of linux users | who are never satisfied are the ones that most people | hear from. | scoopr wrote: | FWIW, these days Valve tries to solve same problems with their | steam runtime[0][1]. Still doesn't seem easy, but looks like | almost workable solution. | | [0] https://github.com/ValveSoftware/steam-runtime | | [1] | https://archive.fosdem.org/2020/schedule/event/containers_st... | littlestymaar wrote: | In that context, cannot the issue be sidestepped entirely by | statically linking[1] everything you need? | | AFAIK the LGPL license even allows you to statically link | glibc, as long as you provide a way for your user to load their | own version of the libs by themself if that's what they want. | | [1]: (or _dlopen_ ing libs you bundle with your executable) | jefftk wrote: | _> We need to ship binaries. How do you do that? Do you | maintain a few separate versions for a few popular | distributions? Do you target the Linux Standard Base?_ | | When I worked on mod_pagespeed we went with the first approach, | building an RPM and a DEB. As long as we built on the oldest | still-supported CentOS and Ubuntu LTS, 32-bit and 64-bit, we | found that our packages worked reliably on all RPM- and DEB- | based distros. Building four packages was annoying, but we | automated it. | | (We also distributed source, so it may be that it didn't work | for some people and they instead built from source. But people | would usually ask questions on https://groups.google.com/g/mod- | pagespeed-discuss before resorting to that I don't think I saw | this issue.) | jrockway wrote: | Was static linking not enough? | | I feel like the problem most people run into today is glibc vs. | musl differences. They develop on Ubuntu, then think they can | just copy their binaries into a "FROM alpine:latest" container, | which doesn't actually work. | | It is possible, though, that whatever you statically link | doesn't work with the running kernel, of course. And there are | a lot of variants out there; every distribution has their own | patch cadence. (A past example of this was the Go memory | corruption issue from 1.13 on certain kernels. 1.14 added | various checks for distribution + kernel version to warn people | of the issue, and still got it wrong in several cases. Live on | the bleeding edge, die on the bleeding edge.) | rascul wrote: | > I feel like the problem most people run into today is glibc | vs. musl differences. They develop on Ubuntu, then think they | can just copy their binaries into a "FROM alpine:latest" | container, which doesn't actually work. | | Could it work with gcompat? Alpine has it in the community | repo. | | https://git.adelielinux.org/adelie/gcompat | naniwaduni wrote: | gcompat is roughly the "yeah the plugs look the same so | just stick the 120 V device into the 240 V socket" approach | to libc compatibility. | [deleted] | notRobot wrote: | Related: | | _Win32 is the stable Linux userland ABI (and the consequences):_ | https://news.ycombinator.com/item?id=30490570 | | _336 points, 242 comments, 5 months ago_ | wmf wrote: | I assume Flatpak fixes this by locking your app to a compatible | version of glibc. | spicybright wrote: | If you're never going to update your program and don't care | about another heartbleed effecting your product and users, then | sure. | lanstin wrote: | Would you rather run a statically linked go or rust binary | with the native crypto implementations of ssl or a | dynamically linked OpenSSL that is easier to upgrade? (Honest | question) | mananaysiempre wrote: | Surprisingly, that seems correct--a Flatpak bundle includes a | glibc; though that only leaves me with more questions: | | - On one hand, only one version of ld.so can exist in a single | address space (duh). Glibc requires carnal knowledge of ld.so, | thus only one version of glibc can exist in a single address | space. In a Flatpak you have (?) to assume the system glibc is | incompatible with the bundled one either way, thus you can't | assume you can load host libraries. | | - On the other hand, a number of system services on linux-gnu | depend on loading host libraries. Even if we ignore NSS (or | exile it into a separate server process as it should have been | in the first place), that leaves accelerated graphics: whether | you use Wayland or X, ultimately an accelerated graphics driver | amounts to a change in libGL and libEGL / libGLX (directly or | through some sort of dispatch mechanism). These libraries | require carnal knowledge of the kernel-space driver, thus | emphatically cannot be bundled; but the previous point means | that you can't load them from the host system either. | | - Modern toolkits basically live on accelerated graphics. | Flatpak was created to distribute graphical applications built | on modern toolkits. | | - ... Wait, what? | anon291 wrote: | There is no 'system' glibc. Linux doesn't care. The Linux | kernel loads up the ELF interpreter specified in the ELF file | based on the existing file namespace. If that ELF interpreter | is the system one, then linux will likely remap it from | existing page cache. If it's something else, linux will load | it and then it will parse the remaining ELF sections. Linux | kernel is incredibly stable ABI-wise. You can have any number | of dynamic linkers happily co-existing on the machine. With | Linux-based operating systems like NixOS, this is a normal | day-to-day thing. The kernel doesn't care. | | > These libraries require carnal knowledge of the kernel- | space driver, thus emphatically cannot be bundled; but the | previous point means that you can't load them from the system | either. | | No they don't. The Linux kernel ABI doesn't really ever | break. Any open-source driver shouldn't require any knowledge | of internals from user-space. User-space may use an older | version of the API, but it will still work. | | > whether you use Wayland or X, ultimately an accelerated | graphics driver amounts to a change in libGL and libEGL / | libGLX (directly or through some sort of dispatch mechanism) | | OpenGL is even more straightforwards because it is typically | consumed as a dynamically loaded API, thus as long as the | symbols match, it's fairly straightforwards to replace the | system libGL. | kmeisthax wrote: | > No they don't. The Linux kernel ABI doesn't really ever | break. Any open-source driver shouldn't require any | knowledge of internals from user-space. | | [laughs in Nvidia] | anon291 wrote: | NVIDIA is not an open-source driver [1], and if you look | in your dmesg logs, your kernel will complain about how | it's tainted. That doesn't change the truth value about | what I said about 'open-source' drivers. | | [1] I think this may have changed very very recently. | mananaysiempre wrote: | I know, I both run NixOS and have made syscalls from | assembly :) Sorry, slipped a bit in my phrasing. In the | argument above, instead of "the system glibc" read "the | glibc targeted by the compiler used for the libGL that | corresponds to the graphics driver loaded into the running | kernel". (Unironically, the whole point of the list above | was to avoid this sort of monster, but it seems I haven't | managed it.) | eklitzke wrote: | This is all correct and I'd also add that ld.so doesn't | need to have any special knowledge of glibc (or the kernel) | in the first place. From the POV of ld.so, glibc is just | another regular ELF shared object that uses the same | features as everything else. There's nothing hard-coded in | ld.so that loads libc.so.6 differently from anything else. | And the only thing ld.so needs to know about the kernel is | how to make a handful of system calls to open files and | mmap things, and those system calls that have existed in | Linux/Unix for eternity. | mananaysiempre wrote: | Needs to have? In an ideal world, probably not. Has and | uses? Definitely. For one thing, they need to agree about | userland ABI particulars like the arrangement of thread- | local storage and so on, which have not stayed still | since the System V days; but most importantly, as a | practical matter, ld.so lives in the same source tree as | glibc, exports unversioned symbols marked GLIBC_PRIVATE | to it[1], and the contract between the two has always | been considered private and unstable. | | [1] https://sourceware.org/git/?p=glibc.git;a=blob;f=elf/ | Version... | vetinari wrote: | > On one hand, only one version of ld.so can exist in a | single address space (duh). Glibc requires carnal knowledge | of ld.so, thus only one version of glibc can exist in a | single address space. | | Yes | | > In a Flatpak you have (?) to assume the system glibc is | incompatible with the bundled one either way, thus you can't | assume you can load host libraries. | | Not exactly. You must assume that the host glibc is | incompatible with the bundled one, that's right. | | But that does not mean you cannot load host libraries. You | can load them (provided you got them somehow inside the | container namespace, including their dependencies) using the | linker inside the container. | | > hether you use Wayland or X, ultimately an accelerated | graphics driver amounts to a change in libGL and libEGL / | libGLX (directly or through some sort of dispatch mechanism). | | In Wayland, your app tells the server to render a bitmap. How | you got that bitmap rendered is up to you. | | The optimization is that you send dma-buf handle instead of a | bitmap. This is a kernel construct, not userspace driver one. | This allows also cross-API app/compositor (i.e. Vulkan | compositor and OpenGL app, or vice-versa). This also means | you can use different version of the userspace driver with | compositor than inside the container and they share the | kernel driver. | | > These libraries require carnal knowledge of the kernel- | space driver, thus emphatically cannot be bundled; but the | previous point means that you can't load them from the host | system either. | | Yes and no; Intel and AMD user space drivers have to work | with variety of kernel versions, so they cannot be too tight. | Nvidia driver has tightly coupled user space and kernel | space, but with the recent open-sourcing the kernel part, | this will also change. | | > but the previous point means that you can't load them from | the host system either. | | You actually can -- bind mount that single binary into the | container. You will use binary from the host, but load it | using ld.so from inside container. | mananaysiempre wrote: | >> In a Flatpak you have (?) to assume the system glibc is | incompatible with the bundled one either way, thus you | can't assume you can load host libraries. | | > Not exactly. You must assume that the host glibc is | incompatible with the bundled one, that's right. | | > But that does not mean you cannot load host libraries. | You can load them (provided you got them somehow inside the | container namespace, including their dependencies) using | the linker inside the container. | | I meant that the glibcs are potentially ABI-incompatible | both ways, not just that they'll fight if you try to load | both of them at once. Specifically, if the bundled (thus | loaded) glibc is old, 2.U, and you try to load a host | library wants a new frobnicate@GLIBC_2_V, V > U, you lose, | right? I just don't see any way around it. | | >> These libraries require carnal knowledge of the kernel- | space driver, thus emphatically cannot be bundled; but the | previous point means that you can't load them from the host | system either. | | > Yes and no; Intel and AMD user space drivers have to work | with variety of kernel versions, so they cannot be too | tight. Nvidia driver has tightly coupled user space and | kernel space, but with the recent open-sourcing the kernel | part, this will also change. | | My impression of out-of-tree accelerated is mainly from | fighting fglrx for the Radeon 9600 circa 2008, so extremely | out of date. Intel is in-tree, so I'm willing to believe it | has some degree of ABI stability, at least if an i915 blog | post[1] is to be believed. Apparently AMD is also in-tree | these days. Nvidia is binary-only, so the smart thing for | them would probably be to build against an ancient Glibc so | that it runs on everything. | | But suppose the year is 2025, and a shiny new GPU | architecture has come out, so groundbreaking no driver | today can even lay down command buffers for it. The vendor | is kind enough to provide an open-source driver that gets | into every distro, and the userspace portion compiled | against a distro-current Glibc ends up referencing an | AVX-512 memcpy@GLIBC_3000 (or something). | | I load a flatpak using Gtk3 GtkGLArea from 2015. | | What happens? | | [1] https://blog.ffwll.ch/2013/11/botching-up-ioctls.html | captainmuon wrote: | Does graphics on Linux work by loading the driver into your | process? I assumed it works via writing a protocol to shared | memory in case of Wayland, or over a socket (or some | byzantine shared memory stuff that is only defined in the | Xorg source) in case of X11. | | From my experience, if you have the kernel headers and have | all the required options compiled into your kernel, then you | can go really far back and build a modern glibc and Gtk+ | Stack, and use a modern application on an old system. If you | do some tricks with Rpath, everything is self-contained. I | think it should work the other way around, with old apps on a | new kernel + display server, as well. | bnieuwen wrote: | So there are two parts to this: the app producing the image | in the application window and then the windowing system | combining multiple windows together to form the final image | you see on screen. | | The former gets done in process (using e.g. GL/vulkan) and | then that final image gets passed onto the windowing system | which is a separate process and could run outside the | container. | | As an aside, with accelerated graphics you mostly pass a | file descriptor to the GPU memory containing the image, | rather than mucking around with traditional shared memory. | wmf wrote: | _Does graphics on Linux work by loading the driver into | your process?_ | | Yes, it's called Direct Rendering (DRI) and it allows apps | to drive GPUs with as little overhead as possible. The | _output_ of the GPU goes into the shared memory so that the | compositor can see it. | layer8 wrote: | ...also locking in any security vulnerabilities. | rtontic wrote: | I mean, we are talking about videogames here. | formerly_proven wrote: | Multiplayer is a thing, where both crashing servers and | also attacking other clients (even in non-p2p titles) is | not that uncommon. Many titles don't permit community | servers any more, of course. | maeln wrote: | Wasn't it Elden Ring or another From Software game that had | a RCE ? This article talks about it : | https://wccftech.com/dark-souls-rce-exploit-fixed-elden- | ring... | | A lot of games have multiplayer functionalities these days. | That make them a potential target for RCE and related | vulnerabilities. Granted, if you don't play video game as | root, the impact should be limited, but it is still | something to be aware of. | Beltalowda wrote: | Skimming over the details, that seems like a bunch of | bugs in the game code. I don't think dynamic linking | would help there. | [deleted] | AshamedCaptain wrote: | Static linking -- always the ready-to-go response for anything | ABI-related. But does it really help? What use is a statically | linked glibc+Xlib when your desktop no longer sets resolv.conf | in the usual place and no longer speaks the X11 protocol | (perhaps in the name of security) ? | gabereiser wrote: | Even statically linked, the problems you just described are | valid. The issue is x11 isn't holding up and no one wants to | change. Wayland was that promise of change but has taken 15+ | years to develop (and still developing). | | Linux desktop is a distro concern now. Not an ecosystem | concern. It's long left the realm of an linux concern when | MacOS went free (with paid hardware of course) and Windows | was giving away free windows 10 licenses to anyone who asked | for it. | | Deepin desktop and elementary are on the top of my list for | elegance and ease of use. Apps and games need a solid ABI and | this back and forth between gnome and kde doesn't help. | | With so many different wm's and desktop environments, x11 is | still the only method of getting a window with an opengl | context in any kind of standard way. Wayland, X12, whatever | it is, we need a universal ABI for window dressing for Linux | to be taken seriously on the desktop. | pengaru wrote: | > Linux desktop is a distro concern now. Not an ecosystem | concern. It's long left the realm of an linux concern when | MacOS went free (with paid hardware of course) and Windows | was giving away free windows 10 licenses to anyone who | asked for it. | | You seem fixated on the Free Beer misinterpretation of Free | Software. | gabereiser wrote: | No, but it sounds that way I guess. It's more about where | the developer en-masse focus lays. Few developers are | interested in the desktop for Linux because they are | supported on windows or Mac and during the time period I | mentioned, it didn't cost them anything monetary. | | There were indications that windows and Linux May | converge. Instead we got WSL2. A lot of times we decide | to develop something because of the pain of using the | other thing. Sometimes we develop something as a "me | too". Sometimes we develop something that is just better. | Sometimes, it's worse. | | My point is the fight for a foothold in Linux desktop | looked promising for a bit. SteamOS looked like it was | gaining, steam... | | The reality is there are complexities at that level that | people don't want to deal with and we all have opinions | on how it should work, should look, and should be called. | | Red Hat (former RH'er myself) should take this on and | really standardize something outside of core and server | land. And no, it should not be Gnome. | cogman10 wrote: | With the rise of WSL, I have a real hard time justifying | wanting a linux desktop. | | I've got a VM with a full linux distro at my fingertips. | Virtualization has gotten more than fast enough. And now, | with windows 11, I get an X server integrated with my WSL | instance so even if I WANTED a linux app, I can launch it | just like I would if I were using linux as my host. | | It does suck that the WSL1 notion of "not a vm" didn't take | off, but at the same time, when the VM looks and behaves | like a regular bash terminal, what more could you | realistically want? | vetinari wrote: | WSL2 is very limited; from not having a "proper init" to | having NAT-ed network, it is fine for running simple | docker containers, but proper linux it is not. | | Comparing it to the real linux is like comparing | powershell prompt to full windows. | blibble wrote: | > what more could you realistically want? | | some privacy, no telemetry, no ads, and the computer only | applying updates that I choose and only rebooting when I | ask it to? | | (I know it's a lot to ask for these days...) | gabereiser wrote: | :pulls out wallet: where? | gabereiser wrote: | Yeah, WSL(2) was a huge huge win for Microsoft. It seems | silly, but it's kept thousands of devs from dual | booting... | blibble wrote: | I dunno | | it's quite possible it'll work out as well as IBM's OS/2 | running Windows apps did | Beltalowda wrote: | I guess that kind of proves the point that there is no | "stable", well, anything on Linux. Something like | /etc/resolv.conf is part of the user-visible API on Linux; if | you change that, you're going to break applications. | | /etc/sysctl.conf is a good example; on some systems it just | works, on some systems you need to enable a systemd service | thingy for it, but on some systems the systemd thingy doesn't | read /etc/sysctl.conf and only /etc/sysctl.d. | | So a simple "if you're running Linux, edit /etc/sysctl.conf | to make these changes persist" has now become a much more | complicated story. Writing a script to work on all Linux | distros is much harder than it needs to be. | vetinari wrote: | > Something like /etc/resolv.conf is part of the user- | visible API on Linux; if you change that, you're going to | break applications. | | Apps were not supposed to open /etc/resolv.conf by | themselves. If they did, they are broken. Just because the | file is available, transparently, doesn't mean it is not a | part of the internal implementation. | | Even golang runtime checks nsswitch for known, good | configuration before using resolv.conf instead of thunking | to glibc. | Beltalowda wrote: | The point was that if you're statically linking something | that paths such as /etc/resolv.conf become "hard-coded", | so that seems like an unimportant detail; _something_ | needs to check it, whether that 's an application or an | application through a library call: it's the same thing. | /etc/nsswitch.conf is just kicking the can down the road | from /etc/resolv.conf to /etc/nsswitch.conf. | blibble wrote: | glibc != Linux | | a better analogy would be targeting the latest version of MSVCRT | that happens to be installed on your system (instead of bundling | it) | | ... also which mostly works but sometimes breaks | z3t4 wrote: | Linux has a more stable windows ABI then windows itself. If a | game stops working on windows it will likely still work with wine | on Linux. | cosmin800 wrote: | oh, no, not again: kids working for big tech constantly, but | randomly, deprecating, removing and breaking apis/abis/features | in the kernel/libraries/everywhere. I honestly belive that all | relationships between big tech companies and opensource are toxic | and follow the microsoft principle of the embrace, extend, and | extinguish. | ChikkaChiChi wrote: | Without getting into spoilers, I'll say that playing | "Inscryption" really got me thinking about Docker's continued | development could help consumers in the gaming industry. | | I would love to see game being virtualized and isolated from the | default userspace with passthrough for graphics and input to | mitigate latency concerns. Abandonware could become a relic of | the past! Being able to play what you buy on any device you have | access to would be amazing. | | I won't hold my breath, though. The industry pretty loudly | rejected Nvidia's attempt to let us play games on their cloud | without having to buy them all again. Todd needs the ability to | sell us 15 versions of Skyrim to buy another house. | rstat1 wrote: | For games on Steam there's the Steam Linux Runtime which can | run games on Linux in a specialized container to isolate them | from these sort of bugs. | | There's also a variant of this container that contains a forked | version of Wine for running Windows games as well. | mort96 wrote: | Doesn't the Steam Linux Runtime have a problem in the other | direction though? Games are using libraries which are so old | that they have bugs which are long since fixed or don't work | properly in modern contexts. Apparently a lot of issues with | Steam + Wayland comes from the ancient libraries in the Steam | Linux Runtime from what I have been able to find out from | googling issues I've experienced under Wayland. | disintegore wrote: | > Abandonware could become a relic of the past! | | That would eat into some business models though, like | Nintendo's quadruple-dipping with its virtual consoles | ece wrote: | Flatpak is basically Docker for linux, there are layers and | everything. What you're saying should be possible if you make a | AppImage/Flatpak out of the Steam Runtime+Proton(if | needed)+Game, it should run anywhere with the right drivers. | LtWorf wrote: | Good luck once wayland starts to actually be used to run any | game from before wayland. | jacooper wrote: | Xwayland exists, all my games use Xwayland, there are no | stable proton/wine implementation that's uses Wayland | natively. | solarkraft wrote: | Isn't that what gamescope has been doing for quite some | time? | mid-kid wrote: | Inflammatory title is inflammatory. | Kukumber wrote: | It's not, and it is super sad to hear people advocating for such | horrible idea | | Linux being infested by windows is the beginning of its death to | me, what a tragedy | | A well deserved death after the system-d drama anyways | justin66 wrote: | I was going to make a joke about a.out support (and all the crazy | stuff that enables, like old SCO binaries) but apparently a.out | was removed in May as an option in the Linux kernel. | | https://lwn.net/Articles/895969/ | | At least we still have WINE. | codebolt wrote: | Coincidentally, Win32 is also the only stable API on Windows. | | WinForms and WPF are still half-broken on .NET 5+, WinRT is out, | basically any other desktop development framework since the Win32 | era that is older than a couple of years is deprecated. Microsoft | is famous for introducing new frameworks and deprecating them a | few years later. Win32 is the only exception I can think of. | alkonaut wrote: | WinForms is just mostly a managed Win32 wrapper so | unsurprisingly it's very stable on the OS frameworks (4.X). | | Building for .NET Framework using any APIs is extremely stable | as development has mostly ceased. You pick a target framework | depending on how old windows versions you must support. | pjmlp wrote: | WinRT lives on as WinAppSDK. | solarkraft wrote: | The names aren't getting better either ... | Longhanks wrote: | Metro lives on as UWP lives on as WinRT lives on as Project | Reunion lives on as WinAppSDK. | | Exactly the point the OP was making. Win32 is stable. | taneq wrote: | I was gonna say, I think Win32 is the only stable API full | stop. Everything else is churn city. | FpUser wrote: | >"Coincidentally, Win32 is also the only stable API on Windows" | | And this is what I use for my Windows apps. In the end I have | self contained binaries that can run on anything starting from | Vista and up to the most up to date OS. | int_19h wrote: | .NET Framework is still there by default out of the box, and | still runs WinForms and WPF like it always did. | actionfromafar wrote: | Which version of it? 1.0? | ahtihn wrote: | Since when is .NET 5+ part of Windows? | markmark wrote: | And .NET 4.8 is still installed by default on Windows 11 and | will presumably happily run your WPF app if you target it. | solarkraft wrote: | .NET 4.8 might be one of those things they won't be able to | get rid of. | int_19h wrote: | Windows 11 still ships msvbvm60.dll - that's the runtime | for Visual Basic 6, released back in 1998. And it is | officially supported: | | https://docs.microsoft.com/en-us/previous- | versions/visualstu... | bjourne wrote: | Glibc is not Linux, and they have different backwards | compatibility policies, but everyone should still read Linus | Torvalds' classic 2012 email about ABI compability: | https://lkml.org/lkml/2012/12/23/75 Teaser: It begins with | "Mauro, SHUT THE FUCK UP!" | efficax wrote: | man it's always a trip to see how much of a jerk torvalds could | be, even if exasperation is warranted in this context (i have | no idea), by god, this is not how you build consensus or a high | functioning team | moomin wrote: | People often think that because jerks work at successful | companies, you need to be a jerk to be successful. It's more | the other way around: a successful firm can carry many people | who don't add value, like parasites. | | Guarantee you Linus wasn't this bad in the 90s. | tasuki wrote: | I think he's not this bad these days? He issued some public | apologies for his behaviour. He gave us Linux and Git. Yes, | he used to be an asshole, but he still did way more for the | betterment of humanity than most people. | freedomben wrote: | Yep Linus is reformed these days. He took some time off | and went to sensitivity training a few years ago. I'm | sure like all humans he has bad days and makes mistakes, | but all in all he's really trying. | pdntspa wrote: | He's a product of a different time. Personally, I love his | attitude -- wouldn't want to work under him though. | moonchrome wrote: | >by god, this is not how you build consensus or a high | functioning team | | Says you, while criticizing Linus Torvalds from 2012. Who has | a better track record of building consensus and high | functioning teams ? | 542458 wrote: | Says Linus Torvalds from 2018... | | > My flippant attacks in emails have been both | unprofessional and uncalled for. Especially at times when I | made it personal. In my quest for a better patch, this made | sense to me. I know now this was not OK and I am truly | sorry. | | > The above is basically a long-winded way to get to the | somewhat painful personal admission that hey, I need to | change some of my behavior, and I want to apologize to the | people that my personal behavior hurt and possibly drove | away from kernel development entirely. | | https://lkml.org/lkml/2018/9/16/167 | | He still writes very frankly, but he generally doesn't | resort to personal insults like he did in the past. | fezfight wrote: | That doesn't change his point about building high | functioning teams in the past, though. Just that he is | capable of adapting to the times. He had 27 years of | career leading Linux before 2018. Successful, by any | measure. | dshpala wrote: | Speaking about consensus - there is another thread on the HN | where people complain about Android 13 UI. I guess that was | built with a healthy dose of consensus. | | The point is - sometimes you need a jerk with a vision so | that the thing you're building don't turn into amorphous | blob. | a9h74j wrote: | The old quote: _I would trust Einstein, but I wouldn 't | trust a committee of Einsteins._ | celtain wrote: | You need someone with vision who enforces strict adherence | to that vision. I'm not convinced you have to be a jerk to | do that though. | tasuki wrote: | Yes, you don't need to be a jerk to do that. Linus | Torvalds used to be a jerk (perhaps still is, but I think | much less so these days). Do you have a non-jerk with | Torvalds' vision? | kurupt213 wrote: | How is Steve Jobs getting left out of this conversation | pestatije wrote: | Maybe because: if you cannot say anything good about a | dead person, don't say anything. | robertlagrant wrote: | > man it's always a trip to see how much of a jerk torvalds | could be, even if exasperation is warranted in this context | (i have no idea), by god, this is not how you build consensus | or a high functioning team | | True. I think Linux could've been pretty successful if | someone with good management practices had been in charge | from the start. | rayiner wrote: | It's not my personal style, but there's plenty of high | functioning teams in different domains headed by leaders who | communicate like Torvalds. From Amy Klonuchar throwing | binders (https://www.businessinsider.com/amy-klobuchar- | throwing-binde...) to tons of high level folks in banking, | law firms, etc. | | Put differently, you can construct a high functioning team | composed of certain personalities who can dish out and take | this sort of communication style without burning out on it. | blablabla123 wrote: | That probably works if people get bribed with interesting | enough projects (Linux) or money (banks, lawfirms...). Most | other projects probably fall apart before you can blink an | eye | martincmartin wrote: | Are the teams high functioning _because_ of that, or | _despite_ that? | nomel wrote: | I would assume a little of both. I've seen weeks wasted | just because someone wouldn't say "that's a bad idea". | I've also seen whole projects turn to crap, and then get | canceled, when people that new better decided to remain | silent, to avoid conflict. | | Through my years, it seems to be increasingly rare to | find disagreeable people, and that agreeableness is being | favored/demanded. I'm not one to judge if it's working or | not, but when I see people getting upset at managers | because the manager criticized their work/explanation | during the presentation of that work, which is literally | meant for criticism, I know quality coming from that | group will be impacted. Maybe not surprising, but many of | these people are new graduates. The few "senior" people I | know, like this, are from companies who are in the | process of failing, in very public ways. | | I think the ideal scenario is a somewhat supportive | direct manager, and a disagreeable, quality demanding, | manager somewhere not far above, keeping the ship from | sinking. | worik wrote: | > but there's plenty of high functioning teams in different | domains headed by leaders who communicate like Torvalds | | Maybe in the past. It is not acceptable now. | | A lot of men from the "old days" are finding that their | table thumping "plain talking" (obscenity shouting) ways | are getting them sidelined and ignored. | | Good. | mikewave wrote: | Some of us would love to work on a team like this. It | would be nice to have the option. Your definition of | "acceptable" might not actually result in teams that can | take on the big challenges we face as a species as men | who did find this kind of thing acceptable retire out of | the workforce. | nomoreusernames wrote: | you are right on this shithead. | | and imagine you get to one up on torvalds. | | thats satisfaction no money can motivate. | shadowgovt wrote: | If "We've always done it this way and it's a risk to do | it differently" was the argument that carried the day, | few of us would have to worry about these questions at | all because we'd never have gotten out from under | feudalism. | beebeepka wrote: | We might all die but at least no one's feelings would be | hurt, no matter what they did or didn't do. | | I am only half joking. It's a good thing no one is being | forced to work with Linus. People really need to keep | that in mind | StevePerkins wrote: | You're literally responding to an Amy Klobuchar cite, | with a sweeping implication that being a jerk in the | workplace is a "men" thing. Wow. | JamesBarney wrote: | I've definitely seen teams that were low functioning | because they were so worried about consensus and upsetting | someone else that no one ever criticized any decisions any | team member made even if they were both impactful and | objectively terrible. | kurupt213 wrote: | This is worse | nomoreusernames wrote: | naw man, let the old git be. he is a lovely old man. one day | we wont have people like this. he gave more than he took. | blibble wrote: | maybe it is how you build the world's most popular operating | system? | | because he did | pydry wrote: | I think if you take it out of context (which most people do), | it looks a lot worse than it is. | | A very senior guy who shouldve known better was trying, | fairly persistently, to break a very simple rule everybody | agreed to for a very bad reason. Linus told him to shut the | fuck up. | | I wouldnt say that Linus's reaction was anything to look up | to but I wouldnt say that calling the tone police is at all | justified either. | mrtranscendence wrote: | I mean, the guy sent one short email before Torvalds flew | off the handle; that's hardly "trying persistently" to | break a rule. I can think of a thousand assertive ways to | tell the guy to shut up that wouldn't have required | behaving like an angry toddler. | kochb wrote: | The context, from Mauro's previous message: | | > Only an application that handles video should be using | those controls, and as far as I know, pulseaudio is not a | such application. Or are it trying to do world domination? | So, on a first glance, this doesn't sound like a regression, | but, instead, it looks tha pulseaudio/tumbleweed has some | serious bugs and/or regressions. | | Style and culture are certainly open for debate (I wouldn't | be as harsh as Linus), but correcting a maintainer who was | behaving this way towards a large number of affected users | was warranted. The kernel broke the API contract, a user | reported it, and Mauro blamed the user for it. | Spivak wrote: | Glibc is GNU/Linux though and cannot be avoided when | distributing packages to end users. If you want to interact | with the userspace to do things get users, groups, netgroups, | or DNS queries you have to use glibc functions or your users | will hit weird edge cases like being able to resolve hosts in | cURL but not your app. | | Now, do I think it would make total sense for syscall wrappers | and NSS to be split into their own libs (or dbus interfaces | maybe) with stable ABIs to enable other libc's, absolutely! But | we're not really there. This is something the BSD's got | absolutely right. | kllrnohj wrote: | But there are other "Linux"'s that are not GNU/Linux which | was I think the point. Like Android, which doesn't use glibc, | and doesn't have this mess. I think that was one of the | things people used to complain about, that Android didn't use | glibc, but since glibc seems to break ABI compatibility kinda | on the regular that was probably the right call. | emidln wrote: | There are other libc implementations that work on Linux with | various tradeoffs. Alpine famously uses musl libc for a | lightweight libc for containers. These alternate libc | implementations implement users/groups/network manipulation | via well-known files like /etc/shadow, /etc/passwd, etc. You | could fully statically link one of these into your app and | just rely on the extremely stable kernel ABI if you're so | interested. | Spivak wrote: | We're not disagreeing. You can, of course, use other libc's | on Linux the kernel, but you cannot use other libc's on | GNU/Linux the distro that uses glibc without some things | not working. This can be fine on your own systems so long | as you're aware of the tradeoffs but if you're distributing | your software for use on other people's systems your users | will be annoyed with you. | | Even Go parses /etc/nsswitch.conf and farms out to cgo when | it finds a module it can't handle. This _technically_ doesn | 't work because there's no guarantee that the hosts or dns | entries in nsswitch have consistent behavior, it's just the | name of a library you're supposed to dlopen. On evil, but | valid, distro resolv.conf points to 0.0.0.0 and hosts | module reads an sqlite file. | nickelpro wrote: | > you cannot use other libc's on GNU/Linux the distro | that uses glibc without some things not working | | As the comment your replying to points out, you can | statically link your libc requirements and work on any | Linux distro under the sun. | | You can also LD_PRELOAD any library you need, and also | work on any Linux distro under the sun. This is | effectively how games work on Windows too, they ship all | their own libraries. Steam installs a specific copy of | the VCREDIST any given game needs when you install the | game. | | If you are not releasing source code, it's unreasonable | to think the ABIs you require will just be present on any | random computer. Ship the code you need, it's not hard. | david_draco wrote: | If in distribution discussions Linux is name for the operating | system and shell, downplaying the role of GNU, then it is also | fair game to say here: Linux does not have a stable ABI because | glibc changed. | DiggyJohnson wrote: | Really appreciate your stuff Bjorn, this link always brings a | smile to my (too young to be cynical) face. | phendrenad2 wrote: | One way to achieve similar results on Linux might be for the | Linux kernel team to start taking control of core libraries like | x11 and wayland, and to extend the same "don't break userspace" | philosophy to them also. That isn't going to happen, but I can | dream! | rodgerd wrote: | There was a period where a Linux libc was maintained, but it | was long-ago deprecated in favour of glibc. Perhaps that was a | mistake. | captainmuon wrote: | The ABI of the Linux kernel seems reasonably stable. Somebody | should write a new dynamic linker that lets you easily have | multiple versions of libraries - even libc - around. Then its | just like windows where you have to install some weird MSVC | runtimes to play old games. | mort96 wrote: | Or, GNU could just recognise their extremely central position | in the GNU/Linux ecosystem and just not. break. everything. | all. the. time. | | It honestly really shouldn't be this hard, but GNU seems to | have an intense aversion towards stability. Maybe moving to | LLVM's replacements will be the long-term solution. GNU is | certainly positioning itself to become more and more irrelevant | with time, seemingly intentionally. | mike_hearn wrote: | The issue is more subtle than that. The GNU and glibc people | believe that they provide a very high level of backwards | compatibility. They don't have an aversion towards stability | and in fact, go far beyond most libraries by e.g. providing | old versions of symbols. | | The issue here is actually that app compatibility is | something that's hard to do purely via theory. The GNU guys | do compatibility on a per function level by looking at a | change, and saying "this is a technical ABI break so we will | version a symbol". This is not what it takes to keep apps | working. What it actually takes is what the commercial OS | vendors do (or used to do): have large libraries of important | apps that they drive through a mix of automated and manual | testing to discover quickly when they broke something. And | then if they broke important apps they roll the change back | or find a workaround regardless of whether it's an | incompatible change in theory or not, because it is in | practice. | | Linux is really hurt here by the total lack of any unit | testing or UI scripting standards. It'd be very hard to mass | test software on the scale needed to find regressions. And, | the Linux/GNU world never had a commercial "customer is | always right" culture on this topic. As can be seen from the | threads, the typical response to being told an app broke is | to blame the app developers, rather than fix the problem. | Actual users don't count for much. It's probably inevitable | in any system that isn't driven by a profit motive. | LtWorf wrote: | > As can be seen from the threads, the typical response to | being told an app broke is to blame the app developers, | rather than fix the problem. | | This is false. Actual problems get fixed, and very quickly | at that. | | Normally the issues are from proprietary applications that | were buggy to begin with, and never bothered to read the | documentation. I'd say to a paying customer that if a | behaviour is documented, it's their problem. | jandrese wrote: | The issue I see most often is someone compiled the | application on a slightly newer version of Linux and when | they try to run it on a slightly older machine it barfs | saying that it needs GLIBC_2.31 and the system libc only | has up to GLIBC_2.28 or something like that. Even if you | aren't using anything that changed in the newer versions | it will refuse to run. | LtWorf wrote: | That is not a bug. Just make a chroot with an older glibc | and build there if you want to link against an older | glibc. That easy. | | It works with future versions, not with past versions. | int_19h wrote: | That's an ergonomic deficiency. In practice, you probably | need more than glibc, so then you have to make sure that | other bits are available in this chroot. And if it so | happens that one of the build tools that you rely on | needs a newer version of glibc than the one you're | building against, it still breaks down. | | On Windows, you specify the target version of the | platform when building, and you get a binary that is | guaranteed to load on that platform. | jacooper wrote: | Flatpak exists to solve this. | mook wrote: | > Normally the issues are from proprietary applications | that were buggy to begin with, and never bothered to read | the documentation. I'd say to a paying customer that if a | behaviour is documented, it's their problem. | | ... But that's exactly why Win32 was great; Microsoft | actually spent effort making their OS was compatible with | broken applications. Or at least, Microsoft of long past | did; supposedly they worked around a use-after-free bug | in SimCity for Windows 3.x when they shipped Windows 95. | Windows still has infrastructure to apply application- | specific hacks (Application Compatibility Database). | | I have no reason to believe their newer stacks have | anything like this. | alerighi wrote: | Well you talk about Windows, that was true in the pre- | Windows 8 era. Have you used Windows recently? | | I bought a new laptop, and decided to give Windows a second | chance. With Windows 11 installed, there were a ton of | things that didn't worked. To me it was not acceptable for | a 3000$ laptop. Problems with drivers, blue screens of | death, applications what just didn't run properly (and | commonly used applications, not something obscure). I never | had these problems with Linux. | | I mean we talk about Windows that is stable mostly because | we use Windows versions after they are out since 5 years | and most of the problems were fixed. Good, now companies | are finishing the transition to Windows 10, not Windows 11, | after staying with Windows 7 for years. After 10 years they | will probably move to Windows 11, when most of its bug are | fixed. | | If you use a rolling-release Linux distro, such as | ArchLinux, some problems on new software are expected. It's | the equivalent of using an insider build of Windows, with | the difference that ArchLinux is mostly usable as a daily | OS (it requires some knowledge to solve the problems that | inevitably arrive, but I used it for years). If you use | let's say Ubuntu LTS, you don't have these kind of | problems, and it mostly run without any issue (less issues | than Windows for sure). | | By the way, maintaining compatibility has a cost: have you | ever wandered because a full installation of Ubuntu that is | a complete system with all the program that you use, an | office suite, driver for all the hardware, multimedia | players, etc is less than 5Gb while a fresh install of | Windows is minimum 30Gb but I think nowadays even more? | | > And then if they broke important apps they roll the | change back or find a workaround regardless of whether it's | an incompatible change in theory or not, because it is in | practice. | | Never saw Microsoft do that: whey will simply say that it's | not compatible and the software vendor has to update. That | is not a problem by the way... OS developer should move | along and can't maintain backward compatibility forever. | | > The GNU and glibc people believe that they provide a very | high level of backwards compatibility. | | That is true. It's mostly backward compatible, having a | 100% backward compatibility is not possible. Problems are | fixed as they are detected. | | > What it actually takes is what the commercial OS vendors | do (or used to do): have large libraries of important apps | that they drive through a mix of automated and manual | testing to discover quickly when they broke something. | | There is one issue: GNU can't test non-free software for | obvious licensing and policy issues (i.e. an association | that endorses free software can't buy licenses of | proprietary software to test it). So a third party should | test it and report problems in case of broken backward | compatibility. | | Keep in mind that binary compatibility is something that is | not fundamental on Linux, since it's assumed that you have | the source code of everything and in case you recompile the | software. GNU/Linux born as a FOSS operating system, and | was never designed to run proprietary software on it. There | are edge cases where you need to run a binary for other | reasons (you lost the source code, compiling it is | complicated or takes a lot of time) but surely are edge | cases and not a lot of time should be spent to address | them. | | Beside that glibc it's only one of the possible libc that | you can use on Linux: if you are developing proprietary | software in my opinion you should use MUSL libc, it has a | MIT license (so you can statically link it into your | proprietary binary) and it's 100% POSIX compliant. Surely | glibc has more feature, but probably your software doesn't | use them. | | Another viable option is to distribute your software with | one of the new packaging formats that are in reality | containers: snap, flatpack, appimage. That allows you to | distribute the software along with all the dependencies and | don't worry about ABI incompatibility. | dataangel wrote: | "Linux is really hurt here by the total lack of any unit | testing" says volumes about what you actually know about | the space. Shit tons of Linux software has unit tests! | game-of-throws wrote: | You cut out a key word: | | > Linux is really hurt here by the total lack of any unit | testing or UI scripting standards. | | > standards | | I've been very impressed reading how the Rust developers | handle this. They have a tool called crater[1], which | runs regression tests for the compiler against all Rust | code ever released on crates.io or GitHub. Every front- | facing change that is even slightly risky must pass a | crater run. | | https://github.com/rust-lang/crater | | Surely Microsoft has internal tools for Windows that do | the same thing: run a battery of tests across popular | apps and make sure changes in the OS don't break any user | apps. | | Where's the similar test harness for Linux you can run | that tests hundreds of popular apps across Wayland/X11 | and Gnome/KDE/XFCE and makes sure everything still works? | leeter wrote: | > Surely Microsoft has internal tools for Windows that do | the same thing: run a battery of tests across popular | apps and make sure changes in the OS don't break any user | apps. | | And hardware, they actually deploy to hardware they buy | locally from retailers to verify things still work too | last I checked. Because there is always that "one popular | laptop" that has stupid quirks. I know they try to focus | on a spectrum of commonly used models based on the | telemetry too. | Ygg2 wrote: | And crater costs a bunch, runs for a week, and it's not a | guarantee things won't break. I'm not sure it runs every | crate or just top 1 million. It used to, but I could see | that changing, if | | And in case of closed source software, that isn't | publicly available, crates wouldn't work. | kibwen wrote: | Crater's an embarrassingly parallel problem though, it's | only a matter of how much hardware you throw at it. | Microsoft already donates the hardware used by Crater, it | would have no problem allocating 10x as much for its own | purposes. | Ygg2 wrote: | How much of crates are ran on crater? All of them? | | Also I think there are magnitudes more C libs/apps, than | Rust crates. | kibwen wrote: | There are certainly more things written in C than in Rust | --the advantage of being fifty years old--but the | standardization of the build system in Rust means that it | would be difficult for any C compiler (or OS, or libc, or | etc.) to produce a comparable corpus of C code to | automatically test against (crates.io currently has | 90,000 crates). But that's fine, because for the purpose | of this thread that just means that Microsoft's | theoretical Crater-like run for Windows compatibility | just takes even less time and resources to run. | mike_hearn wrote: | Well, let's see. What do I know about this topic? | | I've used Linux since the Slackware days. I also spent | years working on Wine, including professionally at | CodeWeavers. My name can still be found all over the | source code: | | https://gitlab.winehq.org/search?search=mike%20hearn&nav_ | sou... | | and I'm listed as an author of the Wine developers guide: | | https://wiki.winehq.org/Wine_Developer%27s_Guide | | Some of the things I worked on were the times when the | kernel made ABI changes that broke Wine, like here, where | I work with Linus to resolve a breakage introduced by an | ABI incompatible change to the ptrace syscall: | | https://lore.kernel.org/all/1101161953.13273.7.camel@litt | leg... | | I also did lots of work on cross-distribution binary | compatibility for Linux apps, for example by developing | the apbuild tool which made it easy to "cross compile" | Linux binaries in ways that significantly increased their | binary portability by controlling glibc symbol versions | and linker flags: | | https://github.com/DeaDBeeF- | Player/apbuild/blob/master/Chang... | | So I think I know more than my fair share about the guts | of how Win32 and Linux work, especially around | compatibility. Now, if you had finished reading to the | end of the sentence you'd see that I said: | | _" Linux is really hurt here by the total lack of any | unit testing or UI scripting standards"_ | | ... unit testing or UI scripting standards. Of course | Linux apps often have unit tests. But to drive real world | apps through a standard set of user interactions, you | really need UI level tests and tools that make UI | scripting easy. Windows has tons of these like | AutoHotKey, but there is (or was, it's been some years | since I looked) a lack of this sort of thing for Linux | due to the proliferation of toolkits. Some support | accessibility APIs but others are custom and don't. | | It's not the biggest problem. The cultural issues are | more important. My point is that the reason Win32 is so | stable is that for the longest time Microsoft took the | perspective that it wouldn't blame app developers for | changes in the OS, even when theoretically it could. They | also built huge libraries of apps they'd purchased and | used armies of manual testers (+automated tests) to | ensure those apps still seemed to work on new OS | versions. The Wine developers took a similar perspective: | they wouldn't refuse to run an app that does buggy or | unreasonable things, because the goal is to run all | Windows software and not try to teach developers lessons | or make beautiful code. | danieldk wrote: | > But to drive real world apps through a standard set of | user interactions, you really need UI level tests and | tools that make UI scripting easy. Windows has tons of | these like AutoHotKey, but there is (or was, it's been | some years since I looked) a lack of this sort of thing | for Linux due to the proliferation of toolkits. | | This made me remember a tool that was quite popular in | the Red Hat/GNOME community in 2006-2007 or so: | | https://gitlab.com/dogtail/dogtail | | I wonder if it every got any traction? | bartvk wrote: | Thank you for your work! | emaginniss wrote: | Right, but Linux (the OS) doesn't have unit tests to | ensure that changes to the underlying system doesn't | break the software on top. Imagine if MS released a new | version of Windows and tons of applications stopped | functioning. Everyone would blame MS. The Linux community | does it all the time and just says that it's the price of | progress. | mort96 wrote: | So, I very much agree with mike_hearn, their description | of how glibc is backwards compatible in theory due to | symbol versioning matches my understanding of how glibc | works, and their lack of care to test if glibc stays | backwards compatible in practice seems evident. They | certainly don't seem to do automated UI tests against a | suite of representative precompiled binaries to ensure | compatibility. | | However, I don't understand where unit testing comes in. | Testing that whole applications keep working with new | glibc versions sounds a lot like integration testing. | What's the "unit" that's being tested when ensuring that | the software on top of glibc doesn't break? | mike_hearn wrote: | You're right, I should have written "integration tests". | Beltalowda wrote: | I think the problem is that there isn't really a thing | like "Linux the OS"; there's Debian, Ubuntu, Gentoo, Red | Hat, and more than I can remember, and they all do things | different: sometimes subtly so, sometimes not so subtly. | This is quite different from the Windows position where | you have one Windows (multiple editions, but still one | Windows) and that's it. | | This is why a lot of games now just say "tested on Ubuntu | XX LTS" and call it a day. I believe Steam just ships | with half an Ubuntu system for their Linux games and uses | that, even if you're running on Arch Linux or whatnot. | | This has long been both a strong and weak point of the | Linux ecosystem. On one hand, you can say "I don't want | no stinkin' systemd, GNU libc, and Xorg!" and go with | runit, musl, and Wayland if you want and _most_ things | still work (well, mostly anyway), but on the other hand | you run in to all sort of cases where it works and then | doesn 't, or works on one Linux distro and not the other, | etc. | | I don't think there's clean solution to any of these | issues. Compatibility is the one of the hard problems in | computers because there _is_ no solution that will | satisfy everyone and there are multiple reasonable | positions, all with their own trade-offs. | SubjectToChange wrote: | > What it actually takes is what the commercial OS vendors | do (or used to do): have large libraries of important apps | that they drive through a mix of automated and manual | testing to discover quickly when they broke something. | | There are already sophisticated binary analysis tools for | detecting ABI breakages, not to mention extensive | guidelines. | | > And, the Linux/GNU world never had a commercial "customer | is always right" culture on this topic. | | Vendors like Red Hat are extremely attentive towards their | customers. But if you're not paying, then you only deserve | whatever attention they choose to give you. | FeepingCreature wrote: | I think part of the problem is that by default you build | against the newest version of symbols available on your | system. So it's real easy when you're working with code to | commit yourself to some symbols you may not even need; | there's nothing like Microsoft's "target a specific version | of the runtime". | skybrian wrote: | I wonder what Zig does? | mort96 wrote: | I really, really miss such a feature with glibc. There | are so many times when I just want to copy a simple | binary from one system to another and it won't work | simply because of symbol versioning and because the | target has a slightly older glibc. Just using Ubuntu LTS | on a server and the interim releases on a development | machine is a huge PITA. | AshamedCaptain wrote: | GNU / glibc is _hardly_ the problem regarding ABI stability. | TFA is about a library trying to parse executable files, so | it's kind of a corner case; hardly representative. | | The problem when you try to run a binary from the 90s on | Linux is not glibc. Think e.g. one of Loki games like | SimCity. The audio will not work (and this will be a kernel | ABI problem...). The graphics will not work. There will be no | desktop integration whatsoever. | jle17 wrote: | > Think e.g. one of Loki games like SimCity. The audio will | not work (and this will be a kernel ABI problem...). The | graphics will not work. There will be no desktop | integration whatsoever. | | I have it running on an up to date system. There is | definitely an issue that it's a pain to get working, | especially for people not familiar with the cli or ldd and | such, as it wants a few things that are not here by | default. But once you get it the few libs it needs and ossp | to emulate the missing oss in the kernel, there is no issue | with gameplay, graphics or audio aside from the intro video | that doesn't run. | | So I guess the issue is that the compatibility is not user | friendly ? Not sure how that should be fixed though. Even | if Loki had shipped all the needed lib with the program, it | would still be an issue not to have sound due to distro | making the choice of not building oss anymore. | simonh wrote: | The article seems to document ways in which it isn't. I have no | idea personally, are these just not really practical problems? | mort96 wrote: | The article is talking about userland, not the kernel's ABI. | [deleted] | LtWorf wrote: | Someone should invent a command to change root... we should | call it chroot! | MayeulC wrote: | Sounds like you want Flatpak, Docker or Snap :) | frozenport wrote: | Windows installs those MSVC runtimes via windows update for the | last decade. | | With Linux, ever revision of gcc has its own glibcxx, but | distros don't keep those up to date. So that you'll find that | code built with even an old compiler (like gcc10) isn't | supported out of the box. | ctoth wrote: | I read "old compiler" and thought you meant something like | GCC 4.8.5, not something released in 2020! | anon291 wrote: | Just use nix. | dvfjsdhgfv wrote: | This is by design, and everybody should be aware of that. I don't | know about glibc, but as far as the kernel is concerned, Linus | has never guaranteed ABI stability. API, on the other hand, is | extremely stable, and there are good reasons for that. | | In Windows, software is normally distributed in a binary form, so | having ABI compatibility is a must. | wmf wrote: | The Linux kernel maintains userspace API/ABI compatibility | forever but inside the kernel (e.g. modules) there is no stable | API/ABI. | mort96 wrote: | Uh, the kernel ABI is extremely stable. You could take a binary | that's statically compiled in the 90s and run it on the latest | release of the kernel. "Don't break userspace" is Linus's whole | schtick, and he's taking about in terms of ABI when he says | that. | | This is about the ABIs of userspace "system-level" libraries, | glibc in particular. | [deleted] | josephcsible wrote: | The kernel absolutely does guarantee a stable userspace ABI. | This post is entirely about other userspace libraries. | [deleted] | franga2000 wrote: | I recently experienced this in a critical situation. Long story | short, something went very wrong during a big live event and I | needed some tool to fix it. | | I downloaded the 2 year old Linux binary, but it didn't run. I | tried running it from an old Ubuntu Docker container, but there | were dependencies missing and repos were long gone. Luckily it | was open source, but compiling was taking ages. So in a case of | "no way this works, but it doesn't hurt to try" I downloaded the | Windows executable and ran it under Wine. Worked like a charm and | everything was fixed before GCC was done compiling (I have a slow | laptop). | CameronNemo wrote: | Proprietary devs should use static linking (with musl) or | chroots/containers. What makes the author think they are the | target audience of glibc? | davikr wrote: | Thanks, but I think I'll stick with Windows: their target | audience is famously everyone and for an unlimited time. | calvin_ wrote: | Have fun with libGL! | iforgotpassword wrote: | Agree. Had a few games on Steam crap out with the native version, | forced it to use proton with the Windows version, everything | worked flawlessly. Developers natively porting to linux seem to | be wasting their time. | | Funnily enough with wine we _kinda_ recreated the model of modern | windows, where Win32 is a personality on top of the NTAPI which | then interfaces with the kernel. Wine sits between the | application and the zoo of libraries including libc that change | all the time. | dleslie wrote: | FWIW, targeting proton is likely the best platform target for | future Windows compatibility too. | LtWorf wrote: | I've been using wine and glibc for almost 20 years now and wine | is waaaay more unstable than glibc. | | Wine is nice until you try to play with sims3 after updating | wine. Every new release of wine breaks it. | | Please use wine for more than a few months before commenting on | how good it is. | | It's normal that every new release some game stops working. | Which is why steam offers the option to choose which proton | version to use. If they all worked great one could just stick | to the last. | Kaze404 wrote: | > Please use wine for more than a few months before | commenting on how good it is. | | I've used it for several years, and even to play Sims 2 from | time to time, and while I've had issues the experience only | gets better over time. It's gotten to the point where I can | confidently install any game on my Steam library and expect | it to run. And be right most of the time. | LtWorf wrote: | But not sims 3 | | Age of empires DE will not work with proton. And it's not | really a top notch graphics game. | Kaze404 wrote: | I'm not entirely sure what the point of updating Wine is | in the first place. If you have a version that works with | the game you're trying to play, why not pin it? Things | definitely tend to break with Wine upgrades by nature of | what Wine does, that's why it's common for people to have | multiple versions of Wine installed. | andai wrote: | I used to say that Wine makes Linux tolerable, but after | using it for several years I've concluded that Wine makes | _Windows_ tolerable. | noirbot wrote: | As someone who's been gaming on Proton or Lutris + Raw Wine, | I'm not sure I agree. I regularly update Proton or Wine | without seeing major issues or regressions. It certainly | happens sometimes, but I'm not sure it's any worse of a | "version binding" problem than a lot of stuff in Linux is. | Sure, sometimes you have to specifically use an older | version, but getting "native" linux games to work on | different GPU architectures or distros is a mess as well, and | often involves pinning drivers or dependencies. I've had | games not run on my Fedora laptop that run fine on my Ubuntu | desktop, but for the most part, Wine or Proton installed | things work the same across Linux installs, and often with | better performance somehow. | LtWorf wrote: | I specifically mentioned the sims3. That one is constantly | broken by updates. | | Also age of empires2 hd, after working fine with | wine/proton for a decade, doesn't work with the latest | proton for me. | hot_gril wrote: | And Aoe2 HD broke with every game update in Wine. I had | to keep patching in different DLLs. Gave up one day. It's | worse than the original game anyway. | noirbot wrote: | Sure, I'm not contesting that Wine breaks things with | updates. So does a lot of stuff on Linux. The amount of | times I run an apt update and some config file is now | obsolete or just gone is a lot more often than I'd like. | | The advantage is that the Wine Ecosystem seems to realize | this more than the Linux ecosystem at large, and | specifically makes it easy to pin versions and never | update. If it worked, why update? Or why not roll back? | I'm already used to having to do that with every other | part of linux gaming including my graphics drivers... | hot_gril wrote: | > If it worked, why update? | | For multiplayer games, which nowadays get updated every | day or something, and old versions are incompatible. | a9h74j wrote: | > Every new release of wine breaks it. | | Is there any way to easily choose which Wine version you use | for compatiblity? Multiple Wine versions without VMs etc? | LtWorf wrote: | Steam lets you do that, but I think it's a global setting | and not per game. | | Debian normally keeps 2 versions of wine in the | repositories, but if none of those 2 work, you're out of | luck. | Kaze404 wrote: | > if none of those 2 work, you're out of luck | | That's not true. There are multiple tools for managing | multiple versions of Wine and Wine-related tools for | gaming, the oldest one being PlayOnLinux. Lutris is the | most widely used one, and works great in my experience. | pongo1231 wrote: | Absolute opposite experience for me. The native versions of | Half-Life, Cities: Skylines and a bunch of other games refuse | to start up at all for me for a few years now. Meanwhile I've | been on the bleeding edge of Proton and I can count the | number of breakages with my sizeable collection of working | Windows games within the last couple of years on one hand. | It's been a fantastic experience for me with Proton. | edflsafoiewq wrote: | Mind saying what the error is? Linker problem? | pongo1231 wrote: | Not sure if I'm honest. Starting up steam through the | terminal and launching the game doesn't give me anything | indicating the reason in the logs, which is weird. I'm | using Arch and tried both steam and steam-runtime | already. | LtWorf wrote: | It works fine for me. If it was something with glibc it | wouldn't work for me. | LtWorf wrote: | Half life works fine for me on latest kernel, latest glibc. | | Probably you have different unrelated issues. | Aachen wrote: | > Developers natively porting to linux seem to be wasting their | time. | | Factorio runs so much better than any of this emulationware, | it's one of the reasons I love the game so much and gifted | licenses for friends using Windows. | | Some software claims to support Linux but uses some tricks to | avoid recompiling and it's always noticeable, either as lag, as | UI quirks, or some features plainly don't work because all the | testers were windows users. | | Emulating as a quick workaround is all fair game but don't ship | that as a Linux release. I appreciate native software (so long | as it's not java), and I'm also interested in buying your game | if you advertise it as compatible with WINE (then I'm confident | that it'll work okay and you're interested in fixing bugs under | emulation), just don't mislead and pretend and then use a | compatibility layer. | jbverschoor wrote: | Wine Is Not an Emulator | caffed wrote: | Ha Perfect! | | Yes, wine is an Windows binary executor with library | translation. | | https://wiki.winehq.org/FAQ#Is_Wine_an_emulator.3F_There_se | e... | bombcar wrote: | I believe it now actually is again, or was, or something. | It's a question when dealing with Win16 and now Win32 | (Windows-on-Windows). | delusional wrote: | Sure, but it's also WINdows Emulator | ink_13 wrote: | No, it's not, because it's not a emulator | hot_gril wrote: | "In computing, an emulator is hardware or software that | enables one computer system (called the host) to behave | like another computer system (called the guest)." | | Sounds like Wine. | wvenable wrote: | Wine isn't emulating a computer. It's another | implementation of the Win32 API. | | Just like Linux isn't a Unix emulator. | hot_gril wrote: | There is a Linux emulator for Unix (namely FreeBSD), and | it's one of the first examples in the Wikipedia article | on emulation. https://www.openbsd.org/60.html shows | OpenBSD removing "Linux emulation." | | Linux was never designed to be the same as Unix, just | similar. But it's more popular now, so Unix users found | utility in pretending to run Linux. | gorkish wrote: | Except sometimes on aarch64 | WarChortle wrote: | In case you weren't aware Wine is not an emulator, it is a | compatibility layer. | | The whole point of wine is to take a native Windows app, only | compiled for Windows and translate its Windows calls to Linux | calls. | DiggyJohnson wrote: | Surely you see that this is a slight semantic distinction, | unless you consider Wine apps to be Linux native? | Wowfunhappy wrote: | > In case you weren't aware Wine is not an emulator, it is | a compatibility layer. | | Ehhh. I know it's in the name, but I feel like the | significance is debatable. It's not a CPU emulator, true. | It _is_ emulating calls, which is emulation of a sort. | xeromal wrote: | I think most people interpret emulation as CPU emulation, | not a compatibility layer otherwise .NET core is probably | just one fat emulator. | kmeisthax wrote: | Usually when you say "emulator" people think there's an | inherent performance hit because of a fetch-decode- | execute interpreter loop somewhere. Reimplementations of | things don't have that performance hit even though they | are lumped under the same umbrella as actual interpreters | and recompilers. | | Related note: if WINE is an emulator why isn't Linux or | GNU? They both reimplement parts of UNIX, which was even | more proprietary than Windows is today. | shadowgovt wrote: | Nowadays it's emulators all the way down. | | On most of these architectures the software eventually | executes as x86 machine code, and the distance between | x86 machine code and the actual processes inside a modern | CPU implementing the x86 code set is so vast you can call | a modern CPU an "x86 emulator built in hardware." | Wowfunhappy wrote: | > If WINE is an emulator why isn't Linux or GNU? | | I mean, it depends on the context. I don't think it would | be wrong to say that Linux "emulates a UNIX environment" | or some such, which is closer to what OP actually wrote | about Wine. | | You've probably used a "terminal emulator" at some point | today. ;) | btdmaster wrote: | UNIX source code, at least for the original versions, was | released in 2002: | https://slashdot.org/story/02/01/24/0146248/caldera- | releases... | lenkite wrote: | By that definition, wouldn't the whole of POSIX simply be | an "emulation layer" ;-) | udp wrote: | It's a reimplementation of the APIs rather than an | emulation. Same as how Linux reimplemented UNIX APIs, but | it's not a UNIX emulator. | messe wrote: | That's still emulating the underlying API, and accepted | usage of the word. Much like the FreeBSD linux emulator | translates linux syscalls into FreeBSD ones. | littlestymaar wrote: | Saying wine is an emulator is as wrong as saying docker | (on linux) is a virual machine, even though you could say | it allows you to run a "virtual environment" in the same | hand-wavy way you're using the word "emulating" in your | sentence. | extropy wrote: | By that logic any modern windows is an emulator of win32, | since that is not a kernel API but a user space library | "emulating" it. | | Exactly the same way as wine. Wine does not translate the | calls, it for most part actually implements the | underlying logic. | | Win32 is just a bunch of shared libraries: https://en.wik | ipedia.org/wiki/Microsoft_Windows_library_file... | [deleted] | Spivak wrote: | Is any compatibility shim an emulator? | entropicdrifter wrote: | This is all really just a philosophical question as to | how you choose to use the word. It's the same as people | who get in a twist over every game with procedural | generation and permadeath being called a "Roguelike" even | though that particular subgenre used to be more specific | to turn-based RPGs with procedural generation, permadeath | and _total loss of all progress between runs_. | | People who came into using the term earlier tend to think | of it more narrowly, but colloquial use of the term has | drifted to mean something more generic, e.g. "emulation" | used to mean "making one piece of hardware pretend to be | another", but now can sometimes just mean, "when one | thing acts like another at all". | Wowfunhappy wrote: | In this case, however, the term "to emulate" predates | microprocessors, so it _clearly_ can 't have ever | referred exclusively to ISA translation! | | "Emulator" might be a more recent term--it would be | interesting to see the etymology, actually--but it's | reasonable to conclude that anything which "emulates" | must be an "emulator". (Also, OP didn't actually use the | word "emulator".) | | Edit: Nope, the word "emulator" dates back to at least | the 1800s (although it has certainly grown in usage more | recently): https://books.google.com/ngrams/graph?content= | emulator&year_... | hot_gril wrote: | By any well-known definition of an emulator, like | https://en.wikipedia.org/wiki/Emulator, Wine is an | emulator. It's emulating a Windows system to Windows | programs. It's not emulating _hardware_ is all. That WINE | acronym, other than being a slightly annoying way to | correct people, is wrong. Reminds me of Jimmy Neutron | smartly calling table salt "sodium chloride" when really | he's less correct than the layman he's talking to, since | there are additives. | | WINE should simply stand for WINdows Emulator. | messe wrote: | One might say it _emulates_ windows library and system | calls. | tmccrary55 wrote: | Much like one could say it internets Windows userland and | system calls with Linux and its userland. | messe wrote: | No, not at all like that. One slight difference is that | what you said is complete nonsense. | | I'm using an accepted definition of emulation: | | > emulate (transitive verb) | | > To imitate the function of (another system), as by | modifications to hardware or software that allow the | imitating system to accept the same data, execute the | same programs, and achieve the same results as the | imitated system. | | This usage is pretty common, for example FreeBSD has a | linux emulation layer that takes Linux syscalls and | translates them into FreeBSD syscalls. WINE saying it | stands for "Wine Is Not an Emulator" is irrelevant to the | fact that it is blatantly is one. | rascul wrote: | Or they might say that it _translates_ windows library | and system calls. | hot_gril wrote: | Same way a CPU emulator translates instructions. | deelowe wrote: | A lot of high level emulation works this way as well. And, | similarly, FPGA cores often aren't "simulating game | hardware" either. | randyrand wrote: | It is not a "Windows Emulator", but it is certainly a | "Windows Userspace Emulator" | | Dolphin can run Wii binaries on top of Linux, by emulating | a Wii. | | Wine can run Windows binaries on top of Linux, by emulating | Windows Userspace. | | Why would one be an emulator, and the other is not? | | Is there some distinction in what an emulator is that goes | against common sense? | | This reminds of the Transpiler/Compiler "debate." They're | both still compilers. They're both emulators (VMs & | Compatability Layers). | | What the creators meant to say, IMO, is WINVM, "Wine is not | a Virtual Machine". | hot_gril wrote: | The creators also would not call virtual machines | emulators because they don't translate CPU instructions, | which is their narrow criteria for "emulator" that nobody | else seems to use. | littlestymaar wrote: | > is their narrow criteria for "emulator" that nobody | else seems to use. | | Except the people actually writing or talking about real | "emulators". You know, for things like NES or Gameboy on | x86, x86 on WASM, etc. | | Sure, you can argue that VMs or Wine are emulators in the | broadest sense, but then I could argue that your CPU is | an emulator too since it doesn't really runs ASM, and | with that very loose meaning almost anything computers | related is an emulator. And in practice that's never what | people mean when we're talking about an emulator. (Even | this thread started with the wrong postulate that WINE | must have incurred a performance penalty because the | commented believed it was an emulator). | hot_gril wrote: | Yes, those people are writing hardware emulators. Doesn't | mean they're the only "real" kind. | | As for my Intel CPU, it isn't pretending to be another | kind of CPU. Intel makes a leading implementation of x86. | Wine follows Microsoft's Windows implementation and | translates to Linux calls, and the entire point is so you | can run programs intended for Windows on Linux instead. | You can get relative about it, but it's not really, | they're clearly different. Either way, doesn't support | WINE's acronym. | extropy wrote: | Wine is more like a re-implementation of windows Userland | using a different kernel (and graphics libraries). | | Since the hardware is all the same, there is nothing to | emulate or compile. | | Or from the other direction - windows NT contains a re- | implementation of the win16 API. Is that an emulator? | yjftsjthsd-h wrote: | The Wii emulator is emulating the whole system including | the CPU; WINE describes itself as not an emulator | specifically because it's not doing anything about the | CPU (hence not working on ARM Linux without extra work). | | (I'm not 100% sold on this; I think "CPU emulator" and | "ABI emulator" are both reasonable descriptions, albeit | of different things, but that's the distinction that the | WINE folks are making.) | mort96 wrote: | Have you actually tried to run the Windows version of | Factorio through Proton and experienced slowdowns? In my | experience, WINE doesn't result in a noticeable slowdown | compared to running on Windows natively (without | "emulationware" as you call it), unless there are issues | related to graphics API translation which is a separate | topic. | Kaze404 wrote: | I'm a huge fan of Wine, but there's no reason to run | Factorio under it. The native Linux version works | flawlessly from my experience, and I'm even using a distro | where problems with native binaries are common. | [deleted] | hot_gril wrote: | > unless there are issues related to graphics API | translation | | But there almost always are problems in that area. I've | never had a game run with the same FPS and stability in | Wine vs natively in Windows. | mort96 wrote: | My point was it's not inherent to WINE. There's a lot of | Windows games which support Vulkan or OpenGL, those work | excellently. | hot_gril wrote: | Csgo is OpenGL and doesn't work excellently in my | experience, but yeah, in theory they should. | littlestymaar wrote: | Exactly the same fps, unlikely. | | But phoronix has tons of benchmarks showing that | WINE/proton are in the same ballpark as the native | windows version, sometimes a bit slower but as many times | a bit faster as well. | sirn wrote: | I believe OP is referring to the fact Factorio has some | optimization on Linux such as using fork() to autosave | (which is copy-on-write unlike its Windows counterpart), | which result in zero-stuttering during auto-save for large- | SPM bases. | [deleted] | bayindirh wrote: | > Developers natively porting to linux seem to be wasting their | time. | | Initial port of Valve's source engine ran 20% faster without | any special optimizations back in the day. So I don't see why | the effort is wasted. | DiggyJohnson wrote: | Isn't part of the original point not just that Wine is a | perfect (dubious, imo) compatibility layer, but that | distributing a native port is cumbersome on the Linux | ecosystem? | bayindirh wrote: | I don't buy the cumbersomeness argument for Linux games. A | lot of games in the past and today has been distributed as | Linux binaries. Most famously Quake and Unreal Tournament | series had native Linux binaries on disks and they worked | well until I migrated to 64 bit distributions. I'm sure | they'll work equally fine if I multi-arch my installations. | | Many of the games bundled by HumbleBundle as downloadable | setups have Linux binaries. Some are re-built as 64 bit | binaries and updated long after the bundle has closed. | | I still play Darwinia on my 64 bit Linux system | occasionally. | | Most of these games are distributed as .tar.gz archives, | too. | | I can accept and respect not creating Linux builds as | engineering (using Windows only APIs, libraries, etc.) and | business (not enough market) decisions, but cumbersomeness | is not an excuse, it's a result of the other related | choices. | | In my book, if a company doesn't want to support Linux, | they can tell it bluntly, but telling "we want to, but it's | hard, and this is Linux's problem" doesn't sound sincere | even remotely. | LtWorf wrote: | Basically game developers never once booted linux. | | They'd need to do some learning and don't want to. They | might have superficially read something about | distributions and think that a software cannot run on two | different distributions. | | I've read this excuse time and time again. And saying it | tells me that the person never actually tried to compile | anything on linux. | pjmlp wrote: | On the contrary, they are more that used to POSIX stacks | on macOS, iOS, PlayStation, Nintendo, Android, | ChromeOS.... | | Yet porting to GNU/Linux is not worthwhile. | LtWorf wrote: | macos? The same OS which decided no more 32bit binaries | because of reasons? The same OS which decided no more | opengl because of reasons? That OS? | | No gamer uses that OS. If you think it's hard on linux, | it's much harder on osx. | | android is not posix, that is completely hidden from the | developer. | | chromeos is just linux + google tracking. | | consoles are a complete separate world. | | Please let's try to have a serious conversation. Game | developers that use frameworks such as unreal are often | unaware of how the underlying system works. | nomel wrote: | > have Linux binaries | | In January, HumlbeBundle removed Linux support from their | Trove [1]. | | HumbleBundle support points out that it's not simple [2]: | | > While it is entirely possible to install and run games | and programs from the Linux GUI, implementation across | distros can be wildly different. For this reason, this | guide will explain how to install and launch games using | the Terminal. | | And, usually, only a small list of distributions are | supported, like Ubuntu or Mint. For example, Bundle 9 | [3]. | | All of the above seems to supports the "cumbersomeness | argument for Linux games". | | 1. https://kotaku.com/latest-humble-bundle-change-leaves- | mac-li... | | 2. https://support.humblebundle.com/hc/en- | us/articles/219377857... | | 3. https://support.humblebundle.com/hc/en- | us/articles/115011722... | bayindirh wrote: | > In January, HumlbeBundle removed Linux support from | their Trove [1]. | | Yet, I have downloaded all new builds for a couple of | games for amd64 from one of their oldest bundles. | | It's not as clear cut as it seems. | Animats wrote: | Notes: | | "EAC" is Easy Anti Cheat, sold by Epic.[1] Not EarthCoin. | | "EOS", in this context, is probably Epic Online Services, not one | of the 103 other known uses of that acronym.[2] | | Here's a list of the games using those features.[3] | | So, many of these issues are for people building games with | Epic's Unreal Engine on Linux. The last time I tried UE5, after | the three hour build, it complained I had an NVidia driver it | didn't like. I don't use UE5, but I've tried it out of curiosity. | They do support Linux, but, as is typical, it's not the first | platform they get working. Epic does have support forums, and if | this is some Epic problem encountered by a developer, it can | probably be fixed or worked round. | | Wine is impressive. It's amazing that they can run full 3D games | effectively. Mostly. Getting Wine bugs fixed is somewhat | difficult. The Wine people want bugs reported against the current | dev version. Wine isn't set up to support multiple installed | versions of itself. There's a thing called PlayOnLinux which does | Wine version switching, but the Wine team does not accept bug | reports if that's in use.[4] So you may need a spare machine with | the dev version of Wine for bug reproduction. | | [1] https://www.easy.ac/en-us/ | | [2] https://acronyms.thefreedictionary.com/EOS | | [3] | https://steamcommunity.com/groups/EpicGamesSucks/discussions... | | [4] https://wiki.winehq.org/Bugs | skyde wrote: | what about the web browser. Isn't that also a stable ABI ? Or its | not a "Binary interface" because it only support Javascript? | | What about web assembly ? | 0x457 wrote: | If web browsers had any kind of stable interface we wouldn't | have: https://caniuse.com/, polyfils, vendor CSS prefixes and | the rest of crutches. WASM isn't binary. But that's all | irrelevant when we talk about ABI. | | ABI is specifically binary interface between binary modules. | For example: my hello_world binary and glibc or glibc and linux | kernel or some binary and libsqlite3. ___________________________________________________________________ (page generated 2022-08-15 23:00 UTC)