This article is part of a series of blog posts covering the many different areas of work going on in Ubuntu right now. See the introduction post here that links to all the articles.
Unity is the graphical environment that we ship in a default Ubuntu installation. Released for the first time about three years ago, Unity is focused on simplicity and consistency across multiple devices. In this article I am going to cover the history of Unity and how Unity 8 is driving a new era of code and design convergence in Ubuntu.
Although Unity is a single graphical experience, you can think of it in three broad buckets:
- Design – the visual design and interaction experience.
- Platform – the core Unity platform software.
- Services – a set of functions that Unity makes available to applications for integration and for content to be viewed.
Back when the design team started working on Unity the goal was to solve a key set of problems in the user experience of Linux and build a simple and efficient user interface, but to also build a set of design patterns that could scale across multiple form-factors.
Design is a complex process, and a process inspired by ideas but defined by practical real-world testing. As the team developed ideas, tested them, and iterated on them, these ideas were boiled into a set of common design patterns that were not merely intended for a desktop…but that could be applied to other form-factors too. This was a challenging prospect: to a reasonable extent, building design around a specific form-factor is much easier than producing scalable designs across these different form factors, and the level of design work that went into Unity was and continues to be incredible.
It is important to remember that this design effort was not limited to the launcher, panel, indicators and other common visible pieces that we associate as the building blocks of Unity; it was also the gestures, login manager, toolkit components, dash components, and more. The goal has always been to have a consistent design story across everything we do: Unity, Juju, conference booths, websites, and more, and thus the Unity work needed to be able to exist within this wider design story.
As the designs formed for Unity the development team kicked into action.
Back in the early days we had two different code-bases for Unity; a 3D and 2D code-base. The simple reason for this is that some OEMs wanted to ship Unity on hardware without 3D acceleration, so we decided to have two different branches and share as much code as possible between these branches so we could serve all potential OEMs.
These branches were quite different though. Unity 3D was written with Compiz and a graphical toolkit we created called NUX, and Unity 2D was written in Qt/QML. As you can imagine, this resulted in some duplication of effort and some deltas between 3D and 2D. The teams worked their socks off, but these technical limitations were causing some headaches.
As the goals to spin up our full convergence story across TV, Mobile, Tablet, and Desktop became more important it was clear that we needed to make a decision about these two different code-bases. After an extensive amount of discussion it was decided to focus explicitly on Qt/QML as our primary code-base, a decision that also matched our decision to focus on Qt/QML as the core of our Ubuntu SDK.
This now brought technical consistency across our engineering teams: Qt/QML would form the bases for Unity, the Ubuntu SDK, new application development, our app developer community growth and more. I had been lobbying for a focus on Qt/QML for some years, so speaking personally I was delighted by this move.
A core benefit of Unity is the rich range of services that it provides. This includes services such as:
- The Launcher – showing running apps, progress bars, number pills, quicklists etc.
- The Messaging Menu – all of your messages in one place, irrespective of source or network.
- The HUD – search enabled for all your apps so you can find exactly what you need by finger or voice.
Another very significant service is The Dash. In previous versions of Unity the dash provided a place to search your local system and a limited set of online services. For Ubuntu 13.10 the dash has been extended to search 50+ services all from the home scope. The dash provides a consistent place to find and search for content, apps, information and more.
Again, it is important to remember that these services are not just useful for the desktop…they apply to all the different form-factors we are focusing on. This, tied together with our convergence-ready SDK means you can consume these services in your app and they run across all these different devices.
Earlier I mentioned the decision to focus on Qt/QML as our core development focus, but that was not the only decision moving forward with Unity however. The goal was also to build true convergence into the core Unity code-base too. Our goal was to have a single Unity code-base and when you run it on a Desktop you get one experience, and when you run it on Phone you get another experience. This boils the full convergence story down into a single code-base, which also means that if you fix a bug in that code-base, the bug fix applies to all devices too.
This is true convergence: a single code-base with a scalable set of design patterns that can be deployed on a wide range of devices.
This focus has materialized in Unity 8; the next generation of Unity that is currently running in the Ubuntu Phone and Ubuntu Tablet images. On the desktop we are still running Unity 7 (based on Compiz and Nux) until Unity 8 has desktop features baked in.
If you want to see this convergence working, install Unity 8 on your Saucy desktop with:
sudo apt-get install unity8
Then run it with:
export UBUNTU_ICON_THEME=ubuntu-mobile unity8 -mousetouch
This will load what looks like Ubuntu Phone on your desktop in a window. It should look like this:
Remember, Unity changes how it operates based on the screen size. To see this in action, increase the size of the window and you will now see something that looks like LightDM:
Re-size it smaller again and it looks like the phone interface again.
Another fun test is when at the phone size, slide from the left of the window to show the Launcher and click the Ubuntu button. Now click the ‘Search’ button and the search box takes up the full width of the window:
Now re-size the window to be much bigger and click the ‘Search’ button again; the search box now appears to the right of the window:
This is a subtle example of how Unity 8 adjusts the experience based upon the screen size and the goal is that we will make many such changes to optimize the Unity experience across these different form factors, but the core ingredients, technology, and focus on content is the same, just visible from different perspectives.
Are We There Yet?
Today Unity 8 is running on the phone and tablet. Currently the vast majority of engineering focus is going into making everything work for Ubuntu Phone, but all of this engineering going into Unity 8 is built within the context of working on other devices too. As an example, although Unity 8 running on a full sized desktop screen looks like a mobile device running on a monitor (a native desktop UI will be added later), the core of the dash and all the system services will be desktop ready: they just need to be extended to support that screen profile.
In other words, although it might feel we are not working on the desktop, everything the engineering teams are working on is work we would need to do for the desktop in Unity 8 anyway, so it is all valuable work heading in a consistent direction.
Not only this but there is a far greater level of continuous integration and testing in Unity now than ever before. Every four hours there is a battery of tests run against the trunk code-base and if the tests pass a new package appears in the Ubuntu archive, giving you the opportunity to test it and keep up to date with the very latest in Unity. All feature planning and tracking is done publicly in blueprints and discussed at our Ubuntu Developer Summits.
The goal is that the phone user interface in Unity 8 will be mostly complete for Ubuntu 13.10, and then the focus will be on Desktop between 13.10 and 14.10 with the goal of shipping Unity 8 on the desktop in Ubuntu 14.10, thus spanning full convergence across all form-factors with this single Unity code-base and set of scalable design patterns.