GNOME Shell Slide 1 Hi! My name is Marina and I work as a software engineer on the desktop team at Red Hat. I've been working on GNOME Shell since its conception at the GNOME User Intreface Hackfest in October 2008 here in Boston. GNOME Shell is an effort to create a better design for the look and feel of the GNOME desktop. So there are several designers and developers at Red Hat who are guiding the project and we have many people in the community contributing to the project. I'm going to give you some motivation for the project, talk about its design goals, give you a tour of all of its current features, and finish with the ways you can install and use GNOME Shell on your system now or get involved with its development. So while first free software projects had more to do with the command line, rather than with the graphical interfaces, when the GNOME project was started its goal was to create an easy to use graphical interface and make the free software accessible to more people. This has been successfully accomplished, but because the project grew overtime with incremental contributions, all of its components are implemented as separate modules. GNOME Shell project is a great opportunity to step back and design how everything should fit together from ground up. We are addressing such user experiences as finding and opening applications and documents, switching between various activities, or viewing incoming information such as chat messages or updates from friends. So basically GNOME Shell takes over the window manager, and integrates such features as the panel, the menus, and the notifications into a single design. GNOME Shell also uses new graphical technologies that enable nice visual effects, sleek look, and customization. Slide 2 Our usage of the desktop has changed dramatically since its initial days as a word processing tool. We now have more of everything going on on the desktop. There are more interruptions with chat messages from friends, their status updates that we just must not miss, RSS reader updates from all the blogs we follow, and status updates from the system. We have more activities opened on the desktop at the same time. We might have applications open for browsing the web, editing photos, coding, viewing pdf files, listening to music, and talking to people; all at the same time. Different windows of these applications might relate to different pursuits in our life, such as work, volunteer activity, personal finance, or just fun. So we do more task switching as well. That is we frequently change the thing we are looking at. Sometimes we genuinely need to look up some information for our current task or are ready to move on to a different activity, and sometimes we just compulsively want to check what the world has been up to in the last five minutes we've been doing a particular task. We all have more applications, documents, and people contacts in our systems, and many of those are the ones we still need to do something about. Like applications we want to try out, documents or web pages we want to read, or people we want to follow up with. On top of this, our system gets more frequent updates so that we can have the latest and greatest of everything and we have to manage or at least be informed of those. I'm going to show you two screenshots of the GNOME 2 desktop - the way we think of it, and the way it often actually is. Slide 3 So instead of looking like this: one document, one file manager window, clean and tidy... Slide 4 ... our desktop often ends up looking like a total jungle. There are a lot of things going on in this picture because different utilities and applications are fighting for the user's attention, overlap with each other, or permanently take up important screen space unnecessarily. Slide 5 A lot of this desktop jungle has been created because various tack-on solutions were thought of and introduced to the current desktop. They have not become first class citizens, but were tacked on instead. It's no surprise that some of them, which advanced users swear by, are not even discoverable or are extremely confusing for the casual users. These include workspaces that allow you to compartmentalize activities, custom application launchers to not have to dig through menus, Alt+Tab dialog for switching between open windows, and other keyboard shortcuts. Also, in terms of applications, there are ones that have multiple windows or tabs, ones that allow us to create bookmarks or favorite things, applications like Empathy that aggregate contacts we talk to from different systems (Google Talk, AIM, ICQ, and Facebook), applications such as Gwibber or Liferea that integrate internet activity updates, as well as system applications like Network Manager for connecting to the internet or PackageKit for installing system updates. So the current desktop has all these features and applications, and the user needs to be able to discover them individually, decide which ones to use in what case, and track down the notifications from the applications to each particular application to interact with it. Slide 6 So the goal of GNOME Shell is to integrate the features that already exist and some new features in an overall comprehensive design. We have several designers working on the project, who stay current on the desktop design literature, outline our design goals and principles, and create mockups for how things should look. There is an extensive design document available from the GNOME Shell wiki which is an essential read if you want to understand the project better and contribute to it. I wanted to mention some of the key design goals now before I demo GNOME Shell for you. Slide 7 Intuitive: We want to provide a consistent, self-teaching user interface where a novice user would be able to discover many of the useful features easily. So for example, there are obvious controls for creating favorite application launchers or additional workspaces in GNOME Shell. We are also planning to include an interactive tutorial for when the system is first used. Slide 8 Flexible: Over time, the user should be able to grow in their use of the desktop, easily discovering the more advanced features and ways to personalize the desktop to reflect their work patterns and individual taste. We also want the system to be forgiving of the user's actions, allowing such operations as undo or allowing to return to a particular state in a minimum number of clicks. Slide 9 Smart: We want the system to present the user with all the information the user needs for making a decision and with the ways to organize this information. We also want the right thing to just happen by default most times. So for example, the user should not have to remember whether a particular application is already running and decide based on that to search through the task list to switch to it or go to the menus to launch it. In GNOME Shell, each application is represented by a single application icon, that either launches or switches to the application depending on the application's current status. Slide 10 Focused: We want to make it easy for the user to focus on their current task by de-emphasizing the other tasks and using the notifications sparingly in accordance with the user’s preferences. We don't want to clutter the screen by the things not relevant to the current task. We want to be respectful of the user's focus and preserve the important notifications in a single place, so that the user doesn't need to interrupt the workflow in a fear of loosing some information if it's not acted upon immediately. At the same time, we want the user to be able to interact with the notification without loosing the focus from their main task. Slide 11 Delightful: Finally, we want to delight the user with sleek graphics and visual effects enabled by new graphical technologies. We want the GNOME desktop to have an iconic look to it, so that it can be easily recognized and provides for a distinct experience. Slide 12 Demo: [Setup: single workspace, but make sure the grid view is on; one terminal, one OpenOffice Impress, two Firefox windows (one with Gnome Shell wiki, one with LibrePlanet main page). X-Chat IRC, gedit, and Empathy are other favorite applications. OpenOffice Impress is maximized and all other windows are minimized. Have Desktop/Mockups/LibrePlanet Mockups/1_shell-mockup-overview-move-window.png as a recent file.] So now on to the demo. First, you can see that the two panels of GNOME 2 are replaced by a single black panel at the top of the screen. (The panel is black in the default design to have it merge more closely with the bezel of the screen and have it feel as a negative space, so as to be least distractive.) The panel has the name of the currently focused application, in this case OpenOffice Impress, a clock with a slide out calendar, some notification icons, and a user menu, which allows setting a current status, accessing account information, or logging out. There is also an Activities button that brings the user to what we call an Activities overview. So here is what happens when I click on it. [Click, don't activate the hot corner.] The Activities overview is the most important innovation in GNOME Shell because it dedicates a full screen to all the different ways in which the user can switch from doing one thing, an activity, to doing something else. First of all, it shows the previews of all the windows the user has open and allows switching between windows by clicking on their actual previews, rather that by guessing which window is which based on indistinct boxes in the task bar, as was the case in GNOME 2. So, for example, I can decide to switch to the Firefox window. [Click on the LibrePlanet Firefox window.] Because the overview is a frequently accessed feature, there are several simple ways to activate it. One is by hitting the System key [show that], and another one is by moving your mouse to the top left of the screen, which activates the hot corner. You might be able to notice a helpful animation in the corner indicating that the hot corner has been activated. So back in the overview we have different sections on the left that contain applications, places and devices, and recent documents. We also have a prominent search feature that is focused on by default and searches across all of these. So for example, if I want to bring up the calculator, I can type the first few letters in the search box and press enter. So by default, clicking on an item in the overview exits the overview and switches to that item, but dragging an item instead allows the user to stay in the overview. [Drag gedit to the workspace.] It is also possible to close applications right from the overview. [Close the calculator and gedit.] GNOME Shell is an application-based desktop, rather than a window-based one. This means that whenever appropriate, we group the windows by the application they belong to because we believe that the user is more likely to think of the application they want to switch to first, and only then to think of a particular window within that application or a need to open a new window of that application. For this reason, the application icons in the overview serve as both application launchers and the ways to switch to the running applications. The running applications are indicated by the raised background behind the application icon, but in most cases the user doesn't need to worry about whether the application is already running, but can just click on the icon and expect the right thing to happen. In any case, you usually only want a single instance of most applications, such as a single instance of a calculator or of the IRC client. For example, it would be a major inconvenience if clicking on the IRC icon launched a second copy of IRC and signed you in under a second nick. On the other hand, for the applications that do have multiple windows, the application icon serves as an effective filter for deciding which of the windows you want to switch to. Right clicking on the icon shows all the open windows of that application and their previews can help you decide which was the window you wanted to switch to, which is particularly useful if you have many windows open. The right click menu also has an option to open a new window, if that's what you need to do. [Right click on Firefox, select the LibrePlanet one again.] Another option for switching between application windows is the redesigned and nice looking Alt+Tab dialog, where the windows are also grouped by the application. [Show Alt+Tab dialog.] One more option available in the right click menu is adding or removing an application from favorites. Marking an application as a favorite means that it will stay in the applications area even if it is not running and serve as a convenient launcher. So for example, I can remove gedit from my favorites. It offers me a nice option to undo my action here, in case I didn't really mean to do that. [Select undo.] In addition to searching, you can browse all the applications. This is currently an undifferentiated grid, but we plan to allow custom tags and various ways to sort the applications, such as by name, recently used and most frequently used criteria. Like in GNOME 2, windows can be grouped into workspaces, but the GNOME Shell Activities overview makes workspaces much more intuitive. The default view is a single workspace, so we are not trying to force workspaces on the users, but we are making adding workspaces and moving windows between them much more intuitive. The plus button adds additional workspaces and you can move the windows between them by dragging and also open new applications and documents on a particular workspace by dragging them there. [Move windows arround, drag some application and 1_shell-mockup-overview-move-window.png to a workspace.] There are two ways of viewing the workspaces - a grid view, which you are seeing now and a linear view which shows one workspace at a time. [Switch to linear view, scroll through the workspaces.] Now that you've seen most of the GNOME Shell overview features, I'd like to talk about how rapidly the GNOME Shell development happens and show you some recent mockups that got implemented. As I mentioned, we have a couple of designers working on the Shell and they create a lot of mockups for the Shell. We also have a great team of developers who implement these mockups as soon as they come out. So this linear view of the workspaces is a relatively new feature, and one of the questions we had about it is how would moving the windows between the workspaces work. As you remember, it was pretty straight forward in the grid view, when all the workspaces were visible and you could just drag windows between them. Here are the mockups for moving windows in the linear view that our designers Jon McCann and Jeremy Perry created a couple of weeks ago while they were in London for the GNOME Usability hackfest. The first mockup shows that once the user starts dragging the window the workspaces should zoom out and the edge of the workspace toward which the window is being dragged should appear. It also implies that the workspaces should scroll further if the window is being dragged past the edge. The second mockup proposes that there should be a way to drop the window on a new workspace if it is dragged to the right-most edge of the last workspace. I think this is a very nice design and Maxim Ermilov landed its implementation just a couple of days ago. [Demo the implementation.] Another recent feature is the notification messages and the notifications tray. Here is the mockup that shows how the notification messages should look when they first come in. This is an unexpanded version that we call the banner mode. It should expand when the user mouses over it and in the particular case of the chat message allow to respond to it inline. Dan Winship recently got this feature implemented. [Sign in as tiramisucreampie into Empathy, as gelatosorbetto into GMail, demo a conversation.] We also have all the notifications that appear through the notifications daemon working, such as music player notifications, Gwibber notifications, system updates, and so on. They currently appear in the default banner view and expand to show any actions they might have associated with them. Here are some future mockups for the music player and the e-mail client notifications, which show how we'd like the notifications to embed the custom info from the application. (Slides 13-20 are mockups which I'll show inside eog.) Slide 21 So now that you've seen what GNOME Shell is like, I'm sure you are wondering when you can start using it and the answer is now. It's pretty stable and many people already use it as their default desktop. It's very easy to try it out, since it won't change anything about your default setup and you can revert back to it anytime. First of all, many GNU/Linux distributions have the GNOME Shell preview packages available. So you can just install the package and run 'gnome-shell --replace' in a terminal to try it out. The GNOME Shell wiki has instructions for each individual distribution. Be sure to check out the GNOME Shell cheat sheet page on the wiki when you first start using GNOME Shell. It lists many of the features and shortcuts that GNOME Shell has. An even better option, is installing a GNOME Shell JHBuild script that installs 6 modules relevant for GNOME Shell in a separate directory on your system, and allows you getting latest updates for these modules from the git version control repository anytime. That way you will get the latest and greatest version of GNOME Shell when you first install it and will be able to follow its development more closely. The JHBuild instructions are available on the main page of the GNOME Shell wiki [show the page and the cheat sheet] and are quite straight forward. You can also always ask on the gnome-shell irc channel if you need any help. Using JHBuild will also not change anything about your default system setup and you will always be able to revert back to it. Having the GNOME Shell code from JHBuild on your system will also let you look at it and modify it anytime if you will get more interested in the project. So JHBuild is really the equivalent of the red pill in the Matrix. If you try it, you'll get to find out how deep the rabbit-hole goes. Slide 22 So just a single slide about the technology behind GNOME Shell. The Shell is using OpenGL graphics. It's built on top of Clutter, which is a scene graph that uses OpenGL for rendering. For the window management and compositing, the Shell uses Mutter window manager, which is a branch of the traditional window manager for GNOME called Metacity that includes Clutter-based compositing. We have a Shell Toolkit on top of Clutter, which implements many custom widgets, such as boxes that help with the layout, buttons or scrollbars. The Shell Toolkit also adds support for CSS, which makes the Shell easily themeable. The GObject Introspection technology is used for automatically generating the GObject bindings for JavaScript. So while we have some code written in C, most of the user interface code is written in JavaScript, which is very easy to use and allows for a rapid development cycle with no need for compilation between changes. We also have a custom Javascript console called Looking Glass that allows evaluating arbitrary JavaScript statements, as well as accessing and manipulating objects in the Shell from within the Shell. So it is similar to the Firebug in Firefox or to the interactive lisp facilities in Emacs in its nature. Let me demo it for you. [Do a Looking Glass demo; have commands as notes in the slide.] You can find the information about Looking Glass and some examples on the wiki. We have also created a way for creating JavaScript extensions for the Shell and there is a page about creating extensions on the wiki too. I also wanted to mention that the Shell has a built-in screencast recorder, which hooks right into the paint loop and records a Clutter stage to a GStreamer stream. Slide 23 We have a great team of people working on the project and we always welcome new contributors. Because there are so many features being added to the Shell, it is always easy to find a simple project you can start with. It's best to start out by hanging out on the IRC channel and ask for what can be a good first project. Alternatively, you can look in the Bugzilla and see if some bug is something you want to tackle. You can file your own bugs in the Bugzilla too, and then fix them! There is a development page on the wiki that covers everything you need to know about the code structure of the project and how to get started with the development. There is a page that talks about design and has various mockups you can modify. There is also a page about how to create or update a translation of GNOME Shell for your language. Slide 24 So GNOME Shell is already pretty stable and fun to use, but we still have a lot of work to do. We are planning to do some user testing, and Máirín Duffy has recently put together a plan for it and blogged about it. Our plan is to have GNOME Shell be the default look of GNOME when GNOME 3.0 is released in October 2010. Slide 25 The wiki has all the information about the project, in particular it has links to the mailing list and the Bugzilla. I also wanted to point out two other ways to follow the project. GNOME Shell IRC channel is a great place to hang out if you'd like to start contributing to the project. You can also follow GNOME Shell on identi.ca or Twitter, if you are using GNOME Shell and want to get all the latest news about the cool features going in.