Roadmap for Pop!_OS
This roadmap details features which are currently-planned to be implemented in Pop!_OS, as well as major features which were added to Pop!_OS during previous release cycles. Only features specific to Pop!_OS will be listed here. To see how features are chosen, see the Pop!_OS Development Approach page.
However, note that feature development in Pop!_OS is not exclusive to any particular point release, as we follow a rolling-release strategy for updates to projects which we maintain. This means that features are added to Pop!_OS as soon as they are finished, instead of being withheld to the next point release. When features are completed, they are added to the latest "stable" and "long term stable (LTS)" point releases, whenever possible.
These are features which we would either like to, or are already in the process of, implementing. As these are completed, they will be listed underneath a release cycle, indicating which cycle the feature was implemented during. When a feature is listed as being implemented during the 20.04 release cycle, this means that it was completed before 20.04 was released, and thus was available on release for 20.04.
A new Rust crate built around asynchronous I/O, using Rust's async / await syntax. This project will be used across all Pop!_OS and System76 projects for caching, fetching, and validating files fetched from HTTP/S file servers. Features shall include:
- Built around
- Concurrently fetching multiple files at the same time
- Using multiple concurrent connections per file (as parts) to increase throughput
- Using multiple mirrors to fetch different parts of the same file from
- Defining minimum and maximum part size
- Defining maximum requests per peer, and maximum number of files to fetch concurrently
- Checking modified timestamps and content length to determine when fetching is required
- Optional checksum validation (MD5 / SHA256)
- Cancellation, timeout, and retry handling
- Resumable downloads, when a download is interrupted
- Command line client with IPC and RPC support, w/ process isolation support
The current goal is to use this for:
- Rapidly synchronizing apt source lists
- Speedily fetching & validating debian packages
- Fetching the recovery ISO, which would benefit from resumable downloads
- Creating a useful tool for our open source community
GNOME Online Accounts
- Add additional providers to GNOME Initial Setup (CalDav & CardDav)
- Patch GNOME Calendar and GNOME Contacts for these new providers
- Switch to specify running applications on the discrete GPU in GNOME Settings
- Patch Steam and other Pop maintained and supported applications with a graphics preference description in the desktop file
- Documentation to help the community identify apps that don't support hybrid graphics and details on how developers can add support
- Add right click app icon option > Application Settings
- Alongside OS installation option
- Resizing LUKS and LVM partitions
- Create Rust bindings for
- Create Rust crates for disk-probing and management
- Separate disk management from the installer
distinstas a daemon for the installer
- Enabling Wayland support for the installer
- Support for exotic LUKS and LVM combinations
- LVM snapshot support
- Support for ZFS and its special features
- Move away from Launchpad and host our own apt repositories
- Rewrite our packaging CI in Rust
- Support periodic watching of repositories for commits to be built
- Support distributing package builds to multiple build servers
- Possibly support a web interface for managing the repository and build servers
- Add changelogs to projects using a changelog generator based on conventional commits (we may have to build this tool ourselves)
- Change LSB descriptions to Pop for 20.04
- Smooth codec installation
- Remove System76 driver for System76 hardware customers. Integrate necessary information and features into the desktop.
- Pop features in GNOME Settings > About for the new GNOME 3.36 panel design
- Transition Thelio I/O firmware updates to LVFS
- Battery threshold settings for System76 hardware with open firmware
- Keyboard configuration utility for System76 hardware with open firmware
The #1 competitor to GNOME Shell for our users is i3wm. Tiling window management in GNOME Shell is currently really bad, but we can fix this with:
- Advanced window tiling
- Setting to launch applications tiled
- Keyboard shortcuts update for window navigation and movement
- Quick launcher for launching apps and switching windows
Create a utility for our support team and users, which contains:
- Common repair functions for automatically repair common issues
- Automatic mounting and chrooting for repairing an install
- Generation of logs to send to the support team
- Add support for updating the recovery partition
- Add support for refreshing the OS from GNOME Settings
- Reduce the bandwidth required to update the recovery partition
- Switch to using asynchronous I/O for all network connections
- Replace all usage of
futures01& combinators with
- Improve handling of network timeouts by integrating our
- Upgrade to
dbus-rs0.7, and investigate handling requests in an async fashion
- Support for creating bootable Windows 10 drives
- Imaging from an existing drive to many other drives
- Updating the GTK code to use new practices that we've developed
- Add support for asynchronous I/O in the GTK frontend
- Change the way the GTK frontend works so that Flatpak can be supported
- Internationalization support, with Project Fluent.
- System76 Power settings in GNOME Control Center
- Configurable power profiles in a simple configuration format
- Support for handling AC plug events, with configurable thresholds
- Power profiles for non-Intel processors
- Investigate handling DBUS requests in an async fashion
- AMD integrated / NVIDIA dedicated graphics switching
- AMD integrated / AMD dedicated graphics switching
- Intel integrated / AMD dedicated graphics switching
- Backport Docker and Tensorman to 18.04 LTS
- AMD GPU support with ROCm (requires packaging ROCm?)
These are features which have been implemented during the 19.10 release cycle, leading up to 20.04.
Contributions to upstream projects
Contributions to Rust crates which we rely on in our software
- futures-codec: Added
- http-client: Fixed an issue with GET requests sending an empty body
- pbr: Made the
MultiBarthread-safe, enabling bars to be added dynamically over time
- Packaged the NVIDIA Codec SDK
- ffmpeg was rebuilt with NVENC support, enabling NVENC in OBS
- Chromium is now being built from Debian sources with VAAPI HW decode support
- The CLI has been rewritten around asynchronous I/O, which significantly reduced memory use.
- We previously used one thread per USB device being flashed -- now we only need one
- Which required 68 MiB to flash 3 devices, instead of the 4 MiB today
- The CLI now outputs a stream of machine-readable RON events when stdout is not a TTY.
- Moved the GTK widget from the Info Overview to a new Upgrade panel in GNOME Settings
- Added a refresh OS section to the upgrade panel
- Support for recovery upgrades
- Support for cancelling a recovery upgrade
- Misc. improvements to fix common issues and increase success rates
Rust Crate Releases
New Rust crates that we've developed and released
- as-result: AsResult / IntoResult traits, with ExitStatus handling
- async-fetcher: asynchronous file fetcher
- deb-changelog: Zero-copy parser and futures codec for debian's changelog format
- deb-control: Zero-copy parser and futures codec for debian's control file format, used in most Debian files
- deb-diversion: Futures codec for Debian's
- gtk-extras: Common GTK widgets, functions, and behaviors across our GTK projects
- pidfd: Linux (>= 5.3) process ID file descriptor support
- srmw: asynchronous single-reader, multi-writer
- [usb-disk-probe]: asynchronous USB disk device prober for Linux
- [fd-reactor]: A simple async reactor for
libc::polling file descriptors and waking up task executors
- Upgraded from
dbus-rs0.6 to 0.7 (adds support for async I/O)
- Support for hybrid graphics switching, to keep the GPU powered off until an application requests it
With the open source ecosystem increasingly relying upon Flatpak as a distribution model by application developers on the Linux desktop, it is important to bring that support to Pop!_OS out of the box. This entails:
- Having Flatpak installed by default, with the Flathub source repository
- Adding Flatpak repo support in Repoman, our tool for managing apt repositories
- Ensuring that the Pop!_OS Repo is listed as a 1st party in Repoman
- Updating the Pop!_Shop to bring in Flatpak support from elementary
- Fixing the display of app sources so that Pop's repository has higher priority
Pop!_OS 19.10 was released on October 22nd, 2019.
linux-system76package now provides a kernel that is shared between all supported releases
The upgrade daemon was released in the days leading up to the 19.10 release. The features of the upgrade daemon include:
- A DBus daemon for carrying out checking for release upgrades and setting them up
- A systemd offline-update service which the upgrade daemon prepares for the next boot
- A desktop notification service which runs as the user, to provide desktop notifications
- A CLI and GTK frontend for interacting with the DBus daemon
- Integration inside of GNOME Settings for the GTK widget
- Support for NVIDIA hybrid graphics was added to the daemon
Pop!_OS 19.04 was released on April 18th, 2019.
- A handful of bugs were reported and fixed during this cycle.
- A few additional system checks were added to prevent incompatible installation setups.
- EFI partitions now require at least 500 MiB, to decrease the likelihood of issue reports consisting of no-space-left errors.
The following packages were added / updated during this release.
- Geary 3.32 backported to bionic and cosmic
- GNOME Authenticator
- GNOME Podcasts
- Steam 188.8.131.52
- The GTK UI was rewritten using a better architecture for UI app development.
- The code is now easier to maintain, due to being less complex, and having less of it.
- UI is now more responsive than before, so the chance of the UI hanging is now impossible.
- A bug was fixed that would cause systems with card readers to indefinitely hang.
Refresh OS Installations
Two features have been developed during this cycle: "Refresh" and "Alongside OS" installation options. The refresh feature was the first to be complete, providing the ability to retain user accounts and files while reinstalling the OS. The alongside OS option will follow shortly after.
- Fan controls have been improved in this release.
- The daemon now actively knows which state is currently set.
- Signals to listening clients are now sent when the power profile is changed.
Due to the many issues experienced with Ubuntu's
do-release-upgrade script, a new project was
started during this cycle to improve the reliability of release upgrades. This daemon is
responsible for performing system repairs and preparing the system for a release upgrade.
- Adds the ability to upgrade the recovery partition.
- Adds the ability to perform a release upgrade offline with systemd and the recovery partition.
- Offline installs with systemd will boot into a minimal environment to perform the upgrade, and reboot when finished.
- As with
system76-power, it provides a CLI frontend in the same binary that the daemon launches from.
- Some limited forms of repairing possible system errors that would prevent a release upgrade.
- Provides a daemon that can be used to check for release upgrades
Released on October 20th, 2018, the focus of development was furthered improvements to the reliability and feature set provided by our distribution installer; the addition of many third party applications, including Tensorflow; and the inclusion
- All bugs reported against the new installer were fixed during this cycle.
- Many system checks were added to prevent incompatible installation setups.
- A new crate for managing keyboard and language locales was developed.
- Setting the correct keyboard layout for the cryptsetup screen was fixed.
- Various portions of
distinstwere separated into multiple crates.
- Improved support for detecting required packages based on installation configuration, and removal of packages which are not necessary for that configuration.
debrepwas created to experiment with building our own apt repositories from a TOML spec.
- A third party repository was created from
debrepfor storing packages fetched from third party resources, as well as NVIDIA and Tensorflow packaging.
- Many popular applications were added to the repositories, with more to come in the future.
- Various actions throughout the UI would cause the application to hang. Patches were submitted upstream to elementary to prevent the UI from freezing.
- A patch for a screenshot cache and parallel fetching of screenshots was also submitted.
- Fan controls were added, with support for Thelio's I/O boards.
- The CLI now handles arguments via the
clapcrate, to provide a quality user-friendly interface.
- A new
--experimentalflag was added for the daemon to launch with additional
Powertopand TLP-recommended power-saving options.
Released on April 26th, 2018, the focus of development was a new installer that supports encrypted installations, integration of the Pop!_Shop, the addition of a multiple USB file flasher utility (Popsicle), and overall improvements to the desktop experience.
- Package the system76-driver HiDPI daemon separately for Pop!_OS (https://github.com/pop-os/pop/issues/98)
- Create a setting toggle in GNOME Settings Display (https://github.com/pop-os/pop/issues/97)
- Correct the projector shortcut issue (https://github.com/pop-os/pop/issues/96)
Develop a simple and fast installer that introduces users to Pop!_OS and enables System76 to ship full disk encryption on hardware out of the box.
- Installer backend (https://github.com/pop-os/distinst)
- Installer frontend (https://github.com/pop-os/installer)
- GNOME Initial Setup (https://github.com/pop-os/gnome-initial-setup)
- On detection of system76 hardware, the
system76-driverpackage is installed.
- With the NVIDIA ISO on non-NVIDIA hardware, the nvidia drivers are removed.
- Add Pop!_OS banner to the home page
- Setup a server for curated apps
- Determine best-of-class applications and tools for each category
- Button to launch applications after installing
- Fix issue - applications are listed in reverse order (https://github.com/pop-os/shop/issues/7)
- A new daemon was developed that provides and controls power profiles.
- Added a shell extension to provide the UI options in the desktop to control these profiles.
- These controls are only displayed if a battery is detected on the system.
17.10 was released October 19th, 2017. It is the current release. Struck through work was completed. This is the first Pop!_OS release and focuses on first use experience, appearance, and default applications.
- Plymouth work for smooth and beautiful boot to login transitions
- Pop!_Theme refinement
- GDM Theme
Determine Default applications
- Choose an email client for the initial release
- Determine pre-installed applications
- Add a feature to Ubiquity to toggle between "minimal" and "complete" Ubiquity. Pop!_OS will use minimal while other Ubuntu flavors can use the complete. Paired down Ubiquity to a minimal set of screens and packaged separately.
- Use GNOME Initial Setup for user configuration
- Add nvidia driver to the installation media