After many long years of development to both MS Windows platforms and Linux platforms and especially lots of frustration in recent days trying to install/uninstall software on my WinXP to solve a problem I have few conclusions on proprietary vs. open source development.
One of the nice things about development in Microsoft world (or at least seems so until you get into trouble) is that everything wraps up so nicely as if you were in a candy store. There are very nice tools for development and there sophisticated mechanisms for code reuse such as DLLs and libraries as well as well documented APIs and examples. Microsoft as the sole owner of the MS Windows platform has created a complete eco-system of dev tools to enable you as a developer to rapidly develop your own applications. One simple MS-Windows application usually relies on many, many dependencies such as other products installed/service packs/specific operating systems/DLLs, and actually when you wrap your application as a setup package you usually rely on these to exist in the target computer and to be (hopefully) compliant with your specific application requirements. To package all dependencies into your application is not relevant and some do package unique extensions that are required but most just deliver their own app relying on Microsoft to handle dependencies.
This mechanism works very nice in a controlled environment world where you fully control the setup of your test machines but once you go into the wild where the variety of combinations of configurations are enormous, things usually break. Especially after a few install/uninstalls of few apps where each one leaves its trails of broken dependencies. Actually, as I see it an MS-Windows PC that has received a normal “dosage” of installs/uninstalls becomes actually chaotic in terms of what is actually residing in it. Here the lack of awareness of what your application actually needs and depends on works to your worst.
On Linux/Open Source world when you develop you usually know what you are depending on and the approach is more minimalistic in terms of depending on too many components to already reside on the target computer unless it is a specific runtime platform like Perl or python. This approach makes your dev/packaging process seem at first more “dirty” and requires hands-on experience but the end result is a way more stable deployment then what you could achieve in MS World. Usually, install/uninstall of software on Linux does not affect the rest of the system, and the instructions on how to make your software work can become very clear. This is attributed to the way Linux and open source, in general, have been developed by different independent minds who found an effective integration approach unlike MS “integrative” one.
I am not sure whether it is MS goal to achieve a perfect automatic/transparent platform but still, eventually, the more hand-on approach seems to work better. This opens up some thoughts on APP store-like approaches for iPhone for example where there a similar simplistic approach to handle deployment automatically is being taken. Currently in the App store frontier with the low amount of software packages and low complexity of available apps nowadays the problem does not seem to exist but still, time will tell how it will deal with a complexity similar to MS variety.
That is also why people like web apps a lot where no “apparent” setup happens through this environment goes also through changes that make it “stickier” to the target platforms such as Google Gears and native code implementations. Actually, within browsers, the setup happens on-demand and new code deployment happens automatically where dependencies are minor since the browser separates automatically dependencies between domains.