Why all the moralizing? Deciding when to make breaking changes is hard. Deciding it's more trouble than its worth for the developers and the users usually shouldn't be ascribed to one of "ignorance, arrogance, or fear". It's just an engineering disagreement.
I'm trying really hard not to end this flippantly with "go touch grass" but I think the mood fits. Escalating appeals to emotion are unhelpful and "cringe" when trying to convince open source developers to add your pet issue to their roadmaps.
No moralising here. I'm directly calling out developers who are completely okay with writing thousands of lines of code from scratch for a fancy new feature, but can't be bothered to directly lift proper directory handling code from other open-source projects and reuse it almost verbatim.
Like I said: it's easy to just dump stuff in $HOME. It's a lot harder to properly handle paths, but it should be done anyway to be a good citizen. Ideally: check for a legacy path; if it doesn't exist, check for XDG paths; if that doesn't exist, create and use XDG paths. If a legacy path exists, notify the user of a migration and either warn them to do it, or attempt to do it for the user.
I really wonder how many programs will immediately break if I suddenly set my home directory permissions to 0100.
How is lampooning people who disagree with you as "arrogant" not moralizing? Arrogance is a moral accusation.
This isn't a problem where you can just copy and paste a deductively-proven-correct-for-all-inputs solution and be done. One way or another you're creating problems for existing users and existing scripts as soon as you start using the new location. A newly provisioned system with an old script (or an old user (and "old" meaning nothing more than "older than this change")) running on it is going to end up thinking that it's doing a create-or-modify on, say,`.bashrc`, when in fact it's doing an override (because existing config was in the new location).
"Ignorance" is being blind to that problem (and others). "Arrogance" is pretending like it's somehow obvious that that problem isn't worse than the benefits of unifying on this convention, especially when there are so many examples of estimable projects on both sides of the issue.
The arrogance is pretending that user configs and wishes can be arbitrarily dismissed because you can’t be bothered to adhere to them. My computer is mine, not the app maker’s.
You're assuming your concerns were dismissed arbitrarily. Why? Is it possible that your concerns were considered, pros and cons were weighed, and the final decision was simply not in your favor?
And what's this nonsense about "my computer, not the app maker's"? How do you think project governance works? Decisions are made, and every single time a subset of users are disappointed. That subset isn't having control of their computers taken from them. This stuff is happening out in the open, for free, and with express permission to override any behavior you want with your own patches. You can even distribute your patched version, also free of charge. It's downright humbling how free we are when it comes to bash and OpenSSH, and you have the gall to come out with "My computer is mind, not the app maker's"? Do you have any idea how low the bar is for user respect in the average app? How much money can be made if you're willing to disrespect your users? And the bash and OpenSSH folks would never, not ever consider any such breach. They have stayed firm, despite world-blanketing success, in their user-respecting free software ways.
And for a disagreement of where to put config files, you'd lump them in with the user-hating rabble that makes up the rest of the software industry. We're surrounded by people who actually do arbitrarily dismiss user concerns (because the users are the product). People who actually do believe your computer belongs to them when you use their software. Please, in the middle of all this shit, keep in mind who your best allies are and just have a civil engineering disagreement with them, without insulting them.
As has already been pointed out, plenty of existing scripts and users know that SSH keys and other configs are in $HOME/.ssh/. If OpenSSH moved to XDG, such a script or user would come to a new machine using XDG and not be able to find the SSH configurations. A user might be able to learn where they are, but a script wouldn't. Similarly for .bashrc.
Given how often tools like bash and ssh are used programmatically and not just interactively, it is very much conceivable that the right choice, the one that brings the least amount of harm to their users, for bash and OpenSSH is to stick to their existing conventions forever.
I should also note that $HOME/.program-name is very much a community standard that the XDG people decided to move away from. Or at least it used to be.
The way I handle it on my systems, certain programs such as ssh and bash get "special status". They are so deeply fundamental that they get a pass when I gripe about .rcfile proliferation. You get .ssh/, .netrc, and .bashrc, I'll allow it.
That doesn't mean every .dumb_tiny_cli_rc gets to do that as well.
> I should also note that $HOME/.program-name is very much a community standard that the XDG people decided to move away from.
So was every single inferior standard or convention, before it was replaced by a better one. It's called progress. It's a balance between improvement and breaking changes / disruption, but you need some improvement over time.
The poster above was making two claims that I responded to: 1, that apa writing their configs in dot files under $HOME is "breaking community standards", and 2, that there is never a good reason to do so.
Have you never worked on a legacy product with lots of paying customers? The not-so-hard to imagine case is where updating your code to be Pure and Wonderful would have a negative impact on thousands or millions of existing deployments.
Honestly, I see some arrogance here but not where you put it. Just like your computer is yours, the developer owns their application. Use it or not, but don't blame them for arrogance if it does not behave exactly like you wish.
Then, by using XDG variables, the user can get precisely what they want, but only from those programs which follow the XDG spec which is designed specifically to enable user control of the locations where files go.
Some here complain about a convention (not using XDG vars) which removes user choice. Others here recognize that the convention to use XDG allows for user-defined configuration.
If a user's wish is different from the XDG default convention, they can change its configuration. If a user's preference is different from the $HOME/.$program convention and the maintainers don't use XDG vars, the user is SOL.
Most users don't care because they do the same with their own files.
The xdg standard just introduced 3 additionnal .config .local .cache directories that do not solve the presence of the regular .dot directories/files. It didn't solve anything, just added more mess. Besides the stuff that end in .config is as messy as what was in ~/.dotdirs. I once was naive enough to think I could put my .config into a git repo...Quickly enough you realise that a lot of developpers put what the fuck they want, including stuff that should be in .local or .cache into .config and you end up writing a novel in your .gitignore.
XDG didn't solve that, it just added additionnal mess, which I didn't wish for.
If it was to end with that mess, I'd rather have it the old way and keep mt dot files at the root and separate my own files into a dedicated folder, and I AM THE ONE to choose if it has to be called files, documents, docs, translated or not, not some people pretending it built a (broken) standard that would solve every user needs.
> Most users don't care because they do the same with their own files.
Maybe I'm not most users, but I absolutely put my files in ~/.config/$my_namespace/
> It didn't solve anything, just added more mess.
Have you ever had to migrate/sync parts of a system across multiple hosts, or even just backup with very limited space and having to be choosy about what is stored? XDG makes it WAY easier to set up rules to include/exclude stuff, than a bazillion .programrc dirs (which make no config/data distinction). Cache can be completely ignored and usually (the more voluminous ) program data can be skipped. The app will usually generate it as needed, and if not, I know what to sync.
Every program and their dog barfing in $HOME is something I didn't wish for.
You computer is yours …and you are not forced to use maker's app. Well sources are opened, so you can change things to suit your needs instead of considering makers as your slaves can't you? :)
You’re making a lot of assumptions here, like that paths to config files are used by only one program, or that there’s an interactive way to prompt a user on every run, or that XDG’s extremely limited config options suit every user’s desires. Sorry, but this is not an “easy” problem, especially not for existing widely used tools like OpenSSH.
Yeah, let's break the entire world in order to bring OpenSSH up to ideological purity (as defined by a particular group, to the exclusion of everyone else). XDG, or now Free Desktop, have no authority to dictate how others write their software. What makes their prescriptions holy? We are all equal in OSS and no one has the right to enforce their ideals on others.
I myself simply want the software to work and not to suddenly change behaviour. If you're writing something entirely new, perhaps the holy edicts of the XDG are right for you. But to ask for OpenSSH to change shows a complete incompetence in software leadership and impact assessment. Anyone that suggests something that insane ought not to be listened to and all their ideas ought to be entirely disregarded.
I'm trying really hard not to end this flippantly with "go touch grass" but I think the mood fits. Escalating appeals to emotion are unhelpful and "cringe" when trying to convince open source developers to add your pet issue to their roadmaps.