There have been a lot of good ideas presented on this topic, and I agree with most of them. I'd like to lay out a few ideas, some of which restate things that have already been said, but which I hope can help to flesh out a vision of what we're trying to accomplish.

1. Installing a library (and its dependencies) should be as `no-brain' as possible, even if that limits the power of the library manager. Ideally it should be something like

  schemelib --install munglib --atleast 8.02

to install version 8.02 or better of munglib, along with its dependencies (and this should be in a GUI version as well).

I'm not saying that there should be a way to trick the library manager into doing the obvious thing, just that it should happen automatically.

Similarly, local library directories should be managed in an appropriate way, considering that many Schemers would want personal libraries, rather than system-wide ones. Ideally, the library manager should allow users to forget about manipulating environment variables completely.

A user should have to read not more than one screenful of text to get far enough to set up a local library directory (that works with Ikarus and/or other Schemes) and start installing libraries. (The library manager might well require a 100-page manual for full use; I just want this use case to be simple and straightforward.)

2. The library manager should be bundled with the Scheme system, so that users don't have to do anything to get it going. The bundle should include programs such as wget, curl, bazaar, and/or git, whatever is needed to make everything work.

3. While I am not a great fan of Microsoft, getting things running on Windows is always a good thing; I even think native Windows Ikarus would be a good thing :-). To this end, there's no reason why one should use Unix-specific things when a more generic approach is almost as good. For example, zip doesn't compress as much as gzip or bzip2, but it's almost as good. Similarly, symbolic links don't work on Windows, so we can live without them.

4. Versioning seems to be a horrible issue everywhere I've worked. The main problem is that if you get too specific, then you are basically defining a software process, but if you get too vague, then the numbers become meaningless. I would suggest a somewhat simple versioning scheme that people can understand and apply, rather that (a) a very complex system, or (b) something that defines only the syntax but not the semantics of version numbers.

5. Documentation is not optional. Some relatively simple documentation strategy ought to be part of the package definition, so that a user can do
  schemelib --viewdoc munglib
to see the documentation on this library. HTML is a fine standard for documentation here.

6. The packaging job should be simple rather than complex. I would go for a format where the top level of a package contains the metadata and documentation, and then there's a directory containing the actual library files. Thus for munglib, the top level has README, COPYING, MANIFEST, and DOCUMENTATION.html, and then there's a munglib directory that contains the actual Scheme code.

7. Having multiple back ends sounds nice in principle (and the Launchpad versus GitHub arguments can be a lot of fun :-), but think of the version skew when a library maintainer decides to move the authoritative version of something from one repository to another. Things like CPAN and CTAN work because everything is mirrored. Failing that, I can easily see users becoming hopelessly confused about where to get a specific package. I would prefer to keep that part as simple as possible.

I'd ideally like to see a library manager that works essentially unchanged (though there might be system-specific code) on as many R6RS systems as possible.

Where do we go from here?

-- v




Reply via email to