Running charles on musl

2025-07-02

charles

You need openjdk 11 for this.

Download Charles, it comes with its own java in folder charles/lib/jdk/bin. We need to replace it with our installed java.

Delete the files and symlink yours:

$ cd charles/lib/jdk/bin
$ rm *
$ ln -s /usr/lib/jvm/openjdk11/bin/jrunscript .
$ ln -s /usr/lib/jvm/openjdk11/bin/keytool .
$ ln -s /usr/lib/jvm/openjdk11/bin/java .

Run charles using charles/bin/charles. It crashes! Explore the java crash log file ~/hs_err_pid<n>.log for the reason:

Dynamic libraries:
c0000000-cf800000 rw-p 00000000 00:00 0 
cf800000-100000000 ---p 00000000 00:00 0 
100000000-100540000 rw-p 00000000 00:00 0 
100540000-140000000 ---p 00000000 00:00 0 
563308c94000-563308c95000 r--p 00000000 fe:02 3045447                    /usr/lib/jvm/openjdk11/bin/java
563308c95000-563308c96000 r-xp 00001000 fe:02 3045447                    /usr/lib/jvm/openjdk11/bin/java
563308c96000-563308c97000 r--p 00002000 fe:02 3045447                    /usr/lib/jvm/openjdk11/bin/java
563308c97000-563308c98000 r--p 00002000 fe:02 3045447                    /usr/lib/jvm/openjdk11/bin/java
563308c98000-563308c99000 rw-p 00003000 fe:02 3045447                    /usr/lib/jvm/openjdk11/bin/java
56333ce36000-56333f7c2000 rw-p 00000000 00:00 0                          [heap]
7f9f85e00000-7f9f86098000 r-xp 00000000 fe:03 14963799                   /home/user/dl/charles/lib/libwebp-imageio.so

We see that charles was packed with libwebp-imageio.so library. I just renamed the file so charles does not use it:

$ mv libwebp-imageio.so libwebp-imageio.so_

Charles now runs!
What happens when it tries to preview webp image? I have not come across one yet, but will let you know when I do.