EVM versus WASM
This is the long-running question of whether the EVM is the right execution engine, or whether WebAssembly (WASM) would be a better foundation for smart contracts. The EVM is a bespoke, blockchain-specific virtual machine: a 256-bit stack machine with a small, carefully metered instruction set designed for determinism and cryptographic work. WASM is a mainstream, industry-standard bytecode format already running in every web browser, compiled to from C, C++, Rust, Go and more, and executed at near-native speed.
The EVM's design has real virtues for a blockchain. Its 256-bit words map naturally onto hashes and keys; its instruction set is tiny and fully specified, which makes consistent cross-client implementation tractable; and its semantics are deterministic by construction, with no floating point or other sources of platform-dependent divergence. The costs are equally real: 256-bit arithmetic is slow to emulate on 64-bit hardware, the EVM is interpreted rather than run natively, the toolchain is comparatively niche (Solidity, Vyper), and the analysis ecosystem had to be built from scratch.
eWASM ('Ethereum-flavored WASM') was the proposal to replace the EVM with a restricted, deterministic subset of WebAssembly — stripping out floating point and other non-deterministic features and adding metering. The promised payoffs were faster execution, the ability to write contracts in established languages with mature tooling, and convergence with a widely supported standard. eWASM featured prominently in the early Ethereum 2.0 roadmap but was ultimately shelved; the practical difficulty of metering, the maturity the EVM had already accumulated, and the rise of zkEVMs (which need a stable EVM target) all weighed against a wholesale switch.
Today the picture is pluralistic rather than a single winner. Ethereum L1 keeps the EVM and is modernizing it incrementally via the EVM Object Format (EOF) rather than replacing it wholesale, while WASM-based execution thrives elsewhere — Polkadot/Substrate, NEAR, and CosmWasm use WASM natively, and Arbitrum Stylus layers a WASM VM alongside the EVM so developers can choose Rust or C alongside Solidity. The lesson is that EVM-versus-WASM is less a contest to be won than a trade-off between blockchain-native determinism and general-purpose performance and tooling.
A common confusion is that zkEVMs make eWASM moot. They are orthogonal: a zkEVM proves EVM execution with zero-knowledge proofs, which actually raises the value of keeping a stable EVM target rather than swapping it for WASM.