Skip to content
Rexx Language Association edited this page Feb 7, 2022 · 2 revisions

The design

Design principles

  1. There are tasks/package specifications for every package for ISA, OS and version. These are executable (with Rexx, of course). We can call the specs and the packages ‘packages’.
  2. These packages have releases and they are all in a git repo.
  3. There are specifications of dependencies, which are also versioned.
  4. The package manager can install Rexx implementations (brexx, crexx, Regina, ooRexx, bsf4ooRexx) as well as application packages, with or without source.
  5. The default and minimal operation is to download a zip, decompress it and suggest path settings corresponding to the platform.
  6. It should tell the user what it is doing and ask for permission (of the user) on every step; the permissions can be waived with a switch like -y (like the others do it). An action should be atomic and have rollback, so it works in a temp directory and do an atomic rename/rollback.
  7. It must always be possible to remove the package manager and start again.
  8. It must always be possible to remove a package and try again, for example if the atomicity failed due to network or other trouble
  9. We try to be thrifty with other people’s bandwith. So we cache packages or execute in place. Use aliases as much as possible. Have a 'clean' command for disk.
  10. Most of the infra (git, comms, zip) needs to be built into the tools, to counter OS dependencies
  11. There needs to be some rate limiting built in because of lunatics.

Clone this wiki locally