Mir 2.0.0 Release

Mir 2.0.0 Release

We are pleased to announce the release of Mir 2.0.0.

For Ubuntu, Mir is available from the Mir PPAs.

It is also available as a source tarball


This release combines a number of ABI breaking changes that we’ve been working on this year. In particular, it removes support for a number of legacy APIs and clears the way for future development.

mirclient and mirserver APIs

We’ve finally dropped these deprecated APIs, while Mir continues to make use these libraries internally, we no longer publish the headers and make no guarantees of ABI stability. This has allowed us to drop a lot of code, and more will follow in future releases.

This change will impact downstream projects who have still not migrated away from these APIs. Specifically, UBports still makes use of both APIs. We have been in discussions with them about the way forward and believe Mir 1.x is sufficient for their current needs and that they will be able to migrate to 2.x following further work on both sides.

graphics platforms

The removal of mirclient functionality has allowed us to drop a number of graphics platform interfaces used only through the mirclient API. Although this simplification should have no user visible effect, it will ease follow-up work to improve platform handling, particularly for multi-GPU systems and use-cases with variant output needs such as headless systems or remote desktop systems.

As part of this clean-up we’ve remove any specific mesa dependencies from our former “mesa-kms” and mesa-x11" platforms. These now only depend on gbm. An immediate benefit of this is that “Mir-on-X11” now works on an Nvidia based desktop.

We’ve also added a rpi-dispmanx graphics platform that allows Mir to work on the Broadcom drivers for the RPi3.


There’s been some small clean-up of this API to remove mirclient dependencies. Downstream code that didn’t use mirclient should mostly still compile. The main thing to know is that the event-handling functions formerly provided by mirclient are now provided by miral and can be used with:

#include <miral/toolkit_event.h>

using namespace miral::toolkit;


ABI summary:

  • mirclient ABI bumped to 10
  • miral ABI bumped to 4
  • mirserver ABI bumped to 54
  • mirplatform ABI bumped to 19
  • mirplatformgraphics ABI bumped to 17
  • mirclientplatform dropped


  • Drop legacy packages: libmirclient-dev, mir-client-platform*, mir-utils, libmirserver-dev and mirtest-dev
  • Drop legacy config options: “host-socket”, “nested-passthrough” & “name”
  • [mirclient] Drop obsolete stuff we don’t use
  • [graphics] Reworked graphics platform API
  • [graphics] Improved probing of egmstreams-kms platform
  • [graphics] Improved probing of gbm-kms platform
  • [graphics] gbm-kms (formerly mesa-kms) platform is independent of mesa
  • [graphics] gbm-x11 (formerly mesa-x11) platform is independent of mesa
  • [graphics] rpi-dispmanx New DispmanX platform
  • [miral] Remove dependency on mirclient; drop deprecated APIs and tidy up
  • [miral] Allow shells to enable/disable SSD
  • [miral] Add scale support to DisplayConfiguration. (Fixes: #1423)
  • [mir-demos] miral-shell uses a better default terminal emulator
  • [mir-demos] mir-shell gets the user keymap from gsetting
  • [mir-demos] Add a “fake-mir-kiosk” script to assist snap development
  • [Wayland] Clean up code
  • [X11] Clean up code
  • [performance tests] Remove mirclient legacy, add X11 based tests
  • Improve WLCS integration: change mir_discover_external_gtests to take an explicit list of expected failures.
  • [Tests] mir-smoke-test-runner: Start with Mir’s eglinfo

Bugs fixed:

  • [input] Use xkb scan code to identify modifier keys. (Instead of unreliable key_sym). (Fixes: #1515)
  • [input] Don’t auto repeat modifier keys. (Fixes: #1598)
  • [X11] Do not force XWayland EGL to use DRM
  • [X11] Treat COMPOUND_TEXT as a string type. (Fixes: #1552)
  • [X11] Initialize BasicDecoration in a threadsafe way. (Fixes #1479)
  • [X11] Stack X11 surfaces correctly on the XWayland server
  • [X11] Handle failure to open both abstract and ordinary X11 sockets. (Fixes: #1449)
  • [graphics] Add a PlatformPriority::hosted probe value. We now select a hardware-accelerated X11 platform over a software-rasterised mesa-kms platform. (Fixes: #1543)
  • [miral] Add WindowManagerTools::active_application_zone() (Fixes: #1530)
  • [miral] Drop the --startup-apps configuration option from MirRunner. (Fixes: #1531)
  • [Wayland] WaylandInputDispatcher only takes input events (fixes #1047)
  • [Tests] Make LTTNG fork()-safe. (Fixes #1405)

I’ve pushed this to Fedora Rawhide (which will become Fedora 33) today.

Since this is a major version bump and this is an intentional ABI breakage, I have not submitted it as an update for current stable releases.

That said, I have temporarily revived my old ngompa/Mir COPR for the purpose of offering Mir 2.0.0 for Fedora 32 users, which is building right now and should be available shortly.

To use it, you can use the following steps:

# Enable the COPR
$ sudo dnf copr enable ngompa/Mir
# Install some demos...
$ sudo dnf install mir-demos
# Try a demo app...
$ miral-app

Great work Neal! :+1: