Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

apriltag ROS package is colliding with the system packaged version #35273

Open
2 tasks
tfoote opened this issue Nov 9, 2022 · 9 comments
Open
2 tasks

apriltag ROS package is colliding with the system packaged version #35273

tfoote opened this issue Nov 9, 2022 · 9 comments

Comments

@tfoote
Copy link
Member

tfoote commented Nov 9, 2022

The ROS package has 3.3 https://index.ros.org/p/apriltag/#humble

Ubuntu as of Jammy has 3.2: https://packages.ubuntu.com/jammy/apriltag

As this is now packaged upstream we should make a migration plan to move it to the system packages instead of packaging it ourselves.

To not break anything we should remove it from rolling and forward (Iron) but keep it in humble and later.

We will need to:

  • create a new rosdep key
  • migrate apriltag_ros to use the rosdep key

@gbiggs Iron ROS Boss
@wxmerkt Maintainer

@nuclearsandwich @cottsay FYI

@nuclearsandwich
Copy link
Member

I saw this as well, in fact our posts went up at the same time.

One thing to bear in mind is that Iron's other platforms may not have a suitable version of this dependency. A quick incomplete check suggests that apriltag isn't in EPEL 9 and the version in Debian Bullseye (stable) is quite old. Debian Bookworm (testing) has the latest version currently tagged and is due for hard freeze in March but may not be officially released until after the Iron release. All that is to say, we may need a vendor package to fill the gaps if we're going to transition Ubuntu to the upstream package.

@tfoote
Copy link
Member Author

tfoote commented Nov 9, 2022

Indeed if it's not quite ready for Iron to remove it might make sense to delay it. But if that's the case we should push on the other platforms to get coverage and plan it for after Iron.

Also this isn't a core package so could be considered for release onto Debian after the main freeze.

But either way we should work to clear it out as a dependency either this cycle or next.

@wxmerkt
Copy link
Contributor

wxmerkt commented Nov 10, 2022

Hi @tfoote,
Many thanks for flagging this up. Happy to follow your action plan and recommendations. Based on @nuclearsandwich's insights, would Rolling / Iron stick with vendored and then drop it depending on system packages thereafter? Or would it make sense to revert to 3.2 in the vendored package to make the conditional transition easier?

@nuclearsandwich
Copy link
Member

Based on @nuclearsandwich's insights, would Rolling / Iron stick with vendored and then drop it depending on system packages thereafter?

REP-2000 updates for Iron haven't been made yet but the ROS Infrastructure team has already started planning for our intended Iron platforms. Getting apriltag into EPEL 9 so we can use it in RHEL/AlmaLinux 9 would help lock down our Tier 2 platform. I think that Debian will 100% on whether they manage to release before we do or whether I can make a compelling case for Iron to target Bookworm even if it's still testing at the time of Iron's first release, which is a dicey proposition that I'm not even sure I'd be in favor of on most days but the timing is very unfortunate since a lot of our upstreaming efforts for Ubuntu 20.04 will also become available in Bookworm.

I think that if all the stars align

Or would it make sense to revert to 3.2 in the vendored package to make the conditional transition easier?

I think this depends entirely on the differences between 3.2 and 3.3. If there are no source changes required to depend on either version of apriltag, I think it would be fine to leave the vendored package as-is, while taking steps to rename it so that it's no longer shadowing the eventual system rosdep key.

Another fraught question is whether we really want to "downgrade" apriltag in Iron to 3.2. I'm assuming that there are bug fixes and improvements which would be rough to lose for people transitioning from Humble to Iron. I wonder if we make this change in Rolling but patch the vendor package in Iron to vendor if the target platform lacks 3.3.0 and then we can drop it entirely for J-turtle which will be able to use at least =3.3.0 from 24.04 and bookworm (and hopefully EPEL9).

@wxmerkt
Copy link
Contributor

wxmerkt commented Nov 10, 2022

Thank you for the additional insights. Is the best course of action to leave the issue open until a decision on Iron has been made and then follow your recommended actions?

The differences between 3.2 and 3.3 are mostly bug fixes (including some memory address fixes), and the change of error handling - rather than exiting and taking downstream packages down it switched to using errno. This is an improvement for edge cases and did not noticeably change the API.

@nuclearsandwich
Copy link
Member

Is the best course of action to leave the issue open until a decision on Iron has been made and then follow your recommended actions?

Yes let's do that. I think it's also worth linking related work back to this issue until the transition is either complete and there is no longer an apriltag or apriltag_vendor package in Rolling in order to capture the entire process. It will be good to have a relatively complete record of such a transition.

@wxmerkt
Copy link
Contributor

wxmerkt commented Dec 10, 2022

Hi @nuclearsandwich,
I am checking in what the current thoughts on vendoring apriltag are - in particular around updating Rolling and Humble to the newer 3.3 release - and what the thoughts for Iron were? Based on:

I wonder if we make this change in Rolling but patch the vendor package in Iron to vendor if the target platform lacks 3.3.0 and then we can drop it entirely for J-turtle which will be able to use at least =3.3.0 from 24.04 and bookworm (and hopefully EPEL9).

I.e. are we good to update Apriltag on released platforms to 3.3?

@nuclearsandwich
Copy link
Member

I.e. are we good to update Apriltag on released platforms to 3.3?

I've just refreshed myself on this issue after the end-of-year holidays. I think that we should do our best to balance preparing for the future with maintaining stability in released distributions.

It probably does not make sense for apriltag itself to add cmake logic that prevents it from building if it is already available upstream which means that we would still need an apriltag_vendor but that would be vendoring a package that also has its own package.xml, which I think is a novelty. This is a good case study for the nascent vendor package REP.

With that in mind here's what I propose we do (none of this is my original idea it's a distillation and endorsement of ideas from upthread and other conversations about maturing and solidifying the software vendoring policy in ROS 2)

  1. Leave apriltag 3.3 released as-is for Humble, Melodic, and Noetic
  2. Replace the apriltag package in Rolling with an apriltag_vendor package, keeping the version requirement at 3.3
  3. ROS Iron inherits apriltag_vendor from Rolling
  4. When Rolling shifts to Ubuntu 24.04 bump the version requirement in apriltag_vendor to match (e.g. 3.4, 3.5)
  5. apriltag_vendor will exist in ROS 2 until all supported platforms provide an acceptable version of apriltag (which means it could last indefinitely) but the version requirement will only be increased to match the oldest upstream version in any tier 1 platform (Ubuntu, for reference)

@tfoote
Copy link
Member Author

tfoote commented Feb 9, 2023

Overall I'm ok with this. However I think that we need to define what's an acceptable version of apriltag so that we don't end up with it lasting indefinitely because of scope creep.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants