Architecture is evolving
"Serverless" is a misnomer - we're talking about a new architectural pattern for event-driven systems. For this reason serverless functions are often used as connective glue between other services or in an event-driven architecture. In the days of old we called this a service bus.
Serverless is an evolution
A serverless function is a small, discrete and reusable chunk of code that:
is not a daemon (long-running)
does not publish TCP services
is not stateful makes use of your existing services or third-party resources
executes in a few seconds (based upon AWS Lambda's default)
We also need to make a distinction between Serverless products from IaaS providers and Open Source Software projects.
On one hand we have Serverless products from IaaS providers such as Lambda, Google Cloud Functions and Azure functions and on the other frameworks such as FaaS which let an orchestration platform such as Docker Swarm or Kubernetes do the heavy lifting.
A Serverless product from an IaaS vendor is completely managed so it offers a high degree of convenience and per-second/minute billing. On the flip-side you are also very much tied into their release and support cycle. Open-source FaaS exists to promote diversity and offer choice.
What's the difference with FaaS?
FaaS builds upon industry-standard Cloud Native technology:
The FaaS stack
The difference with the FaaS project is that any process can become a serverless function through the watchdog component and a Docker container. That means three things:
You can run code in whatever language you want
For however long you need
Wherever you want to
Going Serverless shouldn't have to mean re-writing your code in another programming language. Just carry on using whatever your business and team need.