[os-infrastructure] Re: [os-engineering] Closed source components
Joe Abbate
joseph.abbate at ingres.com
Mon Jun 30 12:46:44 PDT 2008
Hi Chris,
Chris Clark wrote:
> RE email trail below and keeping closed source away from the public.
>
> From a discussion I had with Andrew, for the create source (Ingres)
> tar ball from main scripts/process we have a mechanism that :
>
> * filters whole directories
> * filters files from directories that are not filtered by above
>
>
> How this would work for a sync process would probably be non-trivial
> but do-able. If we moved whole sale to a new scs we may be able to use
> permissions in the scs to prevent access to these closed source
> components (but we are no where near a migration yet, and I'm not sure
> if [for example] svn has this kind of granularity).
>
> So for modules, this is a solvable (and partially solved today) problem.
>
> The tricky part is when we have closed source mixed in the public
> facing code (possibly like the B1 code). One answer to this is a hard
> and simple rule of, "no closed source in public facing code." This
> would mean we would have calls to closed source in the public facing
> code (probably in ifdefs) with the closed source contained in a
> filtered module, this would have to mean that all closed source code
> would need to be plug-able. I'm not sure if there are any other options.
>
> If we went this route, ingres!main could be filtered/sync'd and made
> available in the public scs (say svn), which is pretty much what both
> Proposal 1 and 3 at http://community.ingres.com/wiki/Community_Model
> is about (but doesn't talk about how the sync works).
>
> Personally I'm now leaning towards Proposal 1 which would allow us
> (and/or the community) to move to Proposal 3 if/once the community
> decides they need to have features that we Ingres Corp will never want
> in the enterprise version. This is a big change for me as I was very
> much in favor of the buffer approach. With minor changes to how we
> handle closed source pieces I think we can do without the buffer. The
> community can benefit from being closer to the enterprise code as they
> do not have to worry about integrations unless they feel the need to
> diverge (once they diverge, they have to handle the integration problem).
>
> Again this is for Ingres, and not for OpenROAD.
I don't see this as simply a technical matter of instituting mechanisms,
automated or human, to prevent or disallow"pollution" of the open source
code with closed code and vice versa. As I tried to explain before to
Andrew, Piccolo's ingres!main has always been a forward-looking
codeline, so until now changes to it could always be branched to an
Enterprise codeline, e.g., ingres!ingres2006r3. If a fix was made in an
earlier codeline, like ingres26 and it was merged to main in order to
then merge it into ingresr30, someone looking at a 'p ineed' in
ingres2006r3 (or the original cross-integrator) could always do a 'p
ignore' if the change didn't need to get propagated upstream. With
Community edition changes flowing into ingres!main, from the Enterprise
side, ingres!main becomes like a two-headed Hydra with changes
intertwined into the same code stream. For example, if some geospatial
changes were already in ingres!main because they had been accepted as a
Community edition contribution, but we deemed they weren't ready for our
Enterprise customers, we'd have be extra careful about integrating
changes from ingres!main to ingres2006r3 (we could 'p ignore' them if it
was late in the cycle but what if we thought we'd eventually add them to
the release?).
I don't see a problem with Community and Enterprise edition changes
flowing into a common repository, but if Community has some features
that Enterprise can't or doesn't want to take and vice versa, it makes
sense to have two separate trunks (Community *and* Enterprise) that feed
(flow into) the shared repository and from which each
trunk can select what it wants. Andrew keeps insisting that ingres!main
does not equate with Enterprise because Enterprise is vetted in a branch
like ingres2006r3, but in effect ingres!main is currently the
antechamber to Enterprise (otherwise Bob wouldn't be running nightly
builds of main), i.e., as soon as ingres2006r3 (9.2) goes GA on the core
platforms and we're ready for the next release, we'll do a mass branch
into, say, ingres94 (the next Enterprise release). By having SE flow
through any fixes in earlier codelines through ingres!main, we also
attempt to minimize regressions in Enterprise code. Imagine a year down
the road, when we're ready for the yet another Enterprise release. If
Community changes have also been flowing directly into ingres!main, and
some of them are not desired for Enterprise, (a) we'll probably have do
nightly builds of ingres!main in the context of Enterprise, assuming
something like #ifdefs are used in source files shared by both, and (b)
we'll have to be more selective about what we branch. Will all this
extra effort be beneficial in helping us build a better, more stable
Enterprise product?
Joe
More information about the opensource-infrastructure
mailing list