Open Up: Contributions and Collaborations
Hello fellow space travelers! It’s been a while since we catalogued all of our goings on here on Starship Pop!_OS, so we thought it might be a good time to highlight what our upstream contributions have looked like over the last couple of years. We’ve been logging some major light years! Have a look.
GNOME
Keyboards Settings Panel and Keyboard Shortcuts
We worked in the GNOME design team to modernize and improve the GNOME Settings keyboard panel and shortcuts and engineered the new designs that ship today.
- Keyboard panel re-design
- keyboard: Update panel layout with descriptions for sections
- keyboard: Avoid modifying `xkb-options` when user changes nothing
- keyboard: For xkb options, have “Layout default” toggle, and “None”
- keyboard: Create CcXkbModifierDialog only when used
- keyboard: Rename `XkbOption` and `XkbModifier` with `Cc` prefix
- keyboard: Alternate characters key setting behaves in an unclear way
- keyboard: Allow disabling alternate characters key
- WIP: Use gsettings to get description of key bindings
- WIP: keyboard: add a switch to enable/disable the switch-to-application* bindings
Laptop Battery Thresholds
This one is a work-in-progress that started a year ago. We’re seeing some recent movement happening here, so hopefully we can get this one in soon.
GNOME Settings General and Responsiveness
We think Settings are an important window into the capabilities and options of an OS experience. As such, we tend to spend a lot of time helping to improve the Settings experience on GNOME. And with Pop!_OS auto-tiling, responsiveness is important to us as well. Our QA team tests every panel for responsiveness and we provide patches to enable or fix issues as they arise.
- shell: Fix bug when multiple panels use custom sidebar widget
- Add “Disable While Typing” toggle for touchpad
- users: Respect `enforcing` in `/etc/security/pwquality.conf`
- mouse: Use HdyActionRow
- user-accounts: Use HdyClamp
- user-accounts: Use HdyActionRow
- Bump libhandy to 1.2.0
- power: Refactor battery row code into a `CcBatteryRow` type
Contributions to other GNOME Projects
GNOME Disk Utility
- Improve the visual appearance of the devtab toolbar
https://gitlab.gnome.org/GNOME/gnome-disk-utility/-/merge_requests/57
Nvidia Optimus Application Launching
Gnome Shell
- appDisplay: Only show add/remove favorite when shouldShowApp() is true
- location: Split `Location.Indicator` into a seperate `GeoclueAgent`
GTK
- Begin work toward gtk-layer-shell in gtk4
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/3918 - x11: Fix handling of `RRScreenChangeNotify`/`RRNotify` events
- Tutorial Series on Building GTK Apps in Rust
https://mmstick.github.io/gtkrs-tutorials/1x00-intro.html
gtk-rs - Largest contribution was working on a few things to make subclassing easier. Otherwise, random fixes and additions:
- gtk: Make ButtonImpl depend on BinImpl
- gdk: Fixes for keymap/keysym API
- gtk: Do not use g_type_check_class_cast in WidgetClassSubclassExt
- gtk: Add binding for gtk_container_class_handle_border_width()
- glib: Remove Char::new/UChar::new, in favor of from/try_from
- glib: From/TryFrom implementations for working with Char/UChar
- gtk: Add WidgetClassSubclassExt::{css_name,set_css_name}
- gio: Mark DBusProxy/DBusConnection as send+sync and regenerate
- glib: Move type_data() and get_type() to new unsafe trait
- glib: #[object_subclass] proc macro
- gtk: Add enter_notify_event and leave_notify_event to WidgetImpl
- glib-macros: Make GBoxed not require importing BoxedType
- gio: Add glib-compile-resources wrapper, and macro to include
- gtk: Implement Deref for TemplateChild
- Use #[must_use] on BindingBuilder for property/gsetting
- Consistently use Self::Class when defining class_init()
- Update gir and regenerate
- Rename glib_bool_error! and glib_result_from_gboolean!
- Rename glib_object_interface! to object_interface!
- examples: Do not use glib::{wrapper, object_subclass}
- Rename glib_wrapper! and glib_object_subclass! without glib prefix
- Update gir submodule and regenerate
- glib: Make Object::new() generic
- gio: Use builder pattern for Settings::bind()
- Subclassing for GtkButton, backported from gtk4-rs
- gtk: Make methods of *Impl traits take Self::Type
- gio: Make methods of *Impl traits take Self::Type
- glib: Make virtual methods take wrapper of type, not parent
- Remove optional $rust_class_name from glib_wrapper
- Change all instances where $rust_class_name is passed to glib_wrapper!
- Update gir and regenerate
- Take proper advantage of glib::Object<T>::as_mut()
- Remove unused imports
- glib: Add a pub use or object::Class in root of library
- glib: Implement AsRef/AsMut<T::GlibClassType> for Class<T>
- In glib_object_wrapper!, use generic Class type instead defining a st
- glib: Don’t derive PartialOrd/PartialEq implementations in glib_wrapper!
- glib: Remove PhantomData from Value, and make it #[repr(transparent)]
- glib: Derive PartialOrd, PartialEq, Eq, and Debug in glib_object_wrap…
- glib: Remove PhantomData from struct created in glib_object_wrapper!
- glib: Update glib::subclass example to use an imp module
- glib: Add a ObjectSubclass version of glib_wrapper!
- glib: Use traits explicitly with $crate in glib_object_wrapper!
- glib: Remove wrapper::Void
- glib: Use :ty rather than :path for ffi_name and ffi_class_name
- glib: Fix .get_instance() assert failure with zero-sized type
- glib: Define a Variant::is_container(), use it for checks
- glib: Add a VariantIter type, and Variant::iter() method
- glib: Implement ToVariant and FromVariant for Variant
- glib: fix: Do not transfer ownership in Variant::new_variant()
- glib: Use $crate when invoking glib_object_wrapper! in a macro
Open Firmware
- Collaboration with Intel and AMD to enable their platforms in open firmware
Coreboot
System76 has ported a wide variety of our laptops to coreboot and upstreamed the majority of these changes. Below is a list of changes that improve coreboot for all vendors.
Improvements for CometLake CPUs
- https://review.coreboot.org/c/coreboot/+/31535
- https://review.coreboot.org/c/coreboot/+/31536
- https://review.coreboot.org/c/coreboot/+/33940
- https://review.coreboot.org/c/coreboot/+/33941
- https://review.coreboot.org/c/coreboot/+/35924
- https://review.coreboot.org/c/coreboot/+/46300
- https://review.coreboot.org/c/coreboot/+/47914
- https://review.coreboot.org/c/coreboot/+/49104
- https://review.coreboot.org/c/coreboot/+/49172
Add support for PCIe hot plug
Add driver for TI smart amplifier
Update Intel Microcode
Fix SMMSTORE clear command
Improvements for TigerLake CPUs
- https://review.coreboot.org/c/coreboot/+/50597
- https://review.coreboot.org/c/coreboot/+/56862
- https://review.coreboot.org/c/coreboot/+/56867
- https://review.coreboot.org/c/coreboot/+/57823
Enabled TigerLake-H CPUs (many changes in one topic)
In the process of adding generic NVIDIA hybrid graphics support
Enable flashrom on TGL-H chipsets
Many more changes made by System76 can be seen here, there are five pages, so make sure to view them all:
Fwupd
- Added support for thelio-io and system76-launch
- -- https://github.com/fwupd/fwupd/issues?q=author%3Ajackpot51
- System76 Launch Configurable Keyboard uses LVFS for all firmware updates
- -- https://fwupd.org/lvfs/devices/com.system76.launch_1.firmware
Nvidia Testing Collaboration
We’ve established a new testing relationship brought on by the recent GSync regression. We’ll now be testing pre-release nvidia drivers in the QA lab across a wide variety of hardware to catch regressions and bugs prior to release to the Linux community
Elementary App Center
- Collaboration to enable application responsiveness
- -- Homepage: Allow AppCenter Homepage to shrink to narrow sizes
- -- MainWindow: Allow search bar to shrink when window is narrow
- -- AppInfoView: Add scalable, full-width screenshots
- -- AppInfoView: Make App Info header wrap at narrow screen sizes
- AppInfoView: Change app description to Gtk.Label
- Monitor FlatpakInstallation for Changes
- Sort search view using search term
Fedora
- Current collaboration to help them get our software packaged on their platform
- -- https://github.com/orgs/pop-os/projects/18
Additional Upstream Collaboration
- Working with Deno to create distribution packaging for it
- -- https://github.com/denoland/deno/issues/10872
- Apt essential package removal prompt
- -- https://salsa.debian.org/apt-team/apt/-/merge_requests/196
- Distribution packaging for Alacritty
- -- https://github.com/pop-os/alacritty
- Working with ProtonVPN
- -- https://github.com/pop-os/repo-curated-free/issues/5
- Zbus
- -- https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/240
- -- https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/251
- -- https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/252
- -- https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/300
- -- https://gitlab.freedesktop.org/dbus/zbus/-/merge_requests/375
- Add serde support to clokwerk
- -- https://github.com/mdsherry/clokwerk/pull/29
- Make pbr’s MultiBar thread-safe
- -- https://github.com/a8m/pb/pull/92
- TypeScript / Deno
- -- Pop Shell as a successful experiment for using TypeScript for GJS extensions
- -- Arena allocator for Deno & Typescript with persistent unique keys via generational indices
- ---- https://deno.land/x/slotmap@0.1
Rust Community
Rust crates where we are the upstream
- Codec for freedesktop desktop entries
https://crates.io/crates/freedesktop-desktop-entry - FFI bindings for libparted
https://crates.io/crates/libparted - FFI bindings for GWeather
https://github.com/pop-os/gweather-rs - High level FFI bindings for the Linux mount and umount2 system calls
https://crates.io/crates/sys-mount - FFI bindings for Mutter
https://github.com/pop-os/mutter-rs - Library for systemd-boot configuration files
https://crates.io/crates/systemd-boot-conf - Hostname validator
https://crates.io/crates/hostname-validator - Library for interacting with Linux’s sysfs interface
https://github.com/pop-os/sysfs-class - DBus client API for fwupd
https://github.com/pop-os/fwupd-dbus - DBus client API for UDisks2
https://crates.io/crates/dbus-udisks2 - Library for parsing /etc/os-release files
https://crates.io/crates/os-release - DBus client API for logind
https://crates.io/crates/logind-dbus - Iterating swap and mount points in a system
https://crates.io/crates/proc-mounts - Futures codec for debian’s diversion files
https://github.com/pop-os/deb-diversion - Codec for debian’s changelog files
https://github.com/pop-os/deb-changelog - Single-threaded libc::poll-based async runtime reactor
https://github.com/pop-os/fd-reactor - Support for Linux’s pidfd for async process handling
https://crates.io/crates/pidfd - Traits to extend std::process::{ExitStatus, Output}
https://crates.io/crates/as-result - Library for iterating loaded kernel modules
https://crates.io/crates/proc-modules - Library for parsing environment files into an in-memory map
https://crates.io/crates/envfile - High level API for asynchronously fetching files from the web
https://github.com/pop-os/async-fetcher
Linux Kernel
System76 ACPI driver for coreboot-based systems
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fd13c8622a5ad4f7317b64de4f6aa2de1962220e
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=95563d45b5da9cdd07496bf54f0d83f25d679847
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0de30fc684b3883be73602b7557661951319a9b9
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=76f7eba3e0a248af4cc4f302d95031fa2fb65fab
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=603a7dd08f881e1b5c754429dac5af6c29992528
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=97ae45953ea957887170078f488fd629dd1ce786
Audio quirks for several Clevo boards
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2f0d520a1a73555ac51c19cd494493f60b4c1cea
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=89e3a5682edaa4e5bb334719afb180256ac7bf78
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7f665b1c3283aae5b61843136d0a8ee808ba3199
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=80a5052db75131423b67f38b21958555d7d970e4
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=891afcf2462d2cc4ef7caf94215358ca61fa32cb
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dbfe83507cf4ea66ce4efee2ac14c5ad420e31d3
- https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git/commit/?h=for-next&id=1278cc5ac2f96bab50dd55c8c05e0a6a77ce323e
System76 Projects as Upstream
- CLI and GTK application for multiple USB file flashing
https://github.com/pop-os/popsicle - JSON IPC backend launcher service w/ plugin API
https://github.com/pop-os/launcher - GTK application for firmware updates, with GTK widget for easy integration into any GTK application, such as GNOME Control Center
https://github.com/pop-os/firmware-manager - DBus services for automatic distribution software updates
https://github.com/pop-os/system-updater - DBus service for power profiles, graphics switching, fan curve control
https://github.com/pop-os/system76-power/ - Tensorflow container manager
https://github.com/pop-os/tensorman - A year of work to liberate EC firmware that’s also found use for other vendors
https://github.com/system76/ec - Tiler being re-written as a DE agnostic library to bring tiling to more environments
https://github.com/pop-os/tiler - Distinst - an installer backend also used by other distributions
https://github.com/pop-os/distinst
https://github.com/pop-os/distinst-v2 - Pop!_Shell - A GNOME extension to add tiling for GNOME based distros (eventually will utilize tiler library)
https://github.com/pop-os/shell
All in all it’s been a couple busy trips around the sun! Thanks for joining us on this journey throughout our productivity, and keep your view screens on for our upcoming contributions!
Like what you see?
Share on Social Media