We build all the tools into a single virt-mem executable, in order to share the most runtime. Almost all the code between individual tools is shared anyway. lib/ - The common core of all the tools. Library, kernel symbols, command line handling, memory images, etc. lib/virt_mem.ml contains most of the important code. uname/ dmesg/ etc. - The code specific to each tool, usually rather small. mem/ - This brings everything together and links it into a single executable. Other than that purpose, there is almost nothing in this directory.