- What does the EVM do?
It reads the Bytecode that was compiled from Solidity or Vyper and directs the CPUs of the nodes in the ethereum network to process the Bytecode.
This way, the Ethereum network facilitates programmability and speed (as the input languages are easy to learn by comparison while Bytecode is optimized for computers) and this division also serves as an important security function, protecting the nodes from being hacked or taken over from outside, for example. (Such attacks would be much more likely if the code would directly control the nodes’ CPUs, without being filtered by the EVM.)
- What is the format of the instructions that the EVM can read?
It can read Bytecode (which in June 2020 is mostly compiled from Solidity, while people also start to use the newer language Vyper). Theoretically other (“human centered”) programming languages would be possible to connect to the EVM (via translating / compiling them to Bytecode, which the EVM will then read).
- What is the relationship between the programming language Solidity and Bytecode?
Solidity is the human input programming language (same goes for Vyper), Bytecode is the code that is compiled from this, for machine use. You could say Solidity is for humans (easier to understand, read, and interact with for humans) and Bytecode for machines (difficult for humans to read, write, etc).
- Why can’t Bitcoin run the same type of complex programs like Ethereum can?
It was a conscious decision of the Bitcoin network to let Bitcoin exist as a network with very little programmable functions, so that it can be smaller (in terms of amount of code in the network) and quicker, than what it would be with smart contracts. Bitcoin is in that sense rather “digital gold” while Ethereum is built to be a “decentralized world wide computer”. Also, Bitcoin is in this way safeguarded against many forms of attacks that would try to slow down, freeze or otherwise disable the network or it’s nodes. In this way, the missing programmability is also an important security feature.
- What is a Turing Complete programming language?
A language that allows to basically program anything. Such a programming language is considered “complete” in terms of functions, while non-Turing-complete languages are considered to be slimmed down versions that are not complete and lack important programming functions. In Bitcoin’s and Ethereum’s case for example, you cannot program loops with Bitcoin’s programming language Script, which makes it non-Turing-complete (while you can program these and many more things in Ethereum’s Solidity, which is considered Turing-complete).