Features/CommonLispController

= common-lisp-controller support =

Summary
Fedora includes a number of Common Lisp implementations, but is not currently a good choice for developing and deploying Lisp based infrastructure due to the lack of standards around library management.

Our Debian friends have done a great job of defining how Common Lisp implementations and libraries should be installed. There's no reason to invent something new, so let's just implement their design (as does Gentoo).

Owner

 * Name: AnthonyGreen

Current status

 * Targeted release: N/A
 * Last updated: 2008/01/03
 * Percentage of completion: 10%

Package Review Submissions

 * 1) cl-asdf: https://bugzilla.redhat.com/show_bug.cgi?id=427391
 * 2) common-lisp-controller: https://bugzilla.redhat.com/show_bug.cgi?id=427411

Detailed Description
See http://www.cliki.net/common-lisp-controller

Here's the common-lisp-controller design document from Debian...
 * Copyright (C) 2000,2004 Peter Van Eynde and Kevin M. Rosenberg
 * Licensed under the LLGPL, see debian/copyright file

This is the general design of the new 'light weight' common-lisp-controller v4.

Common Lisp Libraries:

Libraries should: - use adsf - install their source packages in /usr/share/common-lisp/source/ - install a symlink to their asdf package from /usr/share/common-lisp/systems/ .asd to /usr/share/common-lisp/source/ / .asd - after install call "/usr/sbin/register-common-lisp-source " - before removal of the package call "/usr/sbin/unregister-common-lisp-source " Libraries can be automaticly created with the "asdf-install-2-deb" package.

Common Lisp Implementations::

Implementations should: - install a script /usr/lib/common-lisp/bin/ .sh that has the following commands: /usr/lib/common-lisp/bin/ .sh install-clc This should load /usr/share/common-lisp/source/common-lisp-controller/common-lisp-controller.lisp then call (common-lisp-controller:init-common-lisp-controller-v4 <implementation) and then save the resulting image as default for the system. - after install call "/usr/sbin/register-common-lisp-implementation " - before removal call "/usr/sbin/unregister-common-lisp-implementation " - should load /etc/lisp-config.lisp on startup.

There are 2 scenarious:

- a user wants to use a system-wide library. (asdf:oos 'asdf:compile-op : ) will load the system at /usr/share/common-lisp/systems/ .asd that will use the source at /usr/share/common-lisp/source/ fasls will be placed in /var/cache/common-lisp-controller/ / / / - a user wants to use another library. He or she used adsf-install and the sources got placed in ~/.sbcl or ~/sdf-install-dir/. We do not interfere with this use as we expect the user to be able to correct all errors :-).

User interface:

To load a library "cil" do: (clc:clc-require :cil)

To recompile all libraries, dropping into the debugger on error, do: (clc:clc-build-all-packages) to do so while ignoring build errors, do: (clc:clc-build-all-packages t)

To add user packages, use clc-register-user-package. This will place a link to the user's asdf file in ~/.clc/systems.

Technical Implementation:

- register-common-lisp-source: does nothing

- unregister-common-lisp-source: does: (after checking stuff): rm -rf /var/cache/common-lisp-controller/*/*/

- register-common-lisp-implementation does nothing

- unregister-common-lisp-implementation does: (after checking stuff): rm -rf /var/cache/common-lisp-controller/*/

- clc-init.lisp:

loads adsf builds pathname translations for /usr/share/common-lisp/source/ adds /usr/share/common-lisp/systems/ and /.clc/systems to the asdf registry

Benefit to Fedora
Fedora will join the ranks of Lisp friendly distributions.

Scope
This effort will require changes to all Common Lisp implementations currently in Fodora (SBCL, clisp, gcl, etc). We will need buy in and cooperation from all of these package maintainers.

Test Plan

 * 1) Install sbcl/gcl/ecl/cmucl
 * 2) Install a test cl-* library package (let's call it P)
 * 3) Run sbcl/gcl/ecl/cmucl and (require 'P).  Make sure user-dependent fasl files are created.
 * 4) Upgrade sbcl/gcl/ecl/cmucl and make sure implementation-dependent fasl files for P are regenerated.
 * 5) Remove sbcl/gcl/ecl/cmucl and make sure implementation-dependent fasl files for P are removed.

User Experience
See test plan.

Dependencies
Once common-lisp-controller has been accepted, the various Common Lisp implementations must be updated to work with it.

Contingency Plan
Wait until F10.

Documentation
Will be provided in common-lisp-controller package.

Release Notes
Will be provided in a timely manner.