|
|
Subscribe / Log in / New account

Finding a successor to the FHS

By Joe Brockmeier
August 15, 2025

The purpose of the Filesystem Hierarchy Standard (FHS) is to provide a specification for filesystem layout; it specifies the location for files and directories on a Linux system to simplify application development for multiple distributions. In its heyday it had some success at this, but the standard has been frozen in time since 2015, and much has changed since then. There is a slow-moving effort to revive the FHS and create a FHS 4.0, but a recent discussion among Fedora developers also raised the possibility of standardizing on the suggestions in systemd's file-hierarchy documentation, which has now been added to the Linux Userspace API (UAPI) Group's specifications.

FSSTND to FHS 3.0

Efforts to standardize directory structure and file placement for Linux systems go back to the earliest days of distributions. The Filesystem Standard (FSSTND) 1.0 was released in 1994; it was developed as "a consensus effort of many Linux activists", and coordinated by Daniel Quinlan. In the preface to the document, which can be found in this directory, it noted that the "open and distributed process" of Linux created a need for a standardized structure of the filesystem:

This will allow users, developers, and distributors to assemble parts of the system from various sources that will work together as smoothly as if they had been developed under a monolithic development process. It will also make general documentation less difficult, system administration more consistent, and development of second and third party packages easier.

It was supplanted by the FHS 2.0 in 1997. Version 2.3, the last in the 2.x series, was announced in 2004. Eventually the work moved under the auspices of the Linux Foundation (LF), as part of the Linux Standard Base (LSB) effort, which was a project that attempted to promote open standards to improve compatibility between Linux distributions. In addition to filesystem layout, the LSB specified standard libraries, run levels, and so forth. The LF released FHS 3.0 in 2015.

The FSSTND and FHS specifications described the layout of the filesystem as well as the files and commands that should exist on a conformant system. It describes the expected structure of everything under root ("/"), which directories should be present on a local system or those that can be shared via NFS or similar, and more. For example, the FHS describes the /bin directory as well as all of the commands—such as cp, ls, and mv— that are expected to exist there.

One might question whether any of the various standards succeeded in making open-source projects work together as envisioned; but we can also imagine how chaotic things would be if there had been no FHS at all. Now, however, the standard has been frozen in time for a decade while Linux development has continued apace.

The FHS is not just old at this point: everyone involved seems to have packed up and gone home. The fhs-discuss mailing list that was hosted by the LF appears to have been retired and LSB maintainer Mats Wichmann wrote in 2023 that "the LSB project is essentially abandoned".

Last year, postmarketOS core developer Pablo Correa Gomez and a few others started an effort to move the FHS work under the freedesktop.org banner and create 4.0 of the standard. There has been some sporadic activity and discussion; the project has a handful of issues open, but little real progress has been made so far. In fact, the discussions under the project had been stalled for months until the topic was raised on a Fedora list.

FHS or UAPI?

On August 5, Pavol Sloboda asked on the fedora-devel mailing list whether Fedora's packaging guidelines were referring to FHS 2.3 or 3.0. The filesystem layout section of the guidelines only links to the landing page of the FHS specification archive, where both 2.3 and 3.0 are linked. Sloboda was trying to figure out whether it was acceptable to create directories inside /usr/bin. He said that the 3.0 version prohibits directories inside /usr/bin, but 2.3 does not.

Michal Schorm said that the project should officially adopt FHS 3.0 and create a list of exceptions where Fedora intentionally deviates from the standard. Zbigniew Jędrzejewski-Szmek, though, said that even FHS 3.0 had missed much of the evolution of Linux systems:

In particular, it completely missed the usr-merge, and obviously the merge of bin and sbin… Just looking at the contents table, it is full of outdated stuff, it talks about /mnt and /media, without the understanding that *temporary* paths need to go under /run instead of polluting the root file system.

Some of the FHS is useful, he conceded, but it is now "mostly of historical interest". He said that Fedora should just use the systemd file-hierarchy. He later suggested that the document should be moved out of systemd's repository and made part of the UAPI Group's specifications; that was done on August 8. Michael Catanzaro said that the UAPI group was "clearly the right place for the successor to FHS".

It is worth noting that the systemd/UAPI file-hierarchy is based in part on the FHS, XDG Base Directory Specification, and XDG User Directories. It does not attempt to be as comprehensive as the FHS; it "only documents a skeleton of a directory tree, that downstreams can extend". It does not, for example, provide any guidance about what binaries are to be expected on a compliant system.

Neal Gompa, who is participating in the FHS 4.0 effort, disagreed, saying that the UAPI "isn't a neutral space: it's a systemd-driven project". He added that he has no "particular beef" with systemd, but it is not used by everyone. Luca Boccassi argued that the file-hierarchy documentation was not systemd-only:

For example, one of the specs (config files) is driven mainly by libeconf which is completely unrelated to systemd and which is used by many projects (and not by systemd) [...]

None of the specifications mentioned on this website require systemd for anything.

Both Boccassi and Jędrzejewski-Szmek expressed skepticism about the FHS 4.0 effort's progress thus far.

Change coming?

Jędrzejewski-Szmek has opened a ticket with Fedora's packaging committee to update Fedora's guidelines to point to that document instead. He added that the UAPI guidelines describe what Fedora is doing anyway, so "this doesn't introduce any new rules, only drops some baggage that we were ignoring anyway". If the packaging committee agrees, Fedora could be the first distribution to officially adopt the file-hierarchy specification. In his most recent comment on the ticket, Jędrzejewski-Szmek said that by linking to UAPI guidelines "we make it more likely that other distributions will follow the same rules", and Fedora does not need to duplicate the work.

It remains to be seen, of course, whether other distributions will want to follow Fedora's lead. Currently, Debian uses the FHS 3.0, with a number of exceptions or additions in its policy manual. Gentoo, rather emphatically, does not adhere to the FHS; its developer guide spells out where files should be placed on Gentoo systems. According to openSUSE's guidelines for RPM packaging, it also follows the FHS; but, like Fedora, openSUSE does not link to a specific version, leaving it open to question whether it refers to 3.0. (In fact, openSUSE links to a wiki page that still mentions the 3.0 as being developed, rather than completed.) Ubuntu's packaging guidelines also refer to the FHS, without specifying the version.

It may be that the need for a universal Linux filesystem standard has waned; while it is important for distribution packages to have an agreed-on standard, there's far less emphasis on creating native distribution packages for third-party software in 2025. Flatpaks, Snaps, and AppImage packages seem more popular with desktop-application developers these days. A lot of server-side software is now expected to be deployed as a container—or a group of containers run in Kubernetes—rather than installed as a package.

Perhaps, at some point, the FHS revival will bear fruit as a meaningful update to the standard. Until then, the UAPI documentation is the only current game in town.



to post comments

Containers

Posted Aug 15, 2025 15:40 UTC (Fri) by claudex (subscriber, #92510) [Link] (1 responses)

> A lot of server-side software is now expected to be deployed as a container—or a group of containers run in Kubernetes—rather than installed as a package.

While I'll agree with this, I don't think it render the FHS useless. The same application can be distributed as multiple version, we can often see that there are a musl/alpine version and a glibc version (debian/ubuntu/...). I've also seen application based on Redhat UBI for the version usable on Openshift and the version for other Kubernetes distribution based on ubuntu for example. So I think the FHS is still useful for these use case, even if there is no package for the application with deb/rpm, it's useful to easily deploy the application on different distributions without major tweaks on the installation.

Containers

Posted Aug 19, 2025 2:40 UTC (Tue) by redbeard (guest, #74129) [Link]

I would concur with your assessment. I regularly reference it's utility in bug reports like this one - https://codeberg.org/forgejo/forgejo/issues/6031#issuecom...

hope not tied to SystemD

Posted Aug 15, 2025 20:57 UTC (Fri) by atai (subscriber, #10977) [Link] (81 responses)

Hope any new standard is not based on SystemD but nature of the init system

hope not tied to SystemD

Posted Aug 15, 2025 21:11 UTC (Fri) by pizza (subscriber, #46) [Link] (56 responses)

"Hope any new standard is not based on SystemD but nature of the init system"

What does "nature of the init system" mean in this context?

hope not tied to SystemD

Posted Aug 15, 2025 21:18 UTC (Fri) by atai (subscriber, #10977) [Link] (55 responses)

Sorry I meant the standard shall not be tied to particular init system, which shall not control the file system layout in any way.

hope not tied to SystemD

Posted Aug 15, 2025 22:14 UTC (Fri) by Wol (subscriber, #4433) [Link]

Given the mess that was SysVInit, almost anything would be an improvement ...

How many different places did you have to visit to change the hostname, for example ...

Cheers,
Wol

hope not tied to SystemD

Posted Aug 15, 2025 23:10 UTC (Fri) by NYKevin (subscriber, #129325) [Link] (52 responses)

Reading through the standard[1], it mentions systemd in a few places. Some of these are fairly harmless (e.g. the vast majority of "reasonable" application packages will not need to care about exactly how /dev is managed, so the fact that the standard says it's done with systemd-udevd(8) is unlikely to cause compatibility issues, unless you do something silly like trying to install two different udev-like things at the same time). However, the document recommends the use of systemd-path(1) and other systemd facilities in several places, and I think that is more likely to be a sticking point.

I can see a few different options here:

* Rephrase all mentions of systemd as non-normative descriptions of how that particular implementation does it, rather than normative specifications of how it must be done, similar to the Boot Loader spec[2]. I see this as a dispreferred option because it would leave a few subdirectories with no portable means of discovery, most significantly /usr/lib/arch-id and its cousins.
* The man page for systemd-path says that it parses environment variables rather than talking to systemd. So it should be possible to replace all mentions of this binary with references to the corresponding environment variables. It might still be a good idea to say that systemd-path exists and can be used when systemd is installed, for the convenience of systemd users. But that will depend on whether non-systemd distros routinely set all of the relevant environment variables, with the same names and values. It may be the case that some things just can't be done portably.
* Remove all mentions of systemd entirely. This is strictly worse than rephrasing, because now *nobody* can find /usr/lib/arch-id, not even the systemd users.

[1]: https://uapi-group.org/specifications/specs/linux_file_system_hierarchy/
[2]: https://uapi-group.org/specifications/specs/boot_loader_specification/

hope not tied to SystemD

Posted Aug 16, 2025 7:48 UTC (Sat) by zuki (subscriber, #41808) [Link] (19 responses)

systemd-path provides a scriptable API for the paths listed in the spec. It has systemd in the name because it is part of the systemd project and we try to avoid namespace pollution.

udevd/systemd-udev is mentioned because it is *the* way that /dev is populated. Not mentioning it by name would be a poinless exercise in obfuscation.

Overall, I find it hard to see what to improve based on your comment. If you have something, please suggest a specific change. Or even better, just make a pull request.

hope not tied to SystemD

Posted Aug 16, 2025 9:25 UTC (Sat) by Wol (subscriber, #4433) [Link] (15 responses)

> udevd/systemd-udev is mentioned because it is *the* way that /dev is populated. Not mentioning it by name would be a poinless exercise in obfuscation.

Actually, mentioning systemd-udev is the pointless exercise. If I don't know (what is) systemd-udev, then that phrase is totally meaningless to me. You're promoting mechanism over policy, and in what is meant to be a specification that any system can implement that is BAD.

Remember back to the document format "wars". The official interoperable document definition is full of stuff like "Do it like Office 95 does it". Do we really want to be guilty of the same crap we were blaming Microsoft for? Or is the real reason likely the same reason we have all that Office 95 crap in the document spec - nobody actually knows how systemd-udev does it :rofl:

At the end of the day, saying "populate it with systed-udev" is dictating mechanism, where the spec should actually be stating policy.

Cheers,
Wol

hope not tied to SystemD

Posted Aug 16, 2025 11:53 UTC (Sat) by pizza (subscriber, #46) [Link] (14 responses)

> Actually, mentioning systemd-udev is the pointless exercise. If I don't know (what is) systemd-udev, then that phrase is totally meaningless to me.

As the saying goes, "you must be at least <this> tall to get on this ride"

If you don't know what systemd-udev is, you probably shouldn't be putting together something that requires either setting things up in /dev or even referencing things in /dev. Or heck, most of what the FHS covers... and, going back to TFA, doesn't cover but is still necessary to know if you want your stuff to work on a general purpose linux system.

hope not tied to SystemD

Posted Aug 16, 2025 13:21 UTC (Sat) by Wol (subscriber, #4433) [Link] (4 responses)

And if your system runs OpenRC? Okay, mine should by default (I've changed it to systemd), but there are other init systems out there, and it's quite possible to have a linux system without systemd-udev. Expecting someone (even with a lot of admin experience) running one of those to have a detailed knowledge of systemd-udev is unreasonable.

At the end of the day, you shouldn't be saying "do it like systemd-udev". You should be saying "this is what systemd-udev does". Same end result, but policy not mechanism.

Cheers,
Wol

hope not tied to SystemD

Posted Aug 16, 2025 14:28 UTC (Sat) by pizza (subscriber, #46) [Link] (2 responses)

> At the end of the day, you shouldn't be saying "do it like systemd-udev". You should be saying "this is what systemd-udev does".

The thing is, systemd-udev is literally the canonical udev implementation. Every other has to behave the same way or $badness happens.

So sure, I guess they could cut-and-paste the systemd-udevd documentation and do a global search-and-replace of the name with "the implementation". Or maybe just incorporate it via reference.

hope not tied to SystemD

Posted Aug 17, 2025 1:07 UTC (Sun) by NYKevin (subscriber, #129325) [Link] (1 responses)

I would do neither of those things.

Currently, this section of the standard reads as follows:

> /dev/
>
> The root directory for device nodes. Usually, this directory is mounted as a devtmpfs instance, but might be of a different type in sandboxed/containerized setups. This directory is managed jointly by the kernel and systemd-udevd(8), and should not be written to by other components. A number of special purpose virtual file systems might be mounted below this directory.

Frankly, this is basically fine. As I said, the mention of systemd is incidental and not really relevant to application developers anyway.

But if "basically fine" is not good enough, and if we insist on making it perfect, you could argue for changing it to the following:

> /dev/
>
> The root directory for device nodes. Usually, this directory is mounted as a devtmpfs instance, but might be of a different type in sandboxed/containerized setups. This directory is managed jointly by the kernel and a userspace component such as systemd-udevd(8), and should not be written to by other components. A number of special purpose virtual file systems might be mounted below this directory.

Maybe also add a paragraph like this:

> The userspace component responsible for managing this directory is considered an implementation detail. Portable applications should not make assumptions about the nature or behavior of said component, unless the application takes a dependency on systemd or some other specific implementation.

But there is absolutely no need to go into exhaustive detail of exactly how systemd happens to do this. What matters is that:

1. Device files live in /dev/.
2. The host environment or "operating system," broadly construed, is responsible for managing those device files.
3. If you're an application developer, this is not your problem to deal with. Don't try to do anything clever, just open the device file you want to use.
4. ...unless you're willing to take a systemd dependency, then of course you can assume systemd-specific behaviors.

hope not tied to SystemD

Posted Aug 25, 2025 16:32 UTC (Mon) by pj (subscriber, #4506) [Link]

I want to +1 this so hard. Yes. Policy over mechanism, but policy can _refer_ to existing mechanisms.

hope not tied to SystemD

Posted Aug 16, 2025 18:33 UTC (Sat) by bluca (subscriber, #118303) [Link]

It doesn't say anything like that, maybe give it a read first?

hope not tied to SystemD

Posted Aug 16, 2025 14:30 UTC (Sat) by Wol (subscriber, #4433) [Link]

> If you don't know what systemd-udev is,

Actually, do even you know what systemd-udev is, eg what version, what tag in git, yada yada it is that they're referring to?

Simply saying "do it like systend-udev", or "with systemd-udev", is handing the ability to change the formal specification to any old tom dick or harry who happens to submit an update, bug fix or whatever, quite possibly without any idea whatsoever that he's actually modifying a formal spec! At least the Office spec says "like Office 95", even if nobody has a clue what Office 95 actually does :-)

That's why the UEFI specification is careful to lock down the exact version of the FAT-32 or FAT-16 specification it's referring to, so any updates to FAT can't unintentionally update UEFI at the same time ...

Cheers,
Wol

hope not tied to SystemD

Posted Aug 17, 2025 12:17 UTC (Sun) by kreijack (guest, #43513) [Link] (7 responses)

> > Actually, mentioning systemd-udev is the pointless exercise. If I don't know (what is) systemd-udev, then that phrase is totally meaningless to me.
> [...]
> If you don't know what systemd-udev is, you probably shouldn't be putting together something that requires either setting things up in /dev or even referencing things in /dev.

Being a specification, it is the opposite: *udev should refer to this specification for its behavior. And the same of course should do the developer of an application.

The point is important, because a developer want to know what can assume and what can't. E.g. it is important to know if a developer can assume that /dev/disk/by-label/... exists in any environment or he can assume that only /dev/sd* (and all its variant like /dev/mmcblk* /dev/hd*) exist. May be some environments (e.g. embedded) prefer a static /dev instead a dynamic one populated by udev.

It is fine even saying something like: "
- /dev/ is populated by the devices seen by the kernel; depending by the environment it can be a static directory or a dynamic one populated by *udev.
- /dev/disks is populated by the devices seen by the kernel; it is managed by udev; in environment where udev is not used it doesn't exist"

The point is to highlight what can be assumed, and what may be assumed. It is even reasonable to say: "this specification doesn't cover /dev". But saying "see *udev for /dev" doesn't clarify what a developer can assume or not. Which for a specification is a failure.

hope not tied to SystemD

Posted Aug 17, 2025 14:27 UTC (Sun) by pizza (subscriber, #46) [Link] (6 responses)

> The point is important, because a developer want to know what can assume and what can't.

Please read what I wrote, and to what I was responding.

If you don't know what systemd-udev is, and you are putting together something that needs to interact with /dev in some way, then that is a sign that you are missing on some foundational knowledge about how Linux systems have been put together for the past *two decades* and need remedial education before you should proceed.

Yes, two decades is longer than systemd itself has existed -- systemd-udevd is, for all intents and purposes, the continuation of the original udev, the latter having been subsumed into the systemd repository over 13 years ago [1].

Like it or not, systemd underpins the _overwhelming majority_ of non-android/non-embedded [2] Linux [3] installations today, and probably >99% of commercially-relevant installations. For all intents and purposes, it can be generally assumed to exist if you are writing something intended to be deployed on Linux. Frankly, leaving systemd's basic services out of a new baseline "this is what application writers can rely upon" spec is completely nonsensical, and is tantamount to ignoring the past 15 years of platform development.

[1] https://lwn.net/Articles/499480/
[2] Ie where Linux is not considered a hidden implementation detail
[3] Non-linux systems diverge wildly once you venture beyond what POSIX requires. Where hardware interaction is concerned, ie where interaction with /dev comes into play, every major OS family (even in the UNIXish world) does things its own way.

hope not tied to SystemD

Posted Aug 18, 2025 4:34 UTC (Mon) by alx.manpages (subscriber, #145117) [Link] (3 responses)

> systemd underpins the _overwhelming majority_ of non-android/non-embedded [2] Linux [3] installations today

> and probably >99% of commercially-relevant installations.

I'd like to remind that many Linux users are hobbyists and we should not stop supporting them. And that distros that avoid systemd also exist (I use one of them).

hope not tied to SystemD

Posted Aug 18, 2025 13:06 UTC (Mon) by pizza (subscriber, #46) [Link] (2 responses)

> I'd like to remind that many Linux users are hobbyists and we should not stop supporting them. And that distros that avoid systemd also exist (I use one of them).

Who is that "we" you refer to, and why are you volunteering them for additional work?

Do you think that "we" should still be actively supporting retrocomputing folks that intentionally run hardware that was discontinued at least two decades ago? What about Debain/KFreeBSD or Hurd? All of those users are hobbyists too!

Supporting a bajillion snowflake environments is why applications using autotools (not to mention autotools itself) are baroque messes. That complexity mattered at one point ("it's where most of the users are"), but is it really worth spending time to ensure folks running ancient proprietary UNIXes [1] can use the latest software? (Mainline Linux just dropped support for anything older than 2nd-gen Pentium processors for similar reasons!)

Given that you only have limited resources (time/effort/money) at your disposal, you can't support everyone, so you draw the line to get the best return on what you can do. Given that systemd has been the default (or only) option for anything resembling mainstream released [2] or still supported [3] in the past decade, maybe that is where your attention should be focused instead of (more than) doubling your effort to support the remaining few percent.

...To throw out another analogy -- Do you really expect a typical automobile mechanic today to be able to readily diagnose the kinds of malaises common with complex smog-era carburettors, given that the the final vehicle sold with one was in 1994 [4]? Or would you go to a specialist (or become the specialist yourself) as that is the price you're (literally) having to pay for your hobby?

[1] Keep in mind that these systems can be _emulated_ faster (and with vastly more memory and other resources) than the real hardware could ever achieve.
[2] Debian was the final holdout, and even then its non-systemd paths have been slowly bitrotting because the folks complaining are rarely the ones *doing*.
[3] As of today, the only commercial non-systemd options are supported only via very pricey "extended support" offerings. Nobody is going to be setting up _new_ systems with (or writing/porting new software to) RHEL6 without a pretty substantial budget or the understanding they are completely on their own.
[4] Most of the industry had completely switched to fuel injection by the late 80s, though a few stragglers held on into the early 1990s. The final carburettor-equipped vehicle sold in the US was the 1994 Isuzu "Faster" pickup truck.

hope not tied to SystemD

Posted Aug 18, 2025 18:02 UTC (Mon) by alx.manpages (subscriber, #145117) [Link] (1 responses)

> Who is that "we" you refer to, and why are you volunteering them for additional work?

Open source project maintainers in general.

And in particular, anyone attempting to replace the FHS 3.0, which I still try to follow as much as I can (with sane deviations, of course). Is it so much work to support those in a file-system hierarchy standard? I bet the differences are rather small.

> Do you think that "we" should still be actively supporting retrocomputing folks that intentionally run hardware that was discontinued at least two decades ago? What about Debain/KFreeBSD?

No. Hardware/software that was discontinued long ago is dead to me.

In general, maintaining support for those systems is a lot of work, and results in less safe code (for example, 32-bit code is prone to bugs). That's something I don't mess with.

> or Hurd? All of those users are hobbyists too!

I receive patches from GNU/Hurd maintainers when software that I co-maintain doesn't work in Hurd. I appreciate their effort in making it work, and accept those patches. After all, it's not too much; often, it's just a macro that in Hurd is not defined, so we define a fallback ourselves. Hurd is not discontinued, and not unsafe, so I help them.

> Given that systemd has been the default (or only) option for anything resembling mainstream released [2] or still supported [3] in the past decade, maybe that is where your attention should be focused instead of (more than) doubling your effort to support the remaining few percent.

Someone in this thread reminded that Gentoo doesn't use systemd by default. That's a system I would consider mainstream.

I personally use Devuan, and I'm happy with it. It works.

hope not tied to SystemD

Posted Aug 18, 2025 20:20 UTC (Mon) by pizza (subscriber, #46) [Link]

> > Who is that "we" you refer to, and why are you volunteering them for additional work?
> Open source project maintainers in general.

"Open source project maintainers in general" don't owe you (or anyone else) anything.

You don't get to tell them, collectively or individually, what they should or should not be spending their time doing.

(Unless you're paying them)

> Someone in this thread reminded that Gentoo doesn't use systemd by default. That's a system I would consider mainstream.

Don't equate "familiarity" with "mainstream" -- Gentoo explicitly targets folks that already know enough to be able to make (and deal with the consequences of) the multitude of choices that it enables/provides. Whereas the "mainstream" just wants "something that works".

hope not tied to SystemD

Posted Aug 18, 2025 14:12 UTC (Mon) by kreijack (guest, #43513) [Link] (1 responses)

> If you don't know what systemd-udev is, and you are putting together something that needs to interact with /dev in some way, then that is a sign that you are missing on some foundational knowledge about how Linux systems have been put together for the past *two decades* and need remedial education before you should proceed.

I am perfectly fine with udev. This is not the point of discussion. The point of discussion is *IF* a specification should leverage or not on udev when we are talking about /dev

FHS should define what users and/or developers should expect from the filesystem. If it is not possible, the specification should either:
1) explicitly state that it is out of scope,
or 2) point ti another specification

Both approaches are acceptables.
It has to be point out that udev is an *implementation*, not a *specification*, and leveraging to udev is an mistake because understanding what udev does is possible only reading the source/man page/configuration files which is an activity long and errors prone.

Therefore, the most appropriate course of action would be to leave /dev device management out of scope for this specification, rather than deferring to an implementation like udev.

hope not tied to SystemD

Posted Aug 18, 2025 17:58 UTC (Mon) by zuki (subscriber, #41808) [Link]

FWIW, "systemd-udev" is a hyperlink in the text, so people who do not know are not sure can always follow the link and read…

The text in question just says that /dev is managed in cooperation by kernel and systemd-udevd, without saying anything about how this is done and how udev should behave. So the whole discussion seems a bit pointless. We certainly don't want to describe the details of udev in the page about file hierachy.

Anyway, https://github.com/uapi-group/specifications/pull/157 is now up with some rewordings based on the discussion and suggestions here.

hope not tied to SystemD

Posted Aug 16, 2025 15:21 UTC (Sat) by mgb (guest, #3226) [Link] (1 responses)

> udevd/systemd-udev is mentioned because it is *the* way that /dev is populated.

So the "standard" changes every time udev changes and *the* one true standard way that /dev is populated is in fact determined by a thousand lines of rules in half a hundred rules files in /etc and /usr/lib ?

Do I need to switch from stable to unstable so that I can update my udev package roughly 40 times in the last 12 months to maintain compliance with this standard?

hope not tied to SystemD

Posted Aug 16, 2025 18:35 UTC (Sat) by bluca (subscriber, #118303) [Link]

You should read something before you criticize it going off solely by some off-hand comment. If you do that, you'll see that nothing you said has any relations with it.

hope not tied to SystemD

Posted Aug 17, 2025 0:46 UTC (Sun) by NYKevin (subscriber, #129325) [Link]

Either replace the following with something that does not depend on systemd, or add a vendor-neutral alternative:

> To query $libdir for the primary architecture of the system, invoke:
>
> systemd-path system-library-arch

Currently, no alternative is provided, and systems that lack systemd altogether cannot support this interface.

hope not tied to SystemD

Posted Aug 16, 2025 9:56 UTC (Sat) by bluca (subscriber, #118303) [Link] (30 responses)

> However, the document recommends the use of systemd-path(1) and other systemd facilities in several places, and I think that is more likely to be a sticking point.

It shouldn't be for any reasonable reader, and unreasonable ones will never be happy anyway.

Mentioning real-world tools like systemd-path as examples of things that can be used, rather than as normative things to follow, is useful and informative, as it suggests an immediate and practical way to interact with the specification.

This spec is very much intended to be user-facing as well, so that if one wonders what is what on their system, it can be used to find out.

hope not tied to SystemD

Posted Aug 17, 2025 0:44 UTC (Sun) by NYKevin (subscriber, #129325) [Link] (29 responses)

> Mentioning real-world tools like systemd-path as examples of things that can be used, rather than as normative things to follow, is useful and informative

Agreed. Unfortunately, that is not what the standard says. For example:

> To query $libdir for the primary architecture of the system, invoke:
>
> systemd-path system-library-arch

No alternative mechanism is provided. If you can't invoke systemd-path (because it is not installed), then per the standard, you just can't find that directory at all.

hope not tied to SystemD

Posted Aug 17, 2025 10:11 UTC (Sun) by bluca (subscriber, #118303) [Link] (28 responses)

Of course you can, you just have to use a different mean to derive it. If your vendor doesn't want to ship that tool to you, they can make available another mechanism.

hope not tied to SystemD

Posted Aug 17, 2025 14:36 UTC (Sun) by Wol (subscriber, #4433) [Link] (27 responses)

But the point is, the standard is specifying mechanism. It shouldn't - it should be specifying policy.

If I read THE STANDARD, and my system does not provide systemd and its assorted bits and pieces, then I'm up a gum tree. Isn't the point of standards to avoid such gum tree messes? Yes yes real world cough cough it doesn't always work ... but that is a pretty blatant failure of the standards process!

Cheers,
Wol

hope not tied to SystemD

Posted Aug 17, 2025 14:55 UTC (Sun) by bluca (subscriber, #118303) [Link] (10 responses)

> But the point is, the standard is specifying mechanism. It shouldn't - it should be specifying policy.

No, it mentions whatever we find useful to mention and is in scope. And for normal users this is useful information.

If it offends the feelings of a couple of antis, well, they'd be offended anyway, so why bother and make things worse for nearly everyone in a futile attempt to satisfy a handful of loudmouths who will never be satisfied anyway? Makes zero logical sense

hope not tied to SystemD

Posted Aug 17, 2025 18:18 UTC (Sun) by NYKevin (subscriber, #129325) [Link] (9 responses)

Please stop putting words in my mouth. I never said there was anything wrong with mentioning systemd. I'm simply of the opinion that systemd should not be described as the one and only way of obtaining a specific piece of information, as it makes all non-systemd distros inherently non-compliant with the spec. That would be fine if this was a systemd spec, but it is a UAPI spec.

hope not tied to SystemD

Posted Aug 17, 2025 20:25 UTC (Sun) by Wol (subscriber, #4433) [Link] (1 responses)

What's the organisation that refused to standardise anything unless there were TWO independent implementations?

As I said before, we screamed blue murder about the amount of Office XML stuff that was defined as "what Office 95 does". Why are we now doing exactly the same thing and defining something as "what systemd does".

And again as I said, do we want to give any Tom Dick or Harry the power to change the defined standard - quite possibly without realising that's what they're doing - just by submitting a bugfix or enhancement to the definition?

It's shades of the C specification saying "we defer to the platform standard", when the Posix platform standard says "we defer to the official C specification". The end result is a definition that cannot be trusted to (a) be easily understood, and (b) to be trusted to remain (mostly) immutable.

Cheers,
Wol

hope not tied to SystemD

Posted Aug 17, 2025 21:34 UTC (Sun) by pizza (subscriber, #46) [Link]

> As I said before, we screamed blue murder about the amount of Office XML stuff that was defined as "what Office 95 does". Why are we now doing exactly the same thing and defining something as "what systemd does".

Putting aside the minor detail that "the amount" referenced above was actually just _once_ [1], there is a _major_ difference between saying "do what <proprietary undocumented thing> does" and "do what <a heavily-documented component of a Free Software tool that ~98.76% of the intended audience has been using for over a decade> does"

[1] 2.15.3.26 footnoteLayoutLikeWW8

hope not tied to SystemD

Posted Aug 17, 2025 22:15 UTC (Sun) by bluca (subscriber, #118303) [Link] (6 responses)

> as it makes all non-systemd distros inherently non-compliant with the spec

No? The spec is about directories. Tools are not part of it, they are useful ancillary information. The spec is called "Linux Filesystem Hierarchy" not "tools to print directories"

hope not tied to SystemD

Posted Aug 18, 2025 3:39 UTC (Mon) by NYKevin (subscriber, #129325) [Link] (5 responses)

The spec says that the only way to discover the location of /usr/lib/arch-id is to run a systemd command, as I said upthread[1]. No alternative is provided, so on systems that lack systemd, there is simply no specification of where this directory is located or how to find it. The same also goes for the .../lib/arch-id subdirectories in other parts of the filesystem.

[1]: https://lwn.net/Articles/1034093/

hope not tied to SystemD

Posted Aug 18, 2025 8:02 UTC (Mon) by gdiscry (subscriber, #91125) [Link]

The spec says that arch-id in $libdir is an architecture tuple:

The architecture identifier to use is defined on Multiarch Architecture Specifiers (Tuples) list.

The issue is that some distributions do not use that path:

Legacy locations of $libdir are /usr/lib/, /usr/lib64/.

Therefore, systemd-path is currently one way to query the path of $libdir at runtime across distributions that use systemd.

You could also use the first existing directory:

  1. /usr/lib/arch-id/
  2. /usr/lib64/ (if your architecture is x86_64)
  3. /usr/lib/

hope not tied to SystemD

Posted Aug 18, 2025 8:49 UTC (Mon) by bluca (subscriber, #118303) [Link] (3 responses)

> The spec says that the only way to discover the location of /usr/lib/arch-id is to run a systemd command

No, it doesn't say it's the only way. It provides that as a way to do that, which works in 99.999% of the cases.

hope not tied to SystemD

Posted Aug 18, 2025 17:30 UTC (Mon) by NYKevin (subscriber, #129325) [Link] (2 responses)

> No, it doesn't say it's the only way.

Can we please drop the silly word pedantry? If the spec describes one and only one way to do something, and gives not the slightest hint that that way will not work in all circumstances, then supporting that method is a requirement of the spec. I'm baffled that you are continuing to argue this point.

hope not tied to SystemD

Posted Aug 18, 2025 17:43 UTC (Mon) by bluca (subscriber, #118303) [Link] (1 responses)

Once again, there is no requirement for any particular tool, it's just a description of a hierarchy of directories, and that's the end of it. Any requirement for any particular tool is a misreading, intentional or not.

hope not tied to SystemD

Posted Aug 18, 2025 17:46 UTC (Mon) by daroc (editor, #160859) [Link]

I think neither of you are likely to change each other's minds at this point. Let's leave the discussion here, please.

hope not tied to SystemD

Posted Aug 17, 2025 14:56 UTC (Sun) by pizza (subscriber, #46) [Link] (15 responses)

> I read THE STANDARD, and my system does not provide systemd and its assorted bits and pieces, then I'm up a gum tree. Isn't the point of standards to avoid such gum tree messes?

Uh, the entire point of a specification is to define minimum requirements, and by definition, if you don't meet those, you're SoL.

hope not tied to SystemD

Posted Aug 17, 2025 20:35 UTC (Sun) by NYKevin (subscriber, #129325) [Link] (14 responses)

If systemd is required to comply with the standard, then they probably should not have given it to the UAPI folks in the first place.

(I say this as someone who likes and uses systemd. My position is not that systemd should be removed from the standard, merely that systemd should not be part of the minimum requirements for a standard that wishes to be universal.)

hope not tied to SystemD

Posted Aug 17, 2025 21:16 UTC (Sun) by pizza (subscriber, #46) [Link] (4 responses)

> My position is not that systemd should be removed from the standard, merely that systemd should not be part of the minimum requirements for a standard that wishes to be universal.

"Universality" only extends out to the scope of what you're trying to achieve.

A truly "universal standard" would necessarily need to include the likes of Windows, MacOS/iOS, zOS, and so forth... good luck finding common ground there. Just like it is reasonable to reduce the scope of said "universality" to exclude non-UNIXes, it's reasonable to exclude non-Linuxes. But even sticking to "Linux", it's reasonable to exclude Android and purpose-built embedded systems... and oh look, we're already quibbling over where the outer bounds are drawn.

In this specific instance, excluding systemd-udev by name makes little sense given that it is the canonical implementation of /dev management under Linux, and independent re-implentations [1] have to behave in the same manner or fail the basic fitness-for-purpose test.

[1] all one of them (ie busybox) -- There's also eudev, but it was forked from pre-residing-in-systemd's-git-repo udev for entirely political [2] reasons.
[2] "We don't want to have any source code from systemd present even if the udev binary produced has zero runtime dependencies on systemd"

hope not tied to SystemD

Posted Aug 17, 2025 22:26 UTC (Sun) by Wol (subscriber, #4433) [Link] (3 responses)

> it's reasonable to exclude non-Linuxes. But even sticking to "Linux", it's reasonable to exclude Android and purpose-built embedded systems... and oh look, we're already quibbling over where the outer bounds are drawn.

Well, I run a mainstream (at least, last I knew it was used by kernel devs like Greg KH) distro, and I had to change the init system away from the default, and to systemd. (And yes, I do describe gentoo as somewhat systemd-hostile, but the distro devs prefer OpenRC which I believe predates systemd, so it's not a case of "we refuse to have systemd", just "we don't see the benefit in changing". I don't agree, but I'm not a distro dev, and I've taken advantage of the ability to change the default.)

Any spec that is intended to be a reference for ALL "typical" linux distros should not defer to what just SOME of those distros do. A proper superset should not be defined in terms of a subset - it's just the wrong thing to do.

To put it in your terms, if the spec writers intend it to apply to "all linux distros", or even "all linux distros with typical user spaces like Gnome or KDE/Plasma, then they have extended the boundaries of the spec beyond systemd-distros, so they cannot assume the presence of systemd on the system.

Cheers,
Wol

hope not tied to SystemD

Posted Aug 17, 2025 22:33 UTC (Sun) by bluca (subscriber, #118303) [Link] (2 responses)

> they cannot assume the presence of systemd on the system

quote the parts where that is the case

hope not tied to SystemD

Posted Aug 18, 2025 7:07 UTC (Mon) by Wol (subscriber, #4433) [Link] (1 responses)

So you clearly didn't read the comment you were replying to.

My distro, by default, does NOT install systemd, therefore you cannot assume its presence on my system (yes it does happen to be there, I over-rode the default, but the choice is either/or, not both/and).

Cheers,
Wol

hope not tied to SystemD

Posted Aug 18, 2025 8:51 UTC (Mon) by bluca (subscriber, #118303) [Link]

...and? What has that to do with anythng written there?

hope not tied to SystemD

Posted Aug 17, 2025 22:13 UTC (Sun) by bluca (subscriber, #118303) [Link] (8 responses)

> If systemd is required to comply with the standard

Can you quote the parts that where that is the case?

hope not tied to SystemD

Posted Aug 18, 2025 3:41 UTC (Mon) by NYKevin (subscriber, #129325) [Link] (7 responses)

As I explained to you in another subthread, I already quoted that part of the spec upthread: https://lwn.net/Articles/1034093/

To be clear, this is not "optional" or ancillary information. It is the only way to discover the path to one of the specified directories.

hope not tied to SystemD

Posted Aug 18, 2025 8:50 UTC (Mon) by bluca (subscriber, #118303) [Link] (6 responses)

You are mistaken, this is most definitely optional and ancillary information.

hope not tied to SystemD

Posted Aug 18, 2025 9:26 UTC (Mon) by rschroev (subscriber, #4164) [Link]

If it is meant as optional and ancillary information, might I suggest rewriting it?

"Instead of constructing the arch-id and $libdir manually, you can query $libdir for the primary architecture of the system by invoking systemd-path system-library-arch on systems that support it". Or something similar.

The way it is written now, very much gives the impression that invoking systemd-path system-library-arch is the one and only way.

hope not tied to SystemD

Posted Aug 18, 2025 17:27 UTC (Mon) by NYKevin (subscriber, #129325) [Link] (4 responses)

In a spec that describes the layout of the filesystem, the path to one of the specified directories is not "ancillary" information. It is a core part of the spec.

hope not tied to SystemD

Posted Aug 18, 2025 17:41 UTC (Mon) by bluca (subscriber, #118303) [Link] (3 responses)

The path is not related in any way, shape or form to any tool. It's distribution and architecture dependent, and that's why there's a convenience utility available.

I assure you that out of ~60000 packages building right now in Debian, and however many are in Ubuntu, exactly _zero_ use systemd-path to query the library directory at build time. A significant fraction of those _will_ need to explicitly know what the exact path is, and they won't use that tool for it.

It's just a utility provided for convenience, it is not part of any specification.

hope not tied to SystemD

Posted Aug 21, 2025 7:06 UTC (Thu) by NYKevin (subscriber, #129325) [Link] (1 responses)

> it is not part of any specification.

Good, then you should have no objection to rewording that sentence in a way that clarifies it is non-normative.

I'm glad we're in agreement on that much, at least.

hope not tied to SystemD

Posted Aug 21, 2025 10:15 UTC (Thu) by bluca (subscriber, #118303) [Link]

Feel free to send a PR to adjust any wording of any sentence of any paragraph, and it will be discussed in its own merit

hope not tied to SystemD

Posted Aug 21, 2025 10:14 UTC (Thu) by bluca (subscriber, #118303) [Link]

> I assure you that out of ~60000 packages building right now in Debian, and however many are in Ubuntu, exactly _zero_ use systemd-path to query the library directory at build time. A significant fraction of those _will_ need to explicitly know what the exact path is, and they won't use that tool for it.

This is not a hyperbole btw, I really mean it.

Number of packages calling systemd-path in debian/rules to find per-arch libdir: zero out of 30000

https://codesearch.debian.net/search?q=path%3Adebian%2Fru...

Number of packages using at least one other mean (a specific makefile include file that defines a specific makefile var, none of which are related to systemd): ~5000 out of ~30000

https://codesearch.debian.net/search?q=path%3Adebian%2Fru...

hope not tied to systemd

Posted Aug 16, 2025 13:09 UTC (Sat) by rhbvkleef (subscriber, #154505) [Link]

I think this is unfortunate. Standards like this should consider systemd as it is (I am guessing) the most used init system currently, though other init systems like Busybox init, and OpenRC /are/ used, so should be considered too. Thus, mentioning systemd like the standard currently does is not the best, and I especially like the first solution you proposed:

> Rephrase all mentions of systemd as non-normative descriptions of how that particular implementation does it, rather than normative specifications of how it must be done, similar to the Boot Loader spec[2]. I see this as a dispreferred option because it would leave a few subdirectories with no portable means of discovery, most significantly /usr/lib/arch-id and its cousins.

hope not tied to SystemD

Posted Aug 16, 2025 12:04 UTC (Sat) by pizza (subscriber, #46) [Link]

> Sorry I meant the standard shall not be tied to particular init system, which shall not control the file system layout in any way.

The *only* defined job for init (ie pid 0) is to reap children processes. (And to not die itself...)

Meanwhile, in the real world, folks run non-spherical-cow inits [1] that do a heck of a lot more than that, because it turns out that operating system creators and application writers need more functionality to create a usable system with components whose presence can be relied upon. The FHS (and its successors) are attempts to do just that.

[1] eg sysvinit, which does neither one thing, nor well.

hope not tied to SystemD

Posted Aug 15, 2025 22:31 UTC (Fri) by josh (subscriber, #17465) [Link] (19 responses)

Are you intentionally writing "SystemD" as a dogwhistle for the anti-systemd folks, or are you still unaware that that's it's spelled "systemd"?

hope not tied to SystemD

Posted Aug 16, 2025 1:02 UTC (Sat) by gdt (subscriber, #6284) [Link] (18 responses)

That's quite some assumption of bad faith.

More generally, writers are moving away from using vendor capitalisation to whatever format assists the reader best, treating the word as a proper noun and capitalising to assist pronunciation. That is, authors are writing for readers, not for corporations. For example, Ikea has a corporate-preferred capitalisation of "IKEA" but is not said as "I. K. E. A.": the corporate style misinforms the reader. Some publications have a house style requiring "System-D" (ie, written as pronounced unless the product is very famous), so this author's choice is within the range of normal.

hope not tied to SystemD

Posted Aug 16, 2025 2:38 UTC (Sat) by Cyberax (✭ supporter ✭, #52523) [Link] (10 responses)

The systemd project has the official spelling: "systemd". So yep, "SystemD" is a pretty useful indicator.

hope not tied to SystemD

Posted Aug 16, 2025 7:02 UTC (Sat) by wtarreau (subscriber, #51152) [Link] (6 responses)

> The systemd project has the official spelling: "systemd". So yep, "SystemD" is a pretty useful indicator.

Care to explain to the ignorant I am, a "useful indicator" of what ? Does the latter convey a particular meaning for some groups ? I've seen it spelled both ways and genuinely thought that the former is the process name while the latter is the project's name, and have seen the latter being used by those trying to carefully represent it. So if this form is associated by some to a certain meaning, it would be nice to know. But I doubt it would be associated with anything negative by the project maintainers themselves, considering that it appears a few times in the repo's history and even still in the code itself: https://github.com/systemd/systemd/blob/main/src/resolve/.... So isn't this just some noise, or maybe those triggering on a particular spelling are themselves an indicator of anything like searching for trouble where there isn't ?

hope not tied to SystemD

Posted Aug 16, 2025 9:50 UTC (Sat) by bluca (subscriber, #118303) [Link] (5 responses)

Yep it's dogwhistling, you can consistently see it from a particular crowd that is best avoided like the plague.

There's even a brand page defining it if you are in doubt: https://brand.systemd.io

hope not tied to SystemD

Posted Aug 16, 2025 10:45 UTC (Sat) by nadir (subscriber, #154506) [Link] (4 responses)

Always a chance somebody is genuinely clueless, but I agree. Its use is nearly always an indicator that the user has also anti-"woke" views, loves xlibre, hates wayland for non-technical reasons, wants his software projects free of "politics", etc. etc.

hope not tied to SystemD

Posted Aug 16, 2025 12:00 UTC (Sat) by wtarreau (subscriber, #51152) [Link] (3 responses)

OK, strange, never noticed this. I find it strange that people would just use capitalization of a name which could look like the expected one as a sign to manifest anything, but be it. At least I'm sure it's not the case for the ones I've seen write it like this.

hope not tied to SystemD

Posted Aug 16, 2025 13:24 UTC (Sat) by Wol (subscriber, #4433) [Link] (1 responses)

As the systemd people point out, it follows standard unix convention in that the first bit points out what it does (and is in lower case because all system routines are in lower case), and it has a d tacked on the end to indicate it's a daemon.

So in standard unix nomenclature, systemd is the daemon that manages the system. And like all such daemons, it's lower case.

Cheers,
Wol

hope not tied to SystemD

Posted Aug 16, 2025 21:10 UTC (Sat) by SLi (subscriber, #53131) [Link]

Wait. Daemons? Or their filenames? This feels like something where there is a distinction.

While calling it SystemD is obviously just clueless and wrong because that's not its name in any meaning, I don't think this fundamentally collapses the way you propose. For example, we have the thing that is named the Apache HTTP Server, often Apache in brief, which has a binary named httpd. Even if it had decided to call its binary "apached", that wouldn't mean that the software's or project's name is "apached". I think it's useful to think there's a layer of indirection between project names and filenames. Apache is not even the only httpd...

hope not tied to SystemD

Posted Aug 17, 2025 9:14 UTC (Sun) by jem (subscriber, #24231) [Link]

The recommended spelling of systemd was documented by Lennart Poettering very early on. I suspect people on average are well aware of the recommendarion, but use SystemD in spite. I have noticed a strong correlation between expressing an extreme dislike for systemd and using the form SystemD.

hope not tied to SystemD

Posted Aug 16, 2025 16:40 UTC (Sat) by ATLief (subscriber, #166135) [Link] (2 responses)

If there was a project called "KewlFS" that insisted it be capitalized as "kEWlfS", would you capitalize it as such?

hope not tied to SystemD

Posted Aug 16, 2025 17:56 UTC (Sat) by raven667 (subscriber, #5198) [Link]

I was going to respond to your obvious "gotcha" hypothetical with the snarky response it deserves but the value I want to uphold is people speaking their honest thoughts and feelings in earnest, and I was reminded of the posting guidelines "Is your comment polite, respectful, and informative? " (thanks, they worked at least once!) and deleted my original thought as being unworthy.

To answer your (presumably bad-faith) question earnestly, if there was a project that chose capitalization like 'kEWlfS' to refer to their work, rather than the more conventional 'KewlFS' that would be fine, maybe this project is a FUSE driver for Exchange Web Services (EWS) so they want to emphasize this in their branding, it would be disrespectful to insist that your personal interpretation and preferences are more correct and should override the members of the project who are doing the work, in a matter of style such as this.

hope not tied to SystemD

Posted Aug 18, 2025 9:16 UTC (Mon) by tao (subscriber, #17563) [Link]

There *is* a great example: LaTeX. It's definitely styled in a "weird" way. It is, however, the styling preferred by the original author, and it's not difficult to remember, so type it in another way unless you're trying to make some sort of point?

hope not tied to SystemD

Posted Aug 16, 2025 16:00 UTC (Sat) by kleptog (subscriber, #1183) [Link] (6 responses)

IKEA is simply the trademark. Written that way it clearly refers to the business. You could write Ikea but that could be someone's name.

We write iPhone, not Iphone. It is written the way people recognise it, you don't need to know how to pronounce it to know what it means. Written and spoken languages are not the same (though obviously closely related).

Anyone writing System-D is basically doing the same as people writing Micro$oft. A deliberate misspelling for effect.

hope not tied to SystemD

Posted Aug 17, 2025 11:39 UTC (Sun) by wtarreau (subscriber, #51152) [Link] (5 responses)

> Anyone writing System-D is basically doing the same as people writing Micro$oft. A deliberate misspelling for effect.

Why "deliberate" ? I used to think it was spelled like this. There are commits in the systemd repo spelling it this way, and there is even still one instance of it in the code. Why always search for nastiness when it can simply be explained by ignorance ? Why would people know how developers *wanted* to spell it when the *only* contact they have with the name is oral, when spoken about by others ? How many times a day do you see "systemd" written on your screen to represent the project (not the process nor directories), or even do you write it on your keyboard ?

Systematically jumping on people when they ignore something that you happen to know is not doing any service to anyone, let alone to the project you want to defend or represent, it makes it look like being surrounded by people waiting in the corner, ready to attack you if you fail to pronounce it well. This makes no sense. It reminds me of the good old days of LaTeX, where some morons would laugh when someone pronounced "latex", with the most extremes even insisting "don't you see, it's not an X, it's a Chi, but OK you can use the X letter". Better just teach others rather than criticize.

In the case of "Micro$oft" you cited above, it's different, it's using a character that is not a letter but the symbol for a currency to infer a relation between a company name and money. You should instead compare this to spelling "MICROSOFT", or "MicroSoft" instead of "Microsoft", which is easy to be mistaken about as well, particularly since the original logo was uppercase BTW!

hope not tied to SystemD

Posted Aug 17, 2025 12:08 UTC (Sun) by bluca (subscriber, #118303) [Link]

> There are commits in the systemd repo spelling it this way

2 in total, both from 2010

> and there is even still one instance of it in the code.

a mistake by a contractor in a code comment that slipped through the cracks, already fixed

> Why always search for nastiness when it can simply be explained by ignorance ?

This time it's just an honest mistake, the issue is that 99% of the times it's not, and instead it's a case of a particular venn diagram being a circle

hope not tied to SystemD

Posted Aug 17, 2025 18:15 UTC (Sun) by jem (subscriber, #24231) [Link] (3 responses)

"Yes, it is written systemd, not system D or System D, or even SystemD." https://brand.systemd.io

This text has been on the systemd website since the beginning. Where else would the naysayers have learned to call it SystemD?

hope not tied to SystemD

Posted Aug 18, 2025 5:21 UTC (Mon) by wtarreau (subscriber, #51152) [Link] (2 responses)

Sincerely, who visits "brand.$foo.$tld" to guess how a project is spelled ? Nobody cares in the first place how you spell httpd, squid, sendmail, postfix, ntpd etc (all intentionally lowercased here hoping not to offend anyone) because nobody suspects that there's a trap there.

Yesterday I made a test and told a friend about this news. He was surprised and told me "Ah? I thought it was written like SystemV". That might actually be one possible source of confusion and a more likely one than deliberately wanting to misrepresent a brand. I find it really bizarre to put criticizers and newcomers in a same box just for their accidental misuse of a name, at the pretext that some untold statistics shows that 99% of the time it's criticizers who spell it like this. Maybe instead they become criticizers after having been insulted for writing it this way. I really find this approach offensive. But anyway, let's end this topic.

hope not tied to SystemD

Posted Aug 29, 2025 1:10 UTC (Fri) by cypherpunks2 (guest, #152408) [Link] (1 responses)

> He was surprised and told me "Ah? I thought it was written like SystemV"

That was my thought as well. I'm quite surprised that people are reading so much into the spelling, to the point of even inferring political opinions.

I don't see any secret cabal of systemd-haters covertly communicating with each other using misspellings to trick those who don't dislike systemd. People who dislike systemd are generally not shy about saying they dislike it. We shouldn't be looking under rocks for people who have different opinions about init systems.

hope not tied to SystemD

Posted Aug 29, 2025 8:59 UTC (Fri) by anselm (subscriber, #2796) [Link]

That was my thought as well.

It's interesting that people don't seem to wonder why the number in the name should suddenly jump from 5 to 500 …

Also, the legacy init system which systemd replaced wasn't actually called “SystemV”. It didn't have a proper name to begin with (after all it was just the init system, not much to see here, move on) and, in the Linux community, people used to refer to it as “System V init” because it was patterned on what was delivered with Unix System V (in the 1980s), as opposed to, e.g., what BSD was doing. So it isn't entirely obvious why the successor to “System V init” would be called “SystemD” – if Lennart Poettering had intended to continue that pattern he would clearly have gone with “System D init” and not just “SystemD”, but then it'd still be strange to move from “V” to “D” and not “VI” or “W” (remember that the X Window System was the successor of another window system called W, hence the “X”).

Anyway, more than a decade and many blog posts, man pages, distribution releases, conference presentations, etc. later it should be common knowledge that the “d” at the end of “systemd” is, in fact, lowercase. It is reasonable to assume that people who still insist on writing “SystemD” have either been living under a rock or else have an axe to grind.

hope not tied to SystemD

Posted Aug 16, 2025 20:10 UTC (Sat) by ianmcc (subscriber, #88379) [Link] (2 responses)

Why is it that whenever someone writes "SystemD", with that specific choice of capitalization, you know already what their angle is?

hope not tied to SystemD

Posted Aug 16, 2025 20:38 UTC (Sat) by zdzichu (subscriber, #17118) [Link] (1 responses)

It became a "dog whistle".

hope not tied to SystemD

Posted Aug 16, 2025 20:56 UTC (Sat) by corbet (editor, #1) [Link]

Dog whistle or not, we really do not all need to keep barking at it; can we stop here?

Thank you.

hope not tied to SystemD

Posted Aug 17, 2025 21:23 UTC (Sun) by arsen (subscriber, #161285) [Link]

reading the standard I see no reason to believe why it'd be dependent on systemd.

putting aside for a moment the standard itself, I see no way in which a filesystem hierarchy standard can be "tied to" a system layer implementation (term used as coined by Benno Rice, I believe), especially not merely an init system inside of such. it isn't even implemented by the system layer, it's implemented by the OS or distribution.

a FHS like this one can only be judged on 1) whether it allows various administrative practices you or others mind need, and 2) vibes.

this FHS is very similar to the old LSB FHS, I see no problem on either front with it. ISTM that the major difference is some simplfiication (usr-merge, no sbin), but many distros and admins (myself included) have already chosen to do that anyway, so it's not very strange.

ISTM that what we see here and elsewhere is a pre-judgement kinda thing, where the UAPI group is guilty of being a systemd-specific space, because the specs they work on are based on prior insight gained by implementations in systemd, and because there's developer overlap. but this seems at best needlessly unfavorable—skimming the standards, they're clear that prior art is systemd, yet do not depend on it (consider, for instance, BLS, which has been implemented in GRUB, or UKIs, which can and are used without systemd).

Gentoo

Posted Aug 16, 2025 2:59 UTC (Sat) by tamiko (subscriber, #115350) [Link]

The Gentoo devmanual is a bit out of date on this one. The Gentoo baselayout [1] has supported a "usr-merged" filesystem layout for quite some time now [2]. The end result is actually quite close to the file-hierarchy... not that surprising, given the fact that quite a number of upstream projects/packages have converged to that layout as well.

[1] https://packages.gentoo.org/packages/sys-apps/baselayout
[2] https://wiki.gentoo.org/wiki/Merge-usr

Simpler structure practical?

Posted Aug 16, 2025 5:56 UTC (Sat) by nekomachi-touge (subscriber, #177753) [Link] (5 responses)

I feel FHS is unnecessarily complicated nowadays.
As a developer I had a fair share of path debugging, which is counterproductive if not a toil.
I wonder whether it is practically possible to simplify directory structure like:

/bin : executables always on $PATH
/dev, /proc : hardware access and OS parameters
/mnt : persistent storage exposed by a file system
/var : anything variable and persistent, may be link to subdirectories of /mnt
/tmp : /var but volatile
/etc : anything invariable (most of the time)
/opt : stuffs not flexible enough to use the dirs above

And I want the following dirs migrated to:
/boot : /var or /etc
/media : /mnt
/run: /var or /tmp
/usr: just use / directly!

Simpler structure practical?

Posted Aug 16, 2025 7:59 UTC (Sat) by zuki (subscriber, #41808) [Link]

This structure is about as simple as the text being discussed. But it uses incompatible paths in some places. And changing paths gratuitously is really not worth it --- every change requires a lot of discussion and takes years to propagate. So I really think it's reasonable to follow this "standard", which essentially describes current practice.

Simpler structure practical?

Posted Aug 16, 2025 17:40 UTC (Sat) by grawity (subscriber, #80596) [Link] (1 responses)

/run already used to be a subdirectory of /var in the past; it was very deliberately migrated out of there. On the one hand it is not meant to be persistent, and on the other hand it has to already be available before /var can be mounted, so various early-boot dances used to be necessary in order to find a writable place. (One distribution used /dev/.foo, another used /lib/init/rw...)

It could in theory be under /tmp, but placing a restricted directory under a wide-open one is a bit backwards and probably unwise. The opposite would make more sense, but the "/tmp" path is now a bit too entrenched.

For similar reasons /boot isn't under /var – you want to be able to mount it even if /var isn't mountable for some reason. They have opposite goals too, so they cannot be merged into one; /var would use some fancy high-performance file system while /boot needs a file system as simple as possible for the bootloader's minimal drivers.

/media was already migrated to /run/media. (It differs from /mnt in that the mount points under /media are volatile and managed by something like udisks, primarily for hotplugged devices, while /mnt is the system admin's manually-managed territory.)

Simpler structure practical?

Posted Aug 16, 2025 18:12 UTC (Sat) by raven667 (subscriber, #5198) [Link]

thanks, I was also going to add that there are very logical sensible technical reasons why the current standards around /run /var /boot /usr /etc exist, it's not just to move the deck chairs around and bikeshed about the color of the filesystem. if this effort gains any traction it'll be a good opportunity to update the educational material, howtos, training guides, engineering rationale and not just the standard reference doc so that you have something to point new people to get them up to speed . there are new Linux developers and admins every day who've never heard of the FHS and may get lost trying to understand why things are the way they are, that it's not just personal preference and bloody-mindedness. It's also an opportunity to gather feedback from new and old developers and admins who may have differing opinions as to what priority compatibility with different parts of the standard and current practice should be, that feedback can also be incorporated, or at least provides an opportunity to test those howtos and training materials to get a shared understanding.

Simpler structure practical?

Posted Aug 18, 2025 14:10 UTC (Mon) by farnz (subscriber, #17727) [Link]

Adding to grawity's comment (which covers most of it), I'd also note that you want the root to be simple enough that you can have a read-only ramfs root on top of which you mount the "real" filesystems.

That way, in a failure situation, you can work on the filesystems individually (either from the initramfs, or by moving a drive to another system), until you can mount all of them once again. Additionally, because /home and /usr are separate mount points, you know that you can mount a live USB stick's /usr over the system's /usr without breaking things or affecting user data, either for repair work, or to let you do urgent other work before you come back to repairs.

You end up wanting a set of paths that can be entirely recovered from distro packages (/boot, /usr, /bin), a set for kernel data (/sys, /proc), a set for configuration (/etc - which in an ideal world is just local overrides, and can be empty), a set for local system data that should not be blindly deleted (/home, /var, /opt), and a set for non-persistent data (/run, /tmp).

Simpler structure practical?

Posted Aug 18, 2025 18:57 UTC (Mon) by Cyberax (✭ supporter ✭, #52523) [Link]

> /usr: just use / directly!

This pollutes the '/' even further. But importantly, mounting the '/usr' is atomic, while mounting multiple entries into '/bin', '/lib', '/lib-arm64', '/lib-arm32', '/lib-x86' is not.

> /boot : /var or /etc

'/boot' (or a part of it) needs to be on its own partition (because of UEFI) and with its own lifecycle.

What about /opt ?

Posted Aug 16, 2025 8:36 UTC (Sat) by aleXXX (subscriber, #2742) [Link] (1 responses)

I don't see /opt/ mentioned in those documents.
Does this mean using /opt is outdated ?
I really like using /opt for software packages which are not supplied by the OS.

What about /opt ?

Posted Aug 16, 2025 9:51 UTC (Sat) by bluca (subscriber, #118303) [Link]

That's a mistake, will fix it shortly

And then there is NixOS

Posted Aug 16, 2025 12:04 UTC (Sat) by aviallon (subscriber, #157205) [Link] (2 responses)

Even systemd's file-hierarchy is not flexible enough for the way NixOS does things!

And then there is NixOS

Posted Aug 16, 2025 21:30 UTC (Sat) by SLi (subscriber, #53131) [Link]

This is true, and the article made me think if such a standard a) could while remaining meaningful b) should be written to accommodate setups like that.

I think it can, and arguably should. In order to accomplish this, you need a layer of indirection: Standardize *roles* and *invariants*, not specific implementation details. Think "what exactly needs to be true at runtime", not "where exactly vendor bits live on disk".

Define a *small set of normative invariants* about roles (code, policy, runtime, state) and their lifecycle (read-only vs writable, ephemeral vs persistent), then provide *profiles* that map those roles to paths. Classic distros, immutable images, containers, and Nix/Guix can all conform by choosing an appropriate profile (or declaring a custom one) while preserving interoperability.

To be standardized (MUST or SHOULD):

1. Roles, not paths.

Vendor content: executable code, static data shipped by the OS/vendor. MUST be treatable as read-only at runtime.

Admin policy: local configuration overriding vendor defaults. MUST be writable and take precedence over vendor content.

Runtime state: sockets, pid files, transient caches. MUST NOT survive a reboot.

Persistent state: databases, logs, package metadata, app state. MUST survive a reboot and be writable.

2. Precedence and merge.

Admin policy MUST override vendor defaults via a deterministic precedence order (e.g., /etc ≻ vendor config).

3. Discoverability.

The locations implementing each role MUST be discoverable at runtime via well-defined mechanisms (e.g., environment variables, a machine-readable file, or stat(2)-detectable mounts), so software doesn't have to hard-code paths.

4. Stability guarantees.

Persistent state paths SHOULD remain stable across OS upgrades; runtime paths MAY be tmpfs and cleared at boot.

5. Graceful fallback.

If a profile doesn't provide an alternative location, well defined sane defaults apply.

---

With this, a classic FHS style system would map vendor=/usr (ro-capable), admin_policy=/etc, runtime=/run, persistent_state=/var.

NixOS could declare something like vendor=/nix/store (ro) with profile views under /run/current-systems/sw exposing POSIX paths, admin_policy=/etc (generated from declarative config but still the top of precedence), runtime=/run, persistent_state=/var. NOTE: the spec would not require vendor content to be under /usr, but only discoverable.

Discovery mechanisms could be something like a simple configuration file pointed to by an environment variable or in a standard location like /run/fs-roles.d/active.json, and/or just env vars.

And then there is NixOS

Posted Aug 16, 2025 23:14 UTC (Sat) by bluca (subscriber, #118303) [Link]

> Even systemd's file-hierarchy is not flexible enough for the way NixOS does things!

https://imgur.com/a/nix-Qso4ddc

Wait for it..

Posted Aug 22, 2025 13:14 UTC (Fri) by mwsealey (subscriber, #71282) [Link] (1 responses)

GoboLinux might finally have its chance to shine :3

Waiting for Gobo...

Posted Aug 29, 2025 19:45 UTC (Fri) by Alterego (guest, #55989) [Link]

Gobo's directory tree makes a lot of sense , and corresponds to what a "normal human" want.

We are still struggling with 1970's sequels (usr/bin merge...) , it is time to be bold and embrace something like Gobo :)

The need still exists

Posted Sep 25, 2025 2:53 UTC (Thu) by jkridner (subscriber, #179011) [Link]

I don't think the need has waned at all. When I try to teach people new to Linux, I jump right into how they start exploring what is on a running system in as much a distribution-independent way as possible such that they can apply the knowledge on any system running Linux.

This has gotten harder and harder the more we move away from FHS, but I still use it as a guide for what is "most likely similar" to what is running.


Copyright © 2025, Eklektix, Inc.
This article may be redistributed under the terms of the Creative Commons CC BY-SA 4.0 license
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds