From the ashes of BeOS, Haiku has risen with the goal of providing a fast, easy to use and powerful operating system. In this Q&A one of the Haiku developers, going by the name "waddlesplash," has provided some details on how Haiku is developed and the challenges of writing an operating system.
What was the inspiration for the development of Haiku?
Haiku was founded in the early 2000s following the demise of the BeOS. Michael Phipps and a few others didn't want to see their favorite OS die, so they started the OpenBeOS project to write a complete, cleanroom implementation of the BeOS. Over a decade and a name change later, it's now Haiku.
What are some of the biggest challenges developing an operating system?
Mostly the amount of work involved. Haiku takes a different approach to operating system development than Linux or the BSDs do - instead of having separate teams & repositories for all the major projects (e.g. kernel, X11, KDE or GNOME, etc.), the entire OS, from the kernel to
the window manager to the file browser, is all in the same repository and managed by the same team. So there's less overhead (by a lot), but the same amount of lines of code required.
The biggest challenge, though, is hardware support. There's just so much of it out there with so little documentation, and even if Linux supports it, often times the Linux driver is badly commented and/or doesn't work very well, and it's all the documentation we have to go from. We do have a compatibility layer for FreeBSD's WiFi drivers, which is where most of our WiFi support is from, at least.
How do object oriented design principles benefit developers working on Haiku?
It allows for a lot more organization, and makes it a lot more fun to write software. Most software written for Linux or Windows doesn't use the "official" APIs (Win32 API for Windows, Xlib for X11, etc.), mostly because they're C and really hard to write code for. Haiku, on the other hand, has a C++ API, and is an overall joy to write code for. I'd be pretty happy if I could write software for Haiku and have it run anywhere, but that's not really feasible for a number of reasons.
What skills could a developer learn by hacking on a project like Haiku?
Well, I'm mostly a userland-side developer, and I've learned a lot about kernels and other low-level system components just by listening in on the conversations the kernel developers had. I've also learned a lot about porting software, and package repository management. Those are probably the key areas of learning that you aren't likely to find in anything but operating system projects.
Where do you see Haiku going over the next few years?
Just now, we're working on polishing the system for the beta release, which (we hope) will be out in the next 6 months or so. The alpha release which is currently on the frontpage is (horribly) outdated, and lacks some really impressive new features we've added (HTML5 video support in the browser, ASLR/DEP, the package manager, etc.) After that, we plan on dropping support for the old BeOS ABI (we're currently still backwards-compatible).
How does Haiku coordinate the development process?
The primary methods of communication are IRC, the mailing lists, and the bug tracker (Trac). IRC is used for "down-to-the-minute" and more casual discussions of development. Major changes are discussed and debated on the mailing lists, as well as code review of developer-submitted patches and the commit log. The bug tracker is used for tracking issues (of course), as well as prioritization, division of work, and review of patches submitted by non-developers.
What ideals have the Haiku team established, and what benefits do they bring?
Our main ideal is to make Haiku a viable system for both users and developers. Don't make it the system so rigid and inflexible that developers are turned away from it, and don't make it so customize-able as to make the users dizzy in a sea of options. This proves to be very easy to say, and very hard to do. What else is new? :)
What are some of the features of Haiku that set it apart from mainstream OS's like Windows or Linux?
Mostly the really tight unification of APIs and components, and user-friendliness of all public (non-POSIX) APIs. Windows has so many official systems for software development now (Win32 C API, WinRT API, .NET, etc.), and Linux is just a mess (use Qt? or GTK? or raw X11 & ALSA?). Haiku has one official developer-friendly API (https://api.haiku-os.org/) which is used by all of the default apps as well as all 3rd-party software and ports.
In addition, we also make significant use of threads. Whereas on Windows and Linux where the whole GUI is on one thread (for the most part), in Haiku, every window is it's own thread. Communication is done with BMessages - think JSON, but C++, and with static instead of duck typing. This makes for a much more responsive GUI, as even if one window is busy doing some long operation, the whole GUI doesn't freeze up.