Source

shlomi-fish-homepage / t2 / world-domination / index.txt

Full commit

                    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
   world.

   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
   [1]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
   depends on.

      [1] http://www.usenix.org/events/usenix-win2000/invitedtalks/lucovsky_html/

   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 [2]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
       and administrate.
    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.

      [2] http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/filesio_7wmd.asp

   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
   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 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
   thing.

   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 [3]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.

      [3] http://www.opossum.ch/citations.html

   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
   without it.