[linux-audio-dev] Quick and efficient sound daemon idea -- why not do it this way?

Joshua Haberman joshua at haberman.com
Fri Oct 18 03:46:01 UTC 2002


"Paul Davis" <pbd at op.net> wrote:
> thats very true. my position is very, very simple: OSS was a *HUGE*
> and monstrous mistake. in the guise of using The Unix Way (TM) for an
> audio API, it has saddled us with dozens of (mostly toy) applications
> that use a design model/architecture that is not appropriate for real
> time work.

Let me take a step back and ask a question that has plagued me for a while:
what *is* the Unix way to solve new problems in new domains?

I cringed a little when I read this in the Linus Torvalds autobiography:

    This simple design is what intrigued me, and most people, about Unix
    (well, at least us geeks).  Pretty much everything you do in Unix is
    done with only six basic operations. [...]

    [They are fork, exec, open, close, read, write]

    Sure, there are tons of other system calls to fill in all the details.
    But once you understand the six basic ones, you understand Unix.
    Because one of the beauties of Unix is realizing that you don't need to
    have complex interfaces to build up something complex.  You can build
    up any amount of complexity from the interactions of simple things.
    What you do is create channels of communications (called "pipes" in
    Unix-speak) between simple processes to create complex problem solving.

    An ugly system is one in which there are special interfaces for everything
    you want to do.  Unix is the opposite.  It gives you the building blocks
    that are sufficient for doing everything.  That's what having a clean
    design is all about.

I cringed because it struck me that this is exactly the kind of thinking that
bore OSS.  The idea that any new task (such as sound input and output) should
be designed to use combinations of the simple interfaces we already have, so
that we can use the tools we already have to do work in the new domain.  The
idea that "cat file.aiff > /dev/audio" should be an acceptable way to play
audio files, or that JACK should be replaced by a complicated shell script that
just pipes different programs together.  :-)

Audio I/O has a completely different set of assumptions and constraints than
reading and writing files.  It seems to warrant a different API and different
system calls.  But does this go against the Unix way?  Is ALSA in line with
the Unix way?

Josh

-- 
"Only Angels can sing that high, and only dogs can hear it."  -- James Evans



More information about the Linux-audio-dev mailing list