DEV Community

Cover image for LAMP is dead! Long live (Perl) web frameworks!
Mark Gardner
Mark Gardner

Posted on • Originally published at on

LAMP is dead! Long live (Perl) web frameworks!

Twitter recently recommended a tweet to me (all hail the algorithm) touting what the author viewed as the “top 5 web development stacks.”

JavaScript/Node.js options dominated the four-letter acronyms as expected, but the fifth one surprised me: LAMP, the combination of the Linux operating system, Apache web server, MySQL relational database, and Perl, PHP, or Python programming languages. A quick web search for similar lists yielded similar results. Clearly, this meme (in the Dawkins sense) has outlasted its popularization by tech publisher O’Reilly in the 2000s.

Originally coined in 1998 during the “dot-com” bubble, I had thought that the term “LAMP” had faded with developers in the intervening decades with the rise of language-specific web frameworks for:

Certainly on the Perl side (with which I’m most familiar), the community has long since recommended the use of a framework built on the PSGI specification, deprecating 1990s-era CGI scripts and the mod_perl Apache extension. Although general-purpose web servers like Apache or Nginx may be part of an overall system, they’re typically used as proxies or load balancers for Perl-specific servers either provided by the framework or a third-party module.

Granted, PHP still relies on web server-specific modules, APIs, or variations of the FastCGI protocol for interfacing with a web server. And Python web applications typically make use of its WSGI protocol either as a web server extension or, like the Perl examples above, as a proxied standalone server. But all of these are deployment details and do little to describe how developers implement and extend a web application’s structure.

Note how the various four-letter JavaScript stacks (e.g., MERN, MEVN, MEAN, PERN) differentiate themselves mostly by frontend framework (e.g., Angular, React, Vue.js) and maybe by the (relational or NoSQL) database (e.g., MongoDB, MySQL, PostgreSQL). All however seem standardized on the Node.js runtime and Express backend web framework, which could, in theory, be replaced with non-JavaScript options like the more mature LAMP-associated languages and frameworks. (Or if you prefer languages that don’t start with “P”, there’s C#, Go, Java, Ruby, etc.)

My point is that “LAMP” as the name of a web development stack has outlived its usefulness. It’s at once too specific (about operating system and web server details that are often abstracted away for developers) and too broad (covering three separate programming languages and not the frameworks they favor). It also leaves out other non-JavaScript back-end languages and their associated frameworks.

The question is: what can replace it? I’d propose “NoJS” as reminiscent of “NoSQL,” but that inaccurately excludes JavaScript from its necessary role in the front-end. “NJSB” doesn’t exactly roll off the tongue, either, and still has the same ambiguity problem as “LAMP.”

How about pithy sort-of-acronyms patterned like database-frontend-backend? Here are some Perl examples:

  • MRDancer: MySQL, React, and Dancer (I use this at work. Yes, the M could also stand for MongoDB. Naming things is hard.)
  • MRMojo: MongoDB, React, and Mojolicious
  • PACat: PostgreSQL, Angular, and Catalyst
  • etc.

Ultimately it comes down to community and industry adoption. If you’re involved with back-end web development, please let me know in the comments if you agree or disagree that “LAMP” is still a useful term, and if not, what should replace it.

Discussion (2)

rabbiveesh profile image
Avishai Goldman

I'm with you that LAMP is out of touch.
Personally always work on an MVP stack: Mojo, Vue and Postgres.
Mojo and Vue actually share a lot of values in being progressive (meaning learn as you go, not woke). I find postgres to be that way too, that you're constantly learning and improving, without having to read a 20 minute tutorial to do hello world.

davorg profile image
Dave Cross

LAMP is still a useful term. If only because there are still so many LAMP systems out there (I know this because I still get people asking me to help maintain them).

the community has long since recommended the use of a framework built on the PSGI specification, deprecating 1990s-era CGI scripts and the mod_perl Apache extension

This is true, of course. But the Perl-using world is a lot bigger than the Modern-Perl-using community.

So I think we're stuck with LAMP for a while longer. But maybe we need to redefine it to mean "legacy system that needs rewriting :-)"