Thanks for the summary, Jon. Looks like there's a useful conversation
going on inside that doc.
I'd like to explain a few things, which I think either haven't been
said, or perhaps have gotten lost in the discussion. I'll borrow your
Socratic approach to cover the key concerns and questions that I've
heard so far:
1. I'm worried that ROS 2 development will break my ROS 1 system.
To maintain the stability of existing ROS 1 code and avoid the risk of
regressions in ROS 1, we don't intend to backport anything significant
from ROS 2. That's not to say that it can't happen, but our default
position is that ROS 1, including catkin, should remain as is, with
incremental improvements and bug fixes.
2. OSRF (and Willow Garage before it) wastes time working on build systems.
Form the beginning, we adopted for ROS a federated development model.
We made that choice in the hope that it would help to spur adoption,
participation, and contribution, and I think that we were right. The
tradeoff is that it's inherently complex to manage code in a federated
ecosystem, whether building a bunch of interdependent packages from
source or creating binary installation packages.
We mitigate that complexity in the build system with automation.
Wherever possible, we use existing, standard tools, namely CMake and
Python. Where those tools lack built-in support for what we want to
do, we build on top of them (as we've done since the rosbuild days).
Of course, you could agree with all the above, and still believe that
we spend more time on build systems than is justified, given the
resulting benefits. That's a question on which reasonable people can
disagree.
3. Why did OSRF create a yet another build system, instead of improving catkin?
ament is an evolution of catkin, not a new build system. You could
think of it as catkin 2.0.
Our goal with ament is to take the feedback that we've gotten over the
years about catkin, along with the great enhancements that have been
developed in auxiliary packages like catkin_simple and catkin_tools,
and provide the best possible user/developer experience. We are
intimately aware of the pain and suffering caused by the rollout of
catkin in Groovy, and we do not intend to repeat it.
ament started out as a fork of catkin, then accumulated a variety of
changes. The changes were substantial enough that we decided to keep
the two code bases separate. Down the road, as we identify common
chunks of code that should be shared, we can always refactor (merging
parts of catkin_tools and ament_tools into a third, shared Python
package is a good example).
4. Then, why change the name? Why not call it catkin 2.0, or catkin2?
To achieve the improvements that we want to make in catkin, we're not
committing to backward compatibility with the current version of
catkin (this could change, e.g., by adding a 'catkin_cmake' build type
to ament). We expect people to want to develop ROS 1 and ROS 2 code
on the same machine (and perhaps in the same workspace or even
package). So we need to support side-by-side installation and use of
catkin and ament.
So we need a different string identifier to use for naming
directories, CMake modules, etc. Or at least we think that we do.
We'd be happy to hear suggestions for how to keep the name catkin but
allow installation and selecting of different versions. We'd also
need to consider how to manage documentation for the different
versions in a way that's not too confusing.
Assuming that we do need a different name, 'catkin2' could easily be
used in place of 'ament.' We chose 'ament' as the package name and
the prefix for CMake function names because we felt that 'catkin2' has
the potential to confuse users. I'm happy to hear counter-arguments
on that point.
5. I don't want to have to port my build files from catkin to ament.
For a start, you only need to update CMakeLists.txt files for packages
that you're converting to use ROS 2, and at that point you're probably
touching quite a bit of code anyway (perhaps with the help of
semi-automatic upgrade tools). For most packages the CMake changes
will be pretty minor by comparison. No changes are needed in your
package.xml.
To give you an idea of what the CMake changes will look like, Dirk put
together some examples:
- catkin:
https://gist.github.com/dirk-thomas/596a53bbb922c4d6988a
- ament:
https://gist.github.com/dirk-thomas/83ae6bfbfc94e06cd519
- ament auto:
https://gist.github.com/dirk-thomas/a76f952d05e7b21b0128
(These are the kinds of things that will make up part of the ROS 1->2
migration guide.)
ament auto is kind of like catkin_simple, but because we're able to
integrate it properly into the build system, as opposed to hanging it
on the outside, it can cover a lot more use cases. I would guess that
ament auto will handle the needs of most users, and it's pretty
concise.
6. catkin was / is too hard to use. ament will be the same or worse.
I certainly hope not. We learned a lot from catkin, and are doing our
best to make ament (and ament auto) easy to use while still offering
the automation that we need to manage the complexity of doing
federated development.
We're already working with ament on ROS 2 development and improving it
where needed as we go. We'd love to get your feedback, if you're
willing to try it out.
brian.
> --
> You received this message because you are subscribed to the Google Groups
> "ROS SIG NG ROS" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to
ros-sig-ng-ro...@googlegroups.com.
> For more options, visit
https://groups.google.com/d/optout.