First I want to throw away our concept of the windowed desktop. Managing a set of windows is something a bunch of programmers came up with to manage their own development workflow, and it's something that the home user ignores at best, and is frustrated with at worse. In the OLPC project, they managed to completely do away with the whole notion, and switched to full screen apps, with an overlay that can be accessed by the push of a button. I want to take this a step further. In Sugar (OLPC) the user is faced with a single context, which is the task that he/she/it is working on. Given the power of our computers, and the preference of some users, they may want to check their email, facebook, friends blogs, chat, and download po^H^Hmusic all at once. If we treat each one of these as a separate context, we need to provide ways of letting the user switch between them easily. Well, let's say the user presses a button on his/her/its keyboard that says "Chat", we need a way to give him/her/it a visual clue that we are switching to there. A spinning cube is an excellent solution. Seeing the desktop zoom out, spin, and zoom in is a great clue to the user what is happening. Later, the user can turn it off for speed, but by that point, it's hardwired into the user's brain what is happening. We can take this one step further, and explain all the visual effects are good training tools.
Let's run another use case. The user wants to configure their system. Since we've so conveniently explained to them that their system is a cube (well, i'd prefer a dodecahedron, cubes are overrated these days), it would be trivial to assume we could zoom out of the cube, and view 'settings' lying beside it. Perhaps setting could be a great Atlas holding up the cube on his shoulders, or perhaps four elephants standing on the shell of a giant turtle. Naughty apps could be punished and forced to sail off the edge of the cube. But I digress. The user zooms out, and a menu pops up. If you've ever played a video game, it's fairly analogous to what happens when you press Pause in the middle of a game. That is the crux of the idea. Replace the bulky desktop metaphor with the sleek interface of a Video Game, and use some favoured fork of a Compiz tool as the graphical engine.
Anyways, sometimes I think in design requirements lists better than in highbrow literature, so here is one:
- The core interface must be accessible with an Xbox controller, Playstation controller, or a Wiimote. Although the standard 105 key keyboard could be used, along side a mouse, ideally a custom keyboard with similar D-pads, and context switchers would be very nice. Any hardware geeks out there?
- At some point, we'll need a good input method for typing text without the burden of a keyboard. Maybe this is a bad idea.
- Social Networking is the future. Heavy integration with any and all social networks is a must. Hooks need to be in place to 'share' any general activity with a friend. This is analogous to the social networking features in the OLPC project, however a little more sophisticated.
- Use of 3D effects as visual cues to direct the user's attention to important things. They should be minimal in effect, although a bit of smoothness goes along way. The cube is one example. Using subtle ripples on the screen to point the user in one direction is another. Perhaps ripples following the mouse cursor if the user loses it. Bouncing windows however cool should not be enabled by default, but is always a good option to show as a demo. Chuck Norris's fist bursting out of the screen on the other hand when the user does something stupid is quite acceptable.
- Abolish the file system. I didn't bring it up earlier, since it's orthogonal to the GUI effects, but it's one more gotcha that burdens the user. I'm proposing a history based system. Arbitrary tags are also good. Being able to set commonly used filters are even better.
- Physical awareness. Recognizing that the user's laptop is on the home network might be a good time to sync up all the shared files. Realizing that the laptop is in the same room, and willing to be used as such, the system can hook up with the laptop, and use it as an auxiliary screen. For example, while playing a game, having "you got mail, you won three auctions, and that hot chick you met last night wants to talk to you" showing up on your laptop might be a fun to implement feature.
- User and Expert mode. There is a huge debate on how much information the user needs to know. The developers of a certain instant messaging client believe that the user is not interested in which connection mechanism is being used to chat with. Sometimes the user doesn't care, but sometimes he does. Rather than argue about what the user really needs, just give them two options, all or nothing. Being able to customize what information the user really wants might be a version 2 thing, but hey, it's also open source.
- Speaking of which, the entire system should be open to development. While no dev tools or compilers are installed by default, it should be pretty trivial to say "show me the source" and have the system download everything, and setup a new context for development. Then ideally it would say "i'm sorry dave, but this will void your warranty" at which point you go and remove critical components while your Okama Gamesphere sings Daisy, and then dies. The build system should then let the user tweak an option, compile and deploy it, and see it take effect as soon as possible. IE, the user decides he doesn't like file chooser, and he wants to write his own. He downloads the source, edits it in place, says 'show me the new file chooser' and voila, a gentoo minute later, his entire system is switched over. Let's say he wants to share this with his friend. Well, his source tree is just a clone of a mercurial (or another distributed source manager) which he can commit to, and share.
- Speaking of which, a repository for user patches with ratings would be necessary at some point. Of course, supposing that a slew of 13 year old males with a penchant for naughty language discover the joys of open source software and flood a repo with comments that are generally unwanted, it should be very easy for a user to create his own repo. This way quality members to the community can contribute, and work on a reputation based system rather than a clog the network with odd ratings system. I think this one is probably a little more complex than I really meant, but it should be very easy to open, hack, and share, and hopefully merge back into the main stream.
Oh yeah, and a MythTV context. Turn that expensive playstation into a very cool box. :)