Overview
Bonobo has been deprecated for GNOME 2.x and there are plans to eliminate it from GNOME 3.0. The accessibility infrastructure of GNOME depends highly upon Bonobo, so we need to figure out how to move forward with GNOME 3.0 while also keeping it accessible. With respect to accessibility, the main touch points of Bonobo are as follows:
AT-SPI
Updated 02-Nov-2009.
Much work has been done by Mark Doffman and Rob Taylor from Codethink to move the infrastructure to D-Bus, and the http://www.linuxfoundation.org/en/Accessibility/ATK/AT-SPI/AT-SPI_on_D-Bus is the primary page for tracking the work. For the purposes of keeping the entire Bonobo/CORBA deprecation plans for accessibility in one spot, however, we include a discussion here.
The AT-SPI provides the whole of the accessibility infrastructure - GAIL, ATK, at-spi-registryd, Java Access Bridge for GNOME, cspi, pyatspi, etc. Not everything needs changing (phew!). Instead, just the components that touch CORBA need to be changed. The following diagram represents a prototypical example of the components in the infrastructure. The black lines represent the CORBA communication channels between components (lines from Orca and GOK to all the applications have not been included to avoid clutter). The CORBA touchpoints are presented in red: atk-bridge, JABG (Java Access Bridge for GNOME), at-spi-registryd, pyatspi, and cspi. Note that other components, such as GAIL, ATK, and the Java Accessibility API should not need modification.
The following diagram represents the plan for moving to D-Bus. The CORBA components illustrated in red above have been replaced with D-Bus components illustrated in green, with the exception of the Java ATK Wrapper (JAW), which is illustrated in dark blue.
In particular:
The CORBA-based atk-bridge GTK+ module will be replaced with a new D-Bus-based atk-bridge module. Firefox, OOo, and gdm have hardcoded references to "atk-bridge", so keeping this name is important. For GNOME 2.29.2 and better, the CORBA-based atk-bridge will be relocated.
The CORBA-based pyatspi module will be replaced with a new D-bus based pyatspi module that speaks D-Bus. For GNOME 2.29.2 and better, the CORBA-based pyatspi module will be relocated.
- AT-SPI/D-Bus will provide a new libexec at-spi2-registryd module that speaks D-Bus.
The Java Access Bridge for GNOME (JABG) will be replaced with a Java ATK Wrapper (JAW) that is a JNI layer that bridges between the Java Accessibility API and ATK.
- The cspi library may or may not be replaced by a cspi2 module that speaks D-Bus.
Finally, gnome-session currently launches the at-spi-registryd. This will be modified so that D-Bus activation will launch at-spi-registryd.
Remaining Work
The week of April 21st, 2009, several GNOME accessibility community members held a hackfest. This hackfest not only helped train more people about the AT-SPI/D-Bus internals, but also led to improvements in the code base and a clear identification of the remaining work to make the D-Bus implementation a viable replacement for the CORBA implementation.
The remaining work includes the following:
Objects such as spreadsheets, handle their own children for efficiency purposes. This is known as the "MANAGES_DESCENDANTS" problem. We're still looking into this problem, but are getting closer. See a discussion at https://lists.linux-foundation.org/pipermail/accessibility-atspi/2009-July/thread.html where Mike Gorse (Novell) and Mark Doffman (Codethink) have some good ideas.
- Similar to the "MANAGES_DESCENDANTS" problem, applications such as word processors and web browsers potentially have a very large number of children but may not handle them as spreadsheets do. This is known as the "infinite space" problem. Much paralysis by analysis has taken place here. No optimal solution has been found to date, and we may need to eventually substitute the word "progress" for "pedantic" and come up with a solution that addresses the known use cases (e.g., "say all" and structural navigation in Orca, screen grab in GOK, etc.). See the "MANAGES_DESCENDANTS" discussion for progress in this space.
- The Collections API needs implementing. Mike Gorse is working allowing this in the AT cache and also across the wire.
The D-Bus pyatspi module is not reentrant. This means that Python applications that present a GUI cannot access themselves and/or will cause a hang if they do. For example, Orca cannot access its own preferences GUI. Another example is when an application processes device events from itself. This potentially requires help from the D-Bus team to allow reentrant calls. Li Yuan (Sun) and Willie Walker (Sun) have been identified as people to work with the D-Bus team to make this happen. See also Accessibility/BonoboDeprecation/PyATSPIReentrancyDiscussion.
With the AT-SPI/CORBA solution, assistive technologies can access GUIs that are not running as the user logged into the desktop. For example, they can access system administration GUIs running as root. There is currently no support in the GNOME D-Bus offering for this. There is a general consensus, however, that there should be an "X Session Bus" for all manners of things, including accessibility. The team needs to work with the larger GNOME/D-Bus community to help make this happen and then migrate the AT-SPI/D-Bus solution to use this newly created bus. Track the bug at http://bugs.freedesktop.org/show_bug.cgi?id=17970
The Java ATK Wrapper (JAW) has been under development by Ke Wang (Sun), who is planning on completing the work in the GNOME 3.0 timeframe.
The "Login Helper" API provides the ability for an assistive technology such as GOK to be displayed on top of a screen saver. This has not been ported yet, but is not expected to be a substantial effort. Li Yuan, Brian Cameron, Jon McCann, and Willie Walker have been identified as people who can make it happen. Note that the new GDM work may make the login helper obsolete.
- Integration into GNOME
- JHBuild integration needs to be done.
UNASSIGNED/AT-RISK: The cspi port has not been done. The main impact will be on GOK, Dasher, and MouseTweaks. BrlTTY uses cspi as well. It has been reported that LDTP uses it as well, but LDTP is planning to migrate to pyatspi. We are debating whether to port cspi to D-Bus (estimated 3-4 months work with no resources available or allocated yet) or to selectively port a portion of it. See the CSPI page for details on the CSPI usage of various applications.
- The main emphasis of the port to D-Bus was to support automated testing. As a result, much functional testing needs to be done to ensure it works with assistive technologies. The Sun testing team in Beijing and the Orca testing team has a number of existing test suites it can use for this.
- Performance work. The new solution needs to be tested and improved to flush out and address performance issues that cause a user-perceptible slow down when compared to the AT-SPI/CORBA solution. For example, rapid typing in Orca should still interrupt speech as quickly as it did with the CORBA solution, as should handling a flood of AT-SPI events (e.g., Nautilus flooding the bus when the user opens /usr/bin or /usr/lib). The various team members at the Ireland hackfest agreed to analyze/address these issues.
GNOME Speech
Updated 02-Nov-2009.
gnome-speech: provides the text-to-speech infrastructure for GNOME and is based upon Bonobo/CORBA. The primary consumer of gnome-speech on the GNOME desktop is Orca. gnome-speech has a number of limitations, one of which is that it is bound to the GNOME desktop. People want speech to be more of a session and/or system service that can be used across desktop solutions (e.g., GNOME and KDE) as well as at the console level for applications such BrlTTY and speakup. The timing is right to rethink all of gnome-speech and either develop or move to something else. The current alternative solution, Speech Dispatcher, is usable and Orca currently has code to use it (see also Orca/SpeechDispatcher). It, however, comes with its own set of issues/limitations.
Luke "TheMuso" Yelavich (Canonical) has developed a proposal to carry speech dispatcher forward and is busy working on it. Willie Walker has also worked on a preliminary investigation of getting speech-dispatcher running on OpenSolaris (it works after a 3000-line patch Willie created and which Luke has integrated). gnome-speech will be left alone and marked for deprecation once the speech dispatcher work can supplant it and Orca integration with speech dispatcher is complete.
Magnification
Updated 14-Oct-2009.
gnome-mag: provides magnification support for GNOME and is based upon Bonobo/CORBA. gnome-mag suffers from similar limitations as gnome-speech, but perhaps not nearly as so. The primary consumer of gnome-mag is Orca as well as the standalone 'magnifier' application provided by gnome-mag. The other high-visibility magnifier solution available is the eZoom plugin for Compiz.
Magnification in GnomeShell: Joseph Scheuhammer, Ph.D., Accessibility Software Architect Adaptive Technology Research Centre University of Toronto will be working on taking magnification forward. Joseph, Owen Taylor (RedHat), Peter Korn (Sun), Jan Richards (ATRC), and Willie Walker (Sun) met on 21-Jul-2009 to discuss adding magnification support to GnomeShell. Owen showed a very compelling 15-line modification to GnomeShell to demonstrate a hard-coded magnification example. Joseph will be working forward in GnomeShell with Owen, with the goal being to provide standalone magnification support in GnomeShell as well as a DBus API for assistive technologies such as Orca to use. The target is GNOME 3.0. gnome-mag will be left alone and will be marked for deprecation once the GnomeShell magnifier and DBus API can supplant it and Orca integration with the new magnifier API is complete. Patches to GnomeShell that add this magnification functionality can be found in the bugzilla for GnomeShell.

