I desperately wish I had infinite time to be able to contribute to any free software project that interested me. I am constantly exposed to really neat projects that I want to learn about and help improve. I want to do everything I can to advance the power, usability, and range of available free software.
Every time I feel this urge, I remind myself that the most productive I can possibly be is when I am working on a project I already know well. In other words, the best way to achieve my goal of furthering free software in general is to do lots of good work on Audacity and PortAudio. Meanwhile, the people who have found different niches, whether it be in the libraries that do all the grunt work or in the desktop environments that present the gateway to individual applications for the user, are simultaneously advancing the state of their pet projects also.
Not that I have the time to code much of anything these days, with school and all...
Another thing I constantly have to remind myself is that the best way to solve a problem is usually not to start with a clean slate and attempt to make an ultimate design. Though it's much less sexy, the better solution is to build on what has already been done. Every time I tell myself "we need to trash X!! It's way too hard for users to configure, the fonts suck, and you can't change resolutions," I step back and remind myself that improving X is probably the better long-term solution. My sense of aesthetics makes me want to use something like DirectFB instead, since it's clean, sleek, and new, but it would take so much to get to where X already is today.
Another place I struggle with this is all the way down to the Linux kernel. "How is my mother ever going to use Linux if configuring the network requires decyphering driver names like 'ne' and 'rtl8139?' How is Linux ever going to become robustly GUI-configurable as long as we keep using text configuration files? How far can open()/read()/ioctl()/write()/close() really take us??"
Free software is really becoming kickass in some cases. I prefer Galeon to any web browser available for Windows. Though I don't use them much, I continue to hear that Evolution and Gnumeric and Gnucash are kicking some serious ass. But how is my mother ever going to use free software if there's no free platform (meaning kernel+userspace+standard APIs) that works straight out of the box, without configuration pains?
And speaking of standard APIs, I think lack of them is a problem on Linux. How does an application play sound on Linux? Well, it's very simple! OSS will probably work, ALSA is better if it's available, JACK is best for low-latency, inter-app work, but ARtS if you're using KDE and ESD if you're using Gnome!
Challenge 2: set the resolution to 800x600 and play a movie file fullscreen. There's no obviously standard way to do this on a basic Linux/X11 box. Stuff is written for SDL, Allegro, ggi, even svgalib. Some may work on your box, others might not. This is where cathedral-engineered OS's have a one-up on us: there are standard ways to do things like this that will always work.
What Linux needs is something like LSB, but much more far-reaching.
And perhaps what I'm looking for already exists in Gnome and KDE. These are real platforms, in that a Gnome application will use the same set of APIs that any other Gnome application will. And if everything was a Gnome app or everything was a KDE app everything would be peachy.
But they're not, so we're still stuck with a situation where some apps may play sound fine, while others pop up a dialog box saying "esd not running."
That's enough for now. I want so badly for free software to succeed on laypeople's desktops. I think we're on a good track, we just need time to fill in the gaps and polish everything.