I am finally able to publish the traditional interview about the recent OpenBSD release.
OpenBSD 4.5was released on May 1st, so I am very late and also the interview is shorter than usual, but this has to do with my unstable health condition.
I would like to thank all the developers that were kind enough to answer my questions even if asked so late, also the developers that were writing code at the recent Hackathon, and obviously all the developers at large that built this nice release.
Let's begin...
How does this release sound? :)
Jacob Meuser:Full, clear and multidimensional ;)
S/PDIF output support was added to the ac97(4) layer and is used by auvia(4) and auich(4). Support for 4 and 6 channel playback was added to auich(4). A recording bug that affected many auvia(4) devices was fixed.
There was a lot of work done to azalia(4) in this release cycle as well. The HDA/Azalia specification is very interesting. It defines a set of widgets from which an audio codec can be constructed, and the codec can be queried for its properties. This theoretically allows for a wide range of devices to all work under one driver.
However, the specification is complex and it leaves some things to be "vendor defined". In addition, some important properties of the codec are actually set by the system BIOS on boot, so the same codec in one machine may actually be functionally quite different on another machine.
As of OpenBSD 4.4, the azalia(4) driver had fairly poor generic codec support, along with much codec/BIOS dependent code. I decided that continuing to add codec dependent code was simply not maintainable, and focused on making the generic support work everywhere, as it is supposed to.
As of OpenBSD 4.5, the azalia(4) driver has very little codec dependent code, and the support on most codecs is far superior to what it was in 4.4, even those that had complete codec/BIOS dependent support.
The following features are now generically supported by azalia(4). They were either not supported at all or only partly supported by codec dependent code:
- jack sense speaker muting
- jack retasking
- multichannel playback/recording
- S/PDIF output
- 20 and 24-bit playback and recording
But probably the biggest improvement is a more usable mixer interface. One of the biggest complaints was that there were too many controls. This problem was addressed in several ways. First, the controls that did nothing were removed. Then mixers were "collapsed" from having several mute controls, to having a single control that uses a set. And finally, widgets were grouped together. On some machines, the list of mixer controls shrank by over 50%.
Oh, I lied, the biggest improvement is that now all azalia(4) have an outputs.master control. By far the biggest complaint for azalia(4) was, "I can't change the volume". There are a few codecs that simply have no volume control, but otherwise, there is volume control that should work with keyboard volume keys as well as the mixer GUIs in ports.
sio_open(3) documents a new audio API, what is it?
Alexandre Ratchov:Roughly, it's aimed to become the main OpenBSD API for audio. It's used by applications to play and record audio streams.
The main goal of the API is to overally simplify audio. Simpler audio API means simpler code, less bugs and more robustness. The API also unentangles the application internals from the audio subsystem internals. This allowed using aucat(1) as an audio server.
Audio applications must be ported to the new API in order to benefit from new audio features. This may seem a lot of work. Actually it ends up that often it's simpler to port the application to the sio_open(3) API than trying to fix subtle design bugs. Still work is in progress.
There has been a lot of work on aucat(1). What features does it provide in this release?
Alexandre Ratchov:aucat(1) now has server capability and is integrated in the audio subsystem as a minimalistic audio server. Basically, audio applications communicate with aucat(1) and aucat(1) communicates with the physical device, processing audio data on the fly. This imports all aucat(1) features into the audio subsystem:
- resampling and conversions: now applications that don't support device's encoding or sample rate can work. Useful on fixed-rate devices or devices with unusual encodings.
- mixing: multiple applications can play on the same audio device simultaneously
- demultiplexing: multiple applications can record from the same device (handy for monitoring)
- multistreaming: channel ranges of an audio device can be configured to appear as independent devices. For instance headphones and speakers on 5.1 devices can be configured to appear as separate audio devices.
The new sio_open(3) API, makes aucat(1) server transparent for applications. If the server is running then, applications will use it, else they will use the audio(4) device.
The audio server approach helps moving CPU intensive code (resampling, conversions) from the kernel to userspace, improving responsiveness of interactive applications.
The protocol used by aucat(1), implements timing messages, allowing to very precisely synchronize audio to something else, or to enforce desired latency requirements.
What changed in the ports and packaging system?
Marc Espie:As far as the tools go, not much actually changed: packages now internally use sha256 for all file checksums instead of md5, so no part of the ports/packages system relies on md5 these days (which is now to be seriously broken).
The truth of the matter is that I'm working on bigger changes, but they were not ready before 4.5, so I'll have a lot more to say for 4.6 ;-)
For packages, the biggest change is probably Alex Ratchov and Jacob Meuser's work: they wrote a new simpler and better frontend to the audio subsystem. As usual in OpenBSD, new and sexy things like that don't count unless somebody uses them, and there was a rampage throughout the ports tree to convert most ports to the new subsystem. So, in 4.5, most audio ports go through libsndio, and as a result, they can be mixed together.
The other important thing is that a lot of people pitched in to ensure more packages for more exotic architectures, so you'll probably be surprised to see that arm (for instance) has a heck of a lot of compiled packages this release.
What is new in OpenBSD/sparc64?
Mark Kettenis:The most exciting new functionality in 4.5 for OpenBSD/sparc64 is that we now support virtual I/O on sun4v through the vdsk(4) and vnet(4) drivers. This means that it is now possible to run OpenBSD in a logical domain on machines with UltraSPARC T1, T2 and T2+ processors. On some of Sun's CoolThreads servers, you can even give a logical domain running OpenBSD access to real hardware. This makes it possible to run a pf firewall on the same machine as the services you're trying to protect, without compromising security. Those services could even be hosted on a logical domain running Solaris.
There are also quite a few improvements in our support for real hardware, including an accelerated framebuffer driver for Sun Expert3D, Expert3D-Lite, XVR-500, XVR-600 and XVR-1200 framebuffers and a matching X driver.
How is your work on Xenocara going on?
Matthieu Herrb:Some progress have been made, although not as good as I would have expected. OpenBSD 4.5 ships with xserver 1.5.3, recent versions of most graphics cards drivers, libraries and utilities. I've also prepared the way to make importing new releases of X components easier in the future.
Owain as done lots of great work to fix bugs in drm and Mesa drivers on Intel and ATI chips so Xenocara now has good 3D support on mainstream drivers.
There are a few prolems though. The most proeminent one is that X.Org developers broke multi-card based multi-head support in xserver 1.5 (not only on OpenBSD) and although I tried to fix it (with help of other developers), it is still broken and will probably stay broken until all the work on porting GEM and kernel side mode-settings to OpenBSD is done.
What is the status of the sensors framework?
Constantine A. Murenin:The sensors framework would not be the same without the drivers. As always, with this release cycle we've had a number of drivers introduced to the sensors framework. Users ofcac(4)andmpi(4)RAID controllers would be happy to find the newly added bio and sensor support. There are also two brand-new drivers:gpiodcf(4)for timedelta sensors through GPIO pins andschsio(4)for SMSC SCH311x series of Super I/O Hardware Monitors.
Out of the existing sensor drives we can note the newly added support for the integrated temperature sensors of the AMD Family 11h processors inkm(4), which, amongst others, covers the processors marketed under theTurion X2 Ultrabrand; additional chip support was added init(4),lm(4),owtemp(4)andsdtemp(4), and some bug fixes were made init(4)andlmenv(4).
Overall, with this release there are now 72 drivers that are exposing sensors with thesensordev_install(9)API. Taking the opportunity, I'd like to point out that an overview of the sensors framework as of OpenBSD 4.5 has been recently presented at AsiaBSDCon 2009, and aformal paper [PDF]has been written and made available.
It seems you have worked on disklabel to improve its support for different filesystems and devices. Would you like to tell us more?
Kenneth R Westerback:Joel Sing pointed out at h2k8 that SGI could not create a CD that would boot and provide FFS filesysstems. This was preventing the creation of CD install media for SGI. One of the many interesting changes that resulted from fixing this was making the reading and writing of disklabels sector size agnostic. Disklabels, which are only 512 bytes in size, are now correctly placed and found inside larger sectors.
Another improvement to disklabel handling was the refinement of FAT and FAT32 filesystem recognition. Camera, phone and removable media manufacturers continue to create FATxx filesystems on their devices that have an absolutely minimal amount of metadata. And every company has their own idea of minimal of course! This makes trying to do sanity checks on such filesystems a problem. This time around we fixed the handling of filesystems found on some SDHC cards.
The most significant fix to disklabel processing was preventing the writing of disklabels with incorrect checksums on systems using MBR or DPME disk partitioning. This was occuring because the code 'spoofing' native partitions was modifying a disklabel being written even though it did not need to.
Finally, disklabels constructed from an architecture specific native disklabels are now subject to the same consistancy checks as all other disklabels."
