If you ask a Perl aficionado a programming question, he or she is apt to reply "There's more than one way to do it." That response isn't trite or boastful: Perl offers many different ways to solve the same problem.
If you ask a Perl aficionado a programming question, he or she is apt to reply “There’s more than one way to do it.” That response isn’t trite or boastful: Perl offers many different ways to solve the same problem.
That truism about Perl — “There’s more than one way to do it” — can also be said about Linux and Open Source software. For any given problem, there’s typically a multitude of solutions. PostgreSQL or MySQL. JBoss or Geronimo. GNOME or KDE. GTK+ or Qt.
But while Perl’s diversity makes “…easy things easy, and hard things possible” (another Perl mantra), Linux’s diversity makes “some things easy, and many things hard.” Can I crank open the kernel code to port it to a new processor? Sure. Can I run two graphical user interface applications and expect the same look and feel and interaction style from each? Uh, maybe. Diversity is both a blessing and a curse. It fosters innovation, but stymies adoption. Encouraged in the wrong places — for example, on the desktop — it can even cause great confusion.
Now, I don’t expect that there will ever be One True Distro (outside of official kernel releases), nor would I want there to be. However, I do think we’d all benefit from a little beneficent tyranny in the form of standardization.
Where to start? How about these…
Standardize package formats. I want to be able to install any package on any Linux system without having to drop to the command-line to do ./configure; make; make install. Reflexively, I’d also like to be able to remove any package without a hassle. And, oh yeah, it would be great to have a single, reliable source of updates, patches, and packages.
Unify system administration. I want to configure my firewall, turn system services on and off, monitor security and performance, and take an inventory of my system, all without knowing which distro I’m running. And since I am asking for the moon, it’d be nice to make all of these features accessible from any remote location.
Establish baseline behaviors. Every GUI application, even if it looks different, should interoperate with every other GUI application, at least to some minimal, mandated extent. Of course, it’d be ideal if every application was a chameleon, able to adapt to the environment it’s run in. (The command-line has baseline behaviors, it’s just not ideal for Joe Office.)
Support devices, and more of them, consistently. I want to be able to plug in a wide variety of devices, from cards to peripherals, and have them just work.
I’m sure you can think of others, but these are the most common issues I run into trying to manage my own small set of Linux machines. I’m guessing these issues plague you, too.
As a comparison, my Mac OS X machines don’t suffer from these same problems. Whether you eschew Apple Computer and its products or not, you have to admit that the uniformity and predictability of Mac OS X is admirable and is something that Linux should aspire to.
To be sure, Linux is making progress. Lindows seems to be making great strides to producing an easy-to-use desktop for consumers, and recent product announcements from Red Hat and Novell aim to provide a robust, simple-to-maintain desktop for enterprise use. But I still want to go further. I want the infrastructure to be stable and want the vendors to compete by adding real value.
I want cake and icing and birthday candles, too.
Martin Streicher is the Editor-in-Chief of Linux Magazine.