DeepFactor intercepts libc (C Standard Library) methods in your running application. The two most 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, 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 within the application itself.
In order to address such scenarios, we have built an auto detection mechanism which can be turned on by using the following instructions
Non-containerized and Docker workloads
Add the --multilibc "auto" option in the dfctl run command
Add the annotation df.k8-app.multilibc: "auto" 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.