AppImage / AppImage/AppImageKit

Investigate auditwheel and manylinux to produce, bundle, and audit cross-distro binaries

Open
#987 2 comments 1 reaction 0 assignees View on GitHub
Dominant language
No language data
Stars
9.4k
Forks
588
PR merge metrics
PR metrics pending

Description

@lkollar suggested in https://github.com/NixOS/patchelf/issues/174#issuecomment-520609300 to check out [LIEF](https://lief.quarkslab.com/doc/latest/Intro.html) to replace `patchelf`and linked to https://github.com/pypa/auditwheel.

`auditwheel` is a Python tool for "Auditing and relabeling cross-distribution Linux wheels". What does this mean?

> `auditwheel show`: shows external shared libraries that the wheel depends on (beyond the libraries included in the manylinux policies), and checks the extension modules for the use of versioned symbols that exceed the manylinux ABI.

Sounds a lot like what we are doing for generic Linux applications (rather than Python modules) with tools like [appimagelint](https://github.com/TheAssassin/appimagelint).

> manylinux ABI

Now, what is the [manylinux](https://github.com/pypa/manylinux) ABI? Sounds a lot like what we are doing for generic Linux applications (rather than Python modules) with 1. mandating that binaries shall be built on systems no newer than the oldest Ubuntu LTS, and 2. mandating that all libraries but those listed at https://github.com/AppImage/pkg2appimage/blob/master/excludelist shall be privately bundled with the application.

Their approach may be better than ours because those platforms are more strictly defined?
* https://www.python.org/dev/peps/pep-0513/
* https://www.python.org/dev/peps/pep-0571/

https://github.com/pypa/manylinux contains Docker images and tools to produce compliant binaries.

> `auditwheel repair`: copies these external shared libraries into the wheel itself, and automatically modifies the appropriate RPATH entries such that these libraries will be picked up at runtime. This accomplishes a similar result as if the libraries had been statically linked without requiring changes to the build system. Packagers are advised that bundling, like static linking, may implicate copyright concerns.

Sounds a lot like what we are doing for generic Linux applications (rather than Python modules) with tools like [linuxdeployqt](https://github.com/probonopd/linuxdeployqt) and [linuxdeploy](https://github.com/linuxdeploy/linuxdeploy).

Like we do, it has been using `patchelf` so far to accomplish this but is now possibly switching to [LIEF](https://lief.quarkslab.com/doc/latest/Intro.html).

Wdyt @TheAssassin @azubieta @lkollar, all?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.