summaryrefslogtreecommitdiff
path: root/doc/execline.html
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2023-02-05 23:32:05 +0000
committerLaurent Bercot <ska@appnovation.com>2023-02-05 23:32:05 +0000
commit9c2bebec16aafefb9067c1db83ef3c765e13610b (patch)
tree35d516abd5d3aeb089a8c2b0bc99532bb1ce6a30 /doc/execline.html
parent4676457df2c8a73b4f589a66315b9b137ee89202 (diff)
downloadexecline-9c2bebec16aafefb9067c1db83ef3c765e13610b.tar.xz
Document execline and multicall
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'doc/execline.html')
-rw-r--r--doc/execline.html99
1 files changed, 99 insertions, 0 deletions
diff --git a/doc/execline.html b/doc/execline.html
new file mode 100644
index 0000000..776ccd0
--- /dev/null
+++ b/doc/execline.html
@@ -0,0 +1,99 @@
+<html>
+ <head>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <title>execline: the execline program</title>
+ <meta name="Description" content="execline: the execline program" />
+ <meta name="Keywords" content="execline command multicall" />
+ <!-- <link rel="stylesheet" type="text/css" href="//skarnet.org/default.css" /> -->
+ </head>
+<body>
+
+<p>
+<a href="index.html">execline</a><br />
+<a href="//skarnet.org/software/">Software</a><br />
+<a href="//skarnet.org/">skarnet.org</a>
+</p>
+
+<h1> The <tt>execline</tt> program </h1>
+
+<p>
+The <tt>execline</tt> program is only available when the
+<tt>--enable-multicall</tt> option has been given to the <tt>configure</tt>
+program at build time. In this configuration, <tt>execline</tt> is
+a multicall binary implementing the functionality of <em>all</em>
+the programs in the execline package; and the other programs, instead
+of being executables of their own, are symbolic links to the
+execline binary.
+</p>
+
+<h2> Interface </h2>
+
+<pre>
+ execline <em>subcommand</em> <em>subcommand_arguments...</em>
+</pre>
+
+<p>
+ execline will run the <em>subcommand</em> will its arguments. For
+instance, <tt>execline cd / ls</tt> will run the equivalent of the
+<a href="cd.html">program</a>, so this command will list the contents
+of the <tt>/</tt> directory.
+</p>
+
+<p>
+ Alternatively, if execline is called with the name of an existing
+command, it will run the equivalent of that command. For instance,
+if the <tt>/usr/bin/cd</tt> file is a (hard or symbolic) link to
+the <tt>execline</tt> binary, <tt>/usr/bin/cd / ls</tt> will list
+the contents of the <tt>/</tt> directory.
+</p>
+
+<h2> Notes on the multicall configuration </h2>
+
+<p>
+ The <tt>--enable-multicall</tt> option is a user-requested feature
+to save disk space. Its goal is purely to save disk space;
+functionality-wise, the execline package should be the exact same
+whether it has been built with <tt>--enable-multicall</tt> or not.
+That means: any execline script should work the exact same way.
+</p>
+
+<p>
+ Multicall binaries have a number of issues, most of them hidden
+from regular users. One user-visible issue is that their behaviour
+changes depending on how they are called, which is not good
+practice (it breaks naming agnosticism) despite being common in
+traditional Unix. Other, more important issues are only visible
+to software authors and maintainers: for instance, they make it
+difficult to add functionality to a software package without
+inadvertently blowing up the amount of RAM used by the software,
+and they encourage bad engineering practices to work around
+specific problems created by this configuration.
+</p>
+
+<p>
+ I am not a fan of multicall binaries at all.
+</p>
+
+<p>
+ However, it just so happens that the execline package already was
+a good candidate for a multicall configuration, and several users
+had been asking for it (and complaining about the amount of disk
+space that the traditional execline package uses). So I did an
+experiment, and it turned out that a multicall execline binary
+does save a <strong>huge</strong> amount of space. Depending on
+your shared/static library configuration and your libc, the gain
+in disk space on Linux can range from 66% to 87%! The results were
+contrary to my expectations &mdash; and simply too good to pass up.
+</p>
+
+<p>
+ So now, the multicall configuration is supported for execline.
+Do not expect anything similar for the rest of the skarnet.org
+packages, because they're not as good candidates and it would
+require a tremendous amount of work for less benefit.
+</p>
+
+</body>
+</html>