LAMP is dead! Long live (Perl) web frameworks!
Tags: perl, lamp, php, python
Published: 2021-10-05 14:53:50

---
title: LAMP is dead! Long live (Perl) web frameworks!
published: true
date: 2021-10-05 14:00:00 UTC
tags: Perl,LAMP,PHP,Python
canonical_url: https://phoenixtrap.com/2021/10/05/lamp-is-dead-long-live-perl-web-frameworks/
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4yp0janoshe8uc2jinya.jpeg
---

Twitter recently recommended [a tweet](https://twitter.com/eugzolotarenko/status/1443132448636801024) to me (all hail the algorithm) touting what the author viewed as the “top 5 web development stacks.”

{% twitter 1443132448636801024 %}

[JavaScript](https://developer.mozilla.org/en-US/docs/Web/javascript)/[Node.js](https://nodejs.org) options dominated the four-letter acronyms as expected, but the fifth one surprised me: LAMP, the combination of the [**L**inux](https://www.kernel.org/) operating system, [**A**pache web server](https://httpd.apache.org/), [**M**ySQL](https://www.mysql.com/) relational database, and [**P**erl](https://www.perl.org/), [**P**HP](https://www.php.net/), or [**P**ython](https://www.python.org/) programming languages. A [quick web search](https://duckduckgo.com/?q=top+web+development+stacks) for similar lists [yielded](https://www.octalsoftware.com/blog/best-web-development-stacks) [similar](https://enkonix.com/blog/web-development-stacks) [results](https://dzone.com/articles/7-top-web-development-technology-stacks-for-2021). Clearly, this meme (in the [Dawkins sense](https://richarddawkins.net/2014/02/whats-in-a-meme/)) has outlasted [its popularization by tech publisher O’Reilly](https://web.archive.org/web/20010304112803/http://www.onlamp.com/pub/a/onlamp/2001/01/25/lamp.html) in the 2000s.

Originally coined in 1998 during the [“dot-com” bubble](https://en.wikipedia.org/wiki/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:

- Perl (e.g., [Catalyst](http://www.catalystframework.org/), [Dancer](https://www.perldancer.org/), [Mojolicious](https://mojolicious.org/)),
- PHP (e.g., [Laravel](https://laravel.com/), [Symfony](https://symfony.com/), [Zend/Laminas](https://getlaminas.org/)),
- and Python (e.g., [Django](https://www.djangoproject.com/), [Flask](https://flask.palletsprojects.com/), [web2py](http://web2py.com/)).

Certainly on the Perl side (with which I’m most familiar), the community has long since [recommended the use of a framework](https://perldoc.perl.org/perlfaq9#Should-I-use-a-web-framework?) built on the [PSGI](https://metacpan.org/pod/PSGI) specification, [deprecating 1990s-era CGI](https://www.perl.com/article/perl-and-cgi/#why-not-to-use-cgi) scripts and the [mod\_perl Apache extension](https://perl.apache.org/). Although general-purpose web servers like Apache or [Nginx](https://nginx.org/) may be part of an overall system, they’re typically used as [proxies](https://docs.mojolicious.org/Mojolicious/Guides/Cookbook#Nginx) or load balancers for Perl-specific servers either [provided by the framework](https://docs.mojolicious.org/Mojo/Server/Hypnotoad) or a [third-party module](https://metacpan.org/pod/Dancer2::Manual::Deployment#Running-on-PSGI-based-Perl-webservers).

Granted, PHP [still relies](https://www.php.net/manual/en/install.php) on web server-specific modules, APIs, or variations of the [FastCGI protocol](https://fastcgi-archives.github.io/) for interfacing with a web server. And Python web applications typically make use of its [WSGI protocol](https://wsgi.readthedocs.io/) either as a web server extension or, like the Perl examples above, as a [proxied](https://flask.palletsprojects.com/en/2.0.x/deploying/wsgi-standalone/#proxy-setups) [standalone server](https://flask.palletsprojects.com/en/2.0.x/deploying/wsgi-standalone/). 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](https://angular.io/), [React](https://reactjs.org/), [Vue.js](https://vuejs.org/)) and maybe by the (relational or [NoSQL](https://en.wikipedia.org/wiki/NoSQL)) database (e.g., [MongoDB](https://www.mongodb.com/), MySQL, [PostgreSQL](https://www.postgresql.org/)). All however seem standardized on the Node.js runtime and [Express](http://expressjs.com/) 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#](https://docs.microsoft.com/en-us/dotnet/csharp/), [Go](https://golang.org/), [Java](https://www.oracle.com/java/), [Ruby](https://www.ruby-lang.org/), 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](https://www.hostgator.com/). Yes, the M could also stand for MongoDB. [Naming things is hard.](https://www.karlton.org/2017/12/naming-things-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.