Older versions of Android (up to at least Android 7) were able to run unmodified Linux binaries, as long as they were built for the correct architecture and did not have any unmet dependencies.
On recent versions of Android, certain system calls (some of which are used by GNU libc) are not allowed by seccomp policy on Android. If a binary attempts one of these system calls, it will get killed instantly.
The standard approach is to build an Android-compatible binary on an Android toolchain. That may work well for widely used programming languages, but is not an option if the source code was written in an exotic language for which no Android toolchain is available.
There is a tool called proot out there, which will execute a given binary and hook the offending system calls. This would allow running an unmodified Linux binary by executing proot [<options>] some_linux_binary [<some_linux_binary_options>]. But this tool has to be made available at run-time and shipped with each app that includes a Linux binary.
Is there any way to rewrite a Linux binary, replacing the offending system calls with whatever proot does when hooking that call, so it will run on Android?