Skip to content

DHS 0.1.3 — a native interface on Windows and Linux

Pre-release
Pre-release

Choose a tag to compare

@Necta14 Necta14 released this 03 Sep 15:52
· 11 commits to main since this release

A native interface on both platforms, and a defect that made wrong commands look right.

Still a pre-release, and it will stay one until the application database exists: matching your
programs across operating systems is the reason DHS exists, and that part is not written yet. What
is here is the file half, and that half is now tested on real Windows as well as Linux.

New: the Windows interface

dhs-gui.exe ships inside the Windows archives. Win32, drawn by hand, one portable executable
under 3 MiB
that needs nothing installed, asks for no administrator rights and leaves nothing
running. Put it next to dhs.exe, on a stick if you like, and double-click.

It drives the same binary through --json, exactly as the GTK4 front end does on Linux, and holds
no rule of its own: every number and every warning on screen comes from the core. The palette and
the spacing are libadwaita's, so the two interfaces read as one program.

Why hand-drawn: a portable single file that looks current ruled out the alternatives. WinUI needs
the Windows App SDK, anything web-based drags in a runtime, and themed Win32 controls look like a
2009 utility however modern the theme. The details, including why GDI+ cannot be called from Go at
all, are in gui/windows/README.md.

Fixed: a mistyped flag exited successfully

Every command swallowed flag parse errors and returned success, so dhs scan --only foo printed
"flag provided but not defined" and then exited 0. Any script, any CI job and the interface itself
would have carried on as though the command had run. Parse errors now exit 2; --help still exits
0, because asking for help is not a failure.

It was found the embarrassing way: a wrong flag in the Windows test harness looked like three
consecutive clean runs.

Also

  • install.ps1 is ASCII throughout: on a real console the ellipsis rendered as a bare full stop,
    which made the progress lines look truncated.
  • The test suite now compiles the Windows interface. It sits behind a build tag, so go vet ./...
    on Linux never looked at it and it could have broken unnoticed.

Verified for this release

Thirteen checks, all green: formatting, go vet for Linux and for Windows, five builds including
both interfaces, the unit tests, the race detector and the end-to-end cycle.

On Windows 11 IoT Enterprise LTSC 24H2, driven over SSH: install, scan, backup with
verification, verify, list, a refused wrong passphrase, a dry run, a restore into an emptied
profile and a second restore over existing files. Every file came back identical bit for bit,
including a name with Romanian diacritics, a compressible duplicate pair and an incompressible one.
The second restore placed all of them beside the originals with the (DHS) suffix rather than
overwriting.

On Linux, the .deb installs on Debian and Ubuntu, the .rpm on Fedora, Rocky and openSUSE, the
tarball runs on Alpine against musl, the AppImage runs without FUSE, and the AUR recipe builds
dhs-cli and dhs-gui on Arch with the test suite running inside check().

Install

Windows, in PowerShell:

irm https://dhs-suite.vercel.app/install.ps1 | iex

That installs the command-line tool. For the interface, take the Windows archive below: it holds
both executables. Verified with Defender's real-time protection on.

Linux: the .deb, the .rpm, the AppImage or the tarball. On Arch, dhs-cli and dhs-gui
build from the recipe in packaging/aur/.

sha256sum -c SHA256SUMS --ignore-missing

What is still missing

The application database, application detection and dhs plan. Until those exist, DHS moves your
files and settings but cannot tell you which of your programs has an equivalent on the system you
are moving to. Do not migrate anything you cannot afford to lose.