On Fri, Jun 16, 2023 at 2:07 AM J Leslie Turriff <jlturriff@mail.com> wrote:
On 2023-06-14 05:08:42 Roger Oberholtzer wrote:
I have not explored this, but how does flatpack work with development libraries? Let's say that I install a package that has runable binaries (as usual) but also contains a corresponding SDK that can be used to build other applications. Flatpack usually encapsulates the commands in the installed bits so that they are accessible by name directly. Does this work for the SDK bits as well? Or are SDKs expected to be installed outside the flatpack? If so, how is the relationship between SDKs and flatpacks maintained? Would I need to build a flatpack for my own applications that also contains the libs from some other flatpacks? Obviously I need to learn about this. I'm just curious what the SUSE take on this might be from the POV of their immutable OS implementation. ,
On Wed, Jun 14, 2023 at 11:33 AM J Leslie Turriff <jlturriff@mail.com> wrote:
https://www.theregister.com/2023/06/09/will_flatpak_and_snap_replace/
Leslie -- Platform: Linux Distribution: openSUSE Leap 15.4 (x86_64)
I would guess that one would build the product as one would without Flatpack, then use Flatpack to package the resulting parts that would go into an RPM?
Here are the DSOs used in one of our applications: linux-vdso.so.1 (0x00007ffe1816d000) libmca.so.18.00 => /opt/rsoft/lib/libmca.so.18.00 (0x00007fe18e800000) libwgs84.so.18.00 => /opt/rsoft/lib/libwgs84.so.18.00 (0x00007fe18e400000) libproj.so.22 => /usr/lib64/libproj.so.22 (0x00007fe18de00000) libdover.so.18.00 => /opt/rsoft/lib/libdover.so.18.00 (0x00007fe18da00000) libprofile.so.18.00 => /opt/rsoft/lib/libprofile.so.18.00 (0x00007fe18d600000) libfilter.so.18.00 => /opt/rsoft/lib/libfilter.so.18.00 (0x00007fe18d200000) libevenness.so.18.00 => /opt/rsoft/lib/libevenness.so.18.00 (0x00007fe18ce00000) liblprofile.so.18.00 => /opt/rsoft/lib/liblprofile.so.18.00 (0x00007fe18ca00000) librutdepth.so.18.00 => /opt/rsoft/lib/librutdepth.so.18.00 (0x00007fe18c600000) libgsl.so.25 => /usr/lib64/libgsl.so.25 (0x00007fe18c000000) libgslcblas.so.0 => /usr/lib64/libgslcblas.so.0 (0x00007fe18bc00000) libtprofile.so.18.00 => /opt/rsoft/lib/libtprofile.so.18.00 (0x00007fe18b800000) libgeometry.so.18.00 => /opt/rsoft/lib/libgeometry.so.18.00 (0x00007fe18b400000) libtexture.so.18.00 => /opt/rsoft/lib/libtexture.so.18.00 (0x00007fe18b000000) libmpd.so.18.00 => /opt/rsoft/lib/libmpd.so.18.00 (0x00007fe18ac00000) librmt.so.18.00 => /opt/rsoft/lib/librmt.so.18.00 (0x00007fe18a800000) libncom.so.18.00 => /opt/rsoft/lib/libncom.so.18.00 (0x00007fe18a400000) librimage.so.18.00 => /opt/rsoft/lib/librimage.so.18.00 (0x00007fe18a000000) librsoft.so.18.00 => /opt/rsoft/lib/librsoft.so.18.00 (0x00007fe189c00000) libusbtc08.so.2 => /opt/rsoft/lib/libusbtc08.so.2 (0x00007fe189800000) libjpeg.so.8 => /usr/lib64/libjpeg.so.8 (0x00007fe189400000) libsndfile.so.1 => /usr/lib64/libsndfile.so.1 (0x00007fe189000000) libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007fe188c00000) libgps.so.29 => /usr/lib64/libgps.so.29 (0x00007fe188800000) libasound.so.2 => /usr/lib64/libasound.so.2 (0x00007fe188400000) libtiff.so.5 => /opt/rsoft/lib/libtiff.so.5 (0x00007fe188000000) libXtst.so.6 => /usr/lib64/libXtst.so.6 (0x00007fe187c00000) libuuid.so.1 => /usr/lib64/libuuid.so.1 (0x00007fe187800000) libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007fe187400000) libXv.so.1 => /usr/lib64/libXv.so.1 (0x00007fe187000000) libpng16.so.16 => /usr/lib64/libpng16.so.16 (0x00007fe186c00000) libz.so.1 => /lib64/libz.so.1 (0x00007fe186800000) libm.so.6 => /lib64/libm.so.6 (0x00007fe186400000) librt.so.1 => /lib64/librt.so.1 (0x00007fe186000000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe185c00000) libtcl8.6.so => /usr/lib64/libtcl8.6.so (0x00007fe185800000) libtk8.6.so => /usr/lib64/libtk8.6.so (0x00007fe185400000) libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007fe185000000) libBLT25.so => /usr/lib64/libBLT25.so (0x00007fe184c00000) libGoSdk.so => /opt/rsoft/lib/libGoSdk.so (0x00007fe184800000) libkApi.so => /opt/rsoft/lib/libkApi.so (0x00007fe184400000) libueye_api.so => /opt/rsoft/lib/libueye_api.so (0x00007fe183600000) libphidget22.so.0 => /opt/rsoft/lib/libphidget22.so.0 (0x00007fe183200000) libVimbaC.so => /opt/rsoft/lib/libVimbaC.so (0x00007fe182e00000) libVimbaImageTransform.so => /opt/rsoft/lib/libVimbaImageTransform.so (0x00007fe182a00000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fe182600000) libpiehid.so.1 => /opt/rsoft/lib/libpiehid.so.1 (0x00007fe182200000) libippcv.so.10 => /opt/rsoft/lib/libippcv.so.10 (0x00007fe181e00000) libippi.so.10 => /opt/rsoft/lib/libippi.so.10 (0x00007fe181a00000) libipps.so.10 => /opt/rsoft/lib/libipps.so.10 (0x00007fe181600000) libippcore.so.10 => /opt/rsoft/lib/libippcore.so.10 (0x00007fe181200000) libippcc.so.10 => /opt/rsoft/lib/libippcc.so.10 (0x00007fe180e00000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fe180a00000) libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007fe180600000) libc.so.6 => /lib64/libc.so.6 (0x00007fe180200000) libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x00007fe17fe00000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fe17fa00000) libzfprofiler.so.18.00 => /opt/rsoft/lib/libzfprofiler.so.18.00 (0x00007fe17f600000) libdpavue.so.18.00 => /opt/rsoft/lib/libdpavue.so.18.00 (0x00007fe17f200000) libaies_nt.so.1.00 => /opt/rsoft/lib/libaies_nt.so.1.00 (0x00007fe17ee00000) libusb-1.0.so.0 => /usr/lib64/libusb-1.0.so.0 (0x00007fe17ea00000) libvorbisenc.so.2 => /usr/lib64/libvorbisenc.so.2 (0x00007fe17e600000) libFLAC.so.8 => /usr/lib64/libFLAC.so.8 (0x00007fe17e200000) libspeex.so.1 => /usr/lib64/libspeex.so.1 (0x00007fe17de00000) libopus.so.0 => /usr/lib64/libopus.so.0 (0x00007fe17da00000) libvorbis.so.0 => /usr/lib64/libvorbis.so.0 (0x00007fe17d600000) libogg.so.0 => /usr/lib64/libogg.so.0 (0x00007fe17d200000) libdbus-1.so.3 => /usr/lib64/libdbus-1.so.3 (0x00007fe17ce00000) libbluetooth.so.3 => /usr/lib64/libbluetooth.so.3 (0x00007fe17ca00000) /lib64/ld-linux-x86-64.so.2 (0x00007fe18ec00000) liblzma.so.5 => /usr/lib64/liblzma.so.5 (0x00007fe17c600000) libjbig.so.0 => /opt/rsoft/lib/libjbig.so.0 (0x00007fe17c200000) libXft.so.2 => /usr/lib64/libXft.so.2 (0x00007fe17be00000) libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00007fe17ba00000) libXss.so.1 => /usr/lib64/libXss.so.1 (0x00007fe17b600000) libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007fe17b200000) libgomp.so.1 => /usr/lib64/libgomp.so.1 (0x00007fe17ae00000) libnghttp2.so.14 => /usr/lib64/libnghttp2.so.14 (0x00007fe17aa00000) libidn2.so.0 => /usr/lib64/libidn2.so.0 (0x00007fe17a600000) libssh.so.4 => /usr/lib64/libssh.so.4 (0x00007fe17a200000) libpsl.so.5 => /usr/lib64/libpsl.so.5 (0x00007fe179e00000) libssl.so.1.1 => /usr/lib64/libssl.so.1.1 (0x00007fe179a00000) libcrypto.so.1.1 => /usr/lib64/libcrypto.so.1.1 (0x00007fe179400000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007fe179000000) libldap_r-2.4.so.2 => /usr/lib64/libldap_r-2.4.so.2 (0x00007fe178c00000) liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x00007fe178800000) libiam.so.1.00 => /opt/rsoft/lib/libiam.so.1.00 (0x00007fe178400000) libaies.so.1.00 => /opt/rsoft/lib/libaies.so.1.00 (0x00007fe178000000) libudev.so.1 => /usr/lib64/libudev.so.1 (0x00007fe177c00000) libsystemd.so.0 => /usr/lib64/libsystemd.so.0 (0x00007fe177800000) libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007fe177400000) libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x00007fe177000000) libexpat.so.1 => /usr/lib64/libexpat.so.1 (0x00007fe176c00000) libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007fe176800000) libunistring.so.2 => /usr/lib64/libunistring.so.2 (0x00007fe176400000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007fe176000000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007fe175c00000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fe175800000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007fe175400000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe175000000) libsasl2.so.3 => /usr/lib64/libsasl2.so.3 (0x00007fe174c00000) libopencv_core.so.3.4 => /usr/lib64/libopencv_core.so.3.4 (0x00007fe174600000) libopencv_imgproc.so.3.4 => /usr/lib64/libopencv_imgproc.so.3.4 (0x00007fe173e00000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fe173a00000) libzstd.so.1 => /usr/lib64/libzstd.so.1 (0x00007fe173600000) liblz4.so.1 => /usr/lib64/liblz4.so.1 (0x00007fe173200000) libcap.so.2 => /usr/lib64/libcap.so.2 (0x00007fe172e00000) libgcrypt.so.20 => /usr/lib64/libgcrypt.so.20 (0x00007fe172a00000) libbz2.so.1 => /usr/lib64/libbz2.so.1 (0x00007fe172600000) libkeyutils.so.1 => /usr/lib64/libkeyutils.so.1 (0x00007fe172200000) libGL.so.1 => /usr/lib64/libGL.so.1 (0x00007fe171e00000) libopenblas_pthreads.so.0 => /usr/lib64/libopenblas_pthreads.so.0 (0x00007fe16fe00000) libtbb.so.2 => /usr/lib64/libtbb.so.2 (0x00007fe16fa00000) libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007fe16f600000) libgpg-error.so.0 => /usr/lib64/libgpg-error.so.0 (0x00007fe16f200000) libGLX.so.0 => /usr/lib64/libGLX.so.0 (0x00007fe16ee00000) libGLdispatch.so.0 => /usr/lib64/libGLdispatch.so.0 (0x00007fe16ea00000) libgfortran.so.4 => /usr/lib64/libgfortran.so.4 (0x00007fe16e600000) libquadmath.so.0 => /usr/lib64/libquadmath.so.0 (0x00007fe16e200000) This is not unusual. When building the application on openSUSE, the various libs are installed in such a way that they pretty much work together, Of course if one uses obscure repos, this might break. But when using the standard ones, this usually works. In a flatpack scenario, the libs do not need to play together between flatpacks. That's one of the reasons for having flatpacks. They are self contained and as such can more easily be consistent. All well and good for application users. But what about developers? Presumably the current RPM method of delivering libs/SDKs must continue. When I make an application, I would guess it would use the RPM-delivered libs installed on the system. But the idea of using flatpacks to deliver apps is that each disto need not develop them in local RPMs. Where do the SDK RPMs that all work together come from? I do not think they can be lifted form flatlṕacks. The required SDKs an application uses can easily be spread across flatpacks. With there no longer being a requirement that they work together, expecting to pick bits from the flatpacks that might contain them is futile. An example package that provides apps and an SDK that should work together is proj. And an example of an app that uses proj is qgis. In a flatpack world, these apps would arrive in their own flatpack, each with their own version of libproj. Now I want to make an application that uses libprog and, say, libqgis. Where do I get the libproj? If in the flatpack, how can I know it is compatible with the one in the qgis flatpack? Add a third library and the possibility for incompatibility increases. So, some way other than the flatpack approach. So maybe all libraries will need to continue to be made as they are now, even if they will most likely not be used by any flatpack. Maybe maintaining the RPMs for libraries is more manageable than also maintaining application level RPMS? Probably. Is that how it might go?
Leslie -- Platform: Linux Distribution: openSUSE Leap 15.4 (x86_64)
-- Roger Oberholtzer