rmw defines an interface of middleware primitives that are used by the higher level ROS API's. It consists of these main components:
- Initialization and Shutdown:
 
- Nodes
 
- Publisher
 
- Subscription
 
- Service Client
 
- Service Server
 
There are some common utility functions in combination with "Topics" or "Services":
- A function to validate a fully qualified topic or service name
 
- A function to validate a node's namespace
 
- A function to validate a node's name
 
It also has some machinery that is necessary to wait on and act on these concepts:
- Initialization and shutdown management (global for now)
 
- Wait sets for waiting on messages and service requests / responses to be ready
 
- Guard conditions for waking up wait sets asynchronously
 
- Introspection of the ROS graph
 
Further still there are some useful abstractions and utilities:
- Allocator functions for various types
 
- Error handling functionality (C style)
 
- Macros
 
- Return code types and other utility types
 
- Sanity checks for some of the types
 
- Macros for controlling symbol visibility on the library
 
- Utility function to demangle a type to a human readable string (C++ specific):