Currently, if I modify a library or server to fix a bug or add a feature, I can't get other packages to use the updated version without modifying them also. This leads to two problems: 1. unnecessary installation of multiple versions of the same package (unnecessary downloading and disk usage) 2. awkwardness with applying modifications globally
For example, if I fix an issue in libc, that fix cannot be cleanly applied to all packages that use libc. It is possible to iterate through all packages that depend on REPO/src/libc/VERSION and modify the version information for each one, but this is awkward and doesn't scale well. To make matters worse, this would have to be (partially) repeated each time a package is downloaded.
A potential piece of a solution would be to allow packages to specify the oldest version they are backward-compatible with, e.g. let libc/2018-06-05 specify that it is compatible with libc >= 2018-05-28.
For more flexibility, we could also allow packages to specify multiple dependency options, e.g. let noux-system depend on bash or bash-minimal.
Also, we need some mechanism to allow cross-repo substitutions, e.g. let blarson/src/libc replace genodelabs/src/libc, or vice versa. For security reasons, there should be restrictions on which repos are allowed for substitutions, so untrusted/src/libc cannot replace genodelabs/src/libc.
Any other thoughts or suggestions?