Machine ID читает несколько независимых аппаратных источников без запуска PowerShell/WMIC.
Источники
- Windows: SMBIOS UUID, baseboard serial, MachineGuid, volume serial;
- Linux: DMI
/sys/class/dmi/id/* и /etc/machine-id;
- macOS: IOPlatformUUID через
ioreg.
Сырые идентификаторы наружу не возвращаются: binary выдаёт salted SHA-256. Общий id строится из наиболее стабильных источников, volume serial остаётся компонентом для частичного сопоставления.
Смена встроенной соли нарушит сопоставление с ранее зарегистрированными устройствами. Выпускайте такую смену только вместе с версией fingerprint и серверной миграцией.
Timeout и включение модуля задаются в launcher.config.json через native.machineId.enabled и native.machineId.timeoutMs.
Устройство binary
platform/windows.rs читает SMBIOS, registry и serial системного тома;
platform/linux.rs читает DMI и machine-id;
platform/macos.rs получает IOPlatformUUID;
fingerprint.rs единственный имеет доступ к соли и превращает сырые поля в hashes;
model.rs описывает публичный JSON, который читает Electron;
main.rs только печатает результат в stdout.
Тип с сырыми источниками имеет видимость pub(crate) и не реализует
сериализацию. Это специально не даёт случайно вернуть hardware identifiers из
будущего API метода.