Dominating a World with Microsoft in it
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 Linux-dominated
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
in this document. 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
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:
The Core Win32 OS and the Win32 API - It is hard to compare to Linux
because it is so much different. A few major differences are apparent:
1. The Win32 API is overly complicated and verbose. How many
programmers would prefer to call CreateFile 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.
2. 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
3. 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.
4. 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 solved.
The Win32 Graphical User-Interface (GUI) - 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 not legible.
Availability of APIs - 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.
Complexity of Code-base - 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
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 there.
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 again.)
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 "shipping" more.
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 wisely mocked it. 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, too?)
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