A bit orthogonal but still related to the overall theme: are there enough performance/portability benefits of JITs to continue running server applications targeting bytecode platforms? JVM was originally built for safely running web applications, and the CLR seems to exist to allow for portability across the wide range of hardware running Windows.

Are fancy VMs and tiered JITs necessary in a world where we can cross-compile to most platforms we’d want to run on? Languages/run times like Go and Haskell have backends that target a wide range of architectures, and there’s no need get intimately familiar with things like the JVM instruction set and how to write “JIT friendly code”.

IBM i (nee OS/400) has an interesting solution where software is delivered compiled for a virtual machine, then compiled from virtual machine bytecode to native code on installation. I would like to see that model expand to other platforms as well.

I love the flexibility having a single page app and a separate backend gives me.

In a previous life, I did some web development (never as my primary job, but I had to write a web-based frontend to a bigger project because there was no one else to do it). I’m sure I didn’t invent the concept, but the app had a generic JSON-RPC interface and the web app was simply a JSON-RPC client running in the browser.

Made testing much simpler, and since the app had to be accessible to a lot of different things (not just browsers), the universal RPC interface really helped.

(This was long, long ago. I left that job in…2009? 2010? Long before WebAssembly was anything more than a “wouldn’t it be neat if…”.)