From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=SPF_NEUTRAL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by yquem.inria.fr (Postfix) with ESMTP id 94F19BC6C for ; Tue, 29 Jan 2008 14:47:27 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAAAOi8nkfAXQImh2dsb2JhbACQHgEBAQgKKZY0hyI X-IronPort-AV: E=Sophos;i="4.25,269,1199660400"; d="scan'208";a="7377637" Received: from discorde.inria.fr ([192.93.2.38]) by mail1-smtp-roc.national.inria.fr with ESMTP; 29 Jan 2008 14:47:27 +0100 Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by discorde.inria.fr (8.13.6/8.13.6) with ESMTP id m0TDlFbt006409 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=OK) for ; Tue, 29 Jan 2008 14:47:27 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgAAAOi8nkdIDvb1eGdsb2JhbACQHgEKCBETljuHIg X-IronPort-AV: E=Sophos;i="4.25,269,1199660400"; d="scan'208";a="6698799" Received: from ag-out-0708.google.com ([72.14.246.245]) by mail2-smtp-roc.national.inria.fr with ESMTP; 29 Jan 2008 14:47:26 +0100 Received: by ag-out-0708.google.com with SMTP id 26so1621899agb.9 for ; Tue, 29 Jan 2008 05:47:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:references:message-id:from:to:in-reply-to:content-type:x-mailer:mime-version:subject:content-transfer-encoding:date:cc; bh=8anPHfAF1QkvztIv+NU3d+8NNgdNt3/f+AbvgvIPdGw=; b=A1NtDvwIvvZcTT8EzKbYs40V2xxnIDDhdAq1Jemgxps9u6fUGhQZs5dkwjoeCVzVAlmmpcxYIDccN6EQQZm3w/OMQ5I/jsipIsB35uPN1h7+bOYOHzBKd+XYiKA9gynOAFe8b7KfW9DjGoo48LcGz4N5tQ6y8xXn0lFIm7QuChE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=references:message-id:from:to:in-reply-to:content-type:x-mailer:mime-version:subject:content-transfer-encoding:date:cc; b=CWYDbR19BWgVlTOuasySlsr2+yLFC9aFXOZTxi4TeBTOkelxCMbOvHJKgNRqRzSBuVh5yrJwSZRNiTDPRi2vcahNwG/I4gpankecUBfmoBS+Iimzq7UxsS3NAXVMb8jtPt/qdSlfoKSdVXmv/gt5w8jjPvAbq2auN4glqcDqOHo= Received: by 10.100.57.6 with SMTP id f6mr14696206ana.78.1201614442134; Tue, 29 Jan 2008 05:47:22 -0800 (PST) Received: from ?10.156.226.20? ( [32.142.25.237]) by mx.google.com with ESMTPS id d24sm10563408and.12.2008.01.29.05.47.15 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 29 Jan 2008 05:47:20 -0800 (PST) References: <479F0664.2070706@exalead.com> Message-Id: From: Yaron Minsky To: Berke Durak In-Reply-To: <479F0664.2070706@exalead.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes X-Mailer: iPhone Mail (4A93) Mime-Version: 1.0 (iPhone Mail 4A93) Subject: Re: [Caml-list] [OSR] Ports-like package management system Content-Transfer-Encoding: 7bit Date: Tue, 29 Jan 2008 08:47:03 -0500 Cc: Caml-list List X-Miltered: at discorde with ID 479F2E63.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; yaron:01 minsky:01 yminsky:01 haskell's:01 yaron:01 minsky:01 berke:01 durak:01 berke:01 durak:01 ocaml:01 markus:01 non-trivial:01 flags:01 compilations:01 Another thought: the discussion here is essentially about cloning haskell's cabal system. Seems like a good place to look for inspiration. Yaron Minsky On Jan 29, 2008, at 5:56 AM, Berke Durak wrote: > Hello, > > Following Markus's message, discussions with Nicolas Pouillard and > Sylvain Le Gall and others, and of course my previous work in the EDOS > project, here are some thoughts about package management systems > (PMSs) for Ocaml. > > First, the PMSs of Linux distributions are perfectly adequate for end > users and administrators having to deploy and manage identical > packages accross multiple machines. These are very complex systems > including a substantial social part. > > But they are not very suitable for developers. > > As Markus pointed out, developers cannot go thru a packaging step to > test the result of a change, much less wait for the fine Debian team. > > One reason is that most developers, including myself, cannot be > bothered to package software for a Linux distribution, because correct > packaging is complex and requires adherence to a set of rules must be > remembered and which cannot all be checked by software. As packaging > is not done very often, you tend to forget those rules, and that is > why we have people who package often to not forget the rules: > maintainers. Without maintainers, we would be in a world of pain to > install any piece of non-trivial software and we are thankful to them. > > But developers absolutely need to be able to work on multiple versions > of the same software component at once, patch those versions or > compile them with unusual flags, and often use the absolutely latest > unpackaged version. And that is the second reason why the Debian or > Red Hat PMSs are not adequate. They have a single global state per > system, which includes the installed files, and the package database, > and cannot handle multiple versions of the same package, nor multiple > compilations of the same version. (This also applies to Gentoo.) > > We thus need versions, and lots of them! We need to base our > developer packages on a version control system, in the style of BSD > ports. BSD ports are usually based on CVS, sometimes on Subversion. > As we are looking to increase collaboration, having a single point of > contention is a serious limitations of these centralized systems; > we'll prefer more recent "distributed" version control system. > > Of available distributed VCSs with a serious user base, we have Darcs, > Mercurial and Git. > > Basing a PMS for Ocaml on a VCS written in Haskell would violate the > ``Trading with the Enemy'' act. Moreover Darcs has some performance > problems of its own. > > Mercurial (Hg) is written in Python extended in C for performance. It > is quite friendly and works well under Windows. However, its > developers are not as elite as Git's, its merging features are less > advanced and Python sux0rz. > > I have been using Hg for the past few months and been quite happy with > it, but then I was mostly working alone. Git is certainly as good as > Mercurial for that kind of usage and, as it is written in pure C, I > advocate its use. Until someone writes a VCS in Ocaml, that is. > > Let's get back to the subject. BSD ports are also based on make, > whose main limitation, the static dependency graph, has been addressed > in ocamlbuild. I know there is Omake, but I think it suffers from the > ``Yet Another Turing-Complete Language'' syndrome. > > So I am calling for a solution based on a ports-like system but based > on a distributed VCS and on an improved ocamlbuild. > > Assume you are writing a program FOO and want to use a package BAR > available from bar.org. You tell ocamlbuild by adding some tag such > as > > : require(http://bar.org/repository/) > > And when you run ocamlbuild, it automatically checks out a copy of > BAR, compiles and loads its myocamlbuild.ml module which adds the > required flags. Of course it should be possible to specify a > particular revision... And if BAR has itself dependencies, those too > would be checked out. > > Note that Git has a nice option for cloning checked out repositories > using hard links; that could be used to maintain a cache of checkouts, > for instance in the user's ~/.ocamlbuild/checkouts/ directory. > > So basically I propose that we improve ocamlbuild to allow for > multiple plugin files (using dynamic loading) and use that to define a > BSD ports-like system targeted at developers. > > -- > Berke DURAK > > _______________________________________________ > Caml-list mailing list. Subscription management: > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list > Archives: http://caml.inria.fr > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs