README.org 4.16 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
**WARNING**: This is ALPHA quality. It is being published right now so I can
Eric Timmons's avatar
Eric Timmons committed
7
8
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
24
25
26
  Currently, the project specific context management is the most mature. Version
  0.1.0 will be released when both the global and project specific features are
  usable.

Eric Timmons's avatar
Eric Timmons committed
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
* Installing

  CLPM requires the following programs to be installed:

  + curl :: Needed for fetching files.
  + git :: Needed to check out git repositories in bundles.
  + tar :: Needed to unpack tar files.

  The easiest way to install CLPM is to download an executable
  image. Instructions on that will be forthcoming once I have hosting of those
  images figured out.

  The next easiest way to install CLPM is to install SBCL, download the CLPM
  sources (including the git submodules!), and execute the [[file:scripts/clpm-live][clpm-live]] script.

Eric Timmons's avatar
Eric Timmons committed
42
* Project Goals
43
44
45

  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
46
47
  available solutions. We try to describe those choices and our high level goals
  in this section.
48

Eric Timmons's avatar
Eric Timmons committed
49
50
51
52
53
  + 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
54
55
  + Use existing libraries where possible :: Because CLPM core is never loaded
       into a client image, there are no issues with version conflicts or
56
57
       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
58
59
60
61
62
63
64
65
66
67
       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.
68
69
70
71
  + 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
72
73
74
  + 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
Eric Timmons's avatar
Eric Timmons committed
75
76
       progress repository geared toward projects that follow versioning
       guidelines.
Eric Timmons's avatar
Eric Timmons committed
77

Eric Timmons's avatar
Eric Timmons committed
78
79
80
81
* Documentation

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

Eric Timmons's avatar
Eric Timmons committed
82
83
84
* 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]].