What Linux Needs To Learn From Windows

My company (Likewise Software) develops software for UNIX, Linux and Mac OS X. Our code is system-level, infrastructure, software. It interacts with the authentication components in the OS in order to allow users to login to these non-Windows systems using their Microsoft Active Directory credentials. By supporting single username/password and single sign-on and by supporting Windows-style “group policy” on non-Windows systems we can greatly facilitate account management, greatly improve security and greatly improve the odds that companies who use our product will comply with SOX, PCI and other regulations and standards. 

Writing this software in order to support 110+ software platforms is a bitch and the bitch’s name is “Linux”. Her sisters “UNIX” and “Mac OS X” aren’t gals you’d take home to meet mother, either. Here’s why.

(Note: my apologies for the misogynistic literary device. No offense intended.)

All flavors of Linux start with a common base: Linus’ kernel, currently version 2.6.XXXX.  Of course, there’s still plenty of Linux in use that is based on an older kernel, 2.4.XXXX. The kernels are a little different. The run-time libraries associated with them might differ; the threading might be a little different but if that was all I was complaining about, you’d be right to accuse me of whining.

Although Linux distributors start with this common base, they all go on to add their own special sauce to distinguish their product from others’. In the US, we have Red Hat, Novell (SuSE) and Ubuntu (a Debian variant). We also have Oracle Enterprise Linux and Centos (Red Hat variants) and VMWare ESX (Red Hat 3 variant) to consider. In Europe, you add Madriva to the mix while in Asia, you have to take Asianux and its derivatives (Red Wall, etc.) into account.

Each distributor typically writes their own installer and, rightfully so, competes on the basis of how easy they can make the installation process. Alas, installation involves choosing (directly or indirectly) which additional packages need to be installed. At this point, things begin to get messy because some systems use rpm packaging and others use deb packaging. Although all distributors include a similar set of packages in their pools (including things like Apache, Samba, MySQL, etc.) they sometimes choose to include different versions of these packages with their distributions. Sometimes, out of pure spite, some packages (e.g. Mono) are excluded by one vendor because they were developed by another whom they don’t want to support.

Even at this point, the situation is not too bad. You’d still date the gal – she’s good looking and she has a nice personality, even if she tends to dress in stripes and polka dots.

Where things begin to get complicated is when you’re writing software that’s anything but trivial. You say you want to write a graphical application? Are you going to write it for KDE or Gnome (the two most common desktop managers in use in Linux)? Maybe you should write it using GTK+? Maybe you should use Mono so that you can use Visual Studio for both Windows and Linux development.

You say you want to write some system software (like we do)? Be prepared for differences in:

  • System initialization sequence 
  • Daemon scripts (/etc/init.d)
  • Networking mechanisms
  • “Hardened Linux” mechanisms (SELinux, App Armor)
  • Network firewall management
  • System management infrastructure

Inside every Linux application lives a big, complicated, “if” statement that has to deal with special cases for each distribution and release of Linux. I’ve written the same statement for Windows 95/Windows NT/Vista – trust me, it’s not as complicated.

Now that you’ve noticed that Ms. Linux has a bad case of acne, you might as well consider her sisters. Forget UNIX. The differences between Linuxes is nothing compared to the differences between HPUX, AIX and Solaris. Consider Mac OS X. She’s clearly adopted.

Mac OS X is based on FreeBSD, not Linux. Everything listed above is different on the Mac, too. We do a lot of work with PAM and NSSWITCH. At least, all the UNIXes and Linuxes have PAM and NSSWITCH (okay, AIX 4.x has LAM, but close enough). The Mac doesn’t have these components – it’s replaced with the the Mac Open Directory API. A pretty cool API, but nothing like its siblings.

It’s tempting to position Linux and Mac OS X as Microsoft killers. Microsoft has its shares of problems which Vista has done nothing but accentuate.  We’ve seen increased numbers of Linux desktop projects and Mac OS X machines showing up in “the enterprise.” This is just one of the factors that is driving an incredible amount of business in our direction. Nevertheless, I think that the operating system business is still Microsoft’s to lose. The competition is, at best, a hodgepodge of uncoordinated attempts to define an alternative to Windows.

Is there any hope that a single other OS will displace Windows? If this is to happen, I think it must be preceded by several things:

  1. IBM and HP need to continue to promote Linux and phase out AIX and HPUX.
  2. Sun needs to give up on Solaris/Open Solaris and get behind Linux.
  3. The Linux foundation or some other more effective organization needs to drive more forcefully towards a widely accepted standard Linux. The “standard” needs to go beyond the kernel. We need blessed “stacks” of components and we need agreement on all the areas of difference that I mentioned earlier. Most significantly, we need a standard GUI stack, window manager, desktop, and system management API (By the way,  Linux and UNIX, for the most part, don’t even have a system management API. There are things like Yast, WBEM, ZenWorks and WS-Management floating around but none of them has any wide acceptance. For the most part, management applications just muck directly with system configuration files.)

This, at least, would result in making Linux a more credible alternative to Windows. Mac OS X, would still remain an outlier. There’s very little likelihood of Apple releasing Carbon into the public domain. This is a tragedy as Mac OS X is much, much, better positioned to challenge Windows on the desktop.  Although Mac OS X Server is a fine operating system, it doesn’t help sell any IBM, HP or Sun hardware. Apple’s iPod/iPhone cachet does not buy it anything in the server business.

The answer to my question then is “no, there is no hope that a single other OS will displace Windows.” At least, not unless Apple decides to go totally open source and to port Mac OS X to Linux and make all of its API available under GPL or similar license.