What are the principal differences between Singularity and Podman?
This is just based off of some naive use in some of my personal projects so I am very welcome to corrections but here is my basic understanding.
One of the major points in my experience is that Singularity has its own structure for container images (sif or singularity image files) compared to the other OCI (Open Container Initiative) images compatible with Docker or Podman. Luckily Singularity can convert an OCI image into its sif format and vice versa.
The other experience that I’ve had is that Singularity works a lot nicer with traditional HPC MPI jobs compared to Docker/Podman. The only comparable container software I’ve found to Singularity is CharlieCloud. From what I can tell Docker/Podman target services (like databases and websites) while Singularity/CharlieCloud target applications (like scientific codes or MPI codes).
Podman is a drop in replacement for docker that allows end users to run docker/OCI containers on HPC systems without escalated privileges. It runs in user space and maps much better to the HPC IAM use case than docker.
Singularity is a performance first / HPC “native” container format. It was designed from the ground up to work well with HPC systems. It is very light weight, maps very well to the HPC IAM model (all in user space), and is made to work well with HPC data models (scp, rsync, NFS, gridftp etc.).
There’s a really good discussion on their about page, https://singularity.lbl.gov/about
Singularity can also pull OCI container images and convert them to a SIF (singularity image format) or run OCI images directly.
https://sylabs.io/guides/3.1/user-guide/oci_runtime.html
Finally, singularity has been show to run at native performance and is a great choice if you want to run traditional HPC workloads (MPI / openmp) and gain the benefits of containerization.
TLDR; develop locally with docker; run docker images on HPC systems using podman/singularity; if performance is a concern, use singularity