On Wed, Jul 27, 2005 at 06:08:12PM -0700, Roy T. Fielding wrote:

> The latter constraint of "requiring a commit be complete" is
> just as true for collaborative open source projects as it is for
> Solaris.  Most open source projects are distributed on several
> orders of magnitude more platforms than Solaris, and thus sometimes
> don't discover a problem exists until it is distributed to some
> platform not owned by a developer on the project, but a general
> rule in Apache is that a change must be complete within the branch
> and platform on which the developer is working before they are
> allowed to commit even to an unstable branch.

That might be acceptable for a project gate ("unstable branch"; see
below for some thoughts on terminology), but I've lived through Linux
development, where "all x86 all the time" is the unofficial official
policy for all branches.  Please please please don't ever suggest that
this is a viable way to maintain support for multiple architectures.
Many people are lazy, and will do as little as the process requires
before putting back.  If you allow them to break some second-class
architecture, you are committing that architecture's maintainers, if
they even exist, to additional and unnecessary work.  If you allow
more people to do the same, you are condemning those architectures to
perpetual brokenness and eventual removal.  There can be no
second-class platforms.  If a contributor doesn't understand what's
needed to make his change work on $WEIRD_BUT_SUPPORTED_HARDWARE, he
must collaborate with the people who support that platform to make it
happen.  A result of this is that the community as a whole needs to
decide carefully what platforms it is willing to support - the cost of
maintaining them can't be borne solely by the people who use them.
The community has to decide whether it's better to have a few
platforms that work well and are rapidly developed or many platforms
that diverge, work poorly, or slow development.

> [... skipping the ARC review description because it was an example
> of a business decision, not a technical decision.]

No, I'm sorry, architectural consistency and compatibility are
examples of technical decisions.  Suppose for a moment that there were
no business, anywhere.  Money does not exist and all software is
available free of charge as open source.  Under those circumstances,
would compatibility and architectural consistency be of any value?
The answer is yes: software still has users (not customers) and those
users still have finite time to spend using or working on software (24
hours a day at most).  They can spend that time finding and fixing or
working around newly introduced incompatibilities, or they can spend
their time using the software productively.

The provision of compatibility and consistency under some kind of
well-known rules provides value to developers and users higher up the
software stack, regardless of what they paid for their software or
whether they buy hardware or get it for free.  The exchange is that
people working lower down the stack have to invest additional effort
into maintaining that compatibility; I posit that this tradeoff is a
good one, because maintaining compatibility and announcing intentional
incompatibilities involves knowns: known pieces of code, known
documented interfaces, and known sources of information about them.
The alternative involves unknowns: unknown new problems in apparently
unrelated software, unknown side effects of apparently innocuous
upgrades, and unknown - and unbounded - investment of time in finding
and correcting these problems.

It's easy but wrong to see this as a business problem - Sun's
customers have money, for which they obtain the time of technical
staff to develop software or install and manage it.  Therefore they
see a monetary cost in the use of incompatible software, and Sun sees
an opportunity to make money by reducing our customers' costs.  But
that set of relationships is nothing but a derivative of the original
relationships described above in terms of time.  The problem of
developing software that provides value to users and developers -
which presumably includes the very people making the software in the
first place since we're talking about open source - exists in terms of
time regardless of business considerations.  It is therefore a
fundamental issue in software development, and thus a technical
problem.

Would it help to know that the ARC is staffed by engineers, not
executives?  I wonder if that's the source of worry here.

> >Continuing this "model the expected behavior" example, now that we have
> >a committed plan, what would we do next?  One possibility:
> >
> >     Create a teamware child workspace (or CVS branch or ...)
> >     Gather a group of interested developers together to work
> >     on this project
> >     Seed this workspace with the ksh93 sources
> >     Get it to work
> >     Start building in the "dual mode" behavior
> >     Develop - Test - Iterate... until complete,
> >     Request permission to Integrate the changes back into OpenSolaris
> >     Integrate/Putback/Commit...
> 
> Alternatively, OpenSolaris could give development autonomy to the
> communities, wherein technical development, discussion of alternatives,
> getting it to work, and testing can all take place independent of
> any ARC review.  ARC review isn't needed until the community wishes
> to apply the completed work to a stable release branch, at which
> point the community product does need to adhere to the particular
> interface requirements for that branch. [They are, of course, aware
> of those requirements during the whole process, and thus will have
> designed and developed for a particular set of branches.]

> It makes more sense for an OpenSolaris community to simply create
> a directory on an unstable branch and iteratively design-develop-test
> until complete enough for a release. A discussion should ensue on
> what (more stable) branches it should be ported.  Finally, the
> community votes based on what they want in the branch.

Part of the apparent disagreement here seems to center around the
misperception that there's the "stable branch" and then nothing.  In
fact one of the constraints on the SCM discussion is the need for
disconnected development - there's a reason for that.  Any individual
engineer or team can take a child ("create a branch" in
always-connected SCM parlance) and begin development, committing
changes to that project gate ("unstable branch") with whatever
standards and review that project's contributor(s) feel is
appropriate.  It's not difficult to imagine a CAB-sanctioned "unstable
branch" of OpenSolaris itself that combines the changes in the various
major project gates to offer early access to developing technology.

In other words, your suggestion is almost exactly what happens today,
with the exception that these project gates need to be open for
observation and collaborative development, and is entirely compatible
with Solaris engineering values.  For example, "A discussion should
ensue on what (more stable) branches it should be ported" is readily
translated to "The ARC works with the project team to determine the
appropriate release binding for the changes."

It's *very* unfortunate that non-mainline development hasn't opened
yet, and I can tell you the reason: lack of resources for
infrastructure development.  Nevertheless, you don't need Sun's help
to start working this way on a project - witness the PPC effort.

> Within Sun Engineering, advance review and careful description of
> customer benefits are necessary because resources are limited and
> need to be allocated.  In collaborative open source, resources are
> only limited by the number of interested volunteers and the entry
> barriers they need to overcome before contributing.  Description
> and review of plans is always beneficial, but those descriptions
> and plans can and should be adapted as development on the unstable
> branch proceeds.

Deciding whether to commit scarce resources to a project and
determining whether its technical changes are suitable in the context
of a particular release's rules are orthogonal.  The choice to make a
particular release at a particular time and the choice of rules for
future releases have historically been based on business and technical
considerations; however, the way releases are managed and how Solaris
releases - driven by Sun's business needs - and OpenSolaris
development - *not* driven by Sun's business needs - relate are
changing as we move to collaborative development.

> We can expect that Sun will contribute a majority of their effort
> on projects that Sun considers to be a priority for Solaris.  That
> is good for everyone concerned because the end result benefits
> everyone.  Others can be expected to focus on their own priorities,
> which is also good for everyone concerned.  Resources don't need
> to be carefully allocated across OpenSolaris because each group of
> people are already being allocated by personal preference (with
> a substantial part of that preference being determined by their
> "real job").
>
> Design review is a continual process in an open source project.
> Point reviews come in two forms: code change reviews and release
> versioning.  Interface stability is determined by the scope of
> changes allowed on a given branch release.
>
> Sun can participate in an OpenSolaris community and attempt,
> through reasoned argument and contributed alternatives, to steer
> the design of a product towards a given set of interface
> characteristics. Sun can also choose to release only stable
> components within its proprietary releases of Solaris.
> However, if we want the rest of the community to participate as
> equals within OpenSolaris, then Sun must allow the rest of the
> community to participate according to their own priorities.

We're in complete agreement here.

> OpenSolaris must allow projects to proceed independent of the
> business requirements of any single contributor, even when one
> of those business requirements happens to be interface
> compatibility with SunOS 5.0.0.  That cannot be an OpenSolaris

See my other post and the discussion above for an explanation of why
(a) there's value in that compatibility for everyone, not just Sun,
and (b) that's not a business requirement but a matter of technical
strategy.

> requirement because it prevents the community from building new
> things that may never be part of SunOS.  After all, Sun decided
> to do this open source stuff because they want to take advantage
> of the non-linear productivity of the open source world.  You
> can never predict when a feature will become so compelling to
> new customers that it will justify a SunOS 6, but you can
> measure it after the community has developed and deployed
> that feature in cutting-edge distributions.

Nothing prevents anyone from making an OpenSolaris branch with major
release rules (or even no rules at all), and nothing in what we've
discussed would prevent a project team from delivering to it changes
that are only suitable for a major release.  This is true based on the
right to fork, but there's no reason some hypothetical OpenSolaris
Release Sanctioning Body couldn't designate that branch the official
Major Release development branch for OpenSolaris.  Whether it would
ever become Solaris is Sun's choice.  The decision to contribute to or
use that branch is made by contributors and users, not by Sun, and
there's no reason to think that even an ARC consisting only of Sun
employees (not the plan, of course) would deny a project team's
proposal simply because it requests Major release binding; following
ARC approval, the team would be free to target any active release with
Major Release rules.

> The only other alternative would be for OpenSolaris to become
> a non-collaborative project, a la Darwin, wherein the rest of the
> community is free to play with the code but only one company
> determines what goes into releases.  That is still open source;
> just not collaborative open source.

That's not the plan nor the intent.

-- 
Keith M Wesolowski              "Sir, we're surrounded!" 
Solaris Kernel Team             "Excellent; we can attack in any direction!" 
_______________________________________________
opensolaris-discuss mailing list
opensolaris-discuss@opensolaris.org

Reply via email to