Longstanding issues: structs & standalone Erlang
Romain Lenglet
rlenglet@REDACTED
Wed Feb 15 06:11:21 CET 2006
Björn Lindström wrote:
> As for the rest, I always get suspicious when people make
> programming language specific package managers that tries to
> do what the distribution does already.
Exactly. And this is all too common in many languages:
- Maven and JavaStart in Java,
- PEAR in PHP,
- RubyGems in Ruby,
- Python's site-packages,
...
and also in plugin-based applications, such as Eclipse or
NetBeans.
It seems that all those home-made specific packaging systems were
created only because of the lack of a common packaging system on
Windows. But they are superfluous on all Linux distributions I
know of, for instance.
I am running Debian, and I want to use only Debian's packaging
system, not one packaging system for every language or for every
application that would clutter my system with unmanageable
files.
> To me, it's much more attractive with a system that can easily
> be hooked into dpkg, ports, RPM, or whatever.
I completely agree. Packaging concerns must be left OUT of the
Erlang implementation.
For instance, Vlad Dumitrescu's proposal to bury packaging /
installation code deep inside the implementation or Erlang is a
bad idea for that reason: it would have to be patched / disabled
on every platform that has a packaging system, to avoid it to
interfere with the platform-managed packages.
If anybody has to create a new Erlang-specific packaging system
for platforms without one, please do it as an additional,
optional software.
> On that, you could build systems for turning out pre-packaged
> versions of the program for various platforms, including MacOS
> X single-file applications, Windows installers, Debian
> packages/repositories, or whatever.
>
> So basically, we want a build script that just picks out what
> it needs from Erlang/OTP and the program, puts it in a
> directory structure, and then lets the back-ends for the
> various platforms do their thing. Back-ends for .deb, RPM,
> MacOS X type application bundles and some sort of Windows
> installer program seems like a good first set of goals to me.
>
> Of course it would also need to support packing up the program
> separately, depending on a separate installed runtime system.
Having automated tools would be very nice.
But an easier goal would be to define a POLICY for Erlang
development, to make packaging easier. Usually, developers and
packagers are different persons. The problem is for developers
to make packaging easier to packagers.
For instance, I propose the following rule:
"Any Erlang application that uses other applications or languages
(e.g. that includes C code) must use Autoconf and Automake."
Then, and only then, it would be possible to automate the
packaging process.
The OTP design principles are a good start: they define a common
directory hierarchy, etc. But they should be extended.
For instance, the Release file format (.rel) should be extended
to allow the declaration of optional dependencies (e.g. "sasl
can be used if it is installed"), dependencies to ranges of
versions (e.g. "stdlib >=1.12"), conflicts, etc.
Debian's packaging system is a good source of inspiration to
improve expressiveness of dependencies in release files.
And to install only parts of Erlang/OTP according to the needs of
specific apps, the solution on Debian is quite straightforward:
we should split the "erlang" and "erlang-base" packages into one
package for every app, with the right dependencies between those
packages.
E.g. the "os_mon-erlang" Debian package would have the following
dependencies:
Depends: kernel-erlang (>= 2.10), stdlib-erlang (>= 1.13)
Recommends: sasl-erlang (>= 2.0)
--
Romain LENGLET
Pr. Chiba Shigeru Group
Dept. of Mathematical and Computing Sciences
Tokyo Institute of Technology
More information about the erlang-questions
mailing list