Hacker News new | ask | show | jobs
by hs86 1868 days ago
Having a system-wide package manager where nearly all libraries are dynamically linked also has its drawbacks.

A seemingly minor update might cause a huge cascade of dependency updates which causes common Linux distributions to tend to one of these two extreme solutions: Either fix all packages in place and freeze their version numbers or just "give up" and update everything all the time. Both solutions feel like compromises to me.

Other end-user OSes don't act like this. On Android/iOS/macOS/Windows, I can have the latest 3rd party software without having to deal with intrusive updates to the OS infrastructure all the time. The BSDs handle this better, and maybe something like Ubuntu LTS + Nix on top of it might be a way around this.

2 comments

> On Android/iOS/macOS/Windows, I can have the latest 3rd party software without having to deal with intrusive updates to the OS infrastructure all the time.

That's not really true. The .NET runtime isn't redistributable, and so has to be installed on the host OS, which usually works but not always (and pre-Windows 10, newer versions of .NET required a bunch of KBs, which meant that Windows Update was actually working and able to install those, which fairly frequently broke on Windows 7 due to the lack of Service Packs). Nowadays this is less of a problem, due to improved .NET compatibility and .NET 4.x coming pre-installed on Windows 10. Which honestly is great - you can compile and run .NET 4.x programs on any Windows 10 machine. Granted, it's some relatively outdated version by now, but it is still very nice to have a "proper" programming language out of the box, and also the ability to compile to small .exe's.

Similarly, MSVC runtimes (except the installers are redistributable, but you are still in the situation of "have to globally install it").

In what way is the runtime not redistributable?

The old one “.NET Framework” is an OS component but has enough compat that you can always upgrade it.

The newer one (net5+) is typically fully bundled with each app so no sharing.

MSVC also went this way - you bundle them rather than take a dependency on a system wide runtime. These two (.NET and c++ runtimes) were basically the last shared libs on windows, and it’s now basically obsolete tech (.NET 4.X) or no-longer-recommended deployment method (Msvc).

You are right, but there are still a lot of applications reliant on the "old ways".
Given that the new way for SxS was introduced in Windows XP, the old way is a long time ago.
Right, Windows is totally stable and an OS update would never break basic functionality [0] or delete peoples' files [1].

[0] https://arstechnica.com/gadgets/2021/03/blue-screen-of-the-d...

[1] https://arstechnica.com/gadgets/2018/10/microsoft-suspends-d...