Why aren't libraries and resources for applications in Linux not organized in a Windows-LIKE manner?

In windows the libraries for applications are in a single directory name ProgramFiles or ProgramFiles x86 . This would have nicely organized stuff but as different applications have different directory structures depending on the developer, this makes it very un-standardized and clutters everything.

Having this type of convenience of having resources in one directory with everything organized seems very nice in idea but here come some questions:

What would you do if two apps required the same library ? Have them duplicated into their separated folders wasting space and cluttering shit or having symlinks for those libraries in that folder whilst the original one copy remains somewhere else organised ? But having symlinks means ONE change to any shortcuts (which point to one single library) means applying change to all apps which may work well for the respective application that the change was made for but might break others . Also , different developers might use a different heirarchy for their applications , cluttering everything like Windows.

If we go down the route to have single directories for programs then a good solution would be to standardize directory structure for all applications as a requirement to develop for linux and have the ONLY libraries which are explicitly required by ONLY one application being included in that applications directory , while the system-wide used libraries could remain as they are now . One big downside would be that this “migration” of directory structures would be a huge slowdown in linux development and would cause headaches for the developers who ALREADY have their applications follow the current structure . Although this would make it easier for users , the downsides make it just not-so worth it.

Another solution could be to keep applications along with their libraries as they currently are and make a separate single folder like windows having symlinks to all of the explicit application-specific libraries which are ONLY used by that specific application and none other while again the system wide libraries remain in their respective folders as they currently are.

What does the community think eh ? I believe this would only make linux more organized and nicer (with a few hurdles though).

That’s not true. Many applications use these directories, but not all. Not even Microsoft’s own binaries are able to consistently follow this so-called standard; rather, on a typical Windows install many applications keep their libraries and executables strewn about in a rat’s nest of incomprehensibility and bloat.

Regarding whether applications should share libraries or maintain their own on Linux, these are both currently available package maintenance routines and have been around for a long long time. The user is able to choose how they wish to configure their system.

Packages sharing libraries prevents a system from becoming unnecessarily bloated or otherwise taking on technical debt. When the libraries are updated, all applications using the libraries must be updated as well. Many distro-specific package managers (including Pacman) use this approach.

Another approach would be to use containerized applications, which bundle their own libraries and dependencies with the binary, independently from the system resources. This is obviously way more bloated but in some cases can introduce stability, for example by preventing a given application from “breaking” when a library it depends on is updated.

Android is an example of an OS that uses containerized apps for package management, I’m not sure how many people are aware of that. But actually a lot of package managers use this type of approach, for example Flatpak, Appimage, Snap, the Nix package manager, Docker, and so on and so on.

The symlinking stuff you mentioned should be avoided. Symlinking libraries is a bit of a hack and can introduce complications down the line that are difficult to troubleshoot. If you are in a pinch and just want to get a game working or whatever, fine, but you shouldn’t try to set your system up with symlinked libraries all over the place on purpose

All that to say: what you are describing isn’t really anything new, just a different approach that has been well-supported on Linux for a long time and can be adopted by anyone at any time, for some packages or all packages or anything in between.

4 Likes

Why?

Because Linux ain’t stoopid.

Duh. :wink:

Sing it loud, brudduh! :smiley:

3 Likes

Perhaps I failed to dictate the point . I didn’t mean to state that libraries that certain applications use should be symlinked for the application. It is not about containerising programs or other . It is about accessibility. Say Lutris has some data in /usr , what I meant to say that if a common folder such as .local/share/lutris is there then having a symlink to all of the application’s specific libraries that aren’t shared between any other applications in that folder could make accessing those libraries from one path easier and more accessible.

Idk I saw a same comment on a YouTube video so decided to ask here . I don’t know what actual use case scenario this could suit but surely sounds good and organized to me.

You want it organized like Windows got MSVC organized?

1 Like

No I don’t know shit about MSVC, that is the point of the discussion, having a place to access application specific ONLY libraries altogether would be a great.

But there must be some downsides due to why it isn’t done. And that is what I want to know.

Perhaps you could tell me about MSVC ?

This made me remember how much of a pain Linux cases are from a digital forensics point of view. Windows we have the registry and it’s all organised. Linux I end up checking the journal, logs under /var/log and loads of other crap lol. Feels like looking for a needle in a haystack sometimes

1 Like

Just FYI,

Windows was never meant to be a networked, internet savvy Operating System, so it wasn’t initially built that way. And when you force yourself upon users–which Microsoft tactically and tacitly accomplished–in a non-Internet world, then you are locked-into retaining your user base come hell or high water. And that’s what Microsoft did with Windows.

I remember when the Biggest News O’ The Day was “Microsoft Releases Internet Explorer 1.0.” I was waiting in a GeoWorks chat room with a friend to download it. (Who here knows what GeoWorks was?)

But my point is, Windows was nev er made for networked environments from the get-go, while Linux was born of teh Intarwebs I mean Internet. :wink:

Linux was efficiently designed with and for networking from the very start.

4 Likes

Can help but mention the fact that Windows Registry sometimes can be cluttered more than Linux directories.

1 Like

That sounds really unnecessary and just added complexity to me. If you the dev of an application you already know of all it’s dependencies. From a debugging standpoint this doesn’t make any difference. You pop the application in gdb replicate the steps that cause it to fail or produce the undesired behavior and gdb will give you a stack trace of where this code crashed/you stopped it. Including full path and line number of the libraries the code is coming from.

From a consumer stand point also this doesn’t seem to produce any significant benefits? Almost no consumer is going around trying to locate the libraries used by the application and on the offchance they do we can use pactree here (debian has dpkg equivalent flags for this and pretty sure so do redhat distributions) to list all the dependencies of a package and ldd to print the specific .so libs being used by a elf file.

3 Likes

So after @NaN 's reply the synopsis of this entire discussion is :

My so called “proposed” idea could have easily cluttered/bloated the installation (lightly, very lightly) at the advantage of easy accessibility .

But this easily accessibility already exists ! I just wasn’t aware of it . As @NaN said ,Arch has pactree and RH along with Debian based distros have dpkg which can easily list out the libraries used by a specific application with the use of a command via the terminal.

Yeah sure. But at least things are still within prefetch or link files or jump lists or shellbags etc. Definitely cluttered but you know where everything is instead of different locations for different software

2 Likes

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.