Meet the Upcoming Installer

Making elementary OS more “gettable”

Daniel Foré
Feb 23, 2018 · 7 min read

Why a New Installer?

elementary OS and Pop!_OS both currently ship with Ubuntu’s Ubiquity installer. It made strides early on with regards to the actual user experience of installing a Linux-based OS when it debuted, and served us well. However, there is a huge opportunity to improve the experience more both from an OS and OEM perspective.

Front-End

When we set out to revamp the installation experience, we didn’t actually know what the technical stack would look like. We desperately wanted to rewrite the front-end (in Vala and following the elementary HIG if possible) so that we could simplify and streamline the process. The existing Ubiquity front-end code was a large and confusing Python project that made even the simplest of changes difficult. When talking with System76, they also wanted to be able to have a bit more of a branded touch in the installer without it being overbearing.

Back-End

The back-end team’s first goal was to finalize a decision around an installer framework/back-end. Before the sprint, several of us had taken a look into Ubiquity (and actually filed patches against it), Anaconda, and other installers. We agreed we needed to carefully balance the want to build something fresh and purpose-made, and to lean on existing projects and experiences when it made sense.

What We’ve Built

Front-End

We had our sketches and initial designs we started from, but we really worked through the design and front-end implementation of each of the install steps. We ended up with two main types of views: a side-by-side dual pane view (seen in the Language and Keyboard views), and an alert-type view (seen in the Drive and Issue Detection views). Everything is completely style-able via Gtk.CSS, meaning companies like System76 can create a more branded experience without having to maintain a fork or a completely separate version of the installer. This is especially important with the Progress view, where we have a number of class hooks for progress so one could theoretically add all sorts of CSS effects that also reflect the overall progression.

Back-End

For the back-end, System76 created distinst. This new installer library lets us essentially dump the OS onto a drive extremely quickly and reports the relevant data back to the front-end. It is currently functional and successfully installs an OS freakishly quickly.

Follow-Up Sprint

In January we got some people from elementary and System76 back together to check in on our progress and scope out the rest of the remaining work, now that we’ve started. New areas to tackle included disk encryption, interaction with recovery partitions, and a more thought out drive selection/partitioning.

What’s Next

We have made great UX and prototyping progress, but there is still a lot to do, and a lot more testing before we’re comfortable putting it into production. In no particular order, we still have to implement installing a recovery partition, knowing when we’re booting to the recovery partition, be able to encrypt disks in the back-end, and finish the complex “install type” and drive selecting screens.

When Will It Ship?

System76 is aiming to ship the new installer as part of the Pop!_OS 18.04 release in April. For elementary OS, we’d love to ship it in Juno (and are working toward that goal), but we do have a backup plan to ship the existing installer if we don’t feel the new one is ready yet. So, When It’s Ready™ as you might expect.

Follow Along

There’s been a lot of information generated after two sprints and several days of in-person discussions, whiteboard sessions, and coding. You can find the up-to-date spec—including design rationale and a start-to-finish user flow—at github.com/elementary/installer/wiki. Contributions welcome if you feel something could be clarified or added.



elementary

We design and develop the fast, open, and privacy-respecting replacement for Windows and macOS

Daniel Foré

Written by

Founder at elementary

elementary

We design and develop the fast, open, and privacy-respecting replacement for Windows and macOS