zlacker

[parent] [thread] 48 comments
1. schmuc+(OP)[view] [source] 2026-01-04 16:33:55
This post gets some of the details wrong. /usr/local is for site-local software - e.g. things you compile yourself, i.e in the case of the BSDs the ports collection - things outside the base system. (They may be compiled for you).

Since Linux has no concept of a base system, it's a stand-alone kernel with a hodgepodge of crap around it - this distinction makes no sense on Linux.

/opt is generally for software distros for which you don't have source; only binaries. Like commercial software packages. More common on Real UNIX(R) because most Linux users outside enterprise aren't running commercial software. You're putting your $500k EDA software under /opt.

replies(13): >>yjftsj+w2 >>theand+I3 >>immibi+35 >>loeg+p5 >>shevy-+lc >>nyrikk+9e >>asveik+we >>Uehrek+uh >>aap_+tk >>sohrob+Wl >>ajross+Qq >>xattt+Zm2 >>JdeBP+cp5
2. yjftsj+w2[view] [source] 2026-01-04 16:49:58
>>schmuc+(OP)
> Since Linux has no concept of a base system, it's a stand-alone kernel with a hodgepodge of crap around it - this distinction makes no sense on Linux.

The Linux base system is managed by the package manager, leaving local for the sysadmin to `make install` into

replies(1): >>schmuc+B3
◧◩
3. schmuc+B3[view] [source] [discussion] 2026-01-04 16:55:14
>>yjftsj+w2
> The Linux base system

There is no such thing as a Linux base system.

Separate components, separate people.

Hence the term Ganoo plus Leenox...

replies(1): >>yjftsj+8a
4. theand+I3[view] [source] 2026-01-04 16:55:34
>>schmuc+(OP)
> /opt is generally for software distros for which you don't have source; only binaries. Like commercial software packages. More common on Real UNIX(R) because most Linux users outside enterprise aren't running commercial software

Steam says hi.

On Windows, a common Steam library exists in Program Files directory, therefore not user specific. On Linux, each user has a separate Steam installation and library. I'm not sure why there isn't a common Steam library on Linux, but /opt would be a good place for it.

replies(1): >>schmuc+X7
5. immibi+35[view] [source] 2026-01-04 17:05:15
>>schmuc+(OP)
I understand /usr/local to be for anything not managed by your distribution but following the standard system layout (e.g. Python that you compiled yourself) while /opt is used for things that are (relatively) self-contained and don't integrate with the system, similar to Program Files on Windows (e.g. a lot of Java software).

Regarding "that's a Linux-ism" - well yeah? Linux is the main OS this is about. FreeBSD can do what it wants, too.

replies(1): >>schmuc+x6
6. loeg+p5[view] [source] 2026-01-04 17:06:51
>>schmuc+(OP)
You've entirely missed the point of the article.
◧◩
7. schmuc+x6[view] [source] [discussion] 2026-01-04 17:14:27
>>immibi+35
> anything not managed by your distribution

That's a Linux-ism. Other *nix there is a lot more in /usr/local.

In reality /usr is similar to Windows' System32 directory on most Unicies.

/opt is really the only good place for Java and where I've been putting it for decades (old habits die hard).

◧◩
8. schmuc+X7[view] [source] [discussion] 2026-01-04 17:21:41
>>theand+I3
By default, Program Files is not writable by non-Administrators. This is likely done by some background service. Or they loosened the default file permissions (which would be dumb).

No reason this can't be done on Linux but since NT's security model is more flexible it's a lot easier to do so on Windows. You'd need to add dedicated users. (Running a Steam daemon as root would probably cause an uproar.)

replies(1): >>Dylan1+Ea
◧◩◪
9. yjftsj+8a[view] [source] [discussion] 2026-01-04 17:33:51
>>schmuc+B3
Well, no, my exact argument is that there is a base system, even if it is composed of assorted components. If you install Debian (or whatever) on a machine, the software installed by the package manager ships as a unified release that has been adapted to work together. I think it's reasonable to call that the base OS. And then, separate from that base system that is managed by the package manager, the local admin my install things into /usr/local.
replies(2): >>schmuc+cb >>LoganD+Gk
◧◩◪
10. Dylan1+Ea[view] [source] [discussion] 2026-01-04 17:37:53
>>schmuc+X7
They loosen the permissions on the steam folder on windows. I would have expected just the library folder but apparently it's the whole thing.
replies(1): >>schmuc+4c
◧◩◪◨
11. schmuc+cb[view] [source] [discussion] 2026-01-04 17:41:39
>>yjftsj+8a
If you can remove GNU coreutils and replace them with something else (like that Rust garbage) then you don't have a base system. You have a loose collection of packages around a kernel.
replies(1): >>Kruton+9d
◧◩◪◨
12. schmuc+4c[view] [source] [discussion] 2026-01-04 17:46:17
>>Dylan1+Ea
Oof. The correct location for this is C:\ProgramData

Developers who knowingly reduce or disable default Windows security settings should be censured. Because in 99% of cases it is due to ignorance or plain laziness.

replies(2): >>Dylan1+Ac >>immibi+gD
13. shevy-+lc[view] [source] 2026-01-04 17:48:27
>>schmuc+(OP)
> /usr/local is for site-local software - e.g. things you compile yourself

See, you assume here that /usr/local/ makes any sense.

I use a versioned appdir prefix approach similar to GoboLinux. So for me, /usr/local never ever made any sense at all. Why should I adhere to it? I have ruby under e. g. /Programs/Ruby/4.0.0/. It would not matter in the slightest WHO would compile it, but IF I were to need to store that information, I would put that information under that directory too, perhaps in a file such as environment.md or some other file; and perhaps additionally into a global database if it were important to distinguish (but it is not). The problem here is that you do not challenge the notion whether /usr/local/ would make any sense to begin with.

> /opt is generally for software distros for which you don't have source; only binaries.

Makes no sense. It seems to be about as logical as the FHS "standard". Why would I need to use /opt/? If I install libreoffice or google chrome there under /opt, I can as well install it under e. g. /Programs/ or whatever hierarchy I use for versioned appdirs. Which I actually do. So why would I need /opt/ again?

replies(1): >>hnlmor+If
◧◩◪◨⬒
14. Dylan1+Ac[view] [source] [discussion] 2026-01-04 17:49:29
>>schmuc+4c
Well ProgramData didn't exist when they designed it, and the crime of putting their folder in the wrong place is a pretty minor one. They don't change the permissions of anything outside Steam.

It doesn't "reduce or disable default Windows security settings" in a meaningful way if you say to yourself "that folder effectively is in ProgramData, but spelled wrong".

replies(1): >>schmuc+pe
◧◩◪◨⬒
15. Kruton+9d[view] [source] [discussion] 2026-01-04 17:52:12
>>schmuc+cb
Replaces the GNU Coreutils with the Rusty ones on BSD
replies(2): >>hnlmor+Kg >>LoganD+wm
16. nyrikk+9e[view] [source] 2026-01-04 17:58:16
>>schmuc+(OP)
While practically useless in reality /usr/local is `site-local software`, E.G. software that if you nfs mounted /usr, would be local to the `site` not the machine.

The BSD ports explanation is a bit revisionist I hate to say, this all predates ports.

It was a location in a second stage mount you knew the upstream wouldn’t overwrite with tar or cpio. Later ports used it to avoid the same conflict.

◧◩◪◨⬒⬓
17. schmuc+pe[view] [source] [discussion] 2026-01-04 18:00:49
>>Dylan1+Ac
CSIDL_COMMON_APPDATA is the API call to get this special folder which has been around since <checks notes> Windows 2000, 26 years ago.

You should never hardcode the path since it can and has moved around, though MS has implemented hard links to legacy paths because most developers are stupid and against persistent better advice do it anyway. I've seen multi-million dollar software packages whose vendor requires it to be writable by "Everyone".

Steam was first released in 2003, three years later.

For 80% of grievances about Windows, there is likely a solution in place that no one knows about because they didn't read the documentation.

replies(3): >>Dylan1+em >>Sleake+On >>Brybry+so
18. asveik+we[view] [source] 2026-01-04 18:01:18
>>schmuc+(OP)
I seem to recall Solaris put packages in /opt. Each package got its own prefix under /opt.
◧◩
19. hnlmor+If[view] [source] [discussion] 2026-01-04 18:07:53
>>shevy-+lc
> See, you assume here that /usr/local/ makes any sense.

You’re presenting your comment as a rebuttal but you’re actually arguing something completely different to the OP.

They’re talking about UNIX convention from a historic perspective. Whereas you’re talking about your own opinions about what would make sense if we were to design the file system hierarchy today.

I don’t disagree with your general points, but it also doesn’t mean that the OP is incorrect either.

◧◩◪◨⬒⬓
20. hnlmor+Kg[view] [source] [discussion] 2026-01-04 18:13:37
>>Kruton+9d
Which BSD ships GNU Coreutils?

Every occasion I’ve seen GNU coreutils installed on BSD, it’s been outside of the base and thus installed outside of /bin. Eg /usr/local or /opt/homebrew

21. Uehrek+uh[view] [source] 2026-01-04 18:17:36
>>schmuc+(OP)
I normally wouldn’t be this pedantic, but given that this is a conversation about pedantry it only seems right: you’re using i.e. and e.g. backwards.
replies(1): >>rrauen+Di
◧◩
22. rrauen+Di[view] [source] [discussion] 2026-01-04 18:25:14
>>Uehrek+uh
My mnemonic is “In Essence” and “for EGsample”
replies(2): >>NewJaz+0m >>RickHu+p23
23. aap_+tk[view] [source] 2026-01-04 18:36:04
>>schmuc+(OP)
> This post gets some of the details wrong

"some" is an understatement.

◧◩◪◨
24. LoganD+Gk[view] [source] [discussion] 2026-01-04 18:37:27
>>yjftsj+8a
They're talking about Linux, the kernel. The kernel has no concept of a base system. There is initramfs and init.
replies(1): >>yjftsj+Fr
25. sohrob+Wl[view] [source] 2026-01-04 18:43:52
>>schmuc+(OP)
Now I get what the folks using FreeBSD typically like to point to as a reason why they prefer FreeBSD over Linux because there is a clear distinction between the base system and userland.
replies(2): >>NewJaz+Jm >>asveik+ho
◧◩◪
26. NewJaz+0m[view] [source] [discussion] 2026-01-04 18:44:49
>>rrauen+Di
I just remember the actual words:

* e.g. exempli gratia (or, in Spanish, ejemplo gratis)

* i.e. id est (literally means "that is")

replies(1): >>datafl+It
◧◩◪◨⬒⬓⬔
27. Dylan1+em[view] [source] [discussion] 2026-01-04 18:46:05
>>schmuc+pe
Back when it was actually AppData in the user documents folder, that doesn't seem like the right place to install many gigabytes of games.

And it's the same permissions either way. This isn't about permissions, it's about where they put the folder.

◧◩◪◨⬒⬓
28. LoganD+wm[view] [source] [discussion] 2026-01-04 18:48:20
>>Kruton+9d
BSD has its own coreutils, in fact they even predate GNU.
◧◩
29. NewJaz+Jm[view] [source] [discussion] 2026-01-04 18:50:37
>>sohrob+Wl
Linux has more of a clear distinction between kernel and userspace. But the base system in *BSD includes a lot of userspace, so the API boundary is more the libc and some core libraries (TLS) instead of the kernel ABI.
◧◩◪◨⬒⬓⬔
30. Sleake+On[view] [source] [discussion] 2026-01-04 18:58:23
>>schmuc+pe
And steam was originally released to be compatible with Windows 98. windows 2000 wasn't widely used as a consumer installed OS.
replies(1): >>schmuc+fq
◧◩
31. asveik+ho[view] [source] [discussion] 2026-01-04 19:01:08
>>sohrob+Wl
FreeBSD is moving to a scheme where the base system is managed with pkg. In the release notes for last month's 15.0 release, they suggest that this will be mandatory in 16.0.

The ports tree will still be very different from base, but I feel this may erode some of the difference between FreeBSD and a typical Linux distro in terms of user experience, with respect to base vs ports. You'll update both with pkg.

◧◩◪◨⬒⬓⬔
32. Brybry+so[view] [source] [discussion] 2026-01-04 19:02:33
>>schmuc+pe
Steam's original system requirements in the 2002 beta included Windows 98. [1]

They didn't stop advertising Win98 support until sometime in early 2007.

Granted, Steam back then was a different creature than Steam now.

[1] https://web.archive.org/web/20020605222619/http://www.steamp...

replies(1): >>schmuc+Np
◧◩◪◨⬒⬓⬔⧯
33. schmuc+Np[view] [source] [discussion] 2026-01-04 19:11:28
>>Brybry+so
So you're saying they've had 18+ years to remove legacy cruft put in there to support a nearly 28 year old legacy OS that had no real multi-user support and basically zero security?
replies(1): >>Gabrie+VC
◧◩◪◨⬒⬓⬔⧯
34. schmuc+fq[view] [source] [discussion] 2026-01-04 19:14:30
>>Sleake+On
> windows 2000 wasn't widely used as a consumer installed OS

But Windows XP, which came out in 2001, inherited everything from Windows 2000 and more, and was used extensively for gaming.

replies(1): >>Sleake+DN1
35. ajross+Qq[view] [source] 2026-01-04 19:19:29
>>schmuc+(OP)
> Linux has no concept of a base system, it's a stand-alone kernel with a hodgepodge of crap around it

Good grief. How does this end up as the top comment on HN of all places? I'll bet anything that this author also thinks that systemd is way too opinionated and unified and that the system needs a less coupled set of init code.

Edit to be at least a tiny bit more productive: the Linux Filesystem Hierarchy Standard is about to pop the cork on its thirty second birthday. It's likely older than most of the people upvoting the post I responded to. https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

To wit: that's outrageous nonsense, and anyone who know anything about how a Linux distro is put together (which I thought would have included most of the readers here, but alas) would know that.

◧◩◪◨⬒
36. yjftsj+Fr[view] [source] [discussion] 2026-01-04 19:25:20
>>LoganD+Gk
Okay, that's true but other than the slight semantic point of "Linux" vs a "Linux distro" or "GNU/Linux" I don't think it matters. Whatever words you use to describe it, there is a base OS which is composed of a variety of components from different sources but which ultimately amounts to a single thing.
replies(1): >>LoganD+ox
◧◩◪◨
37. datafl+It[view] [source] [discussion] 2026-01-04 19:35:24
>>NewJaz+0m
"example given" is what I've found easiest to remember.
◧◩◪◨⬒⬓
38. LoganD+ox[view] [source] [discussion] 2026-01-04 20:00:39
>>yjftsj+Fr
> there is a base OS

In most distributions yes, there is Linux and then there is userspace on top of it. What you call "base system" is actually part of userspace, which has nothing to do with Linux itself.

replies(1): >>yjftsj+ry
◧◩◪◨⬒⬓⬔
39. yjftsj+ry[view] [source] [discussion] 2026-01-04 20:08:37
>>LoganD+ox
No, what I call the "base system" is the result of running debootstrap, and encompasses all the packages that make a complete operating system. The kernel is just one part of the OS.
◧◩◪◨⬒⬓⬔⧯▣
40. Gabrie+VC[view] [source] [discussion] 2026-01-04 20:40:41
>>schmuc+Np
Moving away from Program Files would cost far more than it's worth - it'd cause lots of issue for a massive amount of users and be of very little value for others, when the only practical issue with the Steam folder being in Program Files right now is people going "oh I didn't expect that directory to be writable I guess" which is not something worth spending a bunch of time orchestrating a massive transition over.
replies(1): >>schmuc+9M
◧◩◪◨⬒
41. immibi+gD[view] [source] [discussion] 2026-01-04 20:43:15
>>schmuc+4c
Really? Programs installed by non-administrators should go in ProgramData?

The actual solution, which remains both compatible and consistent with the security model, is that you should have to be administrator and pass UAC to install a game, just like you do to install anything else.

◧◩◪◨⬒⬓⬔⧯▣▦
42. schmuc+9M[view] [source] [discussion] 2026-01-04 21:34:00
>>Gabrie+VC
It's literally in the name: PROGRAM files. It was never meant to store variable data.

It's also assumed that its contents can be safely restored from original sources, so Program Files is often not backed up - because it's wasteful and not needed.

Rogue developers thinking they know better than the people who actually designed the system and ignoring the rules put in place is the source of an untold number of problems in the software world. It's absolutely stupid and I have no empathy for the problems caused as a result of their laziness. This attitude is why modern Linux is a complete clusterfuck, a free-for-all with components duct taped together every which way. Do it right or don't do it at all.

replies(1): >>Dylan1+uX
◧◩◪◨⬒⬓⬔⧯▣▦▧
43. Dylan1+uX[view] [source] [discussion] 2026-01-04 22:50:39
>>schmuc+9M
How are the games not programs?

The save files don't go in the steam folder, they go into per-user Documents or AppData.

replies(1): >>imtrin+b12
◧◩◪◨⬒⬓⬔⧯▣
44. Sleake+DN1[view] [source] [discussion] 2026-01-05 08:22:37
>>schmuc+fq
Absolutely and first iterations of steam hardware survey showed mostly XP users, but still 5-7% win 98 install base, which they maintained compatibility with for quite a while, that's just to say that I can see why they might not have used those specific windows APIs at the start.
◧◩◪◨⬒⬓⬔⧯▣▦▧▨
45. imtrin+b12[view] [source] [discussion] 2026-01-05 10:43:21
>>Dylan1+uX
There is something oddly satisyfing that in 2026, there are people out there complaining that Steam installs programs into Program Files.
46. xattt+Zm2[view] [source] 2026-01-05 13:44:55
>>schmuc+(OP)
So, in Debian, where should I be placing a Firefox tarball I download from Mozilla’s site?

It is open-source, and I can get source files, but it’s precompiled…

replies(1): >>SAI_Pe+Ez2
◧◩
47. SAI_Pe+Ez2[view] [source] [discussion] 2026-01-05 14:54:14
>>xattt+Zm2
Anywhere in your `$PATH` that isn't managed by `apt`/`dpkg`. E.g. add `~/bin` to your `$PATH`, and install it in there. No risk of overwriting files the system package manager manages & having manually-installed software break next time it updates them.
◧◩◪
48. RickHu+p23[view] [source] [discussion] 2026-01-05 16:52:04
>>rrauen+Di
I like: "In Ether words" and "Example Given"
49. JdeBP+cp5[view] [source] 2026-01-06 09:28:43
>>schmuc+(OP)
The problems with what you say are that:

1. The history of /usr subdirectories is a lot more complex than that. There was a /usr/lbin once, for example.

1. /usr/local is not where third party softwares from packages/ports go on "the BSDs". On NetBSD, they go in /usr/pkg instead, again exemplifying that this is quite complex through history and across operating systems.

[go to top]