So Hoare talks about an ambitious plan to create a language to end all languages… Sounds familiar? What about our universal build tool,
colcon? Perhaps it is designed to rule all other build systems and bind them in darkness. When I have first read about
colcon, universal build tool, I have said oh we are going again… This is a huge red flag for anyone who know about the history of computer science and mathematics. Roughly stating, you cannot have a universal thing for any complex system.
Colcon is just one way to solve building large collections of heterogeneous pieces of software. The documentation makes no claims at universality, just that it makes some of our common challenges more convenient. From the docs:
colcon is a command line tool to improve the workflow of building, testing and using multiple software packages. It automates the process, handles the ordering and sets up the environment to use the packages.
As you may know, a complex robotics system can be composed of many dependent libraries and executables spanning multiple programming languages (C++, python, Java, Rust) and build systems ( CMake, Bazel, Cargo, etc). In most cases, all colcon is doing is calling the corresponding
cmake && make && make install (or equivalent) for each library in dependency order.
There are definitely alternative ways of doing this up to
make && make install-ing each component library if you wish. I believe that many in the community have decided that using something like
colcon to automate this is worth the “penalty” of abstraction, but no one is being forced into using
As an alternative, debian packages are provided that don’t strictly require
colcon. Similarly the RoboStack folks have done excellent work in using
conda to build and distribute ROS and ROS 2 packages without the use of