Limitations

What frameworks/languages does mirrord support? #

mirrord works by hooking libc, so it should work with any language/framework that uses libc (vast majority).

This includes: Rust, Node, Python, Java, Kotlin, Ruby, and others (most languages use libc).

mirrord also supports for Go, which doesn’t use libc

Does mirrord support clusters with a service mesh like Istio or Linkerd? #

Yes. (there is a known issue with istio proxy in “ambient” mode)

Does mirrord support OpenShift? #

Yes, mirrord works with OpenShift. However, OpenShift usually ships with a default security policy that doesn’t let mirrord create pods. To fix this, you would need to tweak your scc settings - more information here. If you’d rather keep the default security policies, we recommend trying out mirrord for Teams. See this question for more info.

Does mirrord support binaries that are statically compiled? (Linux) #

No, mirrord needs to be able to leverage dynamic linking in order to work. This means static binaries are not supported.

To check a binary, you can use the file <FILE_NAME> command - dynamically linked binaries will look like this:

marvin@heart-of-gold:~$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=36b86f957a1be53733633d184c3a3354f3fc7b12, for GNU/Linux 3.2.0, stripped

And static binaries will look like this:

marvin@heart-of-gold:~/MetalBear$ file some_static_binary 
some_static_binary: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=2e1eda62d5f755377435c009e856cd7b9836734e, for GNU/Linux 3.2.0, not stripped

Sometimes Go is statically compiled by default, so it’s important to check and compile dynamically if necessary. See this section in Common Issues for more info.