
"S. Alexander Jacobson"
There are e.g. Win32 installers HDirect and HaskellScript. Who produced them and who is intended to use them?
Bob the Builder produced them. Joe User uses them. But you are right, there is indeed an intermediate role, the person who downloads and installs the binary package. This does not necessarily involve any building, but still requires a minor degree of knowledge of the packaging scheme. However, in Cabal, there are many different possible binary packaging schemes. Various people will use RPM, .deb, .msi, apt-get, BSD ports, and so on. Essentially, we assume that the person who downloads and installs one of these formats is competent with their chosen mechanism. They just use whatever is standard for their platform. So it seems fair to characterise that role as Joe User, since we don't really expect any familiarity with Cabal. Indeed, such a person does not (knowingly) use Cabal at all! However Cabal does address the person who /creates/ an RPM, .msi, etc, who needs have a documented protocol for building, installing, and registering Haskell code. Roland, Willie, etc, embed that knowledge into the binary package, so the final user, Joe, does not need to think about it.
I run GHC on my Windows box and can't easily/reliably get C code to compile and produce DLLs (both because my C is *very* rusty and because I don't have an up-to-date version of all the cygwin mingwin blah blah packages). Yet, I do occasionally download and install Haskell libraries? Am I Bob, Peter, Sam, Joe, or perhaps someone new?
You are almost certainly Joe, if your ideal world is to download a .msi InstallShield binary package and press the button. Regards, Malcolm

On Wed, 9 Jun 2004, Malcolm Wallace wrote:
You are almost certainly Joe, if your ideal world is to download a .msi InstallShield binary package and press the button.
I'm not Joe. According to the proposal: Joe User is simply a Haskell user. He does not download new packages. I'm not Bob or Sam either: Bob the Builder and Sam Sysadmin both download, build, and install new packages. The only difference between the two is that Sam has root permission, and can install packages in more globally-visible places. I do have "root" permission on my windows laptop and occasionaly install stuff in more "globally-visible places" but, since I haven't bothered to get the cygwin toolchain working properly to produce DLLs and my C is really really rusty , I don't really *build* new packages. Let's have two new roles: Wally Windows and Peter Packager. Wally installs but does not necessarily build. Peter builds but does not necessarily install. The proposal should simply define the file format that Angela and Peter use to deliver Haskell packages to Wally. A Haskell package is some combiation of: * Haskell source * binary libs for the target platform, * documentation, * data, * and meta-data Wally's local Haskell interpreter/compiler should know how to unpack a Haskell Package and install/register its component files in the appropriate places on his system with minimal fuss. Angela's local Haskell interpreter/compiler should make it easy for her to create a Haskell Package if it doesn't have any binaries (or she already has the binaries she needs and is targetting a particular platform). Marcus and Peter can use Autoconf/Make or whatever they want to build the packages from C (or whatever source). There is no reason that the packaging system needs to invoke autoconf/make (especially given that we can't assume Wally actually has autoconf/make!) Similarly, if installation involves other sorts of files (e.g. installing autoconf/make), Peter can use RPM .msi etc. to do that job, perhaps invoking the Haskell packaging system from there. The packaging system does not need a way to invoke RPM etc. This thing should be super-simple; a package file format together with a meta-data format telling an installer how to handle package contents. -Alex- _________________________________________________________________ S. Alexander Jacobson mailto:me@alexjacobson.com tel:917-770-6565 http://alexjacobson.com
"S. Alexander Jacobson"
writes: There are e.g. Win32 installers HDirect and HaskellScript. Who produced them and who is intended to use them?
Bob the Builder produced them. Joe User uses them.
But you are right, there is indeed an intermediate role, the person who downloads and installs the binary package. This does not necessarily involve any building, but still requires a minor degree of knowledge of the packaging scheme.
However, in Cabal, there are many different possible binary packaging schemes. Various people will use RPM, .deb, .msi, apt-get, BSD ports, and so on. Essentially, we assume that the person who downloads and installs one of these formats is competent with their chosen mechanism. They just use whatever is standard for their platform. So it seems fair to characterise that role as Joe User, since we don't really expect any familiarity with Cabal. Indeed, such a person does not (knowingly) use Cabal at all!
However Cabal does address the person who /creates/ an RPM, .msi, etc, who needs have a documented protocol for building, installing, and registering Haskell code. Roland, Willie, etc, embed that knowledge into the binary package, so the final user, Joe, does not need to think about it.
I run GHC on my Windows box and can't easily/reliably get C code to compile and produce DLLs (both because my C is *very* rusty and because I don't have an up-to-date version of all the cygwin mingwin blah blah packages). Yet, I do occasionally download and install Haskell libraries? Am I Bob, Peter, Sam, Joe, or perhaps someone new?
You are almost certainly Joe, if your ideal world is to download a .msi InstallShield binary package and press the button.
Regards, Malcolm _______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries

(snip)
Let's have two new roles: Wally Windows and Peter Packager. Wally installs but does not necessarily build. Peter builds but does not necessarily install.
What's the difference between your "Peter" and our Rowland, Donald, and Willie? Also, your Wally Windows is confusingly similar to our Willie Windows, so let's please not use that name. I'll refer to him as PNW (Please, Not Wally). There is a role we haven't mentioned: the consumer of Rowland, etc., packages. They install packages for Joe (who might be themselves). They do this in a platform-dependent way that is outside our system: using dpkg, rpm, whatever (is that what you mean by your PNW?) This is mentioned in the old use-cases that I referred you to before. The reason that case is not included in this proposal is that it's outside the system as it stands now. In the future, we hope to support "./Setup.lhs bdist" and "./Setup.lhs sdist" targets (in fact, I implemented sdist the other day). bdist would create a binary tarball (or whatever) which can be unpackaged; the setup script will be in there, and "./Setup.lhs install" will install it without compiling. But we're not worrying about that yet. The first goal is to make an interface that's flexible and extendable. It'll eventually support such things; likely in the near future. (snip)
Marcus and Peter can use Autoconf/Make or whatever they want to build the packages from C (or whatever source). There is no reason that the packaging system needs to invoke autoconf/make (especially given that we can't assume Wally actually has autoconf/make!) (snip)
All you're saying here is that your scheme doesn't support Marcus. I'm still waiting to hear why he's not important. This character (please, not Wally) can't install Marcus's package whatsoever. He's in no better or worse shape than before. For packages that "PNW" can install, our system still supports him. It's silly to pretend that our system is leaving "PNW" in the cold. Your system certainly doesn't support "PNW" in the case of a package by Marcus. Either "PNW" is SOL, or he has to get Willie's help. The compiler's role in installing packages is orthogonal. I don't know if you can talk the compiler authors into altering the compilers to be aware of the packaging system. I don't think such vertical integration is a good idea, personally, but they can decide that. Whether one invokes "haskell-install" or GHC to install the packages is orthogonal to whether the packaging system simply uses meta-data (and supports only Angela) or whether it uses an executable Haskell script (and supports everyone). isaac

On Wed, 9 Jun 2004, Isaac Jones wrote:
(snip)
Let's have two new roles: Wally Windows and Peter Packager. Wally installs but does not necessarily build. Peter builds but does not necessarily install.
What's the difference between your "Peter" and our Rowland, Donald, and Willie?
Not much. I just wanted the ability to refer generically to the packager role. "Roland et al" is both less efficient and less precise. Also, I disagree with "They [Roland et al] do this as a service for Angela Author and the community." 1. Peter does this as a service for users of the platforms his packages target not for Angela or Marcus (it could be a disservice to A&M if they didn't want their packages distributed!) 2. Contrary to the proposal, those users should NOT need Peter's services to install Angela's pure haskell packages (the 99% case). 3. Those users DO need Peter to install Marcus's packages as they require platform specific compilers etc. that those users may not have. (the 1% case but of very valuable stuff)
Also, your Wally Windows is confusingly similar to our Willie Windows, so let's please not use that name. I'll refer to him as PNW (Please, Not Wally). There is a role we haven't mentioned: the consumer of Rowland, etc., packages. They install packages for Joe (who might be themselves). They do this in a platform-dependent way that is outside our system: using dpkg, rpm, whatever (is that what you mean by your PNW?)
I used Wally as a name because I had forgotten entirely that you had a Willie. (I think your Willie is mentioned only once in the entire document.) In my first draft of that mail I actually used Joe because I don't believe Joe (as described in the document) makes any sense. We care only about people involved in the package creation -> installation process. We need only to talk about Wally/PNW. Malcolm's confusion of Joe with your PNW earlier in this thread validates this assertion. In any case, it seems much more important to flesh out the end-users experience and in particular the Windows end-user experience as it is probably the most common (and perhaps majority) case.
The reason that case is not included in this proposal is that it's outside the system as it stands now.
Yup. That is our disagreement. You are laundering in that user by wanting to wrap .rpm w/ setup.lhs. My claim is that there are only two scenarios: (1) Marcus -> Peter -> Wally/PNW (2) Angela -> Wally/PNW In scenario 1, I don't see what value the proposal adds over that provided by make/autoconf for Marcus -> Peter and InstallShielf for Peter->Wally/PNW. In scenario 2, I don't see why we need anything more complex than a file format.
(snip)
Marcus and Peter can use Autoconf/Make or whatever they want to build the packages from C (or whatever source). There is no reason that the packaging system needs to invoke autoconf/make (especially given that we can't assume Wally actually has autoconf/make!) (snip)
All you're saying here is that your scheme doesn't support Marcus. I'm still waiting to hear why he's not important.
No. I'm saying that YOUR scheme doesn't really support Marcus. Or, more particularly, I'm saying that I don't see the value your scheme provides over autoconf/make -- especially given the assumption that Peter knows little or nothing about Haskell.
This character (please, not Wally) can't install Marcus's package whatsoever. He's in no better or worse shape than before. For packages that "PNW" can install, our system still supports him.
But you can help Peter by giving him a simple interface that RPM or Installshield or whatever can use to install the Haskell specific components! If Peter knows little about Haskell, it makes little sense to force him to write a Setup.lhs that calls InstallShield.
It's silly to pretend that our system is leaving "PNW" in the cold. Your system certainly doesn't support "PNW" in the case of a package by Marcus. Either "PNW" is SOL, or he has to get Willie's help.
My complaint is that your system requires too much of the delivery of packages from Angela to PNW without adding value to any other scenario.
The compiler's role in installing packages is orthogonal. I don't know if you can talk the compiler authors into altering the compilers to be aware of the packaging system. I don't think such vertical integration is a good idea, personally, but they can decide that.
The proposal already makes demands on compiler authors and the proposal is for a mechanism to support mucking about in the files on which the compiler relies. How does the setup.lhs author know in which directory to put library files? Alternatively, how much knowledge of the compiler and library file hierarchy are you requiring of PNW? The document describes this workflow: ./Setup.lhs configure --ghc ./Setup.lhs build ./Setup.lhs install So this means that Angela needs to know how to install her package for GHC? and NHC? Is GHC consistent enough on different OSs such that she does not actually have to do --ghc-WinXP and --ghc-OSX? If GHC is supposed to be consistent, then you are already making substantial requirements of compilers or you are committing to maintain an up-to-date database of compiler configurations.... What happens if I've customized my local config substantially? -Alex- _________________________________________________________________ S. Alexander Jacobson mailto:me@alexjacobson.com tel:917-770-6565 http://alexjacobson.com

"S. Alexander Jacobson"
Also, I disagree with "They [Roland et al] do this as a service for Angela Author and the community."
1. Peter does this as a service for users of the platforms his packages target not for Angela or Marcus (it could be a disservice to A&M if they didn't want their packages distributed!)
OK. I'm sure there are many reasons Rowland et al package things.
2. Contrary to the proposal, those users should NOT need Peter's services to install Angela's pure haskell packages (the 99% case).
That's not contrary to the proposal. Such users don't *need* Peter's packages, but if they exist, the users will probably use them. (I know I would, and as a consumer of those packages, I don't care whether they're authored by Angela or Marcus.) (snip)
In any case, it seems much more important to flesh out the end-users experience and in particular the Windows end-user experience as it is probably the most common (and perhaps majority) case.
I'll add more personas and use cases to the proposal, and I will clarifiy those that are there. I will also clarify that these personas are not necessarily disjoint, since they're really more like use cases.
The reason that case is not included in this proposal is that it's outside the system as it stands now.
Yup. That is our disagreement. You are laundering in that user by wanting to wrap .rpm w/ setup.lhs.
We do not propose to wrap .rpm with Setup.lhs. Confused statements like this make me fear that you still do not understand my viewpoint.
My claim is that there are only two scenarios:
(1) Marcus -> Peter -> Wally/PNW (2) Angela -> Wally/PNW
Of course there are many more scenarios. What do you mean that there are only two? In fact, many Haskell programmers are probably nothing like PNW in that they know other programming languages and can compile tools written in other programming languages.
In scenario 1, I don't see what value the proposal adds over that provided by make/autoconf for Marcus -> Peter and InstallShielf for Peter->Wally/PNW.
I have explained this: 1) A consistent interface to users 2) A consistent interface to layered tools (of which I have given several examples) (snip)
All you're saying here is that your scheme doesn't support Marcus. I'm still waiting to hear why he's not important.
No. I'm saying that YOUR scheme doesn't really support Marcus. Or, more particularly, I'm saying that I don't see the value your scheme provides over autoconf/make -- especially given the assumption that Peter knows little or nothing about Haskell.
We provide Peter with value because all Haskell tools conform to a common interface, no matter whether Angela or Marcus wrote them. Packaging them therefore becomes easier. For instance, please take a look at the Common Debian Build System (cdbs), for which we can make a Haskell target to make Donald's job easier. I've mentioned this before. This is an example of layered tools. Note that cdbs isn't dpkg (the tool that installs debian packages).
This character (please, not Wally) can't install Marcus's package whatsoever. He's in no better or worse shape than before. For packages that "PNW" can install, our system still supports him.
But you can help Peter by giving him a simple interface that RPM or Installshield or whatever can use to install the Haskell specific components!
Yes. That is what we're doing. This interface works for packages by both Angela and Marcus.
If Peter knows little about Haskell, it makes little sense to force him to write a Setup.lhs that calls InstallShield.
You are still confused. Peter doesn't write Setup.lhs, and Setup.lhs doesn't call InstallShield. I still hold out hope that once you understand our proposal you will like it more than you seem to. (snip)
The proposal already makes demands on compiler authors and the proposal is for a mechanism to support mucking about in the files on which the compiler relies.
That the compiler authors have to implement hc-pkg is not a large demand, as it's very useful for lots of stuff, and I believe there are simple implementations for it already. It is not vertical integration.
How does the setup.lhs author know in which directory to put library files? (snip)
It depends on which author. Angela just calls defaultMain, which implements configure which figures that stuff out. Marcus presumably uses autoconf to figure it out. Bob (or the author of haskell-install) can over-ride the choice with flags to configure. Also, it doesn't particularly matter where they go, because register tells the compiler where they are. BTW, how does your system figure out where to put the libraries?
The document describes this workflow:
./Setup.lhs configure --ghc ./Setup.lhs build ./Setup.lhs install
So this means that Angela needs to know how to install her package for GHC? and NHC?
Nope. Another clear point of confusion, and a huge one. The Distribution.Simple module does that for her. (snip)
What happens if I've customized my local config substantially?
Then you should know how to pass options to ./Setup.lhs configure, or you should somehow make your customization information available to haskell-install. I can see that the proposal is lacking in a number of areas, and I hope to fix that. You have highlighted a few concrete areas where we need to be more clear. That said, but the proposal is meant to introduce the system at a high level, and as I say on the web page, I expected people to be familiar with previous discussions on this list. I hope you will take the time to fully understand our system before you continue to condemn it. Please do go to the trouble of reading the old proposal and my presentation, and even some of the list archives. These are all linked to on the "library infrastructure" front page. peace, isaac
participants (3)
-
Isaac Jones
-
Malcolm Wallace
-
S. Alexander Jacobson