v0.19.21
What's Changed
Fixed
-
RustConn did not start at all on Fedora 44: the
setlocaleguard aborted the process (issue #271) — 0.19.20 shipped therustconn-locale-sysstartup 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 beforemain()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 ofmain()runs. So the check was not catching asetlocalecall 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 twoinit_localecalls, which is what a regression inmain()'s ordering would look like — while a library thread that was there beforemain()no longer stops the application from starting.Refusal::MultiThreadedbecomesRefusal::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_PRELOADlibrary that starts a thread.
Changed
- The thread-count clause of the
setlocalecontract is documented as a judgement, not a proof (issue #267) — 0.19.20's notes indeny.toml,.cargo/audit.tomland 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 ininit_localeis 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.RustConnSnap
sudo snap install rustconnDebian/Ubuntu (.deb from this release)
sudo dpkg -i rustconn_0.19.21_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (.rpm from this release)
sudo dnf install rustconn-0.19.21-1.fc44.x86_64.rpmAppImage
chmod +x RustConn-0.19.21-x86_64.AppImage
./RustConn-0.19.21-x86_64.AppImagemacOS (Homebrew)
brew tap totoshko88/rustconn
brew install rustconn
open $(brew --prefix)/opt/rustconn/RustConn.appAll 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 rustconnArch Linux (AUR)
yay -S rustconnFreeBSD (Ports)
pkg install rustconnFull installation guide: https://github.com/totoshko88/RustConn/blob/main/docs/INSTALL.md