Why Microsoft and ASP.NET Cannot Threaten the PHP Moat
ASP.NET does not aspire to PHP but it has good reason for envy and the two are undeniably in competition. The ASP.NET platform is quite something when you contrast it against PHP which doesn’t even have a development platform worthy of note. It has a clean cut architecture, easily discernible roles for each component and object oriented support. The Visual Studio .NET development environment alone is enough to persuade people to switch to ASP.NET because it’s that good–not only for development and debugging but also as a learning tool to understand the flow of the application, inspect the stack and heap, request and response, the current state of objects and other advanced features.
Why then is ASP not giving PHP a good run for its community and user adoption?
Not all of it was timing. Arguably, even if all the tools made available in Visual Studio Express suite (SQL, Visual Web Developer et al) had been offered earlier, ASP might not have achieved mass user acceptance. A product like WordPress (which powers this site) could never have gained the same level of support if built in ASP.NET. ASP.NET gives protection to the source and is most conducive to building proprietary solutions. You could write a charting library, wrap it up as a DLL and put out a trial version to everyone. Since it runs on the web, enforcing licensing is much easier by having it ping a licensing server. Monetizing it is easy. In PHP this is not the case. The source is there for everyone to read and anyone can and probably will write a free version of any WordPress plugin that you would want to charge for today.
Further, the development ecosystem is scattered with tools and libraries attached to viral licenses that oblige developers to share any derivations arising from these tools. When the ecosystem is built on an open-source, share alike license its difficult to build on the shoulders of the community without giving back to the community. The community has a built-in, self defense mechanism that ensures its survival and results in rapid growth. WordPress and Firefox have quite literally every plugin you could possibly ask for. Installing the plugins is trivial and hacking or extending them isn’t too hard if you are a developer.
No comparable WordPress equivalent exists in the ASP.NET world wherein an option is available to keep the source protected and more often than not, the option gets excercised, locking out community engagement in turn. ASP.NET has typically been aimed toward the professional not the amateur though it is now trying to find some middle ground to increase user adoption but I doubt it will ever get there for the fundamentals reasons mentioned here.
The monetary costs, as well as the cost of adoption are both higher for ASP.NET from my experience. Hosting an ASP.NET application on a Windows Server requires higher licensing costs for the hosting providor which in turn are transferred to the customer, resulting in more expensive hosting for ASP.NET applications.
The cost of learning for ASP.NET is also higher. Visual Studio .NET does provide all the plumbing and template for starting off but the underlying plumbing is quite complex. The ASP.NET page life cycle is not trivial and if you aren’t comfortable with a debugger you’ll find it harder to experiment with it. PHP’s scripting model although crude, allows would-be developers to simply dive in. My first PHP page was as simple as saving the file with a .php extension and wrapping the code in php tags with a print statement. No includes, no headers or strong typing, no nothing. ASP.NET will require building out an entire solution if you follow the prescribed development route and though automatic, it still makes it harder to just dive in.
The lower cost of initial adoption results in a wider user base falling into the PHP funnel.
PHP has a feedback loop built around good karma. Some random people helped me overcome my hurdles with PHP and in turn I learned to empathize with other new comers and offered my support and experience. I find that ASP.NET does not have the same level of community support which scares some people away and doesn’t provide the confidence of crowds. The network effects of a larger community also means that there are more people along each stage of the learning curve. Whether you are just starting off or you are making the switch from PHP4 to PHP5 or you are trying to hack some low-level module, the likelihood of someone else tackling the same problem around the same time is much higher and this kind of peer support is a good motivator.
I am a long time PHP fan and love the fact that WordPress is a product of it. However, if I were to build a web service or website for my own purposes I would be more inclined to go with ASP.NET. Some of my old ticks are still there and I prefer to do much of the underlying plumbing by hand as I find generic solutions are excessive. I also get a greater understanding and consequently feel more comfortable with the application.
Microsft’s partnership with Zend should be a win win for both communities. Imagine loading your PHP solution in VS.NET and having auto-complete–writing WordPress plugins would become a breeze.