Re: [dev] [sbase] Defining scope of sbase and ubase

From: Elie Le Vaillant <eolien55_AT_disroot.org>
Date: Fri, 08 Mar 2024 11:36:27 +0100

Hi,

I think one of the main current issues with the current
organization of sbase's and ubase's code, is that while
they share parts of code (some parts of libutil are shared),
they do not actually have it in common. As a result, changes
to shared parts of libutil in sbase are not reflected in ubase,
and vice-versa.

Some parts of ubase's libutil are not portable, so indeed it
makes sense that they are ubase-specific. But some, such as
recurse, strtonum, strl*, ealloc, eprinf, and maybe others,
serve the same exact function as in sbase, but sometimes
vary in implementation, because they didn't receive the same
patches.

So I wonder:
- Is this a problem that needs fixing? (I think yes)
- How do we fix it?

We could sync both periodically, applying whichever patch change
both *base's libutil to both.

Another idea could be to have both in the same git repository,
allowing libutil (and possibily more code, like libutf if we
ever need to) to be shared between them both without syncing
them back and forth. My idea would be something like this:

sbase/
  portable/
    ls.c
    cols.c
    ...
  unportable/
    ps.c
    kill.c
    ...
  libutf
  libutil/
    portable
    unportable
  Makefile

This could fix the "multiple -box" problems. This would require
rewriting some parts of the Makefile (for example, having PORTABLEBIN
and UNPORTABLEBIN to select whether or not we want the unportable
utilities; the mkbox script also), and could also provide a solution for
the "moretools" repo by having it being a separate directory in this
hypothetical repository.

Also I'm not sure whether we should keep the goal of being POSIX-compliant.
ls doesn't columnate, we have (non-standard) cols to do this. sed doesn't
have the -i flag, we have sponge for this. cron isn't specified by POSIX,
only crontab is. Maybe toybox roadmap's section on POSIX is relevant:
https://landley.net/toybox/roadmap.html

I think we should try and implement a minimal Unix-like userspace,
and allow ourselves some freedom on what to implement. We already
do this with sponge and cols. On ubase it is true also, with ctrlaltdel
for example. I do not see why not do it more.

Overall I think bringing everything in the same repository, with
what is now sbase and ubase in separate directories rather than
separate repositories, would fix both the current situation, and
allow for a "sextra"/"uextra" directory for supplementary tools.

Mattias Andrée already proposed this back when he proposed a patch
for shuf(1):
> No, we don't really need shuf(1) in sbase, but I think we
> should have a suckless implementation available, it can be
> a useful utility. I have a few more utilities I fund useful
> but I haven't bothered to set up a repository yet. [...]
> I think it might be a good idea to have sextra for portable
> utilities and uextra for unportable utilities, if you have
> any other suggestions I would like to hear them.

I think this could fix the current situation, with code on
different versions split between 2 repositories and ultimately
2 -box binaries, and allow a broader scope without impeding the
goals of minimalness of sbase/ubase.

Regards,
Elie Le Vaillant
Received on Fri Mar 08 2024 - 11:36:27 CET

This archive was generated by hypermail 2.3.0 : Fri Mar 08 2024 - 11:48:09 CET