Source

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

Full commit
<html>
    <head>
        <title>Dominating a World with Microsoft in it</title>
    </head>
    <body bgcolor="white">
        <h1>Dominating a World with Microsoft in it</h1>

        <p>
        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.
        </p>

        <p>
        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.
        </p>
        
        <p>
        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.
        </p>

        <p>
        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.
        </p>
      
        <p>
        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:
        </p>

        <p>
        <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:
        </p>

        <p>
        <ol>
            <li>
            <p>
            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?
            </p>
            <p>
            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 -&gt; 1 to what the
            kernel has to offer.
            </p>
            </li>
            <li>
            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.
            </li>
            <li>
            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.
            </li>
            <li>
            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.
            </li>
        </ol>
        </p>

        <p>
        <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
        not legible.
        </p>

        <p>
        <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.
        </p>

        <p>
        <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.
        </p>

        <p>
        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.
        </p>

        <p>------</p>

        <p>
        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.
        </p>

        <p>
        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).
        </p>

        <p>
        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.
        </p>

        <p>
        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.)
        </p>

        <p>
        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.
        </p>

        <p>
        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.
        </p>

        <p>
        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.
        </p>

        <p>
        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.
        </p>

        <p>
        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.
        </p>

        <p>
        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.
        </p>

        <p>
        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.
        </p>

        <p>
        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?) 
        </p>

        <p>
        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. 
        </p>

        <p>
        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.
        </p>
    </body>
</html>