<?xml version="1.0" encoding="utf-8"?>
html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
<title>Dominating a World with Microsoft in it</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<h1>Dominating a World with Microsoft in it</h1>
The title says it all pretty much. Even if Linux achieves its
supposed end-goal and it becomes used on %90 of the desktop
computers, then I find it hard to believe that Microsoft will go
away as a result. Even in a Linux world, Microsoft is here to stay.
Microsoft is a very large company with a lot of money in the bank,
many talented developers and managers, a large amount of experience,
a large number of products and internally used code, and some very
good software writing and business practices. It is hard to believe
that they cannot adapt themselves to the reality of a
But who says Linux would be bad for Microsoft? As we all know,
Microsoft now develops and ships most of the copies of the desktop
operating systems, (and a large part of the server operating systems).
It has to maintain the code-base of these OSes as well as other products
and APIs that it makes money from. However, the most profitable
product of Microsoft is Microsoft Office.
Maintaining and developing the code-base of the various Windows versions
is a very hard task that requires a large number of very proficient
developers. One can find a document describing the provisions that
MS needed to pull up the development of Windows 2000
<a href="http://www.usenix.org/events/usenix-win2000/invitedtalks/lucovsky_html/">in this document</a>. One needs to consider that Windows 2000 is
the equivalent of the Linux Kernel, glibc, X-Windows, Gtk+ and a large
part of GNOME, Bash, various GNU built-in utilities, various GUI
configuration utilities, and a large number of user-land programs
all put together. And all of these has to be maintained by one team
that the other parts of Microsoft and the rest of the Windows-using
team depends on.
OK, so Microsoft may make money off selling Windows. But couldn't they
switch to Linux and allocate these programmers to something else, which
generates more revenue? Does Microsoft has any reason to prefer what
Windows gives it over Linux? Let's see:
<b>The Core Win32 OS and the Win32 API</b> - It is hard to compare to Linux
because it is so much different. A few major differences are apparent:
The Win32 API is overly complicated and verbose. How many
programmers would prefer to call <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/filesio_7wmd.asp">CreateFile</a>
with 7 arguments, over fopen() with 2 or open() with 2 or 3, just
to open a file for reading or writing? Or GlobalAlloc() followed
by GlobalLock() when malloc() would do in POSIX?
Most programming courses and books that cover ANSI C teach the
ANSI C/POSIX functions. The reason is obvious, because it is much
simpler to program in. And in Linux it maps 1 -> 1 to what the
kernel has to offer.
There isn't a very clear separation between the GUI and the non-GUI
parts of the system. This makes it difficult to write full-fledged
non-GUI applications, and makes it harder to automate and
Generally, understanding the internals of the operating system is
much harder than in Linux or other UNIXes. Most OS-design courses
focus on some flavour of UNIX, and only cover Windows NT briefly.
Writing kernel device drivers is much more difficult in NT, too.
Several versions of the same shared library cannot be kept at
once. Microsoft pulled some ugly tricks to make sure MFC uses
several versions (by renaming the DLLs "MFC40.DLL" and "MFC42.DLL").
In UNIX, with symbolic links and all, this problem can be trivially
<b>The Win32 Graphical User-Interface (GUI)</b> - the Win32 GUI is much
more sub-standard in comparison to those common on Linux like
Gtk+ or Qt. It has only one geometry manager - X-Y - and all
others have to be implemented in user-land. Communicating between
two widgets (or controls in Windows speak) requires passing obscure
messages. The Hello World application is itself very complicated and
<b>Availability of APIs</b> - Linux has much more user-land APIs
available for free use (under the LGPL or a less restrictive license)
than Windows has. Microsoft has created a large number of proprietary
in-house APIs. Those APIs are not used outside of Microsoft products,
and so are not available for public scrutiny. In Linux, Microsoft can
make use of the standard APIs available there, instead of re-inventing
its own wheel times and again.
<b>Complexity of Code-base</b> - Microsoft is notorious for the
exceptionally bad code its programs contain. Part of the reason is
that requiring the code to work on every version of Win32 where it is
supposed to, requires writing a large number of workarounds, which makes
the code much uglier. Trying to remove those workarounds may bite you
in unexpected places.
In UNIX, a lot of open-source and proprietary software build from the
same code-base for a large number of different flavours (much less
distributions) and architectures. That's because there is usually
no need for workarounds and bugs in the underlying layers are
expected to be fixed by their vendors.
The conclusion is clear: writing true Linux POSIX-fied applications
and APIs would actually be a very good thing for Microsoft. Microsoft
can sell Linux applications and libraries while actually reducing
development costs and overhead considerably. So, the question
being asked is why Microsoft does not port its applications to run
The reason is simple: it would require too much work and will generate
a relatively small amount of revenue. Porting the Win32 API-based
software to run on Linux using a Win32 emulation-layer (such as Wine)
would take a long time. Afterwards, abstracting everything so that it
is a native Linux application would also take a long time. As a
general rule Microsoft does not re-write code from scratch, or
maintain two distinct code-bases of the same program. (which is
very hard, even with the best source control and project management
software money can buy).
Some people think that Microsoft wishes to control and abuse everybody
else. But as a commercial public company, Microsoft's chief intent is
to make money. I don't think controlling anything has anything to do
with it. Microsoft would have become as big as it is now, regardless
of how much abuse it does, because of the wise decisions of Bill Gates'
and its other managers. Microsoft can maintain its size and strength
even in a Linux and Open Source based world.
Yes, Microsoft spreads FUD about Linux, Open Source, and the GPL.
But many factors spread FUD, including many Open Source ones. Does
it mean it will never port its applications to run there? No.
Corporations were known to change their strategy, and there's no
reason to believe Microsoft eventually will not. (Never say never
As far as I'm concerned, Linux has already achieved "World Domination".
It is not used as much as Windows, but a large part of the people who
use it and develop on it (including me) swear by it, and won't abandon
it for all the fortune in the world. Does being successful means being
dominant? I don't think it is, especially not if your products are free
content ones, where usually one gains little commercial profit from
But even if it is the most commonplace operating system and
everybody and his mother uses open-source products - it's still very
probable that Microsoft will survive. Microsoft can allocate a large
group of developers to work full-time on one of its applications.
Most open-source projects cannot afford to do it, because they have
very little, if any, finance. That is one big factor that can determine
how fast a software advances.
Eliminating proprietary software from the world would be a pointless
task. Eliminating Microsoft would be equally pointless. But world
domination is not as much about changing the players, than changing
the rules of the game. If Microsoft has to create products for
Linux, where open-source applications and APIs are abundant, it will
have to be less abusive, and work harder on creating better products,
rather than better marketing schemes. And this is a noble cause.
Sounds good? So how can we achieve it? First, by continuing the good
work on open-source projects. And no - eliminating duplicate effort
would not help much, and is also a pointless thing to do.
Secondly, by fighting FUD, not with counter-FUD, but with hard facts
and well-reasoned, well-phrased and objective opinions. Counter-FUD
just confuses the reader, and manipulating emotions is always a bad
Thirdly, by making genuine effort to make Linux easier to use and
administrate for newbies. The term "user-friendly" is very hard to
realize, and even Bill Gates has
<a href="http://www.opossum.ch/citations.html">wisely mocked it</a>.
So it can be assumed that it means "what the users are already used
to". Imitation is the sincerest form of flattery.
Fourthly, by evangelizing the fact that using a computerized system
the "dummy" way, is not necessarily the best way to use it. GUI and
its dialogs are sometimes convenient. However, they can only do so
much and don't compensate for using the right Turing-complete
programming language to automate everything.
Lastly, by losing some of our bad attitude. "Proprietary software
is inherently illegitimate." (why?). "Linux is by far superior to
Windows" (in any possible respect?) "The Linux world have had the
feature 'foo', which was just added to Windows, for ages."
(OK, nice to know, but is it a bad thing that Windows has it now,
I think most computer users can greatly benefit from Linux. But we may
wish to consider if it is more important to fight Microsoft or
ourselves. Linux' worst enemy is and always will be Linux, and if we
want to make it better and more accepted, we have to check what we
are doing wrong, rather than make random accusations at Microsoft.
So, hack on. If you were hoping to get rid of Microsoft, you should
be disappointed now, rather than when Bill Gates and Linus Torvalds
will be a phone call away from each other, and Microsoft will allocate
several engineers to work on the Linux Kernel, X-Windows and other
components that it would be depend on. It may sound like Utopia,
but it could happen. But it would happen in a world with Microsoft, not