I think one of the biggest shortcomings of the previous system was the inability to easily handle resource management, so I'm glad to see you're thinking about capabilities.
A while back I had started on a little implementation of what a capabilities system might look like for ros (I just pushed it up to github, it was previously in the vanadium-ros-pkg SVN:
https://github.com/mikeferguson/capabilities). The main features I was interested in was:
* keep tracking of what capabilities were already launched,
* launching new ones when needed
* most importantly: doing resource counting on the capabilities. Robots are always looking for more processing power, and turning off unneeded things often helps (ideally, every piece of software in ROS would be written with lazy publish/subscribe, but often that just isn't the case and lots of pipelines are running with data going nowhere).
I also had some notion in there of attaching semantic tags to capabilities. For instance, you might have multiple cameras, but one of them is a "head" camera and one is a "base" camera and another is a "gripper" camera. If I write a security robot app that looks for unknown faces, it can ask for "head" cameras if available (and falls back to other cameras if no head camera exists). Obviously this requires some management of keyword choices, but it would likely go the way of topics (every robot builder out there uses geometry_msgs/Twist because navigation stack and teleop code everywhere does so, and if you have cool apps that require you label your head cameras as "head", robot builders will do it).
-Fergs