Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Feb 2001 01:32:57 -0800
From:      Jordan Hubbard <jkh@winston.osd.bsdi.com>
To:        Mark Murray <mark@grondar.za>
Cc:        arch@freebsd.org
Subject:   Re: Moving Things [was Re: List of things to move from main tree] 
Message-ID:  <2628.982402377@winston.osd.bsdi.com>
In-Reply-To: Message from Mark Murray <mark@grondar.za>  of "Sat, 17 Feb 2001 09:32:59 %2B0200." <200102170732.f1H7WS952157@gratis.grondar.za> 

next in thread | previous in thread | raw e-mail | index | archive | help
> We currently split the OS into two classes; src and ports. For a long
> time now I have had an idea for more of a continuum, and less of a
> dividing line.
> 
> Basically it is this:
> 
> The src and ports remain, but get redefined in a rather extreme way:

I think you're on the right general track, you're just not being
radical enough to reach the real prize at the bottom of this cereal
box. :-)   [Note to self: Do countries other than the USA put prizes in
            boxes of breakfast cereal?  Must research this].

First, let me ask everyone to stop thinking about this in terms of the
traditional /usr/src and /usr/ports dichotomy and start thinking about
software from more of a 20,000 foot [6080 meter] level.  When we talk
about software around here, we generally mean one of three things:

1. The aging binaries we got from some distribution medium in
   pre-packaged form.

2. The binaries we just made ourselves using an automated build
   mechanism which gave us very little clue as to what was actually
   involved (and we like it that way).

3. The binaries we just made after doing open-heart surgery on some
   collection of bits, hoping to see how successful the operation was.

Whichever of these 3 categories the bits may reside in, they also have
some common requirements: A sensible organizational structure
(taxonomy), a packaging scheme which makes it flexible and easy to
acquire the bits and a way of keeping those bits updated over the net
or from other media.  The only thing which changes significantly in
each category is the amount of "source" you have around and I think
that one fact also pretty much shouts out the model we should be
looking at.  But first, let's go back to that list of common
requirements.

To satisfy them, let's first assume that we have a really sensible
taxonomy for everything: The very minimum binary representation of
FreeBSD (/boot, /sbin, /bin, /etc), the text formatting tools, the
system libraries, the documentation, the toolchain, everything which
should be broken out into a sub-category or set of sub-categories is
properly identified and organized according to function.  Let's also
assume that /usr/ports and /usr/src have been slammed together in our
global taxonomy and everything from "minFreeBSD" to "KDE 2" is
represented somewhere on the chart.

Finally, let's assume that we have fairly sophisticated packaging
tools which can package up everything from binaries to sources to "cvs
operations", e.g. the package extract actually results in a real-time
cvsup/anoncvs checkout operation rather than storing a snapshot of the
bits.  Our updating tools would also be similarly capable of walking
through our tree of well-organized stuff and doing the right thing
automatically with some supplied update policy information.  That's
all a bit more in the way of infrastructure than we have now, but
nothing completely out of the realm of reason to imagine our being
able to implement.  Having to use sysinstall to install one set of
bits, pkg_add for another set and cvsup for yet another is part of the
problem here and a schism in desperate need of unification.


Getting back to the three listed categories, it's clear that for
category one, the binary package, the user will expect to simply "add"
the package and be done with it, no source being involved for the
trade-off of potentially getting an old set of bits (but maybe that's
the idea).

For category two, the automated build, "package add" could actually
result in the ports collection sequence of "go fetch some sources,
unpack them, build them, and install them."  There's absolutely no
reason why some part of what we now traditionally think of as
"/usr/src" couldn't be a *transient* item if all you wanted sources
for was building binaries.

For category three, the developer actually interested in sources,
"package add" might mean "go cause these bits to be checked out of a
server somewhere or unpack them from the package itself as a source
snapshot [which can then be optionally updated later]."  There's no
reason why a "source package" couldn't also be hacked on and then
checked back by a developer with a commit bit, it's all a question of
making the infrastructure support it.  As long as the bits appear in
the appropriate places and the layout both makes sense and is
buildable, perhaps with other necessary components being checked out
on demand, all the advantages of a "static tree" are also maintained.
Tracking -current or tracking -stable also becomes largely a question of
what property you had set when you did your initial "pkg_add src-devel"
and that's all you need to know.

This also deals with long-standing religious wars over MTAs since
doing "pkg_add src-qmail" will result in the qmail sources being added
to the appropriate subdirectory of your source tree just like they
always belonged there, any subsequent change check-ins causing the
right thing to happen for that particular package.  Maybe it gets
checked into a CVS sub-repository we maintain or maybe it simply gets
bundled up and submitted to the maintainer of qmail, many won't even
care which so long as the system works reasonably well.

In a design like this, all distinction between src and ports goes away
and it largely comes down to how much source the user wants to have
lying around - anything from all to none.

Developers adding new stuff to this system simply have to make sure
that it's properly fitted into the global hierachy and that it will
build and install correctly from its assigned spot, dependencies and
all.  Whether its principal developer(s) then decide that the master
sources should live on primarily as a tarball or in a CVS repository
somewhere shouldn't be the end-user's concern at all.  Just so long as
the components the user has declared transient on their system stay
transient and the components declared fixed have sources sitting in
the appropriate subdirectories of /foo/src whenever they look,
everybody is happy.

- Jordan


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2628.982402377>