Hey @cameel, thanks for asking. I’m no expert in any programming language, and I have been studying and developing with Solidity for 98 days (according to OZ forum counters), so I can only speak from my own experience.
Initially I got confused about why a contract would inherit from an interface, and one has to deal with mutability, virtual, override warnings, etc. Later I realize that people may start from designing an interface and then continue implementing logics in the contract according to the interface. This is the blue print side of an interface. I got it.
In other cases, people may go straightforward to a contract design and implementation, which may or may not be a good practice, and interfaces are primarily considered and used as means of communication among contracts. I don’t see the blue print side of it in these scenarios, although they could be forced to be combined as one. Take IERC20Metadata and ERC20 for example, to be honest even up to today, I am still very confused about why
ERC20 contract would inherit from
IERC20Metadata, other than for checking
supportsInterface (Later on, I realize it is a way of enforcing the ERC20 standard. For non-standard applications, no such enforcement is required). Clearly there is a mix of purposes and motivations in this practice.
These said, I don’t have a very clear idea about the potential change or if there would ever be any at all. I just hope I have made my experience with interfaces more explicit.