As per this SO post and several resources online, I am aware that ROS is a meta-operating system that runs on top of a real OS.
However, what is the best way to identify all the actual Operating System (OS) abstractions/services that ROS 2 applications actually depend on?
Specifically, I'm interested in understanding the OS abstractions necessary to run ROS applications and not the OS abstractions required to develop ROS 2 applications.
Examples of OS abstractions I am referring to include:
- File System (which to my knowledge ROS 2 requires).
- Network Drivers (which to my knowledge ROS 2 also requires given that ROS 2 nodes need to communicate with each other over some network).
My goal is to understand ROS 2's Operating System abstractions to a level deep enough where I potentially may be able to attempt to port ROS 2 applications to an unsupported OS as an educational exercise.
Some strategies that I have considered (but have yet to attempt) include:
- Going through each of the libraries outlined in the ROS architecture diagram below such as the
rcl
andrclpp
libraries and examining the header files included in those libraries to determine what Operating System services they require. - Running
strace
on a ROS 2 executable and examining the System Calls made by the ROS 2 program. However, this seems to me a less structured version of the previous strategy. - The following diagram also raise further questions like, what is the best way to identify Operating System abstractions required by Data Distribution Service (DDS) libraries?
However, I'm unsure if this is the best way to go about it and if there are any resources out there (research papers, documentation I haven't read, blog posts etc.) that may speed this discovery/understanding process up.
Would appreciate some starting advice from anyone who has:
- Ported ROS 2 applications to a different OSs in the past.
- Knowledge about ROS 2's internal architecture.
- Experience porting other things to new OSs and doing this kind of discovery work!
- General advice on how to get started.