bootstrap.py was migrated from Python 2.7 to work with Python 3 and new features was written in a way that works both with Python 2.7 and 3 (except for XZ support used to download LLVM artifacts from CI). The dev guide promises 2.7 support as well. This meant that we can't even use things like f-strings. Although the Python side of the bootstrapper isn't constantly being changed I think sufficient time has passed since Python 2.7's EOL for us to fully commit to Python 3 and remove the baggage for any future changes to the script.
My motivation is that I'm currently rewriting
x.py clean to be implemented in pure python (because it happened to me several times that I need to wait for a good 30 seconds for the Rust bootstrapper to compile, just to delete some files). Due to filesystem compatibility shenanigans I need a feature added in Python 3.5. This cannot be backported in pure Python as it interacts with Windows API.
In terms of code change for "dropping support", we simply need to remove 2.7 from documentations and modify
x.py such that it errors out when ran with 2.7 with appropirate message. Code style improvements can be made gradually later on.