Fragmentation is killing Linux
I am a great fan of Linux. I use it at home and at work. I write all our company's technical documentation and do all our molecular modeling calculations in Linux. But I'd be lying if I didn't admit Linux has problems. One of the biggest is all those people who insist that there are no problems: everything's wonderful, and it's just a matter of time before Linux takes over the universe. But if this is so, why is Linux still only 1.7% of the desktop? At the rate we're growing, the universe will undergo heat death before Linux takes over.
To be clear, I don't consider Android, OS X, or BSD to be Linux. They share many components. Android even shares parts of the kernel and the core library. But you can't run an Android app on Linux.
The definition of fragmentation is very simple. When a piece of software requires one distribution, and doesn't work on another without extra work, you have fragmentation. When the command to change something is different on different machines, you have fragmentation. If it takes effort, that means fragmentation is hurting you. It's making you do extra work.
Some would argue that Linux is all about choice, and the more distros the better. As one person put it, fragmentation is a feature, not a bug. You can log in remotely and compile a program for any version of Linux. Or, if you can't, you can rewrite it, or even write your own app. This may be true, but it only proves my point. You could re-compile your apps in Irix and Solaris as well. It didn't save them.
Fragmentation is only a feature if the Linux user doesn't lose something by picking one distro over another. As a Linux software developer, let me say this as emphatically as I can: we're losing a lot.
My latest app is a graphical spreadsheet / statistics program. I needed it for my job, and I use it every day instead of writing R scripts to do statistical analyses. But I will never release it. It's just too much work.
Unless the libraries are the same on every system, a developer has only five choices:
- Release multiple versions, one for each major distribution.
- Release a version for one's favorite distro and tell everyone else to go away.
- Release a static binary.
- Include other people's libraries with your app.
- Release your app as source code and let the user deal with it.
Releasing a different version for each of the hundreds of distributions is not an option. Neither is forcing users to pick your favorite one. But many bits of software are now taking this route. Opera is now only available as a .deb file. Another software package I wanted to use demands Ubuntu, and won't compile on my system.
Releasing your stuff as source code or RPM works fine if your program is a basic utility. But if your app builds on other people's libraries, you risk throwing your users into dependency hell. There's already talk of dumping x.org and moving to something newer and shinier. You know what will happen then: sooner or later, some distros will drop the static xlib libraries. Old X11 software will work on some systems but not others.
Young people might not care. They will just use the new stuff. But to the rest of us, it means that somebody will have to re-invent the wheel.
Building static apps is not an option, either. For all but the simplest apps, it's too difficult. We can't blame gcc for this—you can still build a static command-line binary by adding a simple switch. The problem is the distros and the libraries they choose to include. Who's got time to rebuild every library on their system? Even if you did, your static binary would be enormous. The solution is obvious: distros should always include static libs and include files, and they should stop letting people change the API.
The other side of this is servers. After I moved to a different branch of my company, we brought in some consultants to run our Opensuse Linux servers. Guess what: these guys couldn't figure out how to administer the basic, unmodified Suse systems I had installed. One time the system load went up to 34, and stayed there for days before they noticed it. When the boss started having email problems with the IMAP server, they couldn't figure out how to build a new one. They eventually recommended switching over to Red Hat Enterprise Linux because, they said, they understood Red Hat but not Suse. I didn't argue, because by then Opensuse had gotten flaky and I could no longer recommend it. People who just stick to one distro might never notice this, but administrating different versions of Linux is getting harder, not easier.
Linux folks may shrug: fire these dorks and get better consultants. But in the real world that's not so easy. The three other companies we interviewed all recommended switching to Windows. One company lied, saying they were all Linux guys, and then as we were about to sign a contract, they let it slip that they planned to switch us to WS 2012. It was a battle. The reason is simple: in the real world everything is about money. If fragmentation is a problem for these consultants, that means it's a problem for all of us.
We all like having choice. But choice can be like a drug, and that drug is slowly killing us.