Skip to content

Filesystem Layout

pkgdemon edited this page Aug 21, 2026 · 2 revisions

NextBSD uses an explicit four-domain layout. Every system resource lives under a domain root, so it is always clear who owns a file and whether an OS upgrade may replace it.

Domain Root Owner and meaning
System /System/Library Provided by the OS. Treat as immutable — upgrades replace it.
Local /Local/Library This machine. Admin-installed, survives OS upgrades.
Network /Network/Library Network-shared. Reserved; not used yet.
User ~/Library Per-user.

Not quite Apple's convention

On macOS, the bare /Library is the Local domain. NextBSD does not do that. Every domain has an explicit root, so where Apple would use /Library, NextBSD uses /Local/Library.

The reason is that a bare /Library makes it ambiguous whether something is OS-owned or admin-owned, which matters when an upgrade decides what it may overwrite. Keeping /System strictly for the OS and /Local strictly for the machine removes the guesswork.

If you are porting instructions written for macOS, the mechanical translation is /Library/…/Local/Library/….

Where things actually live

Path Used by Purpose
/System/Library/LaunchDaemons/ launchd (PID 1) OS daemon plists — scanned first
/Local/Library/LaunchDaemons/ launchd (PID 1) Third-party daemon plists — scanned second
/System/Library/Extensions/ kextd, kextload Kernel extensions (drivers)
/dev/ioregistry ioreg, libIOKit The in-kernel IOKit registry
/boot/kernel/kernel loader The kernel
/etc/os-release anything asking what OS this is Name and build stamp
/bin/nextbsd-version you Build version reporting

A note on /boot/kernel

On stock FreeBSD, /boot/kernel holds the kernel plus a tree of .ko modules that kldload pulls in on demand. NextBSD ships no .ko tree — the image build removes it, so /boot/kernel contains only kernel itself.

Two consequences worth knowing:

  • Anything a driver needs must be compiled into the kernel; there is no autoload path to fall back on.
  • Drivers that are separately loadable arrive as kernel extensions under /System/Library/Extensions/, handled by kextload/kextstat, not kldload.

Standard BSD paths

Everything you expect from a BSD is still where it should be — /etc, /usr, /var, /usr/local for packages, /home for users. The four-domain model sits alongside the traditional hierarchy rather than replacing it.

Package-installed software from pkg lands under /usr/local exactly as it does on FreeBSD.

See also

Clone this wiki locally