On Thu, Feb 16, 2012 at 3:32 AM, Keshav Kini <keshav.k...@gmail.com> wrote:
> Robert Bradshaw <rober...@math.washington.edu> writes:
>>> Well, considering among other things the recent discussions about
>>> licensing, I don't think that it's going to be possible to have a single
>>> top-level repository for all Sage code.
>>
>> But for everything not part of the upstream packages, licensing
>> shouldn't be an issue.
>
> I'm referring to William's comments that the Sage library should be
> shipped under a different license from the Sage distribution as a whole
> (GPLv2+ and GPLv3+ respectively). I guess it's still possible to ship
> them together as a whole, though.

It's the upstream spkgs that are GPLv3+, not any of the Sage code.

> But considering that we might one day want to make part of the Sage
> library possible to install into your system Python distribution
> (right?), it might be a good idea to keep it separate from the
> "infrastructure" part of Sage.

While that's a nice idea, there's much bigger technical hurdles to
overcome than repository structure.

>>> I think ideally we should have
>>> three repositories, one for the Sage library (what is currently in
>>> $SAGE_ROOT/devel/sage-main), one for Sage packages (an aggregation of
>>> the repositories in all our current SPKGs, basically), and one for the
>>> Sage base system (an aggregation of the scripts repo and the root repo).
>>
>> Or we just have one repository--I'm still not seeing any advantage of
>> having multiple repos (and many disadvantages).
>>
>> [...]
>>
>> Being able to uninstall things, or switch between versions, would be
>> really nice but is somewhat orthogonal. (And yes, we could borrow
>> infrastructure here.)
>
> I think there are some advantages to keeping our package management
> separate from our mathematical library separate from our glue which
> binds the two together, namely that we can import the first (from
> Gentoo Prefix, say) and export the second (as a standalone Python package
> with optional dependencies on stuff which we currently depend on, say).

If the sage library could be used a s a standalone Python package, and
we could use Gentoo Prefix as is (with no modifications, but requiring
it as a dependency(?)) this might make more sense. I see the "glue"
code as being part of the library, neither is of much use without the
other.

> Honestly I'm not sure how likely it is that the Sage library might one
> day be separable from Sage, but I've heard people say that it is a
> long-term goal. If that's not the case, we could consider it part of the
> glue (i.e. bundle it with the scripts and root repos), but I still think
> that we should keep the packaging subsystem separate to allow us to swap
> in other stuff like ebuilds for Gentoo, .deb packages for Debian/Ubuntu,
> etc., to keep open the prospect of one day finally being able to ship
> something that's not monolithic.
>
> Or maybe the long-term picture of Sage is going to turn out to be a
> VirtualBox VM on all platforms. Who knows...

I think Sage will be monolithic and Windows be VM for the near future
at least, with a larger percentage of people using a Sage install "in
the cloud" on a university or otherwise hosted server for the near-mid
term future. But as you said who knows...

>>> Related question: do we actually have a record of what versions of what
>>> SPKGs were released with what versions of Sage? For the standard SPKGs
>>> you can just look into the directory in the Sage tarball, but what about
>>> optional packages?
>>
>> This is information that should be in the revision control, ideally
>> switching spkgs as part of the same commit (set) as any modification
>> to the library or scripts. The repo would be the base + library + spkg
>> metadata (what upstream tarball + modifications + custom installation
>> scripts).
>
> I'm not sure that's such a good idea. We should be able hotfix SPKGs
> without having to hotfix Sage itself. Or to put it another way, the
> development of build scripts for packages shouldn't really be in
> lockstep with the development of Sage, the mathematical system, since we
> have no control over upstream releases or bugfixes.

Note that we don't maintain the actual build script for most upstream
packages, unless there's something Sage-specific. Currently, spkgs are
pristine upstream tarball + Sage customizations + metadata (e.g.
contact information). Ideally, the customizations is empty, but not
always.

The question is where to put these customizations. Currently, they're
in a separate repository for each spkg (which is also separate form
the upstream project's repo). We push this upstream when it makes
sense, but even when we can it's often a slow process. Often changes
here (including bumping the version) involve a parallel set of changes
to the library (though this need not always be the case, especially
for the more stable/standard spkgs). Being able to do this actually
helps with the lack of control over upstream releases and bugfixes.
Where would you propose we stick this information?

> I see a future build-script repository as being something that people
> continually update from trunk to "check for updates". To avoid premature
> upgrading to new SPKGs that don't work with an old version of Sage, the
> Sage package itself would require certain versions of certain SPKGs and
> no higher. Of course, they would not pull from the Sage repository
> itself until an actual version was released. This is more or less how
> many Linux distributions work, i.e. package metadata / build scripts /
> etc. are updated constantly, and actual software packages have much more
> infrequent stable version releases.

This assumes the various packages can be upgraded independently, which
is clearly not the case.

> So for this to work the Sage repository would have to be separate from
> the packages repository.

But for this to work we would need a separate pari-sage, separate from
pari, in the global package repository if we made any modifications to
pari.

Lets assume for the moment that the glue+python library is a single
repository called "sage-lib." From what I gather, what you want the
sage distribution to be is:

package_manager (e.g. gentoo-prefix, a prerequisite)
mpir-x.y.z
pari-x.y.z
cython-x.y.z
python-x.y.z
...
sage-lib-x.y.z

Where sage-lib-x.y.z lists as its dependencies

mpir-x.y.z
pari-x.y.z
cython-x.y.z
python-x.y.z
...

Right? Then the package manager would just do its thing. The crux of
the issue is that what we really have for the dependencies of
sage-lib-x.y.z is

mpir-x.y.z
pari-x.y.z + epsilon
cython-x.y.z + epsilon
python-x.y.z
...

What I would like to see is the dependencies (epsilon's and specific
version numbers) stored in the single repository with the code that
depends on them, so a commit could describe a global sage state and
all development could be expressed as "just a (set of) patches (=
branch in a personal/public repo)" Changing this file would trigger a
re-build (ideally with lots of transparent caching). That in a
nutshell is my proposal.

Currently the epsilons are scattered across various non-upstream
repos, there's no explicit history of versions outside of what happens
to ship in a release tarball, and there's several distinct repos for
the various pieces of Sage. I think we can do better.

> Another advantage of this is that people writing their own packages to
> use with Sage could more easily and quickly get their stuff into the
> Sage package repository as an official optional package, which goes well
> with what William (?) was saying somewhere on sage-devel recently about
> how the packaging system of Sage should allow people to write their own
> packages without communication with us. Though of course those people
> could always distribute files that would plug into our packaging system,
> having the package repository separate from Sage would also encourage it
> to be modular enough to make this feasible.

Certainly a requirement to having a system that supports optional
spkgs. Sharing an optional spkg would be as simple as sharing a patch
(or just the new files themselves, which contains a pointer to the
upstream package and any needed metadata) and rebuilding.

Upgrading to a newer version of an upstream package would likewise be
just a patch as well.

> Just some thoughts.

And very good food for thought.

- Robert

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to