Installing NetBSD requires operating an interactive curses program (sysinst(8)) that runs on the text console. Other operating systems (e.g. Debian GNU/Linux) provide an option to start a speech synthesizer so that vision-impaired users can install the OS. NetBSD currently doesn't.
If the user is installing NetBSD over a serial console (or QEMU's "-display curses" option) from an operating system that already has accessibility features enabled, this isn't a problem. However, it becomes problematic when directly sat in front of the hardware, and that hardware is a laptop that lacks a console port.
Modifying sysinst(8) to add speech synthesis would be an easy way to make it accessible. However, once the installation is complete, the user is still stuck until they get a chance to install Orca or similar. A more general solution that allows the text console to speak to the speech server would be strongly preferable. There is a niche Linux distribution that appears to support this, ADRIANE.
NetBSD's text console (with vt100 emulation) is implemented in the kernel. Writing a userspace vt100 emulator that outputs to the wsdisplay(4) framebuffer would make this project a lot easier, and has other advantages - it would be easier and safer to add support for more complex functionality e.g. bidirectional utf-8 scripts, and sixel graphics. However, this is probably beyond the initial goal of making installing NetBSD accessible.
Luckily, we don't need to implement speech synthesis from scratch. There's a very nice BSD-licensed implementation already, flite.
Tasks:
- Implement a speech server (ideally sandboxed) that takes text input (perhaps over a Unix socket), uses the flite library to process it into speech, and then outputs it to an audio(4) device.
- Investigate implementing a /dev/conspeech (or similar) device in the kernel that the speech server can read to get input. Ideally this should be relatively usable, e.g. it should only read out freshly updated screen regions from curses applications like sysinst. It should also echo user input. For security reasons, it should be disabled by default, and only enabled with sysctl(8). NB: maybe this has some overlap with a device that is already available.
- If the above turns out to be impractical (or otherwise inconvenient to use with interactive curses applications), investigate adding support for writing to the speech server from sysinst(8) directly.
- Modify sysinst(8) so that one of the first things it does is ask the user whether to start the speech server.
This project requires some experience with C programming.
