The Challenge of Hardware Support

A very common problem

Every operating system project meant to be run on generic hardware faces this issue, which is to support the widest range possible of hardware configurations. Haiku makes no exception to the rule, and being a small(-ish), volunteer run project, the challenge may seem even more daunting. Heck, even BeOS (Haiku’s inspiration) faced the same issue back in the day with its relatively short hardware compatibility list. Linux and, to a lesser extent, the various BSDs do seem to have an easier time both because of the larger developer community and some corporate backing.

Isn’t it sad, all this work being done separately, without any practicable means to share it? That’s what we thought. Haiku came up with several ways to quickly gain the capacity to use hardware such as network adapters, printers and several others.

Network adapters

Network card adapter drivers in Haiku comes in two main kinds : the native ones, and those adopted almost as-is from FreeBSD. This possibility comes from a compatibility layer, that glues the code from the driver to the native driver API. It brought many good quality, mature drivers to the driver ecosystem in a tiny fraction of the time it would have taken otherwise.

It’s actually that same layer that helped adding wifi support more recently.

OpenSound System (OSS)

The porting of OpenSound System (OSS) helped filling a gap in the sound card drivers arena. Even though great advances are made in the native drivers (especially the HDA driver, and others), it remains very useful.

Printers

By making the whole collection of drivers from the Gutenprint project available, it’s over 1300 models of printers that are now usable, and that number is growing release after release.

Gallium 3D project

Still a work in progress, this is a project related to the well known Mesa 3D. It aims to ease the porting of GPU drivers to different operating systems, mostly by separating the specifics of each drivers from the common parts. So, in other words, you would have a common part to each drivers, that would be like “glue code”, implemented in the operating system. It would manage memory allocations, direct access to the hardware, and such; exposing those functions to the drivers. The drivers themselves would basically be portable, as is.

By implementing the Gallium infrastructure, an operating system would gain access to drivers such as Nouveau (open-source NVIDIA driver) or the open source Radeon driver.

Conclusion

It seems that many projects would also benefits from such shared efforts, and some followed a similar path to Haiku’s. Let’s simply hope similar efforts can be done; the time and efforts of those volunteers is better spent innovating and experimenting, than reinventing the wheel over and over again.