Today I attended LIPHP. While I began attending LIPHP since I was programming in PHP at the time, I am mostly a .NET programmer these days. The fact that I have recently inherited an abandoned OSS projet written in .NET, further entrenches me as an open source .NET programmer.
I was told by a fellow LIPHP member that I cannot truely write open source applications in .NET, or something to that effect. Naturally, this is where I attempt to disprove that.
If we study the history of open source and free software, we can see a gradual evolution marked by periods of puncuated equilibrium. RMS created the free software foundation to recreate a software ecosystem that he believed existed in the software industry earlier in his career. Linus Torvald releases a kernel that does all the things minix would not do. ESR coined the term ope source to reject the Free Software Foundation’s idealism in favor of pragmatism. Microsoft releases the WiX project on sourceforge and eventualyl launches codeplex. Java becomes more and more open source.
During this time, compromises had to be made for ideal situations to be realized. pieces of propietary unix had to be recreated piece by piece and released as open source. First the basic unix shell commands, followed by things like the text editor vi. Some peices fell out of favor as other alternatives developed. The linux kernel as opposed to the hurd. Open sourced sun Java code replacing reversed engineered clones.
Somewhere along the line the pc revolution and Microsoft happened. Unix is now completely open sourced. Sun has open sourced most of its code, including newly developed code such as ZFS and dtrace. But no one uses unix or its clones. They use Microsoft Windows now.
Of course that previous statement must be qualified. There is a sizable minority of desktops running some form of unix. Mainframes still exist, and unix has a strong server installation base. However, Microsoft has a dominante share of the desktop at the moment, and a good share of the server market.
So where does open source fit in in the Microsoft world. Well first of all, many opens source applications written for unix have been ported to windows. Secondly, many open source apps have been written primarally targeting windows. This much is obvious, but does nothing to counter the claims that my .NET code is any less open source than open source code that runs on unix.
So how do I counter his claims. First of all I can point out WINE and REACTOS. Wine allows you to run windows applications on linux. Its good enough these days to run World of Warcraft and internet explorer. It can also run important, boring business apps, but those two applications demonstrate the true power of Wine. ReactOS is a windows NT clone. It is buggy and development is slow. However, quality is continually improving, and while windows is a moving target, it has several advantages. First of all as windows matures, it adds few new core feature. Secondly, ReactOS uses Wine for its usermode dlls. Most Reactos programmers concentrate on kernel development.
Secondly I can point to Mono, the .NET implementation that runs on Windows and unix. Now in my particular cases, I write .NET apps that would be hard to port to mono, but not impossible.
Thirdly, I can point to the fact that users of my software gain the utility benifits of open source. While they have to invest in the sunk costs of the Windows OS, I avoid them specific other expenses. At the moment these are Visual Studio, Microsoft Access, and QueueExplorer. Certainly I can function with more “pure” alternatives on windows. In fact I have in the past and continue to attempt to. However, at times external factors (those that pay me) compel me to use a Microsoft stack. Therefore, I spend some of my free time writing open source solutions that make it easier to support the Microsoft stack. In other words I scratch an itch.