The archaeology of GNOME accessibility
He began by defining "accessibility" as usability by people with disabilities; this usability is often provided through the use of assistive technology of some sort. When one thinks about who benefits from accessibility, it is natural to picture people like Stephen Hawking, who clearly needed a lot of assistive technology. But that is not what the most common consumers of assistive technology look like; instead, they look like his parents, who are active people in their late 60s. They are computer-literate, but they are getting older and need more affordances than they once did.
The point, he said, is that we all will benefit from accessibility at some
point in our lives. He is 39 years old and has already had to make some
compromises in response to aging. None of us are getting any younger, he
said, so
we are all the next set of consumers for accessible software. We owe it to
ourselves — and to everybody else — to make accessibility work.
The GNOME project first got accessibility support during the development period between the GTK 1.3 and 2.0 releases — 18 years or so ago. This work was done by the Sun accessibility team as part of the company's effort to ship GNOME 2 on its workstations. This implementation was built around three separate components:
- The ATK toolkit, which implements a set of abstract interfaces to accessibility functionality.
- AT-SPI, which is the interface by which applications communicate with assistive technologies.
- GAIL, the implementation of the ATK interfaces for GTK.
Bassi made it clear that he was not impressed with how this design has worked out. The charitable way of explaining how it came to be, he said, was that Sun already had this sort of API for Java, so it made sense to do the GNOME work along similar lines. In reality, though, nobody knew why the Java implementation worked the way it did, but it was easier to copy it than to change it.
To complicate things further, GNOME in those days was based on the CORBA object-request broker. For the young members of the audience fortunate enough not to know about CORBA, he suggested imagining an enterprise version of any modern interprocess communication mechanism — then make it much more corporate. It had design features like a centralized authority to assign names for all users. Once upon a time, he said, all of GNOME worked that way; that is the source of the words "object model" in the GNOME name.
Much of the accessibility implementation is maintained outside of the GTK source tree, which brings problems of its own. The end result is that GNOME's accessibility support never worked all that well. But it lets managers check the "accessibility" box, which is all many of them need. Unfortunately, accessibility is not a box that can be checked and forgotten about; it is a process that must be constantly kept up with. But the GNOME project ended up mostly forgetting about it.
In the intervening years the world has changed. CORBA has been replaced by D-Bus, for example. Patience for out-of-tree modules is mostly gone. The move to Wayland is creating problems for existing assistive technology, as is the sandboxing that is increasingly being used for GNOME applications.
AT-SPI has been ported to D-Bus, he said, but the architecture of the accessibility subsystem as a whole is the same. It remains in the X11 world, where every application expects to have access to the entire system. This is a design that dates back to the days when applications were installed by the system administrator and could (hopefully) be trusted; they certainly were not acquired from random places on the Internet.
The world has changed, he said, so accessibility support in GNOME needs to change with it. The system is "stuck" and needs a redesign. But this is hard because, unlike the situation with other desktop features, it is not possible to ask users of assistive technology to contribute. To a great extent, they simply cannot perceive what is not available to them, so it's hard to even ask them to report regressions.
The first thing that needs to happen is to consolidate the various pieces, many of which have been untouched for years. Some new functionality has been added, mostly to match new features provided by browsers, but as a whole GNOME accessibility support just doesn't really work. The abstraction layer doesn't really abstract anything, so changes typically have to be made in many places. The toolkit needs to be simplified; as things stand now, application developers expect GTK to take care of everything, but that is not the case. There is also a need for funding; this work is not trivial and it's not reasonable to expect it to be done by volunteers.
This year, he said, the GNOME Foundation (where he is employed) has directed him to work on this problem for the upcoming GTK 4 release; he has been doing that for the last six months. There has been a lot of "archaeology" involved to understand it all. He has been working to pull a lot of abstracted stuff back into GTK; developers will not have to go to the ATK reference manual anymore, he said, because it won't exist. He has also been working on portability; accessibility support in GTK doesn't currently work on obscure systems like Windows.
There is still a need for some abstraction, he said, but it should be based on concepts rather than code. GNOME is increasingly using cascading style sheets for its drawing API, so it is natural to look at what the web is doing in the accessibility area. There is a W3C standard called WAI-ARIA that defines many of the abstract concepts needed for accessibility:
- An element is an accessible part of the user interface.
- Each element has a role describing what it does: a checkbox, a slider, etc.
- Attributes describe things the element has: properties, visibility, labels, state, relationships with other elements, etc.
Bassi is working on an accessibility implementation around these concepts. He described it briefly, but this is the point where he was told that he was running out of time. The resulting increase in the pace of the presentation made the information less ... accessible ...
Application developers, he said, will need to follow the WAI-ARIA rules to ensure the accessibility of their systems. That means using the provided accessible elements rather than rolling their own, for example. The semantics of widgets should not be changed. Any widgets that are accessible with a mouse pointer should also be accessible from the keyboard. Widgets need an accessible label. And so on.
He is doing some work with gtk-builder-tool to ensure that accessibility information is added to interfaces where it needs to be. There is also a new assert mechanism that can verify that accessibility information is changed when elements of the interface are changed, hopefully preventing accessibility regressions.
The current state is that the new accessibility API is nearly finalized; only a few small details remain. The GTK widgets are being ported to this new API. He is writing a new test suite for this API, and documentation is in progress. He is also working on implementing the AT-SPI backend to talk to assistive systems — necessary since, without it, the rest of this work won't actually do anything.
Bassi concluded with some suggestions for anybody who would like to help
with this effort. He would like to see people writing more tests, and
documentation as well. Ports to Windows and macOS need to be done.
Accessibility for sandboxed applications needs to be improved; they need
access to information and assistive technology but should not have access
to the entire desktop. And, naturally, there is always a need for funding
to push this effort forward.
Index entries for this article | |
---|---|
Conference | GUADEC/2020 |
Posted Jul 23, 2020 20:55 UTC (Thu)
by walters (subscriber, #7396)
[Link] (1 responses)
Posted Jul 23, 2020 21:37 UTC (Thu)
by IanKelling (subscriber, #89418)
[Link]
Posted Jul 24, 2020 1:06 UTC (Fri)
by Kamilion (subscriber, #42576)
[Link] (5 responses)
And yet, if I try to do so, I lose important dependents; such as onscreen keyboard support.
Likewise, trying to remove printing support from ubuntu is a complete nightmare, I've had to compromise and leave only the bare minimum postscript support required for the print-to-PDF-file functionality of CUPS. Stuff like hplip are great, but monster-sized, as linux-firmware has also become... Wish someone would add linux-server-firmware to split off all the "enterprise 10Gbit Smart NIC" firmware images away from "Laptop and Desktop Wifi"... But that would make the linux-firmware github repo more of a pain to manage.
Posted Jul 24, 2020 8:26 UTC (Fri)
by smcv (subscriber, #53363)
[Link]
OSKs using ibus might well be a result of the fact that few people understand AT-SPI, and those who do either associate it with more specialized assistive technologies (the Stephen Hawking use-case mentioned in the article), or have looked into its security properties and are scared of its attack surface, or both. For what it's worth, GNOME's "Caribou" OSK uses AT-SPI rather than ibus, so both ways seem to be possible.
More generally, there are broadly two ways the overall system can go to be more useful to you: it can get more integrated and tightly-coupled, or it can get more modular and loosely-coupled. Either of those might be good or bad for your goal, and it isn't obvious which. Choosing the right level of modularity is more art than science, and the right answer will be different for different parts of the system.
If the system gets more modular and loosely-coupled, you are more likely to be able to remove the components you don't need, while leaving the components that you do need, and giving other users in the same situation the ability to remove the components that *they* don't need (not necessarily the same components you remove). However, the price of a modular and loosely-coupled system is that you will not be able to get rid of the abstraction layer that links the components together (together with whatever workarounds and glue code are necessary to make them actually work), which might itself be of a significant size; and the other things you want from your system (features, bug fixes and security) will often advance more slowly, because changes require changing things on both sides of the abstraction layer boundary, and perhaps also the abstraction layer itself.
If the system gets more integrated and tightly-coupled (as in the work described in this article), then you will not be able to remove the components you don't need, because they're integrated into the components you do need. However, if they're more likely to actually work well enough that you can rely on them, and they don't have an abstraction layer getting in the way, that might well be a net improvement from your point of view.
Posted Jul 24, 2020 22:03 UTC (Fri)
by nix (subscriber, #2304)
[Link] (2 responses)
You have to look out there, though. I think you might be dating yourself a bit. 25GbE (let alone 100) is still unequivocally "enterprise", but my desktop here has a 10GbE Intel X540-AT2 in it. It cost a bit over a hundred quid, and the switch it's attached to was only a bit more expensive. Yes, it didn't come attached to the motherboard by default, but 10GbE is definitely not "crazy expensive enterprise only" any more: it's perfectly practical if you just want your desktop's access to your home RAID array to be as fast as it is on the server itself. (Though this particular NIC, driven by ixgbe, doesn't need any firmware at all.)
... hm, a lot of the things that *do* need firmware are a bit on the pricey side, I'll admit. £590 for a 10GbE NIC? Uh no thanks, Myricom. But not all: Agilio CX cards are only about twice as expensive as the thing in my desktop. (Still not sure why it's worth paying twice as much as Intel charge, mind you.)
Posted Jul 26, 2020 5:26 UTC (Sun)
by plugwash (subscriber, #29694)
[Link] (1 responses)
Posted Jul 26, 2020 14:26 UTC (Sun)
by nix (subscriber, #2304)
[Link]
Posted Jul 28, 2020 12:21 UTC (Tue)
by flussence (guest, #85566)
[Link]
Firmware files can at least be pared down by mere mortals. Graphics drivers are in dire need of being separated into current, legacy and abandoned hardware support. Every other class of hardware in the kernel seems to get this right; Intel's 1MB-and-growing blob of mostly unused code is by far the worst offender.
Posted Jul 24, 2020 10:28 UTC (Fri)
by swilmet (subscriber, #98424)
[Link] (1 responses)
Posted Jul 24, 2020 17:01 UTC (Fri)
by ebassi (subscriber, #54855)
[Link]
Qt uses AT-SPI directly, on Linux, and exposes a descriptive API like the one I wrote for GTK. The problem is not to decide whether it's a portable API—it's pretty trivial, and since it's implemented by web browsers, it's fairly obvious it's going to be implementable on top of different platforms. The issue is, as usual, whether or not somebody will show up to help on non-Linux platforms.
Posted Jul 24, 2020 13:27 UTC (Fri)
by droundy (subscriber, #4559)
[Link] (1 responses)
Posted Jul 24, 2020 16:59 UTC (Fri)
by ebassi (subscriber, #54855)
[Link]
I have alluded to the issue in the presentation; the problem is that assistive technologies do not have access to all devices and all applications any more, when not running under X11. An AT cannot snoop all key and pointer events, or poke application windows directly. Accessibility support under Wayland will live in two places: the Wayland compositor, and on the assistive technology. The toolkit, which is what I'm concentrating on at the moment, is not really involved. Compositor maintainers and AT maintainers will need to sit down and outline an API for asking what's the currently focused window, among other things. Once that's available, the ATs can query the application for things like "what's the UI element under the pointer", and then use the existing AT-SPI protocol to gather the rest of the attributes, like the accessible label.
The archaeology of GNOME accessibility
The archaeology of GNOME accessibility
The archaeology of GNOME accessibility
The archaeology of GNOME accessibility
The archaeology of GNOME accessibility
The archaeology of GNOME accessibility
The archaeology of GNOME accessibility
The archaeology of GNOME accessibility
Qt accessibility
Qt accessibility
The archaeology of GNOME accessibility
The archaeology of GNOME accessibility