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.
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
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, anduncompress. - The same dispatcher pattern is used for the grep family:
grep,egrep,fgrep, andrgrep. - The project ships man pages and test coverage for multiple bundled applets, not just the multicall wrapper itself.
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.