Re: [dev] [sbase] Defining scope of sbase and ubase
On Fri, 08 Mar 2024 23:33:12 +0100 Eolien55 wrote: > Страхиња Радић wrote: > > The problem of having separate *box executables could be solved by creating > > an > > "umbrella" *box project, perhaps having sbase, ubase and > > [insert_letter]base as > > git submodules, and deciding what to build based on the contents of > > config.mk. > > The problem is that sbase and ubase each include a version of libutil, whith > some > functions which are the same, and some other wich serve the same function but > vary in implementation due to version history. > > git submodules are kinda meh I think for this problem, because it wouldn't > change > the problem of source code duplication (and of versions drifting apart) > between > the 2 projects, as libutil is part of both sbase and ubase trees (not mereley > the > umbrella-box project). > > I believe we should put what are currently sbase and ubsase in a single git > repository, > sharing all that is portably sharable, but still separating utilities that > are portable > from linux-specific ones. > > I think sbase and ubase should try to provide useful, well-implemented, > suckless > utilities. If we want POSIX utilities, let's add them! But I don't think we > should > restrain us from doing that. sbase's sponge and cols is so useful I'm > constantly > using them, even though I normally use busybox. > > Regards, > Elie Le Vaillant > I agree, a single repo (or alternatively making libutil it's own repo) is necessary if we want one binary, and I think we do. Even if submodules was possible, I do not think they are a good solution. Using submodules is unpleasant and pointless since all could is under our control. I think submodules should only be used for code that you do not have control over but need the source code for. Either you have separate repos and have normal compile time dependencies (require that the libraries are installed) or you put everything in one place, one repo. I see the separation of sbase and ubase into two repositories as basically equivalent to the a single repo with a sbase directory and a ubase directory, except better when it comes to tagging new versions, but since there reason to have separate releases for these, it doesn't really make a difference. So simply putting sbase and ubase in two different directories in the same repo, and then put a makefile there to build all of it into one binary would be step up, of course there would be some linkage problems and making them share libutil would be the next step up. Of course, it should be possible to select if you want ubase included in your binary or not, is the point of the separation in the first place. I think there should be one directory called "portable" containing only tools from sbase, and one directory called "linux" containing the tools from ubase and maybe even symlinks to the tools in "portable". This structure would allow us to add implementations for other operating systems as well. If we add symlinks to the tools in "portable" to "linux", each directory could have it's own makefile. But I'm not sure this is preferable over a single Makefile in the root directory. As mentioned in an other branch of this conversation, I think we should have a base with only the POSIX tools but than have additional optional tools, which could be group into overlapping categories, as you can select what you want on your system. Best regards, Mattias Andrée
Re: [dev] [sbase] Defining scope of sbase and ubase
Страхиња Радић wrote: > The problem of having separate *box executables could be solved by creating > an > "umbrella" *box project, perhaps having sbase, ubase and [insert_letter]base > as > git submodules, and deciding what to build based on the contents of config.mk. The problem is that sbase and ubase each include a version of libutil, whith some functions which are the same, and some other wich serve the same function but vary in implementation due to version history. git submodules are kinda meh I think for this problem, because it wouldn't change the problem of source code duplication (and of versions drifting apart) between the 2 projects, as libutil is part of both sbase and ubase trees (not mereley the umbrella-box project). I believe we should put what are currently sbase and ubsase in a single git repository, sharing all that is portably sharable, but still separating utilities that are portable from linux-specific ones. I think sbase and ubase should try to provide useful, well-implemented, suckless utilities. If we want POSIX utilities, let's add them! But I don't think we should restrain us from doing that. sbase's sponge and cols is so useful I'm constantly using them, even though I normally use busybox. Regards, Elie Le Vaillant
Re: [dev] [sbase] Defining scope of sbase and ubase
On 24/03/08 06:40AM, Roberto E. Vargas Caballero wrote: > I would like to move the discussion here and see what alternatives > we have and how to proceed in this case. IMHO, if the intention behind sbase was to provide a minimal portable POSIX utilities implementation, anything not fitting that definition should be moved out of sbase. A separate project, perhaps called [insert_letter]base, could cover the utilities not in POSIX which are common in Unix-like systems. The problem of having separate *box executables could be solved by creating an "umbrella" *box project, perhaps having sbase, ubase and [insert_letter]base as git submodules, and deciding what to build based on the contents of config.mk.
Re: [dev] [sbase] Defining scope of sbase and ubase
I think we should keep the implementation of each tool as minimal as possible, but POSIX-complete, and of course common tools such as install(1) and tar(1). However, actually using a system that is nothing more than POSIX is very cumbersome. And I think it is a better solution to implement non-standard tools when possible to address usability issues, e.g. implementing sponge(1) instead of -i for sed(1). However, if the system isn't actually intended for be used interactively via the command line, e.g. on embedded devices or a service running in a container, there is no for non-standard tools such as sponge(1), and it ought to be easy to select what you want on your system. I suggest that tools be group into a few categories (unless they are organised into separate directories I see no reason one tool couldn't be in multiple categories). These categories could for example: - "posix" for all POSIX tools, - "lsb" for all LSB tools - "users" for account management - "extra" for other common tools - "common" for "posix", "lsb", "users", and "extra" - "interative" for tools that only make since of when a lot via the terminal - "all" for every implemented tool Maybe these should also be subdivided into "portable" and "linux". The user could then specify the tools to include either by setting BIN when running make(1) or by saying "yes" or "no" to each category (of course each category would have a default option), e.g. POSIX=yes INTERACTIVE=no. Best regards, Mattias Andrée On Fri, 08 Mar 2024 11:36:27 +0100 Elie Le Vaillant wrote: > 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 >
Re: [dev] [sbase] Defining scope of sbase and ubase
Elie Le Vaillant wrote: > Another idea could be to have both in the same git repository, > [...] This would be my idea as well. It also wouldn't be that difficult to let people pick and choose which sets of tools to include in the final -box via config.mk or similar. I would stick with only the high-level sets and leave the omission of individual tools up to the "user" (I already do this because I prefer a few tools from OpenBSD even when using Linux). > Also I'm not sure whether we should keep the goal of being POSIX-compliant. I also agree with this. POSIX, like everything designed by committees, is full of bad and/or incomplete ideas. I think that having a set of tools that isn't GNU/spaghetti but still supports some of the good non-POSIX options (for example sponge, xargs -P, working tar, etc.) would be nice to have. - Randy -- https://rnpnr.xyz/ GPG Fingerprint: B8F0 CF4C B6E9 415C 1B27 A8C4 C8D2 F782 86DF 2DC5 signature.asc Description: PGP signature
Re: [dev] [sbase] Defining scope of sbase and ubase
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