Blog post: Reproducible cross-platform ROS installation with Pixi

Hey all,

We’ve seen a big increase in the interest on making ROS supported on multiple platforms. And in general easier to install. This is not the first time I post on this forum about this, but seeing it’s a recurring topic, I would like to cross-post our latest blog post on the matter.

Blog post: Pixi: Modern package management for Robotics | prefix.dev

I’ve included a few of short videos to showcase what it could look like if you use ROS through Pixi.

I’m really looking forward to discussing the topic further at ROSCon2025. There will be two related BOF’s on Monday:

  • 10:00: Deployment & Launch Tooling, by Emerson Knapp

  • 15:00: Tools for Environment Isolation, by Nathan Brooks

And @KimMcG and myself will present on the topic on Wednesday starting at 14:00.

Please try it out and let me know what you think!

Let’s make it easy and quick to install ROS anywhere and bring ROS to a new level of users it can reach!

3 Likes

When I do that on Mac for example, is it creating a Ubuntu environment (docker-like) or is it running on macOS somehow?

Pixi uses conda packages which are all build for the native architecture. Eliminating any overhead.

1 Like

I’m not using Pixi yet (sorry :tulip:).

But to offer support for it to others, would it make sense to integrate it as an option into industrial_ci?
That way we can make sure our packages work for Pixi as well.

Or have an easy to use github action to quickly integrate this into an open source package?

RTFM: ros-example/.github/workflows/test.yml at main · ruben-arts/ros-example · GitHub

1 Like

Thanks for the writeup, I’ll have to give this a go sometime soon to see what the limitations are. :+1:

It ought to be pretty useful on Ubuntu as well, possibly the main way to install ROS everywhere in the long run, because apt is incapable of installing all required packages even on tier 1 supported OSes.

I think we’re all familiar with how pip on Ubuntu 23 and onwards wisely refuses to install packages globally without an override flag, but as all but the most popular packages are missing on apt install python3-* the only resort is to run that override and mix dep managers which eventually devolves into conflicts. Goes without saying that rosdep can’t resolve these deps either, so it’s not a production option.

What does Pixi do in this case? I’d assume that it has to try and match the apt versions in the corresponding Ubuntu release for the ROS version, but what if there isn’t one?

Distribution coupling: Each ROS distribution (like ROS Noetic, Humble, or Jazzy) is tightly linked to a specific Ubuntu release, limiting OS flexibility.

How well does pixi resolve incompatibility issues that stem from the platform’s environment itself?

I ask because I’ve been using ROS One a whole lot lately, which is essentially Noetic modernized for 22.04 and 24.04, with all three being interoperable (even the md5sums match), and while that’s worked unexpectedly well so far, it’s mostly becuase there’s a team that releases patches for newer systems which probably isn’t the case for Pixi. There are still a few conceptual problems, like Gazebo 11 being non-existent on 24.04 since there’s no official release.

I presume Pixi faces the same kind of problem on Windows and Mac where the graphical UI is not X11 or Wayland, so Rviz/Gazebo/Turtlesim/etc. probably don’t run without some kind of emulation, what’s the approach there?

Install ROS on Linux, macOS, and Windows — without needing Docker or Ubuntu.

If ROS now fully runs on something as wildly incompatible as Windows without WSL2 then… does that mean we can finally run ROS on Android? Not that it would be of much practical use :face_with_tongue:

Its certainly also useful on Ubuntu (or any glibc based linux distribution for that matter). The examples in the blog post uses robostack which is a community maintained distribution of ROS using conda packages. Pixi installs every required dependency except for libc and cuda drivers. This means you also get the same binaries on any linux distribution. So they should all be compatible.

Robostack also provides native binaries for macOS and Windows. The maintainers of robostack maintain several patches to make this work pretty much out of the box. This patches are very regularly pushed upstream.

Robostack is build on top of the conda-forge distribution. Conda-forge provides tens-of-thousands of packages. Amongst others the compilers that make everything ABI compatible, but also a lot python libraries. These can also be installed directly as dependencies in pixi. But if a certain python dependency is missing, you can also install python dependencies directly with pixi (it integrates uv).

I think those tools are based on Qt or SDL which are fully cross-platform so this also works out of the box on linux, macOS and Windows without any emulation. In fact most of the examples in the blog post should work out of the box on those platforms.

3 Likes

Thanks for the shoutout! Looking to both our talks @ruben-arts !

Just letting you know that the Reinforcement Learning workshop on monday is using Pixi + Robostack too for the workshop preparation.

btw @ct2034 and @scastro it works fine on my windows!

2 Likes

Just to clarify, Windows support on ROS 2 (that was improved over the years thanks to the work of many amazing contributors) is not some that was introduced by Pixi/RoboStack: it is a feature of ROS 2 since the start of ROS 2, see REP 2000 -- ROS 2 Releases and Target Platforms (ROS.org) . Since 2018 Windows (not WSL2, actual Windows) has been a Tier 1 platform.

Well that is news to me, we’ve been teaching ROS 2 courses for two years now and as far as I know not one student has managed to get anything working on Windows without Docker or WSL2.

I remember there being some talk about Microsoft doing official ROS 2 support a long while ago which used Robostack, and in my testing it wasn’t functional enough yet at the time and was extremely convoluted to get working (beyond anything you could reasonably expect a student to do anyway), but after that was gone I assumed the whole project was scrapped. I’m glad to see people are still working on it :+1:

1 Like