Are polygon zkEVM and zkSync ERA somehow different? If yes then how?
ZkSync Era uses its LLVM compiler, which compiles code from various popular EVM languages such as Solidity, Vyper and Yul to run on their custom zkSync VM. This compiler will be further developed to accept code in Rust and C++ in the future as well. This allows developers to migrate EVM smart contracts, instead of rewriting code using a new language or tool.
While, Polygon zkEVM, on the other hand, treads much closer to EVM and does not use a compiler. It accepts Solidity natively, enabling the migration of almost all Solidity code from existing EVM chains to the new chain without rewriting the code.
The difference is
zkEVM is EVM equivalent whereas zkSync ERA is EVM conpatible - essentially the former reads EVM smart contracts natively, whilst the latter uses an LLVM compiler to convert EVM languages such as Solidity and Yul to be able to run on their VM.
Overall, zkEVM uses a Proof of Efficiency mechanism to achieve greater prover efficiency.