I've been writing GTK applications in Rust for a few years now. I've also been in a unique position with a career at System76, where my day job relies on writing software exclusively for Linux in Rust, including GTK widgets and applications. I'm now at a point where I'm comfortable sharing what I've learned, and therefore this post will explain some of the best practices, patterns, and crates that I use today in my day to day job, from the perspective of a Rust-based software developer that had no prior experience in GTK before Rust.
The borrow-checker in Rust prevents unsafe memory management practices, requiring that the lifetimes of memory references are known to the compiler at compile-time. Yet for many problems, it is useul to have memory with an undetermined lifetime that is managed at runtime, sometimes holding references to other memory addresses. To that end, modern approaches to memory management are commonly being explored in the Rust ecosystem. This article will explore the benefits of choosing to model your software around an entity-component system.
In the last few weeks, I've been working on a new solution to firmware management on the Linux desktop. A generic framework which combines fwupd and system76-firmware; with a GTK frontend library and application; that is written in Rust.
Over the weekend, I experimented with designing a static website for personal use, which I could host through Keybase's KBFS-powered static site hosting service, through the use of a static website generator. This is the result of that effort.