This seems super useful, and I imagine I will refer to it next time I struggle with ALSA. But I really would have appreciated a little context, relating ALSA to OSS, JACK, PulseAudio, and maybe now PipeWire… and some others. Because that is quite a hairball.
ALSA = Advanced Linux Sound Architecture. This is the interface provided by the linux kernel to physical sound devices.
ALSA = Advanced Linux Sound Architecture. This is a relatively simple userspace API that allows to interact with physical and virtual sound devices. Linux-specific, built directly on top of the other alsa.
ALSA refers variably to either (or sometimes both!) of the above; TFA discusses the userspace portion of ALSA.
OSS = Open Sound System. This is a userspace API to access sound devices based special files (/dev/dsp and similar), and was for a long time the primary audio interface on unices and unix-like systems. Older versions of the linux kernel used this, before switching to alsa due to some limitations of the api. FreeBSD, however, still uses oss, having extended the api to eliminate the limitations.
Pulseaudio. This is a userspace daemon that provides an interface to sound devices, and is built on top of the kernel-level alsa (but not the user-level alsa). Has some neat networking features. Its design was modelled after that apple’s coreaudio. It primarily favours linux but has ports to most other operating systems.
JACK = JACK Audio Connection Kit. Like pulse, this is a userspace daemon that offers sound capabilities. Like pulse, it is quite portable; it can actually run on top of pulse! Its primary aim is to provide reliable latency guarantees to pro audio applications (like DAWs).
Pipewire. Yet another daemon. This one aims to be a generic multimedia server—not just for sound—to provide latency guarantees similarly to jack, and to patch up some issues in pulse. It also provides compatibility with jack and pulse; and is somewhat portable, though afaik not so much as pulse.
Older versions of the linux kernel used this, before switching to alsa due to some limitations of the api. FreeBSD, however, still uses oss, having extended the api to eliminate the limitations.
Didn’t they switch because of licensing issues? At some point the main OSS author decided to make the software proprietary; FreeBSD continued with the last free version, and Linux decided to make everything better (“better”).
Like pulse, it is quite portable; it can actually run on top of pulse! Its primary aim is to provide reliable latency guarantees to pro audio applications (like DAWs).
Just to note, Jack typically runs underneath pulse, and exposes itself as a pulseaudio device.
This seems super useful, and I imagine I will refer to it next time I struggle with ALSA. But I really would have appreciated a little context, relating ALSA to OSS, JACK, PulseAudio, and maybe now PipeWire… and some others. Because that is quite a hairball.
ALSA = Advanced Linux Sound Architecture. This is the interface provided by the linux kernel to physical sound devices.
ALSA = Advanced Linux Sound Architecture. This is a relatively simple userspace API that allows to interact with physical and virtual sound devices. Linux-specific, built directly on top of the other alsa.
ALSA refers variably to either (or sometimes both!) of the above; TFA discusses the userspace portion of ALSA.
OSS = Open Sound System. This is a userspace API to access sound devices based special files (
/dev/dsp
and similar), and was for a long time the primary audio interface on unices and unix-like systems. Older versions of the linux kernel used this, before switching to alsa due to some limitations of the api. FreeBSD, however, still uses oss, having extended the api to eliminate the limitations.Pulseaudio. This is a userspace daemon that provides an interface to sound devices, and is built on top of the kernel-level alsa (but not the user-level alsa). Has some neat networking features. Its design was modelled after that apple’s coreaudio. It primarily favours linux but has ports to most other operating systems.
JACK = JACK Audio Connection Kit. Like pulse, this is a userspace daemon that offers sound capabilities. Like pulse, it is quite portable; it can actually run on top of pulse! Its primary aim is to provide reliable latency guarantees to pro audio applications (like DAWs).
Pipewire. Yet another daemon. This one aims to be a generic multimedia server—not just for sound—to provide latency guarantees similarly to jack, and to patch up some issues in pulse. It also provides compatibility with jack and pulse; and is somewhat portable, though afaik not so much as pulse.
Didn’t they switch because of licensing issues? At some point the main OSS author decided to make the software proprietary; FreeBSD continued with the last free version, and Linux decided to make everything better (“better”).
Just to note, Jack typically runs underneath pulse, and exposes itself as a pulseaudio device.
FWIW, the other BSDs I believe use a variant of the SunOS 4 audio APIs (at least Net), and OpenBSD has sndio, which is their equivalent of Pulse.