There are thousands of languages out there, but only a couple handfuls are used for web applications. Of these, PHP is a runaway success. Yet I constantly see it criticized by developers of other languages, often for completely untrue reasons. PHP has a bad rap, and while it certainly has its pitfalls, there's many good reasons it has become such a popular language for web applications.
I consider there to be three major sets of languages currently used for web development. When talking with developers, you'll usually find them gravitating to one of these three spheres: the Windows world of Microsoft ASP, ASP.NET, Cold Fusion, C#; the Java world; and the LAMP world. While some programmers cross between these, you'll usually find people that are best in one particular area.
The Microsoft world grew out of ASP and Cold Fusion into the current .NET technologies. There is now an open source version of .NET called Mono, backed by Novell, which makes these technologies cross-platform. They're mainly used by Microsoft and its partners, and small proprietary software companies in all sorts of vertical industries. Very few .NET applications are open source, compared to the other technologies.
The Java world seems to dominate the large enterprises. Companies that work with IBM extensively end up with Java-based enterprise applications--and there are a lot of them. Java was the "next big thing" in the second half of the 1990s, but it only seemed to gain a real foothold in large business. Quite a few of these applications are open source, and there's a lot of applications large and small you can download freely and deploy--or pay thousands of dollars to a middleware vendor to have them get you running. Java has a wide mix of open source and proprietary applications available.
LAMP stands for "Linux, Apache, MySQL, and PHP," though there are other P's out there like Perl and Python. This describes the other major technology stack used in the web world, and follows the Unix design of small pieces loosely joined--you can substitute MySQL with Postgresql, Apache for another web server, and many other languages for PHP. There are far more open source applications available on the LAMP stack than the other two combined, mainly because the barrier of entry is really low--all you need is a spare old computer to install the stack, and all the software is free.
There used to be another popular language, TCL, running on the AOLServer, but you really don't see much in that these days.
If you're developing a web application, you can use any of these technology platforms to get the job done--in a web environment, they are all pretty much equivalent. Java and .NET have better support for desktop applications, but if your main interface is a web browser, there's nothing you can't do in LAMP that you can in the others.
LAMP is a family of technologies, with more variety than the other stacks. For the language, besides the 'P' languages of PHP, Perl, and Python, there's also Ruby that has gained a lot of popularity lately. MySQL and Postgresql regularly vie for the database slot. Apache pretty much has the web server part locked up, but Linux can even be replaced with Windows to make it the WAMP stack and you can still run most of the same programs.
So why group technologies into these stacks? Mainly because they work well together on the same system. This boils down to the web server part of the system. If you're using Microsoft IIS for your web site, you've got .NET, and while it's possible to add PHP or Perl, it's not commonly done. For Java, you need an application server. But Apache makes it pretty easy to plug in all sorts of the open source languages as modules, and run a bunch of them simultaneously. Much of these differences are due to historical and cultural differences, not really technical. It's just that these particular sets of technology are regularly used with each other, so they're going to be easier to get running and working correctly.
Let's take a closer look at the LAMP family. Like many families, there's in-fighting and bickering over who is best at what job. Postresql people look down their noses at MySQL, which they clearly consider to be inferior in just about every way (with some justification). Perl people wonder why others program in anything else, Python people think the other languages make programming too difficult, and Ruby programmers pride themselves in writing the shortest code to get the problem solved. They all sneer at PHP, regarding it as a toy language not capable of real programming. Yet you'll find more open source web applications written in PHP than all of the rest of them. Why is this?
Read my next post to find out why.