Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- Documentation checked against 0.1.1. The security assessment now gives each mitigation the status
the code actually supports, including four that are only partial; the roadmap, the site's
quickstart, the dependency inventory, and the verification guide describe the released packages
instead of a release still to come.

## [0.1.1] - 2026-09-29

### Fixed
Expand Down
16 changes: 8 additions & 8 deletions DEPENDENCIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,12 @@ policies governing how dependencies are selected, pinned, monitored, and upgrade

## 1. Dependency Directory

> Every runtime crate except `notify-rust`, `ksni`, and `gettext-rs` has been added. The tables
> Every runtime crate below is in use; `notify-rust` was considered and not added. The tables
> record the *choice* of dependency and the reason for it; exact versions are pinned by the
> committed `Cargo.lock` — major versions are noted where they matter (`gtk4` 0.10 and
> `libadwaita` 0.8 must move together). The **License** column states the
> license the crate is expected to carry; it is confirmed against the crate's own metadata by
> `cargo deny check licenses` in CI at the moment the crate is added, and corrected here if it
> differs.
> `libadwaita` 0.8 must move together). The **License** column was checked against each crate's
> own metadata (`cargo metadata`) for 0.1.1. No license check runs in CI yet; `cargo deny` is the
> intended tool.

### 1.1 Runtime Dependencies

Expand All @@ -35,7 +34,7 @@ policies governing how dependencies are selected, pinned, monitored, and upgrade
| `tracing` | 0.1 | MIT | Structured logging and the spans that measure the latency targets. | Span-based rather than line-based, which is what makes the identifier-redaction policy enforceable per target instead of per call site. |
| `tracing-subscriber` | 0.3, feature `env-filter` | MIT | `EnvFilter`, driven by `USBGUARD_GUI_LOG`. | Same. |
| `thiserror` | 2 | MIT OR Apache-2.0 | Derives the error taxonomy that crosses layers. | Compile-time only in effect; adds no runtime behaviour to get wrong. |
| `gettext-rs` | Resolved at add time | MIT | Translation catalogue lookup. | The platform's own i18n mechanism, so translations integrate with the distribution's tooling rather than a bespoke format. |
| `gettext-rs` | 0.8, default features off, feature `gettext-system`; optional, behind `gui` | MIT | Translation catalogue lookup. | The platform's own i18n mechanism, so translations integrate with the distribution's tooling rather than a bespoke format. |

### 1.2 Development Dependencies

Expand All @@ -45,8 +44,8 @@ policies governing how dependencies are selected, pinned, monitored, and upgrade
| `cargo-fuzz` / `libfuzzer-sys` | Toolchain, not a manifest entry | MIT OR Apache-2.0 | Fuzzing the parser; target of zero panics over 10⁶ inputs. |
| `cargo-llvm-cov` | Toolchain | MIT OR Apache-2.0 | Coverage measurement against the >90% parser target. |
| `cargo-audit` | Toolchain | MIT OR Apache-2.0 | `make audit` — RustSec advisory scanning. |
| `cargo-deny` | Toolchain | MIT OR Apache-2.0 | License and duplicate-dependency checks; the authority for the License columns here. |
| Clippy, rustfmt | Toolchain component | MIT OR Apache-2.0 | `make lint`; Clippy carries the `disallowed-methods` lint that enforces the no-panic and runtime-boundary rules. |
| `cargo-deny` | Toolchain | MIT OR Apache-2.0 | License and duplicate-dependency checks. Not yet run in CI. |
| Clippy, rustfmt | Toolchain component | MIT OR Apache-2.0 | `make lint`; Clippy enforces the no-panic rules (lint levels in `Cargo.toml`, denied outright on `src/rules/`) and, through `disallowed-methods`, the runtime-boundary rule. |
| `cargo-deb`, `cargo-generate-rpm` | Toolchain | MIT | Native package building. |

### 1.3 System-Level Dependencies
Expand All @@ -58,6 +57,7 @@ policies governing how dependencies are selected, pinned, monitored, and upgrade
| GTK | 4.14 | Distribution | Runtime and build-time (`gtk4-devel`). |
| libadwaita | 1.5 | Distribution | Runtime and build-time (`libadwaita-devel`). |
| GLib | Matching GTK | Distribution | Main loop, GSettings, GResource (`glib2-devel`). |
| GNU gettext | any | Distribution | Build time only: `msgfmt` compiles the translations. Without it the build succeeds in English only, with a warning. |
| `pkg-config` | any | Distribution | Build-time discovery of the above. |
| A C toolchain | any | Distribution | Required by the `-sys` crates underlying the GTK bindings. |
| D-Bus (system bus) | any | Distribution | The only transport to the daemon. |
Expand Down
8 changes: 4 additions & 4 deletions MAINTAINERS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Maintainers

This document lists the maintainers of USBGuard GUI (USBGuardGUI) and defines the processes
This document lists the maintainers of USBGuardGUI and defines the processes
governing maintainership responsibilities, access, and lifecycle.

---
Expand Down Expand Up @@ -45,9 +45,9 @@ the case for a solo-maintained project.
| Resource | Access Holder | Notes |
| :------------------------- | :------------ | :------------------------------------------------------- |
| GitHub Repository (Admin) | `onyks` | Full admin access |
| Package Registry | `onyks` | Owner of the published package |
| GitHub Actions Secrets | `onyks` | Manages CI/CD credentials |
| Release Signing | `onyks` | Signs release artifacts (Sigstore keyless / GPG) |
| Package Registry | `onyks` | Owner of `usbguard-gui` on crates.io, published by the release workflow through Trusted Publishing |
| GitHub Actions Secrets | `onyks` | Manages CI/CD credentials; the `crates-io` environment holds none since Trusted Publishing |
| Release Signing | `onyks` | Sigstore keyless signing by the release workflow; no signing key exists ([docs/releasing.md](docs/releasing.md)) |
| Security Reporting Inbox | `onyks` | `[email protected]` — see [SECURITY.md](SECURITY.md) |

---
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,9 @@ For verifying release assets, see the [Release Verification Guide](docs/verifica

```bash
# Build dependencies
sudo dnf install gtk4-devel libadwaita-devel gcc # Fedora
sudo apt install libgtk-4-dev libadwaita-1-dev build-essential # Debian / Ubuntu
sudo pacman -S gtk4 libadwaita base-devel # Arch
sudo dnf install gtk4-devel libadwaita-devel gcc gettext # Fedora
sudo apt install libgtk-4-dev libadwaita-1-dev build-essential gettext # Debian / Ubuntu
sudo pacman -S gtk4 libadwaita base-devel gettext # Arch

git clone https://github.com/onyks-os/USBGuardGUI.git
cd USBGuardGUI
Expand Down Expand Up @@ -287,7 +287,7 @@ Contributions are welcome. The areas where help matters most:
1. **USBGuard on other distributions** — behaviour of the D-Bus bridge and its Polkit defaults on
systems other than the ones already checked.
2. **GTK 4 / libadwaita** — accessibility, keyboard navigation, and adaptive layouts.
3. **Packaging** — Flathub submission, and distribution packages.
3. **Packaging** — packages in the distributions' own repositories.
4. **Translations** — the interface is in English and Italian; [docs/translating.md](docs/translating.md)
explains how to add a language, no Rust needed.

Expand Down
36 changes: 25 additions & 11 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# USBGuardGUI Development Roadmap

This document outlines the **realistic, near-term** development plan for USBGuard GUI. Items
This document outlines the **realistic, near-term** development plan for USBGuardGUI. Items
beyond this scope are tracked as ideas in
[GitHub Issues](https://github.com/onyks-os/USBGuardGUI/issues) rather than as committed
release dates.
Expand Down Expand Up @@ -36,13 +36,14 @@ Delivered:
- **v0.2.0**, code complete: device actions with the runtime/permanent choice, the policy view
with safe removal and the disambiguation dialog, the new-rule dialog (guided and text modes),
cancellable operations with the 20 s / 180 s notices, runtime parameters, preferences.
- **Later, done**: notifications with a quick action (§9.5), background mode and the tray icon
(§9.6), start at login. Still to do: localization (§9.7) and Flathub submission.
- **Packaging**: `.deb` (built on Ubuntu 24.04, installs on Debian and Ubuntu), `.rpm` (installs
on Fedora, pulling in `usbguard-dbus`), an Arch `PKGBUILD`, and a Flatpak manifest.
- **Beyond the plan**: notifications with a quick action (§9.5), background mode and the tray
icon (§9.6), start at login, and localization (§9.7) with an Italian translation.
- **Packaging and release**: `.deb` (built on Ubuntu 24.04, installs on Debian and Ubuntu), `.rpm`
(installs on Fedora, pulling in `usbguard-dbus`), an Arch package, and a Flatpak bundle, built
and signed by one release workflow; the crate on crates.io.

No release exists yet. Before tagging: the open Phase 0 items below, a manual pass over the
v0.2 actions on a real system, and screenshots for the AppStream metadata.
Released: **0.1.0** (2026-09-27), with everything above, and **0.1.1** (2026-09-29), which fixes the
status icon in the Flatpak. The v0.2.0 scope below shipped in 0.1.0.

---

Expand Down Expand Up @@ -153,7 +154,7 @@ non-UTF-8 bytes) — and idles under the memory target of §13.2.

---

## Next — v0.2.0: acting on policy
## v0.2.0 scope: acting on policy (shipped in 0.1.0)

**Goal:** the window can change what it displays, with the runtime/persistent distinction made
explicit at every step.
Expand All @@ -169,15 +170,28 @@ explicit at every step.

---

## Later
## Next

Not committed, and in no particular order: localization (§9.7) and Flathub submission (§14.1).
Notifications, the tray, background mode, the Flatpak manifest, and native packages are done.
Not committed, and in no particular order. Most come from checking
[`docs/security-assessment.md`](docs/security-assessment.md) against the 0.1.1 code: they are the
mitigations it marks `Partial` or untested.

| Item | Description |
| :--- | :---------- |
| **Automate T2 and T13** | A daemon restart during an operation (reported as inconclusive rather than failed), and a Polkit prompt left open for ten minutes, as mock tests. |
| **Identifier-free logs, tested** | A test asserting that a default-level log contains no device identifier, and a notice in the `debug` output itself that it contains them (today only `--help` says so). |
| **Measure filesystem access** | The §13.2 `strace` measurement, with the program's own accesses told apart from those of the libraries it links. |
| **Translations** | Open issues invite French, Spanish, Russian, Chinese, German, Brazilian Portuguese, and Japanese; [docs/translating.md](docs/translating.md) explains how. |
| **Arch User Repository** | A `usbguard-gui` package, when AUR registrations reopen. |
| **Reproducible builds** | See [docs/verification.md](docs/verification.md) §5. |

One upstream contribution is worth more than any of them: proposing
`removeRuleIfMatches(id, expected_text)` to USBGuard would eliminate the rule-removal race at its
root rather than narrowing it client-side.

Flathub is not planned for now. The Flatpak bundle attached to each release installs on any
distribution.

---

## Explicitly Out of Scope
Expand Down
6 changes: 3 additions & 3 deletions docs/interfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,12 +156,12 @@ That is the complete list. In particular:
| `/usr/share/metainfo/io.github.onyks_os.UsbguardGui.metainfo.xml` | AppStream metadata. | Package lifetime |
| `/usr/share/glib-2.0/schemas/io.github.onyks_os.UsbguardGui.gschema.xml` | GSettings schema. | Package lifetime |
| `/usr/share/icons/hicolor/…/io.github.onyks_os.UsbguardGui.svg` | Application icon. | Package lifetime |
| `/usr/share/locale/…/usbguard-gui.mo` | Translation catalogues. | Package lifetime |
| `/usr/share/locale/<lang>/LC_MESSAGES/usbguard-gui.mo` | Translation catalogues. | Package lifetime |
| `/usr/share/doc/usbguard-gui/70-usbguard-gui.rules.example` | Example Polkit rule — **shipped inert, never installed into `/etc/polkit-1/rules.d/`.** | Package lifetime |

The post-install script modifies no system configuration. Its only action is the GSettings schema
recompilation that packaging conventions require.
The packages have no post-install script and modify no system configuration. The GSettings schema
is compiled by the distribution's own GLib package, through the trigger it registers for
`/usr/share/glib-2.0/schemas/`.

### D-Bus interfaces consumed

Expand Down
Loading
Loading