Congrats on the launch. I've been in the robotics industry for a decade now, I've seen that boundary lie at many different places. I'm not sure there's a clear cut answer.
Self plug: I'm the founder of Clipper, a container registry that has 10x faster pulls and 7x faster builds over DockerHub, targeted at robotics. I got tired of robotics deploys taking all day and fixed it myself. If you're interested in that or just want to talk shop, let's chat.
What about container registries do robotics companies need that are different from other industries?
Docker is built for web. The mental model is that the internet speed is relatively fast, the image is relatively small, and the device you're pulling onto is starting with essentially no data. All three of these assumptions are wrong for robotics:
It's super common to have a layer in your Dockerfile that has several GB worth of dependencies. If you touch one of the dependencies, it thrashes that layer and anything below it. To quote the CPO from a company I left "Anytime anyone looks at the container the wrong way its a 13g dl over a shit cell connection or starlink". It's extra shit because most of the data the robot is pulling, the robot already has in another layer!Clipper solves this by breaking apart Docker layers and indexing the files within. When you pull an image it will reuse related files in images you already have on your device. This has other side benefits as well, like being able to mount layers as networked filesystems and much more easily being able to run P2P updates.
It's less that robotics needs a different container registry and more that robotics needs a better container transport, and I've built the infrastructure around it for my registry.
Very interesting. We’ve for sure felt the pain of large robotics images and slow deployments, especially when CUDA and ML dependencies are involved, or when adding a seemingly small ROS package pulls a long chain of transitive dependencies. The file-level deduplication approach is clever. Curious how transparent it is to existing Docker/OCI workflows. Does it require any changes to the client, or it mostly sits underneath the existing tooling?
It mostly sits underneath existing tooling. I replace the push/pull client (run `clipper pull` instead of `docker pull`, and optionally the BuildKit driver (to get build outputs natively in my format). That pull command ingests the image into your chosen runtime, meaning your docker/podman/k8s run commands remain the same. If you're interested I can set up a demo/call/coffee.
layered rsync, in a sense
In some sense, yes.