README.org 3.43 KB
Newer Older
1
2
3
4
5
#+TITLE: Common Lisp Package Manager - CLPM
#+AUTHOR: Eric Timmons
#+EMAIL: etimmons@mit.edu
#+OPTIONS: email:t toc:2 num:nil

Eric Timmons's avatar
Eric Timmons committed
6
7
8
**WARNING**: This is BETA quality. It is being published right now so I can
start testing it and hammering at it in my normal work flow. There are probably
bugs and it may eat your files.
9
10
11

* Description

Eric Timmons's avatar
Eric Timmons committed
12
13
  CLPM is a package manager for Common Lisp. It is focused on managing packages
  for both (user) global contexts and project specific contexts.
14
15
16

  It consists of two major pieces. First is a CLI program that is responsible
  for all the heavy lifting of fetching and unpacking releases in the correct
Eric Timmons's avatar
Eric Timmons committed
17
18
19
20
21
  place, finding systems, and managing project specific environments. This piece
  is generally referred to as the CLPM core. The second is a small client
  library written in portable Common Lisp that interfaces with ASDF and calls
  the CLI program as necessary to find and install missing systems. This piece
  is generally referred to as the CLPM client.
22

Eric Timmons's avatar
Eric Timmons committed
23
* Project Goals
24
25
26

  CLPM is far from the only package manager available for Common Lisp[fn:1], but
  it makes very different assumptions and design choices than the other
Eric Timmons's avatar
Eric Timmons committed
27
28
  available solutions. We try to describe those choices and our high level goals
  in this section.
29

Eric Timmons's avatar
Eric Timmons committed
30
31
32
33
34
  + Minimize footprint in client image :: It's unnecessary to load a large
       amount of code into an image for a task that is only a small part of the
       coding experience. This drives CLPM's separation into the core and
       client. Additionally, many Lisps (I'm looking at you, SBCL) have a large
       memory footprint and this helps keep that size down.
Eric Timmons's avatar
Eric Timmons committed
35
36
  + Use existing libraries where possible :: Because CLPM core is never loaded
       into a client image, there are no issues with version conflicts or
37
38
       incompatibilities between third party libraries used by CLPM and the
       client image. This means that existing libraries can be leveraged where
Eric Timmons's avatar
Eric Timmons committed
39
40
41
42
43
44
45
46
47
48
       it makes sense and we don't need to reinvent the wheel.
  + Support cleanup on image dump :: There is no need to have a package manager
       in most programs. CLPM provides an option to remove the client from the
       image when it is dumped (through UIOP provided functions).
  + Support multiple workflows and configurations :: We want it to be equally
       easy to hack on CLPM, to use it for CI, and to use it for development by
       coders uninterested in hacking on CLPM itself. This means we strive to
       support both distribution of a (mostly) static program as well as using
       CLPM directly from source. It also means we strive to provide reasonable
       defaults that work (most) everywhere.
49
50
51
52
  + Support installing multiple package versions :: CLPM supports installing
       multiple versions of the same package simultaneously. This is an enabling
       feature for managing project specific dependencies as well as global
       dependencies.
Eric Timmons's avatar
Eric Timmons committed
53
54
55
56
  + Support multiple package sources :: At first, CLPM will support only
       Quicklisp-style distributions as a package source/repository. But we
       envision adding support for new sources, such as Qi and a new work in
       progress repo geared toward projects that follow versioning guidelines.
Eric Timmons's avatar
Eric Timmons committed
57

Eric Timmons's avatar
Eric Timmons committed
58
59
60
61
* Documentation

  For more documentation on CLPM, start at [[file:doc/overview.org][overview.org]].

Eric Timmons's avatar
Eric Timmons committed
62
63
64
* Footnotes

[fn:1] See, for example: [[https://www.quicklisp.org/beta/][Quicklisp]], [[https://github.com/fukamachi/qlot/][Qlot]], and [[https://github.com/CodyReichert/qi][Qi]].