This is an idea for defining an PLaneT-like software repository for scheme48.


Desired Features

How would it look?

This UI mockup should give a rough impression how the system could look&feel:

> ,load-system prometheus
* Available bundles containing prometheus: prometheus-0.1 (0.1), prometheus-0.2 (0.2), prometheus-0.3 (0.3); applicable: 0.2, 0.3; choosing 0.3 (prometheus-0.3)
* Loading dependencies: spells-0.2
* spells-0.2 not yet installed, fetching from http://universe.s48.org/unstable/spells-0.2.tar.gz... installing... ok
* spells-0.2 loaded
* prometheus-0.3 loaded
> ,open prometheus
> (define foo (*the-root-object* 'clone))
> ...


ATM, what I have in mind is heavily inspired by the Debian packaging system, except that multiple versions of a system would be parallel-installable --- I currently have an embryonic system working, dubbed scheme42, which allows one to drop a directory with a sys-def.scm file (= a bundle) into some path, and then load the systems contained in the bundle via ,LOAD-SYSTEM. For illustration: I have this in my ~/.scheme42.scm:

 (world-append "/home/andy/.s48-world"  
   (experimental "http://http://rotty-ipv4.yi.org/~rotty/s42/bundles/")) 

This will make all bundles inside "/home/andy/.s48-world" known as installed. Hence, when I startup scheme42, I can ,LOAD-SYSTEMS already installed there.

The system database can printed with ,LIST-SYSTEMS:

> ,list-systems
  version: (0 1 0)
  path: /home/rotty/src/contrib/s42/scheme/universe
  state: installed
  dependencies: (spenet)
  config-files: (packages)
  post-load: ((load-package 'local-universe) (load-package 'http-universe))

  version: (0 1 0)
  path: /home/rotty/src/contrib/s42/spenet
  state: installed
  dependencies: (spells)
  config-files: ((scheme packages))

  version: (0 1)
  path: /home/rotty/src/contrib/s42/spells
  state: installed
  config-files: (interfaces s48-packages)
  spedl-files: (interfaces packages)

The UNIVERSE system, if loaded, will add support for web downloading from the URL(s) specified in ~/.scheme42.scm. ,UPDATE-WORLDS will update the information about the bundles available at the various locations; you have to run it only once-in-a-while when bundles are removed or added to the bundle repository at the server. Also, when the UNIVERSE system is loaded, ,LOAD-SYSTEM will fetch and install packages from the web when needed.


I've seen an abstract about a system called October, but I haven't located much other information. Check this out:

The Architecture of a World-Wide Distributed Repository to Support Fine-Grained Sharing of Source Code

Jeffrey M. Siskind, Purdue University


Also you should be aware of Michel Schinz's packaging system, which is already in use for some Scheme48 packages:



Thanks very much for the remarks. The October abstract sounds indeed interesting; please keep me updated when you find out more about it.

I am aware of the scsh packaging proposal, and will incorporate ideas from it. I did not build upon it since scsh-install-lib is intended for scsh, with its load-path mechanism. Such a load-path mechanism doesn't exist in s48, hence I needed to build something to provide the necessary runtime support for s48 anyway; why not go the full way and include downloading and installation support directly at the REPL?