Docs / vx

vx

vx is a BSD-oriented multicall utility for Linux. It bundles a growing set of FreeBSD-derived userland tools into a single binary and dispatches them either by subcommand or by the program name used to invoke the binary.

Note

This page is based on the current README and multicall entrypoint. The applet list and invocation model described here match the tools currently registered in vx.

Invocation model

vx works in two modes. When called directly as vx, the first argument is treated as the applet name. When called through a symlink such as grep or patch, the program dispatches based on argv[0].

vx grep pattern file
vx find . -name '*.c'
vx patch -p1 < change.diff

Equivalent symlink-style invocation looks like this:

grep pattern file
find . -name '*.c'
patch -p1 < change.diff
Tip

If vx is run without an applet name, it prints usage and the list of currently available applets.

Included applets

The current multicall table registers the following applets:

Category Applets
Patching and diffs patch, diff, cmp, diff3, sdiff
Searching and traversal grep, egrep, fgrep, rgrep, find, xargs, which
Compression gzip, gunzip, zcat, gzcat, uncompress

In practice, this means a single installed binary can stand in for a broad slice of everyday userland tools while still exposing the traditional command names.

Build and test

vx uses Meson as its build system. A normal workflow is to configure, compile, and test from a build directory.

meson setup builddir
meson compile -C builddir
meson test -C builddir

The repository also includes shell-based tests for the multicall applets, including dedicated coverage for tools such as diff, grep, find, xargs, gzip, patch, and related diff utilities.

Behavior notes

The project is intentionally BSD-flavored. It brings FreeBSD-derived userland code to Linux and uses compatibility shims so those sources can build and run in a Linux environment.

  • Behavior may differ from GNU tools in places where BSD semantics are intentional.
  • The multicall dispatcher maps several traditional names onto the same implementation, such as gzip, gunzip, zcat, and uncompress.
  • The same dispatcher pattern is used for the grep family: grep, egrep, fgrep, and rgrep.
  • The project ships man pages and test coverage for multiple bundled applets, not just the multicall wrapper itself.
Warning

Because the toolset is BSD-oriented, command-line details may not always match GNU userland exactly. Scripts that assume GNU-specific behavior should be checked against the corresponding VX applet before relying on them.

See also