Yeah but once you track it all down you feel like a developer superstar genius...
Then you confidently sit down and proceed to repeat the process on another distro and immediately feel like a complete noob again as nothing is where it should be and you realize, you mastered nothing.
https://github.com/npm/npm/issues/533
The argument from the maintainer is reasonable that distros can just patch it, but realistically, everyone wants a newer version of things than what their distros ship—a similar tug-of-war ends up happening in the Python world, where distros like Ubuntu and Debian ship patched versions of pip/setuptools, and then users are encouraged to self-upgrade those tools to the upstream versions.
Anyway, this kind of thing isn't necessarily anyone's fault, but it is just a pretty different experience from Mac or Windows where you tend to have things be more self contained, like "here's where my Python installation lives because it's the path I put in the box when I ran setup.exe."
As a very casual Linux user (macOS is my daily driver), are there any efforts to solve these "death by 1,000 cuts" arbitrary (I assume) differences?
A bit of an exaggeration, but well...pretty much that.
Yes, Linux depends upon abstractions. Everything in computing is an abstraction, including those 1's and 0's that tell the processor what to do. (Anything below that is electrical engineering.) The differentiators are the complexity and stability of that abstraction. When people talk about "everything being a file", they are referring to lower level abstractions that are relatively simple and stable. Likewise, when people talk about HTML/CSS/JS they are referring to lower level abstractions that are relatively simple and stable. This is less true (sometimes significantly less true) when people start discussing frameworks/libraries, whether that's in Linux or web development.
Let me give you an example of something that used to be clear and trivial in Unix that isn’t anymore because people «improved» it: telling your system about name servers.
Every flavour of Linux uses a different layout for its root directories, stores configs in different places and generally is not consistent from distro to distro.
there are differences, but it's 90% the same in the major distributions.
and while you do have a point about user configs, it is getting better. .config and .local are getting used more and more and are an improvement over every app dropping stuff in $HOME.
Yes and that 10% can cause some unexpected, sometimes hard to fix problems. A poorly written build script or installer that expects a specific distro's directory layout can cause some problems. Especially if it's a large convoluted build system that hard codes the directories in multiple places.
I've actually had to deal with this, it sucks. That was as an end user trying to use an app, not as a developer.
You run into this a lot trying to build small libraries and stuff. There's unfortunately a lot of poor programming habits out there. Directories inevitably sometimes get hardcoded and this causes problems because of the inconsistencies between distros.
>and while you do have a point about user configs, it is getting better. .config and .local are getting used more and more
And yet there's hundreds of apps that will never be updated or changed to conform to standards.
>are an improvement over every app dropping stuff in $HOME.
Tell that to snap. It insists its folder must sit nicely in my home folder and nowhere else.
i suspect many of those are no longer actively maintained. at best they receive security patches from distributions.
Tell that to snap. It insists its folder must sit nicely in my home folder and nowhere else.
my (low) opinion of snap aside, the bad here is that the location is not configurable. as a library of applications, i would want snap in $HOME. or i would put it in $HOME/lib or an equivalent. maybe .local would be appropriate too, but i understand it's for app specific user-data, so it doesn't look like whole apps should be in there. (edit: elsewhere i just read that .local is supposed to be like a user specific /usr/local, so snap should fit in there somewhere)
as a workaround try to use a bind-mount
Are people finally following the XDG standard? [0]
It's easy to make "complicated". It's very hard to make "simple and straightforward".
Whether that's an indication of mastery is not a closed question.
If I try to interpret the bit about abstraction, I lean more towards "less opaque" being the intended meaning. On Windows and Mac, it's harder to see what is happening. On Linux, it's all exposed and there to tinker with.
> It's arranged more simply and straightforward, masterfully though, I dunno...
I would argue that simple and straightforward is masterful!
>By cutting away abstraction,
I don't think I agree with this take. You haven't cut away abstraction, you've changed to a different kind of abstraction. Linux's 'everything is a file' abstraction is just that, an abstraction.
>Linux is arranged masterfully, and makes the Windows filesystem look like a joke in comparison
It's arranged more simply and straightforward, masterfully though, I dunno...
Every flavour of Linux uses a different layout for its root directories, stores configs in different places and generally is not consistent from distro to distro.
User configs are also scattered in random places at times. They could be in .config they could be in .local they could be in .$APP_NAME they could be in the app's directory, they could be in /usr/ somewhere. Maybe in a couple different places at once. Who knows? It's a mystery until you track it down.
Dependencies and libraries are a huge pain to deal with, especially when you start mixing and matching distro provided libraries with custom built ones.
I'm not trying to disagree with your post or anything. I love the way Linux lets you have control over your computer and doesn't try to stop you. But, it's definitely got some issues. I've only touched on a few related to your comment itself.