Skip to content

v0.19.21

Choose a tag to compare

@github-actions github-actions released this 11 Aug 21:08
· 4 commits to main since this release

What's Changed

Fixed

  • RustConn did not start at all on Fedora 44: the setlocale guard aborted the process (issue #271) — 0.19.20 shipped the rustconn-locale-sys startup guard described below, and on Fedora 44 Workstation it refused the very first call and panicked before the window ever appeared: setlocale in a process with 2 threads. The guard required the process to have exactly one live thread, which is a state an application cannot actually arrange. A shared library's ELF constructor runs before main() is entered and may spawn a thread there — Fedora 44 pairs glibc 2.43 with OpenSSL 3.5, and a constructor-spawned thread is present by the time the first statement of main() runs. So the check was not catching a setlocale call that had drifted out of the startup window; it was reporting a precondition the platform had already made unattainable, and turning it into a hard abort. The guard now samples the thread count on its first call and treats that as the baseline, refusing only when the count grows past it. That is the condition the call site actually controls — a thread this program started between the two init_locale calls, which is what a regression in main()'s ordering would look like — while a library thread that was there before main() no longer stops the application from starting. Refusal::MultiThreaded becomes Refusal::ThreadCountGrew { baseline, current }, so the panic message now names both numbers instead of only the total.

    Not Fedora-specific despite being reported there. Nothing in the mechanism is: any distribution whose shared libraries spawn a thread from an ELF constructor reaches the same abort, and that is a property of the installed libraries rather than of the distribution. Fedora 44 is where the combination landed first; a rolling release picking up the same OpenSSL or p11-kit would follow, as would any system with an LD_PRELOAD library that starts a thread.

Changed

  • The thread-count clause of the setlocale contract is documented as a judgement, not a proof (issue #267) — 0.19.20's notes in deny.toml, .cargo/audit.toml and the crate docs all said the guard "refuses to run once a second thread exists". That is no longer what it does, and the notes would have been read as describing current behaviour. They now describe the baseline rule and say why it is a baseline. The SAFETY comment in init_locale is explicit that this is the one clause the crate cannot establish by inspection: a pre-main() library thread is not reachable from there, so whether it reads locale state is unknown, and tolerating it is a deliberate trade against aborting at startup on a correct call site. What makes the call sound remains the call site — main(), ahead of GTK, tokio and the tracing subscriber — with the guard as defence-in-depth against that ordering regressing, which is what the 0.19.20 note already said and the code now matches.

Installation

Flatpak (Recommended)

flatpak install flathub io.github.totoshko88.RustConn

Snap

sudo snap install rustconn

Debian/Ubuntu (.deb from this release)

sudo dpkg -i rustconn_0.19.21_amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora (.rpm from this release)

sudo dnf install rustconn-0.19.21-1.fc44.x86_64.rpm

AppImage

chmod +x RustConn-0.19.21-x86_64.AppImage
./RustConn-0.19.21-x86_64.AppImage

macOS (Homebrew)

brew tap totoshko88/rustconn
brew install rustconn
open $(brew --prefix)/opt/rustconn/RustConn.app

All dependencies (GTK4, libadwaita, VTE, Adwaita icons) are installed automatically.
Requires macOS 13 (Ventura) or later.

OBS Repositories

Packages available at: https://build.opensuse.org/package/show/home:totoshko88:rustconn/rustconn

# Debian 13 (Trixie)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Debian_13/ /' \
  | sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Debian_13/Release.key \
  | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn

# Ubuntu 24.04 LTS (Noble)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_24.04/ /' \
  | sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_24.04/Release.key \
  | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn

# Ubuntu 26.04 LTS (Resolute)
echo 'deb http://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_26.04/ /' \
  | sudo tee /etc/apt/sources.list.d/rustconn.list
curl -fsSL https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/xUbuntu_26.04/Release.key \
  | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rustconn.gpg > /dev/null
sudo apt update && sudo apt install rustconn

# Fedora 44
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Fedora_44/home:totoshko88:rustconn.repo
sudo dnf install rustconn

# Fedora 43
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/Fedora_43/home:totoshko88:rustconn.repo
sudo dnf install rustconn

# openSUSE Tumbleweed
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/openSUSE_Tumbleweed/ rustconn
sudo zypper ref && sudo zypper in rustconn

# openSUSE Leap 16.0
sudo zypper ar https://download.opensuse.org/repositories/home:/totoshko88:/rustconn/openSUSE_Leap_16.0/ rustconn
sudo zypper ref && sudo zypper in rustconn

Arch Linux (AUR)

yay -S rustconn

FreeBSD (Ports)

pkg install rustconn

Full installation guide: https://github.com/totoshko88/RustConn/blob/main/docs/INSTALL.md