"serverless" does not refer to the absolute lack of servers - it refers to the fact that your CODE (applications and software in general) should not be AWARE of being executed on a physical or virtual machine.
The platform should be as abstract as it gets. I always imagine it as coding on a piece of paper: in a way, my code should work and make "sense", even though we all know that a piece of paper won't execute any instructions. And this is part of the magic of "serverless" software: it imagines a perfect, abstract machine where it can run, forgetting about the complex, unreliable, physical machine underneath.
It's an almost philosophical approach to writing software and getting it needs some time and thought. And needless to say, it does not solve ALL your problems, but it MIGHT solve SOME of your problems.
With the exception of para-virtualised device drivers, what code is ever aware of being executed on physical or virtual machines?
AWS Lambda and similar services have literally nothing to do with hardware vs software.
They're about running a function in response to an event on someone else's stack, almost like the `map` part of a `map-reduce`, if the input was considered to be distinct events/objects.
A consequence is that you really want to terminate quickly and use little RAM. If your JS function terminates in 110 ms and get billed for two 100 ms units you might be tempted to switch to a faster language (or ASM what you can) to save half the bill. Webhosting doesn't have that dynamic.
How do I get "old fashioned webhosting" to automatically scale-out and scale-in?
How do I do all that and get per-100ms CPU-time billing?