While it’s not on the metal performance like native compilation, it’s close. I wouldn’t be surprised to see CPU instructions for WASM to get to native performance, if it got popular enough as a runtime.
It might have better chances with some common language runtime, than declaring One True Language. No matter what language you pick or invent, it's gonna be hated by many. Intermediate representations? Sure, but much less so.
But you are absolutely right that clouds need a fundamentally different runtime, built on different ideas and principles - not virtual machines running containers pretending to be functions, all completely separate from resource declarations (which are in turn all individual nuanced messes).
Ah well, you beat me to it: https://news.ycombinator.com/item?id=36489625
> Cloud will be easy with opinionated tooling.
> Cloud will be easy with opinionated approach to configuration.
This is really true. AND in no time at all, it will turn from "easy" into "steady, reliable" and then FOMO-derived cognitive dissonance will set in for either engineers, developers, sales team, or users, or some set of those. You'll get people inviting you back to FOMO-squirrel-duct-tape-emergencies-cloud.
At that point I'm convinced you have to find a way to act like you are FOMO+ while keeping easy-cloud well-maintained, if you wish to keep the squirrel cloud difficulties at bay. If you are part of a team then I wish you the best of luck.
the problem is people, not tech.
the solution is taste and discipline, same as its always been.
And Erlang/BEAM that I've used as an example has its own tracing and debugging facilities. (I don't think it has proper multi-tenancy though so it's not like someone can just use it for cloud as it is, but I've just picked it as a closest example to what I think serverless should look like.)
Or you're talking about this from node/server admin perspective? Then, yeah, sure, but unless you're a cloud engineer it's not your business - that's Amazon/Google/Microsoft's problems.
Yes, you do. BEAM will not handle your CPU interrupts or manage your physical memory pages or your USB devices. (The 99 percent of an OS's job.)
I'm sort of oversimplifying it (and probably forgetting a piece or two), but all that's needed is MMU, some minimal network subsystem with device drivers for network cards, and some very tiny VFS - just enough to handle the initrd-like thingy (the rest would be networked storage handled at the application level). E.g. if all we're going to ever run is a single VM that has its own ideas of processes and signals, we may not really need any full-fledged process scheduling or IPC, just the bits to support kernel's own threads.
"Linux" is huge overkill for a cloud abstraction.
Cloud applications don't need 99% of all device drivers and the desired ones need to be tuned for cloud anyways. Cloud applications need a persistent store but not necessarily a filesystem. Cloud applications don't want to think about process scheduling they want to assume they have the CPU and memory they need. etc.
Linux itself might be fine as a HAL.
But at this point there might be better alternatives.
Adopting a PHB-friendly name won't make the problems go away.
> There's nothing that prevents you from redeploying your service in microsecond, just as you hit "Save" button in vscode.
Yeah, we had that 20 years ago with PHP. It had its downsides too, let me tell you.
I knew someone would find some merit to my PHP + SSHFS setup someday
it even lets you pass the zip data as the post body when less than 50mb. otherwise it points to a zip in s3 or a container uri.
Cloud will be easy with consistent approach. One or very few languages for everything, from configuring resources, to configuring policies and writing code.
Cloud will be easy with opinionated tooling. No Dockerfile and supporting of miriads languages. Just file with dependencies and folder with source code.
Cloud will be easy with opinionated approach to configuration. No need to support PASSWORD env, PASSWORD_FILE env, some secret access service. Only one secure and simple way.
Basically rebuild cloud from the ground up. Remove Linux from equation, we don't need it. Remove filesystem from equation. You have a source code which executex somewhere. You can declare that your service needs database and it'll get it. You can declare that your service needs to access another service and you'll be able to use API to access another service, without thinking about URLS, auth tokens and all this nonsense. Just RPC.
Lambdas are good idea, but very convoluted. Lots of abstractions over abstractions. Terraform which calls AWS API.
Things could be so much simpler and faster. There's nothing that prevents you from redeploying your service in microsecond, just as you hit "Save" button in vscode.