DeepFactor intercepts libc (C Standard Library) functions in your running application. Two popular implementations of libc are glibc and musl libc. glibc is used in most linux distributions such as Ubuntu, CentOS, SUSE etc, where Alpine base images use musl libc.
You can read about musl libc and the differences between the two implementations in the following articles
Based on the container image OS distribution, DeepFactor injects the right interception code compatible with glibc or musl into your container. Glibc and musl require a different version of the DeepFactor interception library. However, there are scenarios where your container may have both glibc and musl implementations of libc.
Example: You are launching a java spring boot application in your alpine container using a script. In this case, the shell will use the musl libc present on the OS, but java spring boot application uses glibc which is packaged along with the application.
In order to address such scenarios, we have built in an auto detection mechanism. Auto detection can be turned off by using the following instructions
Non-containerized and Docker workloads
Add the --multilibc "false" option in the dfctl run command
Add the annotation df.k8-app.multilibc: "false" in your pod spec
For containerized workloads, if the libc required by the entrypoint does not match the OS distribution libc then it can be specified with the following instructions
Add the --entrypoint-libc "glibc" or "musl" option in the dfctl run command
Add the annotation df.k8-app.entrypoint.libc: "glibc" or "musl" in your pod spec
 - There are java-glibc and java-musl openjdk apk packages for alpine. A java-musl openjdk in alpine does not require enabling DeepFactor automatic multilibc support.