LPC: Linux audio: it's a mess
LPC: Linux audio: it's a mess
Posted Sep 22, 2008 10:55 UTC (Mon) by mezcalero (subscriber, #45103)In reply to: LPC: Linux audio: it's a mess by nix
Parent article: LPC: Linux audio: it's a mess
ALSA internally doesn't even use read()/write() anymore. It uses ioctl()s everywhere as a generic function call multiplexer. That we have to do this is due to the everything-is-a-file philosophy and is basically just a hack: you lose type-safety and everything.
Unix access control is too simple: we want that access follows the user that is logged in on the local VT: when he logs out he needs to be removed from the access. Unix doesn't allow that, because if someone gained access he can keep things open as long as hew wants.
I know that e-i-a-f is one of the core fundamentals of Unix. But you know what? It's also one of the core weaknesses of Unix.
Posted Sep 22, 2008 20:46 UTC (Mon)
by nix (subscriber, #2304)
[Link] (1 responses)
The way to structure this is to put your controls in a directory, or a set
It's not even hard to make a system that works like this in userspace,
Posted Sep 22, 2008 20:57 UTC (Mon)
by nix (subscriber, #2304)
[Link]
I'm just wishing for an ideal world in which the Unix philosophy was still
Posted Sep 23, 2008 9:09 UTC (Tue)
by fergal (guest, #602)
[Link]
The problem is it is quite difficult for a program to present itself as a coherent set of files. While it can easily enough produce a file-like interface, it cannot easily produce a directory-like interface.
LPC: Linux audio: it's a mess
compatible, it's not typesafe (as you said), it's thoroughly opaque...
of directories, one file per control, rather than using ioctl() on a
single file with different requests. The way you solve the 'remove this
user' is to create these directories on the fly, and zap their contents
when the user logs out: even if the user retains a handle to the
directory, it's empty now so they can do nothing with it. (You might need
a simple non-device revoke() to do this properly, such that all I/O to an
ex-session fd returns -EIO, but this has already been written: it just
hasn't been applied because it's difficult to make it work with things
like PTYs. For this application, we don't care about that at all). Plan 9
did all this two *decades* ago and got it right: why can't Linux do it
now?
thanks to FUSE.
LPC: Linux audio: it's a mess
even 'oh no you must rewrite PA so that everything is a file'.
as universally followed as it was in its early days, and musing about ways
to make that happen. I think a working revoke() is the biggest missing
piece (and libraries to make exposing one's configuration state as a FUSE
filesystem painless).
LPC: Linux audio: it's a mess