We should be celebrating the fact that we can now port almost anything with far less effort, or modernize an existing stack to meet today's performance expectations, requirements, and engineering standards.
We should be celebrating the fact that we can now port almost anything with far less effort, or modernize an existing stack to meet today's performance expectations, requirements, and engineering standards.
When people say software is "expired", "obsolete", "legacy", "limited shelf life", etc ... they're not talking about whether somebody somewhere in the world has the ability or idiosyncratic desire to continue running that old software.
Instead, it means the software's ability to be practical and usable in relation to the rest of the current computing ecosystem. E.g. In this perspective, Win95 MSPAINT is "expired/obsolete" because it can't open .PNG and .JPEG files. In today's world, .PNG/.JPEG files are much more common than the .BMP files that MSPAINT 95 can open.
I still have an old 16-bit Microsoft C/C++ v 7.0 compiler from 1992. Did it expire?!? Well, not literally. There's no ticking time bomb in it that checks the system clock and refuses to run. Instead, the issue is that it doesn't have the newer C99/C++98/C++11 features and I can't use it to compile today's ffmpeg source code. That's what people mean by "expired/obsolete".
- Rust: Axum, Actix Web
- Go: net/http + Chi, Echo
- C#: ASP.NET Core
- Java/Kotlin: Spring Boot 4, Quarkus
- Elixir: Phoenix
- TypeScript: Fastify, NestJS
- Python: FastAPI, Django
I love "Zero to Production in Rust", but that's a pretty long book that recreates a fraction of what comes out of the box with Django. Also, when things come with Django, there's no need to maintain or worry about subtle yet crucial bugs.
By way of example, "react doesn't have a router" hasn't stopped it from becoming the dominant frontend framework.
Their perspective is "Rails? Isn't that like, super old??"