Linux AppImages are currently built on an Ubuntu 18.04 Docker image. This was selected as a version Linux that was "old enough" to ensure glibc compatibility with most versions of Linux likely to be seen in the wild.
However:
- The Python wheel ecosystem is based on the manylinux standard, which is based on various versions of Centos
- Although Ubuntu 18.04 is a "reasonable default", some modern libraries can't be deployed (or can't be deployed easily) on that operating system due to other binary dependencies.
- Old enough for most is not guaranteed to be old enough for all
Describe the solution you'd like
A solution in three parts:
- Move to using the manylinux Docker base images to support Linux AppImage builds
- Support multiple manylinux base image variants (at least manylinux2014; and possibly at least one manylinux_x_y variant)
- Make the selection of the base image a configurable option in Briefcase
Point (3) provides a way to provide backwards compatibility - if the base image isn't explicitly provided, use the current Ubuntu 18.04 default; otherwise, use the explicitly referenced base image. The briefcase project template can then specify one of these base images as a 'new' default. That update can change over time as new manylinux variants are formalised.
Describe alternatives you've considered
There isn't really an alternative here, other than making a project-level decision as to what "current" should mean for Linux support. There's no answer we can provide that will be old enough to support all users, while being current enough to support all users. Providing this as a user choice is the only real option - and also gives us more flexibility in the long term.
Additional context
beeware/Python-Linux-support#2 exists tracking the move at the support package level.
Linux AppImages are currently built on an Ubuntu 18.04 Docker image. This was selected as a version Linux that was "old enough" to ensure glibc compatibility with most versions of Linux likely to be seen in the wild.
However:
Describe the solution you'd like
A solution in three parts:
Point (3) provides a way to provide backwards compatibility - if the base image isn't explicitly provided, use the current Ubuntu 18.04 default; otherwise, use the explicitly referenced base image. The briefcase project template can then specify one of these base images as a 'new' default. That update can change over time as new manylinux variants are formalised.
Describe alternatives you've considered
There isn't really an alternative here, other than making a project-level decision as to what "current" should mean for Linux support. There's no answer we can provide that will be old enough to support all users, while being current enough to support all users. Providing this as a user choice is the only real option - and also gives us more flexibility in the long term.
Additional context
beeware/Python-Linux-support#2 exists tracking the move at the support package level.