[plt-scheme] PlaneT, plts and distributing software.

From: Anton van Straaten (anton at appsolutions.com)
Date: Wed Oct 26 18:00:40 EDT 2005

Following up with a thought about this.

> Jacob Matthews wrote:
> 
>> If you write (require 
>> (planet ... ("usr" "pkg" X Y)) where X and Y are numbers, you're NOT 
>> saying "get version X.Y of the library," you're saying "Get a version 
>> of the library that's totally compatible with version X.Y" -- in other 
>> words, any package that implements version X.Y's entire interface and 
>> behaves in a compatible way. (PLaneT's rule for what's compatible with 
>> what dictates the version numbers, which is why I don't let people 
>> choose version numbers for themselves.) 

I do agree that this mapping between interface+expected behavior, and 
specific implementation versions, could be useful to support.  The issue 
I raised is just a question of who gets to control the mapping.

If you accept the requirement that I've raised, which is that there are 
(often) times when it's desirable to be able to specify the specific 
version of the implementation of a collection that an application 
depends on, then it becomes necessary for the PLaneT server to support 
requests for specific implementation versions (and to reliably honor 
those requests, i.e. no baiting & switching allowed!)

The mapping Jacob described can still be supported, though, as a layer 
above this.  If a collection is requested by its "interface version" 
(for want of a better term), then the appropriate implementation version 
would be looked up in the interface/implementation map.  (By 
"interface", I really mean the combination of interface+compatible 
behavior which Jacob described.)

Given a design like this, the exact same mapping system could be 
supported on the client, rather than (or as well as) on the server. 
That would allow developers to control the implementations that are 
retrieved in response to requests for an interface, and would allow them 
to guarantee what happens when they distribute a program without its 
dependencies.

Anton


Posted on the users mailing list.