Actualmente estoy trabajando en una aplicación que me gustaría publicar en muchas distribuciones. Hasta ahora, he realizado todas mis pruebas en una distribución a la vez (compilar y ejecutar en la misma distribución). Pero cuando tomo la AppImage generada de la compilación en mi computadora principal (Arch Linux) y trato de ejecutarla en una máquina virtual (Ubuntu 20.04), aparece el siguiente error:
gabriel@gabriel-VirtualBox:~/Downloads$ ./Neptune.Installer-x86_64.AppImage ./Neptune.Installer-x86_64.AppImage: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./Neptune.Installer-x86_64.AppImage)
¿Qué posibles soluciones hay para esto? Consideré vincular estáticamente la biblioteca, pero no estoy seguro de si eso podría causar problemas de licencia, ya que mi programa no es de código abierto. Aparte de eso, podría considerar simplemente compilar mi programa en una distribución muy antigua como Ubuntu 12 o algo así, pero no sabré qué tan bien se trasladará a otras distribuciones (por ejemplo, ¿seguirá funcionando mi programa en una versión anterior? de Fedora?)
Esta puede ser una pregunta complicada, pero solo quiero saber cuál es la mejor manera de resolver este problema. ¿Cambiar bibliotecas? ¿Enlace estático? ¿Compilar en distribuciones antiguas? Déjame saber lo que piensas.
He considerado vincular estáticamente la biblioteca, pero no estoy seguro de si eso podría causar problemas de licencia.
Sí.
distribución muy antigua como Ubuntu 12 o algo así, pero no sabré qué tan bien se transfiere a otras distribuciones
No lo hace (alpine linux). Si compila software, debe ejecutarlo con el conjunto de bibliotecas con el que lo compiló. Incluso si compila en "distribuciones muy antiguas", puede haber cambios.
publicar en muchas distribuciones
Elija la lista de distribuciones y versiones de estas distribuciones que desea admitir. Indique a los usuarios que admitirá estas versiones de distribución. ( https://partner.steamgames.com/doc/store/application/platforms -> Steam only officially supports Ubuntu running Ubuntu 12.04 LTS or newer.. ).
Compile contra cada combinación de distribución+versión por separado y distribuya su software por separado para cada versión de distribución. Para comodidad de los usuarios, cree y comparta repositorios de paquetes para un administrador de paquetes de distribución específico con su software. En https://www.zabbix.com/download solo hay tantas combinaciones para elegir. Interésese en CI/CD en entornos virtualizados docker. Me gusta gitlab.
O, alternativamente, distribuya su aplicación con todas las bibliotecas compartidas dependientes. Agrupe todo junto con el sistema operativo y distribúyalo en forma de una imagen acoplable o una imagen virtual qemu/virtualbox. O distribuya con solo archivos de bibliotecas compartidas con un contenedor alrededor LD_PRELOAD . Al igual que lo hace el vapor. Instale Steam en su sistema y vea qué sucede en ~/.steam/steam/ubuntu12_64 .
Y contrate una capa para resolver los problemas de licencias.