however, that would require trusting etherscan, but metamask already relies on it pretty heavily, so...
if the user didn't want to rely on etherscan, it's possible to have metamask verify contracts itself - the dapp publisher would need to provide the source with the dapp, metamask could compile it, and make sure it matches the on-chain bytecode. i believe solc is written in javascript so it would be possible to ship it with metamask.
i'm not sure how this would work with contracts with dependencies. at that point, the sources of all the dependencies would need to be verified. this would require larger infrastructure (e.g. etherscan, but again, a single point of failure).
in that case, it would almost make sense for another data section in the EVM to hold the contract source. in this case:
* 1. contract source code is all stored on chain, in a decentralized manner
* 2. clients can verify the byte code
* 3. it's more expensive to publish a contract since it needs the extra space to store the source