Every two years, Debian Linux, on which Raspberry Pi OS is based, gets a major version upgrade. Debian ‘buster’ has been the basis of Raspberry Pi OS since its release in 2019, and Debian ‘bullseye’ was released in August. (As some of you may know, Debian name their versions after characters in Disney/Pixar’s Toy Story films – Bullseye was Woody’s horse in Toy Story 2.)
We’ve been working on the corresponding ‘bullseye’ release of Raspberry Pi OS; it’s taken a bit longer than we’d hoped, but it is now available. So what is new this time?
Debian ‘bullseye’ has relatively few major changes which are visible to users – there are some under-the-hood changes to file systems and printing, but most of the changes are patches and upgrades to existing applications and features. However, over and above the changes in Debian itself, the ‘bullseye’ version of Raspberry Pi OS has a number of significant changes to the desktop environment and to the support for Raspberry Pi hardware.
All of the desktop components and applications are now using version 3 of the GTK+ user interface toolkit. GTK+ is a layer of software that applications can use to draw standard user interface components (known as “widgets”) such as buttons, menus and the like, so that all applications have a consistent look and feel. Up until now, most of the desktop has used version 2 of the GTK+ toolkit, but increasing numbers of Debian applications are using GTK+3, so to try and keep things consistent, we’ve upgraded all our software and the desktop itself to the newer version.
GTK+3 has been around for several years now, and people have occasionally asked why we didn’t move to it before now. The simple answer is that many things are much easier to do with GTK+2 than with GTK+3, particularly when it comes to customising the appearance of widgets – GTK+3 has removed several useful features which we relied upon. It has ended up being necessary to find work-arounds to a lot of these – hopefully no one will notice them and everything will still work as before!
You’ll notice a few changes to widgets – the most obvious is the new appearance of tabbed interfaces.
Some other controls have a slightly different appearance, but we’ve tried to make sure that everything still looks familiar and largely unchanged. GTK+3 just gives us a more modern basis for future development, and brings us into line with other Linux desktop environments.
One of the changes which was prompted by the move to GTK+3 is that we are using a new window manager, called mutter, instead of the openbox window manager used in previous releases.
The window manager is responsible for drawing the title bar and window frame around each application window. Mutter is what is known as a compositing window manager, which means that rather than individually drawing the window frames straight onto the existing windows on screen, it draws all the windows to a memory buffer off screen, where it creates a complete image for the entire screen. This is then sent to the hardware to be displayed.
Because it has control of the whole screen, a compositing window manager can create some nice visual effects which are not possible (or at least not easy) with a traditional window manager: for instance, it can round the corners of windows, or display shaded borders behind each window. (While we did have rounded corners in openbox, this was done in a rather inefficient fashion by drawing multiple frames of varying sizes for each window – it worked, but it really wasn’t elegant!)
GTK+3 relies on a compositing window manager to round the corners of tooltips; in GTK+2 this was done with a hack similar to the one we use to create rounded window frames in openbox, but this has been removed in GTK+3 and the window manager is asked to do it instead.
Mutter gives nice window opening and closing animations, and provides shading behind each window border; the changes are subtle, but they do make the desktop feel more modern.
One drawback of mutter is that, due to needing to draw the entire screen to memory before it can display it, it is quite demanding in terms of RAM, and can only run properly on a Raspberry Pi with 2GB or more. As a result, on Raspberry Pis with less than 2GB, the older openbox window manager is still used instead. (This does mean, unfortunately, that on those systems, tooltips will now have square corners. Which is another answer to the question, “so why didn’t you move to GTK+3 years ago…?”)
The other advantage of mutter is that it is a necessary step towards the future of Linux desktop environments. Desktops in Linux have always been based on the X Window System, usually just referred to as X. This is what provides the basic services of a window environment – drawing windows, moving them around, managing the mouse pointer and so on. But X is now very old technology – it was first released in 1984 – and while it has served admirably for nearly 40 years, some desktop environments are now using replacements. The most popular of these is a system called Wayland, which has recently become the window system used by Ubuntu.
We are still quite a long way from switching Raspberry Pi OS to Wayland, but one of its requirements is a Wayland-compatible compositing window manager, and using mutter is the first step on this path.
One thing that many other operating systems now do is to provide an integrated notification system, whereby messages to the user about the system or applications all appear in a consistent and uniform manner. For this release, we have added a common notification manager to the taskbar, which can be used by the taskbar and any of its plugins, and can also be accessed via other applications.
Notifications are shown in windows at the top right corner of the screen, and are displayed in chronological order, with the most recent notifications being presented at the top. Notifications will automatically time out and be hidden after fifteen seconds, or can be cleared immediately by clicking on the windows.
The notification timeout can be configured on the Appearance tab of the Panel Preferences dialog, accessed by right-clicking on the taskbar. If the timeout is set to zero, then notifications will remain on display until you click on them. In this dialog, you can also turn notifications off completely – although we wouldn’t recommend doing this!
Currently, notifications are generated when USB devices are removed, when the power supply voltage is too low, and when the firmware detects various error conditions, such as memory allocation problems and invalid configuration options. Some of these were already being brought to the user’s attention in previous releases, but this now happens in a more consistent and user-friendly way, with more scope for future extension of the system.
Another new feature, which makes use of the notification system, is an easy way to be informed about and to install system and application updates.
Up until now, this has required the use of apt in a terminal window, but it has now been brought up to date with a more user-friendly graphical interface, provided as a new plugin in the taskbar at the top of the screen.
Every time you boot your Raspberry Pi, the plugin checks to see if any updates are available. (If you leave your Raspberry Pi powered up for days or weeks at a time, don’t worry – it makes additional checks every 24 hours.) If updates are available, then the update icon – the arrow inside a circle in the picture below – is shown on the task bar, and a notification message is shown.
Clicking this brings up a menu that allows you either to open a window listing the updates (in case you want to know what they are before you install them…) or just to install them straight away.
A dialog box will show you the installation progress of updates, but they will carry on in the background and you can just continue with whatever you are doing while they install.
With security threats and vulnerabilities being found and fixed in operating systems on a daily basis, it has never been more important to keep your computer up to date – hopefully this is now as easy on a Raspberry Pi as on any other computer.
The view options in the file manager have been simplified slightly for this release. In the previous version, you could select one of four modes – thumbnails, icons, small icons and list. This was a bit of a mess – the differences between thumbnail mode and icon mode were somewhat confusing, as they involved different icon sizes as well as whether or not thumbnails were shown, and the small icon mode was more of a throwback to early versions of Windows than anything actually useful.
For this release, there are now only two modes – icons or list. The option to show a thumbnail (if appropriate) for an icon is now in the View menu. The size of icons in either mode can be controlled with Zoom In/Out, also in the View menu.
This tidies up the display options, and hopefully does so without removing any useful functionality.
KMS video driver
The KMS (kernel modesetting) driver, which was an experimental option in previous releases, is now the standard video driver in this release.
KMS is the Linux standard mechanism for controlling the connection to a display. The previous video driver was Raspberry Pi-specific, and was built into the custom firmware which is unique to Raspberry Pi computers; it was also closed source. This enabled us to make a number of optimisations for our hardware, but it also meant that any applications that wanted to directly access the display needed to be written specifically for Raspberry Pi. By moving to KMS, any application written using the standard Linux display APIs should run on Raspberry Pi without modification.
The other advantage of this approach is that display drivers for Raspberry Pi are now all part of the Linux kernel, and can therefore be written or modified by third parties; previously this code was all in the closed-source firmware. This should make it easier for the manufacturers of items like custom displays to add support for Raspberry Pi.
New camera driver
The driver used by Raspberry Pi to access camera modules has now been replaced with libcamera, a standard Linux API. As with the video driver change, this means less closed-source proprietary code, and makes it easier for third parties to develop new camera hardware and software.
For anyone who has written camera-based applications in the past, this is a very significant change, and is too large to be covered here. There will be a blog post dedicated to the new camera driver published soon, so watch this space!
Custom PC magazine, which has recently been made available for free download as PDF files as well as for purchase in print, is now available in the Bookshelf application.
Other bits and pieces
As is usual with a major upgrade like this, most applications have been upgraded to the latest version; in particular the Chromium web browser is now at version 92, and has been optimised to use the Raspberry Pi hardware to accelerate video playback.
We’ve added a bunch more cities to the timezone database used by the startup wizard and the localisation settings page in Raspberry Pi Configuration – some Canadian users were alarmed that Montreal was missing… Please note that when you select a country in the wizard, you will be offered the first city alphabetically as the initial choice of timezone for that country – that’s why Belfast comes up as the timezone for the UK; it’s not a bug!
There are various bug fixes, tweaks and new language translations. The details of these can be found in the release notes on the download page.
How do I get it?
With a major upgrade, we recommend downloading a new image, reinstalling any applications, and moving your data across from your current image. Debian major version upgrades contain a lot of changes, and it is very easy for some small tweak made somewhere in the system to be incompatible with some change you have made, and you can end up with a broken system and a Raspberry Pi that won’t boot. The easiest way to create a new SD card is with the Raspberry Pi Imager tool available here, or you can download the new image from here and use a tool like Etcher to flash it to a new SD card.
If you really want to try upgrading an existing image, there are some instructions on the forums here – but we don’t support or recommend this, so be warned: you are on your own if anything breaks! Make a backup of your SD card first so you can always go back to a working system if you need to; the SD Card Copier application in Raspberry Pi OS is a good tool for this.
As ever, your feedback on this release is welcome – either add a comment below, or head to our forums.