Welcome Guest. | Log In| Register | Membership Benefits

LANGA LETTER

February 3, 1999


Threads
Do you think Linux will one day be able to match Windows support numbers without suffering any degradation in final, delivered (not just kernel) stability? Sound off in the LangaLetter threads.
Recent Columns
The Sorry State of Desktop Software

Half Time

BeOS = Wow

Is There Any Excuse Not To Be Ready For Y2K?

LangaLetter Archive

Bio
Fred Langa is a senior consulting editor and columnist for Windows Magazine. Fred's free weekly newsletter is available via subscribe@langa.com. You can contact him at fred@langa.com or via his website at http://www.langa.com.
Stability Vs. Complexity

By Fred Langa

Last week's discussion of "The Sorry State Of Desktop Software" led to some interesting side discussions, as is often the case whenever there's a gathering of well-informed--and opinionated--people such as InformationWeek readers.

One heated discussion erupted as result of my hypothesis that at least part of Linux's stability stems from the fact that it supports less hardware than Windows.

The most vocal participants in the discussion had two main issues with that. One, they said, is that Windows instability (or Linux's stability) has nothing whatsoever to do with the number of supported hardware and software products. The other issue was with the idea that Linux might not support more products than Windows; several people strongly maintained that Linux offers far wider hardware support.

Let's look at both these areas.

My point about the tradeoffs between stability and complexity was (I thought) straightforward. The more hardware any software tries to support, the more potential interactions it invites. As the count of supported hardware products goes up, the number of potential interactions also rises--and the rise is probably closer to geometric than linear. If support for many devices is built into the operating system (as opposed to retrofitted by the user), the software can become bloated and harder to maintain. Eventually, you can reach a point of diminishing returns where performance can tank and debugging becomes a superhuman task.

As a real-life example, look at Windows' deserved reputation for instability. Yet despite all its architectural flaws, Windows becomes significantly more stable--in fact, nearly bulletproof--if you drop to vanilla video, vanilla sound, vanilla networking, etc. That's exactly what Safe Mode does, and it allows Windows to run (well, OK, limp) on all but terminally FUBARed systems. When you strip away the complexity, you gain stability. I didn't think this was an outrageous thought--until I applied it to Linux.

Linux starts out with a stability advantage in this area because its kernel is better architected than Windows and is more resistant to applications- or peripheral-induced problems: It's harder to crash Linux's kernel than Windows. But last week's column wasn't a debate about stability of competing kernels in isolation (and it certainly wasn't an anti-Linux column at all). It was about stability in toto, and the tradeoffs between stability and functionality. Regardless of your operating system, if your applications crash or your peripherals won't work well, or don't work at all, there's only limited benefit in having a stable kernel.

At the core level, part of Linux's stability is simply due to a better architecture, and (so far) better debugging. But I have to believe that at least part of Linux's stability is also due to the severely constrained number of hardware interactions it has to handle (I'll give you some sample counts in a moment); and the limited way Linux supports much of the hardware it does recognize.

And make no mistake, sometimes, bells and whistles just get in the way. In some cases, it's smart to focus just on essential, core functionality.

But not always. And not for everyone--especially if you or your company has paid for advanced features you want that the operating system simply doesn't support.

There's a lot of confusion about Linux hardware support, in part because Linux runs on more platforms than Windows--and indeed, this is an undeniable strength. But something in excess of 90% of PCs shipping these days are Wintel boxes, and the overwhelming majority of peripherals are made for Wintel systems. Indeed, most Linux installations appear to be on Intel boxes. Although Linux offers support in the non-Wintel space, the blunt reality is that it's a relatively small space: Being strong in a small area isn't the same as being strong in a mainstream area.

So let's return to the 90% slice of the pie. How many products does Linux support there? And how does that compare to Windows?

With no single, central clearinghouse, it's hard to find Linux numbers. The best source I could find is the Linux Hardware How-To; the most-recent version I could find was maintained by the Linux Documentation Project.

This is a wonderful volunteer operation doing excellent work. But as volunteers, no one is doing full-time work counting the number of products Linux supports: Their focus is (rightfully) on helping people get Linux up and running. Plus, Linux is growing fast, so no matter what any given count is, the numbers go out of date almost immediately. This means any given hardware count will tend to underreport the amount of hardware that Linux actually supports. That's worth repeating: The following numbers are almost surely low.

But there's also an offsetting factor: The Hardware How-To is mainly intended as a compatibility guide. In the Video Card section, for example, popular cards are often listed multiple times---under XFree86, and again under each of the commercial XFree alternatives, for instance. To prevent penalizing Linux in any way, I did not "dedupe" these multiple entries. Also, to give Linux the fairest possible interpretation, I counted each listed card's chipset revisions or versions as separate instances. The lists are dense and inconsistently formatted so I may have missed a few among the multiple hundreds, but I'm sure these counts are close.

On the Windows side, Microsoft also has no central source of compatible hardware per se, but it does maintain a list of products that have been "Certified for Win95/98/NT" logo marketing programs. This marketing-oriented list probably also understates the total universe of compatible products for Windows because not all vendors bother getting the official Microsoft certification. So the Microsoft numbers are also probably low.

And, just as on the Linux list, Microsoft also sometimes lists the same product multiple times: A product separately certified for Windows 95, 98, and NT would appear three times. To level the playing field, I did not "dedupe" these, either.

Because Microsoft's is a logo-certified list, not a full compatibility list, it also chose not to include Win95 products in the Win98 listings. Win98 supports Win95-compliant hardware, of course. In the following numbers, I'll show you both the native Win98 numbers and the more realistic combined Win98-plus-Win95 numbers.

Two final points: First, both lists are inconsistent in how they handle minor variations such as identical cards with different amounts of memory; or cards with the same chipset that come in (say) otherwise identical ISA and PCI flavors. In each case, I based my counts on the way the cards were listed (separately or not) in the How-To and on the Microsoft site.

Second, it's worth mentioning that Linux supports many more than the listed items through emulation. For example, Linux can support virtually any sound card that offers a true SoundBlaster emulation mode. This is a key point we'll come back to, but for now, here are some key raw numbers:

Desktop/server video cards/chipsets supported: 773+ for Linux; 1,175 for Windows. For Linux, this breaks out as basic support for 174 adapters/chipset, including those supported by XFree86; plus an unspecified number of Diamond video cards; plus 450 cards supported by extra-cost commercial X-servers. The Windows numbers break out as 298 adapters/chipsets for NT; 367 for Win95; and 510 for Win98, comprising the Win95 units plus an additional 143 native Win98 units.

Audio cards/chipsets: 50+ for Linux; 1,005 for Windows. For Linux, 50 is the actual number from the Hardware How-To, but Linux also will support many more cards in SoundBlaster emulation mode. (Of course, so will Windows.) Please see the note on generic emulation that follows. The Windows' tally is 203 for NT; 322 for Win95; and 408 for Win98, comprising Win95's 408 plus 158 more on its own.

SCSI devices: 126 for Linux; 422 for Windows. For Linux, see the note on generic emulation that follows. The Windows breakout numbers are 99 for NT, 145 for Win95, and 178 for Win98 (comprising 145 Win95 units plus 33 Win98 units).

Standard NICs: 72 for Linux; 1,812 for Windows. For Linux, see the note on generic emulation that follows. For Windows, it's 446 for WinNT, 592 for Win95, and 774 for Win98 (592 Win95 units plus 182 Win98 units.)

There are other categories on the list, but you get the idea.

As mentioned, Linux supports many, many more peripherals via emulation. Of course, so does Windows. But the point is that Windows usually offers specific drivers while Linux often does not. Got a fancy video card? There's a good chance you'll have to forgo any advanced and extra-cost functions the card might offer, and run instead in generic SVGA mode. Paid extra for a fancy sound card or chip? Chances are Linux will treat it as a vanilla $19 SoundBlaster clone. Got a DVD player? You'll probably lose access to any brand-specific features.... Etc.

In many areas, Linux treats peripherals generically. This simplifies things enormously, and (I believe) increases stability by reducing the amount of code required and by keeping the number of potentially adverse interactions to a minimum.

And make no mistake, as mentioned before, it's sometimes very smart to focus just on essential, core functionality. Sometimes, bells and whistles just get in the way.

But not always. And not for everyone--especially if you or your company have paid for advanced features you want that the operating system simply doesn't support.

Which comes back to the column: We seem faced with a choice of either full functionality with instability or limited functionality with greater stability. And that's I meant by "the sorry state of desktop software."

What's your take? Do you think Linux will one day be able to match Windows support numbers without suffering any degradation in final, delivered (not just kernel) stability? Can Linux gain support for myriad brand-specific functions and yet avoid the bloat that's plagued Windows? Would Microsoft be smart to start paring away functions in order to improve Windows' stability? Join in!