Scheme package management Lassi Kortela 25 Apr 2021 15:03 UTC

>     It is not so much a “package manager” that is needed but rather the
>     specification of a “package structure” that all of the libraries
>     would need to follow (e.g. a git repository would need such and such
>     a file and subdirectory in such and such a place of the main
>     directory).  Then each Scheme implementation can extend their
>     current package manager to install these libraries.

+1

>     Of course a
>     generic package manager could be written for the Scheme
>     implementations that don’t have a builtin package manager.

https://akkuscm.org/ supports 13 implementations

>     Also the syntax for the library names would need to be reserved.  I
>     have advocated a syntax that uses the URL as part of the name, e.g.
>     (github.com/feeley/digest) or
>     (github.com/feeley digest), so that the
>     package manager can operate without a central registry of libraries,
>
> I would make a difference between package names and library names. In
> general, we are not interested in finding single libraries but packages
> (that include meta-information and know about dependencies). It is the
> packages that need to be found automatically. So it makes sense to
> "name" packages through a URI, but libraries can still be named, as
> usual, e.g. `(srfi 999)` or `(scheme box)` or `(nieper bubblesort)`.

A package is conceptually equivalent to a git repository in that it's a
collection of libraries. Of course, a library collection could also be
stored in a subdirectory of a git repo, not necessarily in the root dir.

Nested collections would be an abstraction that covers any mixture of
version control repos and directory layouts.

> The package for my bubblesort would be "named"
> <gitlab.com/nieper/bubblesort <http://gitlab.com/nieper/bubblesort>>. It
> would contain a manifest like
>
> (package
>    (author "Marc Nieper-Wißkirchen")
>    (license GPL-v3)
>    ..
>    (defines (nieper bubblesort))
>    (cond-expand
>      ((gambit)
>       (requires "gitlab.com/r7rs/box <http://gitlab.com/r7rs/box>"))
>      ...))
>    ...)
>
> As a package author, I know that the "gitlab.com/r7rs/box
> <http://gitlab.com/r7rs/box>" package provides `(scheme box)`.

https://github.com/pre-srfi/scheme-metadata-files has preliminary work
on surveying existing formats like this and distilling a generic format.
If there's agreement that this kind of direction is useful (I do agree
that it is), we should figure out where to do the design and
implementation work.