# Software debloating tools

URL: https://www.cesarsotovalero.net/software-debloating-tools
Author: César Soto Valero
Summary: A living list of tools for program debloating and software specialization.

This is a living list of tools for program debloating and software specialization.

# Java

- [<i class="fab fa-github"></i>](https://bit.ly/2WFALXf) [Slicer4J](https://github.com/resess/Slicer4J) an accurate, low-overhead dynamic slicer for Java programs ([paper](https://people.ece.ubc.ca/mjulia/publications/Slicer4J_2021.pdf)).

- [<i class="fab fa-github"></i>](https://bit.ly/2WFALXf) [BloatLibD](https://bit.ly/2WFALXfl) detects offuscated third-party libraries that are bloated using a Jar2vect model ([paper](https://www.scitepress.org/Papers/2021/104594/104594.pdf)).

- [<i class="fab fa-github"></i>](https://github.com/castor-software/jdbl) [JDBL](https://castor-software.github.io/jdbl) automatically removes unnecessary code from Java applications through dynamic analysis ([paper](https://arxiv.org/pdf/2008.08401.pdf)).

- [<i class="fab fa-github"></i>](https://github.com/castor-software/depclean) [DepClean](https://github.com/castor-software/depclean) automatically detects and removes unused dependencies in Maven projects ([paper](https://link.springer.com/article/10.1007/s10664-020-09914-8)).

- [<i class="fab fa-github"></i>](https://github.com/ucla-pls/jreduce) [JReduce](https://github.com/ucla-pls/jreduce) is a tool for reducing Java class files and jar files. ([paper](https://dl.acm.org/doi/pdf/10.1145/3338906.3338956)).

- [<i class="fab fa-github"></i>](https://github.com/apache/maven-jlink-plugin) [jlink](https://www.baeldung.com/jlink) is a tool to assemble and optimize a set of Java modules and their dependencies into a custom runtime image.

- [<i class="fab fa-github"></i>](https://github.com/Guardsquare/proguard) [Proguard](https://www.guardsquare.com/en/products/proguard) is a shrinker, optimizer and obfuscator of Java bytecode.

- [<i class="fab fa-github"></i>](https://github.com/uber/piranha) [Piranha](https://github.com/uber/piranha) is a tool for refactoring code related to feature flag APIs  ([paper](https://dl.acm.org/doi/abs/10.1145/3377813.3381350)).

- [JShrink](https://figshare.com/articles/software/JShrink_Artifact/12435542) is a Java shrinker ([paper](https://dl.acm.org/doi/pdf/10.1145/3368089.3409738)).

- [JShrink](http://www.e-t.com/jshrink) is a Java shrinker and obfuscator.

# Docker

- [<i class="fab fa-github"></i>](https://github.com/docker-slim/docker-slim) [docker-slim](https://dockersl.im/) a tool to minify and secure docker containers.

- [<i class="fab fa-github"></i>](https://github.com/jon-bell/javaslicer) [JavaSlicer](https://github.com/jon-bell/javaslicer) is an open-source dynamic slicing tool developed at Saarland University.

# C/C++

- [<i class="fab fa-github"></i>](https://github.com/cxreet/razor) [RAZOR](https://github.com/cxreet/razor) is a framework for post-deployment software debloating ([paper](https://www.usenix.org/system/files/sec19-qian.pdf)).

- [<i class="fab fa-github"></i>](https://github.com/cxreet/Slimium) [Slimium](https://github.com/cxreet/Slimium) is a tool to debloat Chromium ([paper](https://dl.acm.org/doi/pdf/10.1145/3372297.3417866)).

- [Nibbler](https://gitlab.com/brown-ssl/libfilter) is a tatic analysis tool to automatically find functions in the program and its shared library functions that are not used by the program. ([paper](https://dl.acm.org/doi/pdf/10.1145/3414997)).

# JavaScript

- [<i class="fab fa-github"></i>](https://github.com/moar82/jMetalPy) [MoMIT](https://github.com/moar82/jMetalPy) is a JavaScript interpreter minimizer ([paper](https://ieeexplore.ieee.org/document/8966499)).

- [<i class="fab fa-github"></i>](https://github.com/hcvazquez/UFFRemover) [UFFRemover](https://github.com/hcvazquez/UFFRemover) is a slimming JavaScript tool for identifying and removing unused foreign functions (UFF) ([paper](https://www.sciencedirect.com/science/article/abs/pii/S0950584918302210)).

- [<i class="fab fa-github"></i>](https://r8.googlesource.com/r8) [R8](https://r8.googlesource.com/r8) is the Google substitute of Proguard.

- [<i class="fab fa-github"></i>](https://github.com/tedious/JShrink) [JShrink](https://github.com/tedious/JShrink) is a Javascript minifier built in PHP.

# Related tools

- [<i class="fab fa-github"></i>](https://github.com/iovisor/bpftrace) [bpftrace](https://github.com/iovisor/bpftrace) High-level tracing language for Linux eBPF.

- [<i class="fab fa-github"></i>](https://github.com/strace/strace) [STrace](https://strace.io/)  A diagnostic, debugging and instructional userspace utility for Linux.

- [<i class="fab fa-github"></i>](https://github.com/dkarv/jdcallgraph) [JDCallgraph](https://github.com/dkarv/jdcallgraph) Dynamic call graph generation for Java.

- [<i class="fab fa-github"></i>](https://github.com/jenkinsci/constant-pool-scanner) [constant-pool-scanner](https://github.com/jenkinsci/constant-pool-scanner) Simple utility to scan Java bytecode for class references in the constant pool.

- [<i class="fab fa-github"></i>](https://github.com/gousiosg/java-callgraph) [java-callgraph](https://github.com/gousiosg/java-callgraph) Programs for producing static and dynamic (runtime) call graphs for Java programs.

- [<i class="fab fa-github"></i>](https://github.com/axt/jvm-callgraph) [jvm-callgraph](https://github.com/axt/jvm-callgraph) Call graph generator for JVM bytecode.

- [<i class="fab fa-github"></i>](https://github.com/aragozin/jvm-tools) [jvm-tools](https://github.com/aragozin/jvm-tools) Small set of tools for JVM troublshooting, monitoring and profiling.

- [<i class="fab fa-github"></i>](https://github.com/jon-bell/bytecode-examples) [bytecode-examples](https://github.com/jon-bell/bytecode-examples) Java Bytecode Engineering Examples & Tutorials.

- [<i class="fab fa-github"></i>](https://github.com/jon-bell/maven-lifecycle-logger) [maven-lifecycle-logger](https://github.com/jon-bell/maven-lifecycle-logger) Logger to record maven lifecycle events and timing.

- [<i class="fab fa-github"></i>](https://github.com/mihaip/dex-method-counts) [dex-method-counts](https://github.com/mihaip/dex-method-counts) Command-line tool to count per-package methods in Android .dex files.

- [DTrace](http://dtrace.org/guide/preface.html#preface) A comprehensive dynamic tracing framework
