Fedora Core is supposed to be “bleeding edge” technology. What you may not expect is that it puts the edge while you provide the bleeding. Suppose you want to write an audio application, something simple, gathering audio from a microphone and feeding audio to a speaker. How could it be a nightmare?
Quite easily it is right from the beginning. How many audio API does linux have? Two? Three? Well, I counted seven – OSS, alsa, jack, esd, pulseaudio, openAL, gstreamer. You may argue that not all these APIs are on the same abstraction level, yes, I agree, nonetheless you have to decide what to pick and hope that the API you picked is widespread enough among your target customers.
I had some legacy code that relied on OSS, so I stuck with that. Knowing that Alsa was the answer to OSS, I tried it out and I left wondering which was the question. Alsa is significantly more complex to program than OSS, the bare minimum playback code is longer for ALSA than OSS.
So I gave up with ALSA.
Next problem is when I tried my legacy code on the brand new Fedora Core 8. The microphone seems not to work. I tried the command line OSS test with:
# cat /dev/dsp >/tmp/foo
just to discover that no audio was collected.
After some twiddling and after having tried the canned solutions I found without success, I decided that I need another distro to test my code.
This time too, as soon as I find a solution there is a new problem ready for it. Fedora Core 8 uses logical volumes, so it is not straightforward to shrink them from say Debian install. In order to resize a logical volume, first you have to unmount the partition in it, resize the partition, and eventually shrink the logical volume.
You can’t do this on the default install in a running system because there is just a single partition with the whole system (but “/boot”). You can’t do either from the Debian install because “etch” doesn’t manage logical volumes.
Third approach I went for another PC-like device we are developing for a customer. Before doing anything, I tested the OSS driver on this box and it worked, so I downloaded my code and … “error: missing libSDL”.
Sooner or later I will master this adversity, I’m sure, I just hope not to bleed too much in process.