Thirty years in, JavaScript runs everywhere and is losing its own toolchain to Rust, Go and Zig. Maroun Baydoun, a senior web engineer in Berlin, argues the migration is mostly good engineering — and a trade-off that never makes it onto the benchmark chart.
What is actually being exchanged:
- Node let the toolchain speak the same language as the code: linters, bundlers, formatters and test runners were readable and forkable by the developers who used them
- Rewrites in compiled languages remove that: the source stays open, but the contributor pool shrinks to people fluent in the new language
- “Written in Rust” drifts from implementation detail to selling point, and once the newcomer also tops the benchmarks, resisting it gets expensive
- Speed provides the technical argument, trendiness takes care of the rest
His best observation is the recursion: we compile JavaScript with Rust so it can run inside an engine written mostly in C++. He calls it laying increasingly fast tracks for a steam train that likes to take its time — heavy investment in optimizing everything around JavaScript while JavaScript itself remains the destination.
None of that means the compilers are the wrong tool. It means “the right tool for this job” is not “the right tool for every job that looks like what the competition is doing”. A clean case study in how a benchmark-driven monoculture forms one reasonable decision at a time.