Hi,
I would like to bring up a discussion about the meaning, purpose and guidelines around the rclcpp::experimental
namespace in the rclcpp
repository.
This topic was started in last week meeting of the ROS 2 Client Library Working Group.
The rclcpp
repository has a very short README describing this namespace:
Notice that headers in this folder should only provide symbols in the rclcpp::experimental namespace.
Also notice that these headers are not considered part of the public API as they have not yet been stabilized.
And therefore they are subject to change without notice.
Having some parts of the client library that are not subject to strict API/ABI requirements is IMO very important to ensure a fast development cycle.
From this description however, itâs not clear when/why a new feature should be placed in this namespace and, most importantly, when/how a feature should be promoted out of it and considered stable.
This namespace currently contains only two features: large parts of the C++ intra-process optimizations and the events-executor.
(fun fact: I was the author of both features, so maybe this is my personal namespace).
I would like to propose the following approach:
- New client library user-facing features should always be introduced as part of the experimental namespace.
- After spending 1 full-release in the experimental namespace, features can be put up for promotion (e.g. if something is developed today it will first go to
rolling
, and K-turtle will be its first full-release; so it can be up for promotion as part of L-turtle). - The promotion evaluation process can be started by anyone, not necessarily the original author.
Proposal for the promotion evaluation process:
- API and roadmap review: do we expect large / breaking changes to the APIs of the feature in the short future? If yes, it may be better to keep it as experimental.
- Known issues review: are there known bugs / limitations affecting the feature? If yes, fixing them can be indicated as a requirement before promotion. Note that this item is discretionary, and up to the repository maintainers, depending on the severity of the issues.
The idea is that 1 full-release cycle should allow maintainers and community to get a more clear opinion about the stability of the new feature, and for the main critical bugs and limitations to be discovered.
The possible outcomes of the promotion evaluation process should be that: either the feature is promoted or a clear list of requirements is presented, after which the feature will be automatically promoted.
Once the feature is promoted, a dedicated PR should be created to move it out of the experimental
namespace.