Skip to content

Gaze vs. Other Linux Face Auth ​

Gaze is one of several projects bringing Windows Hello-style facial authentication to Linux. They all plug into PAM, they are all open source, and they all solve the same basic problem: log in with your face instead of a password. They differ in how far they push security, how they are architected, and how much of the desktop they cover.

We put this comparison together to show where Gaze differs from Howdy, Visage, and Biopass. If we've missed something or got a detail wrong, let us know.

At a glance ​

GazeHowdyVisageBiopass
LanguageRustPython + CRustC++ + Tauri
Face detectionSCRFDdlib (HOG/CNN)SCRFDYOLO-Face
RecognitionArcFace (MobileFaceNet / ResNet50)dlib ResNet (128-d)ArcFace (w600k_r50)EdgeFace
Inference runtimeONNX RuntimedlibONNX RuntimeONNX Runtime
IR camera supportYes, hybrid RGB+IR combining, built-in UVC emitterYesYes, built-in UVC emitterYes
FingerprintNoNoNoYes
ArchitectureRoot daemon + system DBusSubprocess per auth (no daemon)Daemon + DBusDaemon + DBus
Model reload per authNo (warm daemon)Yes (cold each time)No (warm daemon)No (warm daemon)
Templates at restTPM-sealed, account-bound encryption by default; explicit opt-outPlaintext encodingsSQLite storeLocal store
Keyring unlock after a face loginYes, optional TPM-sealed credential replayed to pam_gnome_keyringNoNoNo
Model integritySHA-256 verified on downloadBundledSHA-256 pinnedBundled
InterfacesCLI (with TUI) + GTK GUI + GNOME/Cinnamon extensions + KDE System SettingsCLI onlyCLI + TUI enrollmentGUI (Tauri) + CLI
Desktop integrationGNOME, Cinnamon and KDE Plasma lock screens, Hyprland/hyprlock, LightDM, console/TTY loginPAM onlyPAM onlyPAM + polkit
Configurationconfig.toml + CLI + GUIManual ini fileConfig file / NixGUI
Guided multi-angle enrollmentYesBasicBasicBasic
Built-in health checkYes (one doctor command)PartialPartialGUI status
Camera sourcesGStreamer / PipeWireV4L2 device pathV4L2 device pathV4L2 device path
Runs on older (pre-AVX2) CPUsNo (gazed requires AVX2; clients run anywhere)YesVariesVaries
Packagingdeb / rpm / COPR / openSUSE / Arch / Nix / Flatpak / scriptdeb / AUR / COPR / openSUSEdeb / rpm / Nix / AURdeb / rpm / AUR
LicenseGPL-3.0-or-laterMITMITMIT

Liveness and anti-spoofing ​

Liveness detection is the biggest security difference between these projects. It's what prevents someone from unlocking your machine with a photo or video of you.

ApproachPrinted photoScreen replayVideo replay
GazeMiniFASNet-V2 CNN (RGB) + eye-motion check (IR)BlockedBlockedPartial
HowdyNone (only skips over-dark frames)Not blockedNot blockedNot blocked
VisageLandmark-stability, zero-model eye micro-movementNot blockedNot blockedNot blocked
BiopassAnti-spoof model (unnamed upstream) + IR-camera checkBlockedBlockedPartial

Gaze and Biopass run an actual anti-spoofing model on the face crop, so they reject both photos and screens. Visage's check is motion-only, and its own README reports that the passive liveness check did not discriminate in testing: a hand-held phone screen displaced more than two genuine live attempts. Howdy does no active anti-spoofing and its own README warns it "is in no way as secure as a password" and that it should not be your sole authentication method. No project fully defeats a high-quality video replay or 3D mask, which is why a password fallback stays recommended everywhere, Gaze included.

A note on the alternatives ​

Any of the three will give you working face authentication. Howdy came first and is the most widely packaged. Visage is another Rust daemon with IR support, and its docs explain the limits of its liveness check. Biopass supports fingerprints as well as faces and has a GUI.

We maintain Gaze, but we'd rather you use what fits your hardware, desktop, and threat model. Check the security limitations of whichever project you choose.