2D experience fallback

Registered by David Barth on 2010-10-25

The blueprint captures the requirements and action items for delivering a smooth transition to the classical 2D Gnome 2.x Desktop (aka 2D Experience) when the system HW doesn't support Unity. The blueprint discusses when (requirements / conditions) and how the transition should happen. See UDS notes at the end of the whiteboard or in the related gobby document on gobby.ubuntu.com

Blueprint information

Status:
Complete
Approver:
David Barth
Priority:
Essential
Drafter:
Didier Roche
Direction:
Approved
Assignee:
Unity Team
Definition:
Approved
Series goal:
Accepted for natty
Implementation:
Implemented
Milestone target:
None
Started by
David Barth on 2011-01-26
Completed by
David Barth on 2011-04-27

Related branches

Sprints

Whiteboard

Work items (natty-alpha-1):
[didrocks] work with the dx team on the detection module to get the 2 given modes (fallback compiz as unity can't run but acceleration is available)/fallback to metacity when no acceleration): DONE
refine the design of the detection module and its integration: DONE

Work items (natty-alpha-2):
[jaytaoko] provide detection module in devel/learning mode: DONE
[didrocks] refactor the detection module code to run outside of compiz: DONE
[didrocks] integrate with the new upstream gnome-session fallback mechanism: DONE
[didrocks] show a dialog the first time that we fallback to classic gnome mode to tell that you don't get the full ubuntu experience (with the new detection system): DONE
[didrocks] get a "classic gnome desktop" item/session in gdm forcing the detection module to skip phase 1: DONE
[didrocks] fix the guest session to work with the two session mode: DONE
[didrocks] fix failsafe session to launch metacity: DONE

Work items (natty-alpha-3):
[jaytaoko] provide detection module in release mode: TODO
[ev] tweak ubiquity to propose nvidia installation on reboot, a label to tell that the interface will change on reboot is needed: DONE
[pitti] add a label in case of the nvidia driver to tell that the interface will look different at reboot: DONE
[loicm] nux to provide an helper for compiz as well: DONE
[didrocks] adapt compiz/metacity fallback once nux can detect the compiz case: DONE
[didrocks] discuss on session saving: DONE

Work items (natty-beta-1):
[didrocks] optimize the nux helper detection tool: DONE

-----------------------------
Note from the session:
-----------------------------

== Compiz and 2D Mode ==

As of Compiz 0.9.0, Compiz has supported pluggable rendering backends, including no rendering backend for composite. This means that you will not need to use metacity if you wish to have a 2D experience. (Some work will need to be done on the reparenting decorators though, and some new plugins need to be written in order to make this a reality)

 Agenda
 * What is the 2d experience fallback?
 * What is the 2d experience btw?
 * What's left to be defined?
 * Corner cases and alternative scenarios: livecd, installer, nvidia, etc.
 * Next steps: work items, schedule

2D experience running with Compiz?
-> the general recommendation is to stay with metacity
Plan of record: we don't use compiz in 2D mode (until much later, Natty+1)

== 2D fallback scenario ==

Different cases in general:
 * If GL is using SW renderering -> refuse to run
 * Drivers that "lie", that are Open Source -> patch the drivers; not use the quirks file
 * Proprietary drivers that also "lie" -> can't patch, so will use quirks for that

Where do we put detection?

1. 2D/3D detection, where?

2. Quirks adjustments, that goes into Unity

New "modules" in the architecture:
 - quirks file
 - quirks component inside Unity
 - 2D / 3D detection module (release mode)
  * this detects that 3D is available, AND that the particular extensions that Unity requires are present AND that they are not blacklisted (we need a blacklist feature)
  * the module needs also to detect that it is not being respawned too fast

 - 2D / 3D detection module (devel. mode)
  This particular version would actually do GL calls and exercise the actual features we need. In case of a crash would record the issue (apport) to help collecting quirks

Boot sequence during the development cycle:
 * boot
 * run the 2D/3D detection (devel. mode) and potentially collect quirks in case of a crash
 * start compiz and unity

Boot sequence in release mode:
 * boot
 * if there is a flag indicating that the HW was tested previously -> start compiz and unity directly
 * if not, run the 2D/3D detection module (release mode) and start unity or the 2D exp.
 * in case of a driver update or any (detectable) changes that could impact unity, remove the flag and let the detection module run again

gnome-session patch required
 * a patch exist
 * we need to gently lobby upstream to accept it ;)
 * didrocks will file a bug upstream

When transitioning to the 2D experience (classic Gnome 2.x shell), we will put a dialog box on screen for the user to know what happens. The dialog should be displayed while the 2D session is loaded.

== Particular scenarios ==

Nvidia drivers: not shipped by default => unity can't run by default

== gnome-appearance-properties ==
Unity experience and switch between them: we don't want that anymore as there as the UI are too different. The patch has to be removed.

Work that has already been done in compiz
 -> Added reparenting interface for decorations (reparenting is done by default)
 -> Compiz can run without the composite and opengl plugins and acts like a normal X11 window manager
 -> In this case the decoration plugin defaults to WINDOW_DECORATION_TYPE_WINDOW property and decorators must now create a window and paint into that

What needs to be done:
 -> The basic experience is there, although a few plugins should be created
 -> Transition needs a LOT of work (ugly reparenting
    things, etc, etc, often the decorators will not like the switch)

(?)

Work Items