date = 2023-03-01 tags = ["software", "deno"] title = "Deno as a platform for distributing portable software"
In the post I published about WebAssembly on 2021-11-15, I expressed my opinion that in the future WebAssembly will replace Docker as a way to distribute portable software.
One thing I did not dwell on is how software in the WASM format can actually be executed.
Since WebAssembly is just a specification of an abstract machine, a WASM program needs to be accompanied by an embedding host environment to do any useful work.
But writing and distributing an accompanying embedding host for every WASM program is too much work.
This is what the WASI standard and its implementations like Wasmer are trying to provide, a standard foundation to build WASM programs on.
But I think this effort of standardization is premature when WebAssembly has only just started to gain adoption. Standardization should follow the practice in the industry, not precede it.
In the meantime while wide adoption of WebAssembly becomes a reality and good practices start to emerge, I find Deno to be a good platform to write portable software.
Previously, I had little affection for Javascript runtimes like browser and Node.js.
Node.js's design choices particularly leave me with a poor taste regarding the operationality of applications written for it (node_modules, etc.),
Deno is a Javascript runtime that fixes much of it. It is like magic, showing that we can have nice things in programming.
There are two notable features of Deno, security and its distributed nature akin to that of the Web.
The two features combined make for a great platform for portable software, and it is the closest thing to the vision I envisioned in the previous post about the universally-portable software platform.
That is why I want to play with it.
I'll try to publish scripts I write as Deno scripts on a regular basis.
Deno is still going through a lot of changes and I don't think it is ready for production use.
Its dependency management is especially unclear to me. It will be interesting to see what develops for it.
For me I'd like to see something like Go's Minimal Version Selection implemented in Deno.