It looks like my client-diversity post was very controversial. Let me make some clarifications.

- One written specification with multiple implementations sounds appealing but rarely works in practice. In reality, the spec is the code. The Ethereum Yellowpaper, for example, contains many inconsistencies and missing details. When this occurs, it's natural to look at a reference implementation. While building optimizer passes in Solidity, I used Geth as a reference. If there's a bug in Geth's EVM implementation, Solidity will likely default to it.

- L2s as a platform for EVM experimentation is a failed concept. L2s cannot innovate unless Solidity and Wallets support the same features, and Solidity and Wallets don't do it unless Ethereum mainnet ships it. Any friction in developer experience will hinder your L2, forcing you to default to EVM equivalence.

- Design flaws are everywhere. I previously gave a talk about historical EVM design flaws and the reasons behind them (link below). Many of these issues are second and third-order effects of specific design decisions, though they were proposed with the best intentions. There's no way to avoid these mistakes; we must keep building.

- There's a tendency to reject upgrades because they have minuscule downsides. In the end, no feature is perfect. For instance, Ethereum still lacks native account abstraction after nearly 9.5 years since its launch. If you have an EOA, you must sign two transactions for a simple swap. Perfectly good solutions, each with some downsides, have been around for years but haven't made it to the mainnet. This is a consequence of having too many clients (5 + 5), too many decision-makers, and no way to break ties. Vitalik's intervention with EIP-7702 (his version of account abstraction) is an excellent example of overcoming this deadlock. It became one of the fastest EIPs in recent history to be included in an upcoming hard fork! Compare this to how long other changes, like EOF, are taking.

- In the past five years, there has been only one significant change for app devs in the EVM—transient storage. And it almost didn't happen! This stagnation drives builders away. Young, ambitious builders are not deploying on Ethereum for their projects. I know this firsthand because I run a security company that works with these projects. Those building on Ethereum tend to be older, legacy protocols.

- Client diversity is undoubtedly a noble goal. Who can argue against better security guarantees, after all? However, doing this before addressing core usability issues will lead to stagnation. Account abstraction (AA) serves as an example. A single, simple change in the EVM can resolve all stack-too-deep problems in Solidity. I could list several other issues that can 10x the EVM experience for builders and end-users.