Create a set of functions/interfaces which are gem5's stable API
Thanks for the feedback, Ciro!
I understand where you’re coming from. However, I’ve heard from a number of the user community in favor of having a stable API. There is definitely some downside when it comes to developers/contributors. But it’s going to make things much better for our users in the long run. Please see the roadmap document linked above for more details on the rationale for this change.
That said, I fully agree with you that some of the APIs in gem5 are flawed and need to be improved. We are working hard to make sure there are processes in place to make this as easy as possible. Additionally, we will not be freezing all development on gem5. We will be looking for community (including contributor) feedback on which APIs should be considered stable in gem5-20 and which ones should wait until they’re updated (e.g., I don’t think we will make the CPU<->ISA interface an API right now because it’s so messy).
Finally, I’d like to remind everyone that gem5 is built for the users, not for the contributors. We’d like more users to become contributors, but the people using gem5 for research are the main clients. I’d venture a guess that 90% of these users are “silent” so it’s hard to know exactly what they want/need. However, we still need to keep these silent users in mind.
I would recommend not having a stable API because gem5 is already relatively flawed, and stable APIs will make it harder to make it better. I’d rather make it more amazing before further freezing APIs.
Stable APIs also discourage people from merging back.
This is the reationale why Linux kernel does not have a stable module API.