Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Sep 2000 18:10:36 +0000 (GMT)
From:      Terry Lambert <tlambert@primenet.com>
To:        jcm@FreeBSD-uk.eu.org (j mckitrick)
Cc:        brett@lariat.org (Brett Glass), chat@FreeBSD.ORG
Subject:   Learn from History, please (was Re: new license idea?)
Message-ID:  <200009191810.LAA06018@usr02.primenet.com>
In-Reply-To: <20000919175403.B71735@dogma.freebsd-uk.eu.org> from "j mckitrick" at Sep 19, 2000 05:54:03 PM

next in thread | previous in thread | raw e-mail | index | archive | help

> | IMHO, It's confiscatory whether the changes have to be revealed or not. 
> | The improvements belong to the person who made them, and if he or she
> | is willing to release them, that's great. But he or she should not
> | be forced to.
> 
> What about the fragmentation issue?
> Someone takes my code, reuses it, keeps the changes, and has created a new,
> incompatible version?

Which they ten have to maintain for all eternity, thereafter?

The biggest force toward fragmentation is the tools used to
maintain the source tree.

First, I will start with a not so brief history lesson, about
the early days of 386BSD and FreeBSD and NetBSD; this is a
story which is often not told, since many people disagree on
the order of events, despite the fact that there is a usenet
archive of the time (1992/1993) up for public perusal.

<HISTORY>

In the 386BSD days, I created the "patchkit", after creating
the initial FAQ, which included some patches, but very quickly
was too unweildy to use for additional patches beyond my first
patch for the VM system, and one or two after that.

The patchkit was hand-appied patches off of usenet; but I hand
applied them in order, and encoded the dependency relationship
between the patches in a metadata file.  This ensured that they
could not be applied "out of order" when any two patches touched
the same file.

This guaranteed consistant results, but it turned me (and then
later Rod Grimes, Nate Williams, and, finally, Jordan Hubbard)
into "human CVS repositories": there was a single, monotonically
increasing patch number, which had to be centrally controlled by
some human owning a token; this turned out to be the shell script
that created the patches.

---

After a hundred or so patches, a single human who was working
full time became a gating factor on the rate at which patches
could be normalized into the system.  To combat this, several
people got together and, not understanding that the purpose of
the metadata file was to allow topological ordering of the patch
graph (much in the same way as "make" or "tsort" operate), they
reverse-engineered the "patchkit" patch format.

After this feat (it wasn't difficult, it was self-documenting,
but it was still a barrier to entry), they started releasing
their own patches, starting at a very high number (1000, if I
recollect correctly, without going to my tape dive or my 386BSD
0.1+patchkit system), assuming that this would preclude any
conflicts.

This, of course, was wrong.  The first time they touched a file
that was touched by an "official unofficial patchkit patch" after
their patch had been released, both patches became at risk (which
failed depended on which one was applied last -- the last one
would fail from conflicts during the patching process.

---

This caused things to go to hell rather quickly, and tempers
flared on both sides; the "official unofficial" side, and the
"unofficial unofficial" side.  At some point, the "unofficial
unofficial" side majority decided to go off on their own, with
a real repository.

This was later released as NetBSD.

---

Meanwhile, Bill Jolitz had sanctioned a "386BSD 0.5" interim
release, which was to be derived from the patchkit code.  But
Bill was consulting, and couldn't keep up with the interim
release code changes, any more than the "patchkit" human holding
the token could keep up with the level of contributions that led
to the reverse-engineering of the patchkit patch file format.  It
all came to a head when several negative events conspired in the
Jolitz family's life to push stresses beyond the breaking point,
and some words were exchanged on usenet; then some more, and some
more, and then, finally, Bill rescinded his permission to call
the work "386BSD 0.5".

Rather than throw all this work away, the patchkit people decided
to release under a different name.  In deference to Bill, this was
to be "FreeBSD 0.1" -- _NOT_ exceeding Bill's version number.  But
one of the players who had funded resources for this effort was
Walnut Creek CDROM; they felt that, without the 386BSD name, they
could not sell a 0.x product, and suggested a movement of the
decimal place was in order.

Thus 386BSD+patchkit+other_work was released as FreeBSD 1.0.

---

OpenBSD came about later; due to many of the same pressures; this
time, it was the inability of the CVS tool to support multiple
lines of development, and the conflict was within the NetBSD group.

Despite the incredible rancor during the events leading to OpenBSD,
including a "CVS commit priviledges" version of "core wars", there
remains the kernel of the problem, which was the tools used, and
their constraint of what at least one of the parties ability to
move the code forward "fast enough".

And so ends our history lesson.

</HISTORY>


Commercial organizations are different from volunteer organizations;
they have something to account to, whether investors or stockholders,
which is larger than themselves, and larger than their egos.  Make no
mistakes; many people involved in open source are involved for ego.

Whether driven by ego, as many are, or by a fear of one's own
limited life span, as others of us are, or by a burning need to
advance the state of the art as far as possible, as still others
of us are, or just intellectual curiosity -- another kind of
burning need, for some -- as a few of us are, cooperation in the
open source community generally results in leverage, which pays
the participant in their preferred coin(s).


A commercial organization is different.  A commercial organization
is driven by economic factors; until recently, this was an alien
and unknown force in open source.  For many open source projects,
it remains so.

But the point is that _successful_ commercial organizations have
learned to be driven by economics, and that one of the realities
of economics is the distinction between "tactical" and "strategic".

A tactical victory may win you the battle, but lose you the war;
a strategic victory brings you one step closer to winning the war.

What this boils down to, as far as open source is concerned, is
that:

1)	Enlightened companies will give tactical code back to an
	open source project; it is strategic for them to do so.

2)	Unenlightened companies will fail to give back tactical
	code to an open source project; they will suffer an
	increasing maintenance burden, and will eventually be
	marginalized by time, if they have no competitors, or
	buried under their strategic blunders, if they have an
	enlightened company for a competitor.

This is purely an emergent property of economic self-interest; it
is part of the rules by which companies interact in a capitalist
society, or even a partially capitalist society, to a lesser extent;
yet the forces are there, even then.

As a hypothetical situation, consider the following:

<HYPOTHETICAL>

Company A sells firewalls.  They come up with a method of adding
firewall code to an open source OS.

Company B sells firewalls.  They come up with a method of adding
firewall code to an open source OS.  This metho is different than
that of company A, but touches many of the same files.

All things being the same, the implementation details are not
rellevent; the actual implementation was strategic when only one
company had the capability: it was a barrier to entry.  Not the
smartest thing to do, to rest on your laurels and hide behind
such a barrier while your competition forges ahead -- but many
companies use this technique, at least until their competition
eats their lunch (one is reminded of the barriers erected in the
UNIX market by way of application base, as vendors squabbled
between themselves for a diminishing fraction of the overall and
increasingly large market, instead of adopting a single ABI and
keeping it simple and elegant).

But as soon as more than one company exists in a space, the barrier
loses strategic value and becomes tactical.

Company B realizes this.  Company B releases their now-tactical
code to the open source OS, which adopts the code.

Time passes.  The open source OS matures.  Security bugs are
found and fixed.

Company A finds itself with a conflicting set of patches against
an outdated OS.

<ASIDE>

And again, we see a problem with the tools not supporting several
lines of developement simultaneously.

</ASIDE>

Outcome 1:	Company B eats company A's lunch, as company A
		fails to keep up with their ongoing maintenance
		burden, and becomes marginalized.

Outcome 2:	Company B eats comapny A's lunch, as company A
		switches to the now-standard company B interface,
		and has to "play catch up" in order to ensure
		that features upon which their existing customer
		base relies are integrated into the company B
		interface.  The V.P. of engineering prays every
		night that there isn't anything intrinsically
		impossible to cram into the company B interface.

Outcome 3:	Company B eats comapny A's lunch, as company A
		decides to seperately maintain "ProprietOS", as
		a "fork".  Much money and R&D effort is spent in
		maintaining parity with what the open source OS
		developers are providing for company B for free.

Outcome 4:	A diety or monopolistic power intervenes and
		saves company A's bacon; it crushes company B
		using a non-technical strategic approach.

If company A were truly clever, it might have realized that
company B was developing similar technology, and let them blow
their money on getting 85%-90% done, THEN released their code
to the open source OS people.  That would be truly strategic
thinking, even if a bit "uncricket"...

</HYPOTHETICAL>


Do we see parallels in this parable which should be taken to heart
by the fragmented BSD community (or the even more fragmented Linux
community, which is busy replaying the UNIX wars of the 80's)?

I think we do.

But even more, we see why commercial companies would give source
code back to the community, when the code is tactical, or when it's
strategic to do so.


So the claims of fragmentation risk are really exagerated; they are,
in fact, FUD.  One does not need a license to protect one from a
fragmentation or a code hijack, unless the code is strategic, in
which case, one is better off not revealing it at all, since it is
easy to read with one hand and type with the other; not only easy,
but the economic pressures in Silicon Valley have raised it to a
fine art, to the point of having its own name: "clean rooming".

Just my opinion, for what it's worth.

PS:	Had I known the emergent properties of tools would have
	such a powerful effect, I would have done the patchkit
	much more differently; I believe that there might be
	only one open source BSD today, had I done so.  But if
	wishes were horses, then beggars would ride.

					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.


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




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