The Handbook

    Theme
    • Guides
        • Check a system before installing FreeBSD
        • Orient a Linux administrator on FreeBSD
        • Supported FreeBSD releases
        • Choose a FreeBSD documentation and support channel
        • Move files safely without GNU mv -t
        • Update, upgrade, or update packages?
        • Upgrade 14.4 or 15.0 to FreeBSD 15.1
        • Choose packages, ports, or poudriere
        • Choose the quarterly or latest package branch
        • Choose a FreeBSD download or package mirror
        • Make a system setting persistent
        • Configure locale, keyboard, and time zone
        • Configure a serial console for recovery
        • Choose a custom kernel, module, or loader setting
        • Run a Linux binary with the compatibility layer
        • Check desktop and laptop hardware before installation
        • Choose and check a graphics driver
        • Choose Xorg or Wayland
        • Build a maintainable desktop baseline
        • Install and check a desktop browser
        • Check laptop Wi-Fi, power, and suspend
        • Check multimedia readiness
        • Choose and configure a printing stack
        • Run Windows applications with Wine
        • Snapshot and replicate a ZFS dataset
        • Choose a filesystem and storage layout
        • Operate ZFS without losing the recovery path
        • Restore files from a ZFS snapshot
        • Read ZFS pool health and run a scrub
        • Replace a failed device in a ZFS mirror
        • Replicate a ZFS dataset over SSH
        • Change PF safely on a remote host
        • Configure a narrow WireGuard tunnel
        • Plan a FreeBSD home server
        • Choose a mail server or an outgoing relay
        • Publish a network service safely
        • Choose a jail network model
        • Choose native jails or a jail manager
        • Choose a jail or a bhyve virtual machine
        • Establish a FreeBSD security baseline
        • Choose a MAC policy
        • Audit security-relevant activity
        • Start a DTrace performance investigation
    • Integrations
        • Create a first jail with Bastille
        • Compare jail managers and OCI tooling
        • Publish a Bastille service through PF
        • Mount a ZFS dataset in a Bastille jail
        • Update and upgrade Bastille jails
        • Back up and restore a Bastille jail
        • Prepare bhyve and vm-bhyve
        • Choose NFS or Samba for file sharing
        • Choose ZFS backup automation
        • Operate a signed poudriere repository
        • Manage FreeBSD configuration with Ansible or Salt
        • Run Motion with webcamd on FreeBSD
        • Design a reverse proxy, certificates, and monitoring
    • FAQ
      • Troubleshooting
          • Recover an interrupted freebsd-update run
          • Resolve a package repository or ABI mismatch
          • Diagnose the FreeBSD boot path
          • Recover with a ZFS boot environment
          • Diagnose DNS, routing, and firewall paths
          • Diagnose network mbuf exhaustion
          • Bind a service to a low port without running it as root
          • Diagnose audio output or input
          • Diagnose webcamd, cuse, and a webcam
          • Fix USB device permissions without opening every device
      • About this handbook
      • Synopsis
      • Enable the compatibility service
      • Install a Linux userland
      • Diagnose a binary that does not start
      • Primary references

      Run a Linux binary with the compatibility layer

      Last reviewed
      13 August 2026
      Applies to
      15.1-RELEASE, 15.0-RELEASE, 14.4-RELEASE

      Synopsis #

      FreeBSD can execute many unmodified Linux binaries through a kernel compatibility layer and a Linux userland installed under /compat/linux. This is not a virtual machine or a Linux container. Applications that require Linux namespaces, cgroups, or unsupported kernel interfaces need another approach.

      The compatibility layer is available on x86 32-bit, x86 64-bit, and AArch64 systems. Confirm the application architecture and requirements before installing a userland.

      Enable the compatibility service #

      Enable the service at boot and start it for the current boot:

      # sysrc linux_enable=YES
      # service linux start
      

      Confirm that the expected compatibility modules are loaded:

      $ kldstat
      

      The exact module list depends on the host architecture and the binary being run.

      Install a Linux userland #

      Install the Rocky Linux 9 base userland used by current FreeBSD documentation:

      # pkg install linux_base-rl9
      

      Files supplied by the Linux userland are installed beneath /compat/linux. Additional Linux packages may be needed for an application’s shared libraries.

      Diagnose a binary that does not start #

      Collect evidence before adding libraries or changing kernel settings:

      $ file /path/to/program
      $ ldd /path/to/program
      $ sysctl compat.linux
      

      Check the following conditions:

      1. The binary architecture is supported by the host.
      2. The Linux compatibility service is running after the current boot.
      3. Required shared libraries exist in the Linux userland rather than only in the FreeBSD base system.
      4. The application does not require Linux-only kernel facilities such as namespaces or cgroups.

      ldd may fail or produce incomplete output for a binary whose interpreter or first dependency is missing. The binary’s file output and application documentation remain useful in that case.

      Primary references #

      • FreeBSD Handbook: Linux Binary Compatibility
      • linux(4)
      • kldstat(8)
      • file(1)
      • ldd(1)

      Independent documentation. Not affiliated with or endorsed by the FreeBSD Project or the FreeBSD Foundation.

      Report a bug
      • Synopsis
      • Enable the compatibility service
      • Install a Linux userland
      • Diagnose a binary that does not start
      • Primary references