Why does Ethereum store bytecode
on the blockchain and not the source code, what's the tradeoff?
As far as I know, a source code does not need as much storage.
Source code is for humans to read and write. Bytecode is for machines.
From Wikipedia:
In computing, source code is any collection of computer instructions, possibly with comments, written using a human-readable programming language, usually as plain text. ... The source code is often transformed by an assembler or compiler into binary machine code understood by the computer. The machine code might then be stored for execution at a later time.
That's exactly what's going on here.
Also consider that different versions of the Solidity compiler output different bytecode. It's easy to specify exactly what each piece of bytecode should do, but would be very hard to incorporate a human readable language into the EVM.
You can write a smart contract in many languages like Solidity, Vyper, Yul, Mutan, Serpent, etc. They all have different syntaxes. That is why source code is compiled into the same standard bytecode for EVM.